บ้าน
ซีรีส์ "กล้า" RGB ย่อมาจาก
เป็นตัวย่อของสีแดง เขียว น้ำเงิน โดยใช้สีเหล่านี้ คุณจะได้สีใดก็ได้โดยการผสม RGB LED ประกอบด้วยคริสตัลขนาดเล็ก 3 อัน R, G, B ซึ่งเราสามารถสังเคราะห์สีหรือเฉดสีใดก็ได้ ในบทช่วยสอนนี้ เราจะเชื่อมต่อ RGB LED เข้ากับบอร์ด Arduino และทำให้มันเปล่งประกายด้วยสีรุ้งทั้งหมด
โพเทนชิออมิเตอร์
เราประกอบวงจรดังแสดงในรูปที่ 1
รูปที่ 1 แผนภาพการเชื่อมต่อ
ตอนนี้เรามาเริ่มเขียนภาพร่างกันดีกว่า
RGB LED ควรส่องแสงแวววาวด้วยสีรุ้งทั้งหมดจากสีแดงเป็นสีม่วง จากนั้นเลื่อนเป็นสีแดงไปเรื่อยๆ ในลักษณะวงกลม ความเร็วของการเปลี่ยนสีถูกควบคุมโดยโพเทนชิออมิเตอร์ ตารางที่ 1 แสดงค่า R, G, B สำหรับสีหลัก 7 สีของรุ้ง
ตารางที่ 1. ค่า R, G, B สำหรับสีหลัก 7 สีของรุ้งสำหรับการผสมสี
จำเป็นต้องจ่ายแรงดันไฟฟ้าอย่างเต็มรูปแบบจากพิน Arduino ไปยังอินพุต LED R, G, B แต่ Arduino ไม่สามารถส่งแรงดันไฟฟ้าตามอำเภอใจไปยังพินดิจิทัลได้ เอาต์พุตเป็น +5V (สูง) หรือ 0V (ต่ำ) เพื่อจำลองแรงดันไฟฟ้าบางส่วน จะใช้ PWM (การปรับความกว้างพัลส์หรือ PWM)ฉันหวังว่าคุณจะได้ศึกษาบทนี้แล้ว
หน้าที่ 2.6 ของหนังสือของ Jeremy Blum เรื่อง "Exploring Arduino: Tools and Techniques of Technical Wizardry" ซึ่งอธิบายรายละเอียดเกี่ยวกับกลไกของการปรับความกว้างพัลส์
หลังจากแต่ละขั้นตอน เราจะหยุดชั่วคราวเพื่อบันทึกการแสดงสี
ล่าช้า (VIEW_PAUSE);
เราตรวจสอบค่าของโพเทนชิออมิเตอร์และเปลี่ยนค่าความเร็วของการเปลี่ยนสี
setpause เป็นโมฆะ() ( Pause=map(analogRead(POT),0,1024,MIN_PAUSE,MAX_PAUSE); Serial.print("pause=");Serial.println(pause); )
มาสร้างภาพร่างใหม่ใน Arduino IDE กันดีกว่าเพิ่มโค้ดจาก Listing 1 ลงไปแล้วอัปโหลดภาพร่างไปยังบอร์ด Arduino เราเตือนคุณว่าในการตั้งค่า Arduino IDE คุณต้องเลือกประเภทของบอร์ด (Arduino UNO) และพอร์ตการเชื่อมต่อของบอร์ด
รายการ 1
ค่าคงที่ สีแดง=11; // เอาต์พุต R ของ RGB LED const int GREEN=10; // เอาต์พุต G ของ RGB LED const int BLUE=9; // เอาต์พุต B ของ RGB LED int red; // ตัวแปรสำหรับจัดเก็บองค์ประกอบ R ของสี int สีเขียว // ตัวแปรสำหรับจัดเก็บองค์ประกอบ G ของสี int blue; // ตัวแปรสำหรับจัดเก็บองค์ประกอบ B ของสี const int POT=A0; // เอาต์พุตการเชื่อมต่อโพเทนชิออมิเตอร์ const int MIN_PAUSE=10; // ความล่าช้าในการเปลี่ยนสีขั้นต่ำ ms const int MAX_PAUSE=100; // ความล่าช้าในการเปลี่ยนสีสูงสุด ms int หยุดชั่วคราว; // ตัวแปรสำหรับจัดเก็บการหน่วงเวลาปัจจุบัน const int VIEW_PAUSE=2000; // เวลาตรึงสีหลัก, การตั้งค่าโมฆะ ms() ( Serial.begin(9600); ) void loop() ( // จากสีแดงเป็นสีเหลือง Serial.println("สีแดง - สีเหลือง"); red=255;green=0 ;สีฟ้า=0; สำหรับ(สีเขียว=0;สีเขียว<=255;green++) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от желтому к зеленому Serial.println("yellow - green"); red=255;green=255;blue=0; for(red=255;red>=0;สีแดง--) setRGB(แดง,เขียว,น้ำเงิน);<=255;blue++) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от голубого к синему Serial.println("blue - blue"); red=0;green=255;blue=255; for(green=255;green>หยุดชั่วคราว();<=255;red++) setRGB(red,green,blue); setpause(); delay(VIEW_PAUSE); // от фиолетового к красному Serial.println("purple - red"); red=255;green=0;blue=255; for(blue=0;blue>ล่าช้า (VIEW_PAUSE);
// จากสีเขียวเป็นสีน้ำเงิน Serial.println("green - blue");
สีแดง=0;สีเขียว=255;สีน้ำเงิน=0;
สำหรับ(สีฟ้า=0;สีฟ้า =0;เขียว--) setRGB(แดง เขียว น้ำเงิน);ระยะละ 5 เมตร และตัดสินใจทดลองทันที ชุดนี้มีหน่วยสำหรับควบคุมเทปด้วย แต่โปรแกรมต่างๆ ดูเหมือนจะไม่น่าสนใจสำหรับฉัน และ Tinyos Uno (อะนาล็อกภาษาจีนที่สมบูรณ์) ก็อยู่ใกล้แค่เอื้อม Arduino UNO- เมื่อพิจารณาแล้วว่า อาร์ดิโนมันใช้งานได้กับเอาต์พุตสูงสุด 5V และบ่อยกว่าไม่ใช่ 3.3V เราก็ต้องหาวิธีแก้ปัญหา บทความนี้จะอธิบายวิธีเชื่อมต่อแถบ LED 12 โวลต์เข้ากับ อาร์ดิโนมีแหล่งจ่ายไฟแยกต่างหากสำหรับเทปและการควบคุมด้วย อาร์ดิโนใช้ MOSFET ควบคุมช่องสัญญาณ แถบ RGB.
เริ่มจากข้อมูลจำเพาะแถบ LED แบบอะนาล็อกมาตรฐานซึ่งฉันคิดว่าเป็นเรื่องธรรมดาที่สุด
ก่อนที่คุณจะเริ่มทำงานด้วย อาร์ดูโน่และแรงดันไฟฟ้าที่สูงกว่า 5 โวลต์ฉันขอแนะนำให้อ่านเรื่องนี้มากเพื่อไม่ให้คุณไหม้ อาร์ดูโน่- อธิบายการใช้งานได้ดี MOSFETกับ อาร์ดูโน่- หากคุณได้อ่านบทความนี้แล้วเรามาดูกันดีกว่า
ในการทำงานกับแถบ LED เราจะต้อง:
ตอนนี้เรามาดูแผนภาพการเชื่อมต่อกันซึ่งส่วนหลักของบทความนี้จะชัดเจน:
ตอนนี้เรามาดูกันดีกว่า อาร์ดูโน่ IDEซึ่งเราจะเขียนแบบร่างเพื่อจัดการฟีดของเรา:
// โปรดทราบว่ายังมีรหัสเดิมหลงเหลืออยู่ซึ่งดูเหมือนว่าจะไม่ทำอะไรเลย // แต่ไม่ควรทำอันตรายใด ๆ ... // อย่ายุ่งกับสิ่งเหล่านี้ ผลรวมที่ผิดกฎหมายในภายหลัง #define RED 9// พินสำหรับ LED สีแดง #define GREEN 10 // ปักหมุดสำหรับสีเขียว - ไม่เคยอ้างอิงอย่างชัดเจน #define BLUE 11 // ปักหมุดสำหรับสีน้ำเงิน - ไม่เคยอ้างอิงอย่างชัดเจน #define SIZE 255 #define DELAY 20 #define HUE_MAX 6.0 #define HUE_DELTA 0.01 //long deltas = ( 5, 6, 7); RGB ยาว; rgbval ยาว; // ด้วยเหตุผลที่ไม่ทราบสาเหตุ หากค่า !=0 ไฟ LED จะไม่สว่าง อืม ... // และความอิ่มตัวของสีดูเหมือนจะกลับด้าน hue=0.0, saturation=1, value=1; /* เลือก LED SparkFun sku : COM-09264 มี Max Luminosity (RGB): (2800, 6500, 1200)mcd ดังนั้นเราจึงทำให้ค่าทั้งหมดเป็น 1200 mcd - R 250/600 = 107/256 G 250/950 = 67/256 B 250/250 = 256 /256 */ ยาวสดใส = ( 107, 67, 256); // ยาวสดใส = ( 256, 256, 256); long k, temp_value; 0;เค<3; k++) { pinMode(RED + k, OUTPUT); rgb[k]=0; analogWrite(RED + k, rgb[k] * bright[k]/256); } } void loop() { hue += HUE_DELTA; if (hue >HUE_MAX) ( hue=0.0; ) rgbval=HSV_to_RGB(ฮิว, ความอิ่มตัว, ค่า);<3; k++) { // for all three colours analogWrite(RED + k, rgb[k] * bright[k]/256); } delay(DELAY); } long HSV_to_RGB(float h, float s, float v) { // H is given on . S and V are given on . // RGB is returned as a 24-bit long #rrggbb int i; float m, n, f; // not very elegant way of dealing with out of range: return black if ((s<0.0) || (s>RGB = (RGBVAL & 0x00FF0000) >> 16; // จะต้องมีวิธีที่ดีกว่า rgb = (rgbval & 0x0000FF00) >><1.0) || (v> < 0.0) || (h >1.0) || (v
6.0)) ( กลับยาว(v * 255) + ยาว(v * 255) * 256 + ยาว(v * 255) * 65536; ) i = พื้น(h);
ฉ = ชั่วโมง - ฉัน; ถ้า (!(i&1)) ( f = 1 - f; // ถ้าฉัน เป็นคู่ ) m = v * (1 - s); n = v * (1 - s * f); สวิตช์ (i) ( กรณีที่ 6: กรณีที่ 0: กลับยาว (v * 255) * 65536 + ยาว (n * 255) * 256 + ยาว (m * 255) กรณีที่ 1: กลับยาว (n * 255) * 65536 + ยาว(v * 255) * 256 + ยาว(m * 255); กรณีที่ 2: กลับยาว(m * 255) * 65536 + ยาว(v * 255) * 256 + ยาว(n * 255); (m * 255) * 65536 + ยาว (n * 255) * 256 + ยาว (v * 255); กรณีที่ 4: กลับยาว (n * 255) * 65536 + ยาว (m * 255) * 256 + ยาว (v * 255); : กลับยาว(v * 255) * 65536 + ยาว(m * 255) * 256 + ยาว(n * 255) );.
อัปโหลดภาพร่างไปยัง Arduino และชื่นชมยินดี นอกจากนี้ยังมีตัวเลือกการใช้เซ็นเซอร์อุณหภูมิ DS18B20 ซึ่งทำงานตามโปรโตคอล 1-ลวด
แนวคิดก็คือว่า "อุณหภูมิเย็น" มักจะเป็นสีฟ้า และ "หมายถึง 30 °C อุณหภูมิต่ำกว่าเกณฑ์ความเย็นจะถือว่าเย็น สูงกว่าเกณฑ์ร้อน - ร้อน จริงๆ แล้วโค้ดสุดท้ายนั้นค่อนข้างง่ายเมื่อคุณเตรียมโค้ด HSV แล้ว:
// HSV จางหาย/ตีกลับสำหรับ Arduino // โปรดทราบว่ามีโค้ดเก่าบางส่วนเหลืออยู่ที่นี่ ซึ่งดูเหมือนว่าจะไม่ทำอะไรเลย // แต่ไม่ควรทำอะไรเสียหาย ... #include "OneWire.h" //#include "Streaming.h" //#include "Streaming.h" h" const int DS18S20_Pin = 2; // DS18S20 พินสัญญาณบนดิจิตอล 2 #define MIN_TEMP 18 #define MAX_TEMP 30 // ชิปอุณหภูมิ i/o OneWire ds(DS18S20_Pin); // บนพินดิจิตอล 2 // อย่า futz ด้วย จำนวนเงินที่ผิดกฎหมายเหล่านี้ในภายหลัง #define RED 9 // pin สำหรับ LED สีแดง #define GREEN 10 // pin สำหรับสีเขียว - ไม่เคยอ้างอิงอย่างชัดเจน #define BLUE 11 // pin สำหรับสีน้ำเงิน - ไม่เคยอ้างอิงอย่างชัดเจน #define SIZE 255 #define DELAY 0 # กำหนด HUE_MAX 6.0 #กำหนด HUE_DELTA 0.01 // เดลตายาว = ( 5, 6, 7 ); RGB ยาว; rgbval ยาว; // ด้วยเหตุผลที่ไม่ทราบสาเหตุ หากค่า !=0 ไฟ LED จะไม่สว่าง อืม ... // และความอิ่มตัวของสีดูเหมือนจะกลับด้าน hue=0.0, saturation=1, value=1; /* เลือก LED SparkFun sku : COM-09264 มี Max Luminosity (RGB): (2800, 6500, 1200)mcd ดังนั้นเราจึงทำให้ค่าทั้งหมดเป็น 1200 mcd - R 250/600 = 107/256 G 250/950 = 67/256 B 250/250 = 256 /256 */ ยาวสดใส = ( 107, 67, 256); // ยาวสดใส = ( 256, 256, 256); long k, temp_value; การตั้งค่าโมฆะ () (randomSeed(analogRead(4)); Serial.begin( 57600); สำหรับ (k=0; k<3; k++) { pinMode(RED + k, OUTPUT); rgb[k]=0; analogWrite(RED + k, rgb[k] * bright[k]/256); } } void loop() { float temperature = constrain(getTemp(), MIN_TEMP, MAX_TEMP); float deltaTemp = (MAX_TEMP - MIN_TEMP); float deltaHue = 4 - 0; hue = map((temperature - MIN_TEMP) * 100, 0, deltaTemp * 100, deltaHue * 100, 0) / 100.0; //Serial << "Temperature: " << temperature << endl; //Serial << "HUE: " << hue << endl; rgbval=HSV_to_RGB(hue, saturation, value); rgb = (rgbval & 0x00FF0000) >> 16; // จะต้องมีวิธีที่ดีกว่า rgb = (rgbval & 0x0000FF00) >> 8;<3; k++) { // for all three colours analogWrite(RED + k, rgb[k] * bright[k]/256); } //delay(DELAY); } float getTemp(){ //returns the temperature from one DS18S20 in DEG Celsius byte data; byte addr; if (!ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return -1000; } if (OneWire::crc8(addr, 7) != addr) { Serial.println("CRC is not valid!"); return -1000; } if (addr != 0x10 && addr != 0x28) { Serial.print("Device is not recognized"); return -1000; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for (int i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } ds.reset_search(); byte MSB = data; byte LSB = data; float tempRead = ((MSB << 8) | LSB); //using two"s compliment float TemperatureSum = tempRead / 16; return TemperatureSum; } long HSV_to_RGB(float h, float s, float v) { // H is given on . S and V are given on . // RGB is returned as a 24-bit long #rrggbb int i; float m, n, f; // not very elegant way of dealing with out of range: return black if ((s<0.0) || (s>RGB = (RGBVAL & 0x00FF0000) >> 16; // จะต้องมีวิธีที่ดีกว่า rgb = (rgbval & 0x0000FF00) >><1.0) || (v>RGB = RGBVAL & 0x000000FF;< 0.0) || (h >สำหรับ (k=0; k
: แดง เขียว และน้ำเงิน ด้วยการควบคุมความสว่างของ LED สามดวงของแต่ละสีเหล่านี้ไปพร้อมๆ กัน คุณสามารถสร้างแสงได้เกือบทุกสี ไฟ LED ที่ให้คุณเปลี่ยนสีของแสงที่ปล่อยออกมา เช่น ที่ใช้ในบทเรียนสุดท้ายของเรา ได้รับการออกแบบในลักษณะเดียวกัน แต่ในการออกแบบนั้น ไฟ LED สามดวงจะวางอยู่ด้วยกันในตัวเครื่องขนาดเล็กมากเพียงตัวเดียว ไฟ LED สามดวงแบบคอมโพสิตนี้เรียกว่า RGB LED
มาสร้าง RGB LED ของเราเองจาก LED ขนาด 5 มม. แยกกันสามดวง LED ทั้งสามดวงนี้มีเลนส์ใสและไม่มีสี ดังนั้นเราจึงต้องการ LED ที่มีเลนส์ใสซึ่งสามารถเป็นสีใดก็ได้! หากคุณใช้ชุดอุปกรณ์อื่น เพียงหา LED สีแดง เขียว 1 อัน และสีน้ำเงิน 1 อัน (พร้อมเลนส์ใสหรือเลนส์สี)
ถอดสาย USB ออกแล้วเปลี่ยน LED สีแดงเป็น LED เลนส์ใสอันใดอันหนึ่ง จากนั้นเสียบสาย USB กลับเข้าไปใหม่
LED มีสีอะไร? หากคุณพบสีแดงในครั้งแรก ให้พักไว้และทำซ้ำขั้นตอนนี้เพื่อกำหนดสีของไฟ LED อีก 2 ดวง
เชื่อมต่อ LED อีกสองตัวที่มีตัวต้านทาน 1K อนุกรมกับพิน 10 และ 11 ดังแสดงในแผนภาพ ดาวน์โหลดและเปิดโค้ดจากโมดูล Tinkercad Circuits หรือคัดลอกและวางลงในร่าง Arduino เปล่าใหม่ โหลดมันลงในบอร์ด Arduino Uno ของคุณและดูว่าคุณสามารถจับคู่บรรทัดโค้ดกับเหตุการณ์ที่คุณเห็นบน LED เหมือนที่เราทำก่อนหน้านี้หรือไม่
ส่วนที่ไม่คุ้นเคยของโค้ดนี้คือฟังก์ชัน setColor() - นี่คือฟังก์ชันที่ผู้ใช้กำหนดซึ่งกำหนดไว้ในโค้ดที่อยู่หลังฟังก์ชันเป็นโมฆะวน()
เป็นโมฆะ setColor (int สีแดง, int สีเขียว, int blue)
{
อะนาล็อกเขียน (redPin, สีแดง);
อะนาล็อกเขียน (greenPin, สีเขียว);
อะนาล็อกเขียน(bluePin, สีน้ำเงิน);
}
คำจำกัดความของฟังก์ชันประกอบด้วยการประกาศชื่อและประเภทของอาร์กิวเมนต์ ซึ่งคุณสามารถใช้เป็นพารามิเตอร์ที่กำหนดเองได้ คุณสามารถเปลี่ยนพารามิเตอร์เหล่านี้ได้ทุกครั้งที่คุณเรียกใช้โค้ด ฟังก์ชั่นง่าย ๆ นี้เขียนค่าจำนวนเต็มสามค่าลงในพิน LED สามพินโดยใช้ฟังก์ชันที่คุ้นเคยอะนาล็อกเขียน(); -
ตั้งค่าสี(255, 255, 0); //สีเหลือง
แต่ละครั้งที่มีการเรียกใช้ฟังก์ชันนี้ในลูปหลัก โปรแกรมจะรันโค้ดในฟังก์ชันก่อนดำเนินการต่อในลูปหลัก ในกรณีนี้ อาร์กิวเมนต์จะถูกใช้เป็นรหัสสำหรับระดับความสว่างของ LED แต่ละตัว ช่วงการตั้งค่าความสว่างคือ 0-255 เนื่องจากแต่ละสีจะถูกควบคุมโดยหนึ่งไบต์ ทำให้สามารถปรับความสว่างได้ 256 ระดับ
ตอนนี้ให้ดาวน์โหลดและเปิดโค้ดจากโปรเจ็กต์ RGB ที่ซับซ้อนกว่านี้ หรือคัดลอกและวางโค้ดลงในร่าง Arduino เปล่าใหม่ อ่านความคิดเห็นในโค้ดเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการทำงานของโปรแกรมนี้ รหัสใช้คณิตศาสตร์เพื่อแปลงช่วง 0-100 เป็นช่วงที่ถูกต้องที่ LED ต้องการ (0-255) วิธีนี้สะดวกเพราะคุณสามารถนึกถึงความสว่างเป็นเปอร์เซ็นต์แทนที่จะเป็นช่วง 0-255
ในการจัดเก็บข้อมูลสี โค้ดจะใช้ชุดของตัวแปรที่เรียกว่า
โปรเจ็กต์นี้เน้นไปที่การควบคุมไฟ LED จากห้องถัดไปเพื่อไม่ให้ลุกจากโซฟา ไฟ LED RGB ตกแต่งทั้งตู้ปลาขนาดเล็กและห้องขนาดใหญ่ได้ดีไม่แพ้กัน
คุณสามารถทำให้อ่างอาบน้ำมีสีต่างๆ สว่างขึ้นได้โดยใช้เทป RGB บน Arduino พูดง่ายๆ ก็คือสร้างห้องซาวน่าที่ควบคุมด้วยไมโครโปรเซสเซอร์จาก Arduino
คุณเพียงแค่ต้องมีส่วนประกอบต่อไปนี้เพื่อประกอบไฟแบ็คไลท์ RGB:
ทฤษฎีเล็กๆ น้อยๆ เกี่ยวกับการเชื่อมต่อเทป RGB เข้ากับอาร์ดูโน่
คุณไม่สามารถเชื่อมต่อแถบ LED เข้ากับบอร์ด Arduino ได้โดยตรง แถบ LED จะเรืองแสงตั้งแต่ 12 V ในขณะที่ไมโครโปรเซสเซอร์ต้องการไฟเพียง 5 V ในการทำงาน
แต่ปัญหาหลักคือเอาต์พุตของไมโครโปรเซสเซอร์ไม่มีพลังงานเพียงพอที่จะจ่ายไฟให้กับแถบ LED ทั้งหมด แถบ LED ยาวเมตรโดยเฉลี่ยกินไฟ 600 mA กระแสไฟนี้จะทำให้บอร์ด Arduino เสียหายอย่างแน่นอน
เอาต์พุต PWM ของไมโครโปรเซสเซอร์ที่ใช้ไม่มีพลังงานเพียงพอที่จะส่องสว่างแถบ RGB แต่ยังสามารถใช้เพื่อลบสัญญาณควบคุมได้
สำหรับการแยกแหล่งจ่ายไฟ ขอแนะนำให้ใช้ทรานซิสเตอร์เป็นสวิตช์ ควรใช้ทรานซิสเตอร์แบบ Field-Effect ของ MOSFET เนื่องจากต้องใช้กระแสไฟประตูน้อยจึงจะเปิดได้ และยังมีพลังงานมากกว่าเมื่อเทียบกับสวิตช์แบบไบโพลาร์ที่มีขนาดเท่ากัน
RGBเทปไปอาร์ดูโน่
ในแผนภาพการเดินสายไฟ เอาต์พุต PWM ใช้เพื่อควบคุมเทป: 9 (สีแดง), 10 (สีเขียว), 11 (สีน้ำเงิน)
ตัวต้านทานสามตัวที่ 10 kOhm, 0.125 W แขวนอยู่บน "เกต" ของทรานซิสเตอร์แต่ละตัว
ข้อดีจากแหล่งจ่ายไฟ 12 V (สายสีแดง) จะไปที่แถบ RGB โดยตรง
ค่าลบจากแหล่งจ่ายไฟ 12 V (สายสีดำ) จะถูกกระจายไปยัง "แหล่งที่มา" ของทรานซิสเตอร์เอฟเฟกต์สนาม
“ท่อระบาย” ของทรานซิสเตอร์แต่ละตัวเชื่อมต่อกับหน้าสัมผัสเทปแยกกัน: R, G, B เพื่อความสะดวกในการเชื่อมต่อ ขอแนะนำให้ใช้สายสีแดง เขียว และน้ำเงิน
พินกราวด์ GND ของบอร์ด Arduino ควรเชื่อมต่อกับลบของกำลังไฟฟ้าเข้า
บอร์ด Arduino Uno นั้นใช้พลังงานจากอะแดปเตอร์เครือข่ายแยกต่างหาก สำหรับ Arduino nano, mini คุณจะต้องประกอบแหล่งจ่ายไฟอย่างง่ายโดยใช้ตัวกันโคลงแบบรวม 7805
การเชื่อมต่อโมดูล Bluetooth HC-05:
ภาพร่างของโปรแกรมด้านล่างนี้เป็นสากลสำหรับการควบคุมทั้ง LED หนึ่งตัวและแถบ LED สิ่งสำคัญคือการทิ้งบรรทัดที่จำเป็นและลบบรรทัดที่ไม่จำเป็นหรือแสดงความคิดเห็นด้วยเครื่องหมายทับ
ยาว x ที่ไม่ได้ลงนาม; ไฟ LED ภายใน = 9; // สีเขียวเชื่อมต่อกับพิน 9 int LED2 = 10; // สีน้ำเงินเชื่อมต่อกับพิน 10 int LED3 = 11; // สีแดงเชื่อมต่อกับขา 11 int a,b,c = 0; การตั้งค่าเป็นโมฆะ () ( Serial.begin (9600); Serial.setTimeout (4); pinMode (LED, OUTPUT); pinMode (LED2, OUTPUT); pinMode (LED3, OUTPUT); ) void loop () ( if (Serial. ใช้ได้()) ( x = Serial.parseInt(); ถ้า (x>=0 && x<=255) { a = x; // для RGB ленты //a = 255-x; // для светодиода analogWrite(LED, a); } if (x>=256 && x<=511) { b = x-256; // для RGB ленты //b = 511-x; // для светодиода analogWrite(LED2, b); } if (x>=512 && x<=767) { c = x-512; // для RGB ленты //c = 767-x; // для светодиода analogWrite(LED3, c); } /* Serial.println(x); Serial.println(a); Serial.println(b); Serial.println(c); */ } }
หากคุณต้องการเชื่อมต่อ LED RGB หนึ่งตัวแสดงว่ามีแผนผังสายไฟสำหรับเชื่อมต่อ
กำลังติดตั้งแอปพลิเคชันบนโทรศัพท์ของคุณ
ดาวน์โหลดแอปพลิเคชันชื่อย่อ RGB ลงในโทรศัพท์ของคุณ .
หลังการติดตั้ง ให้เปิดแอปพลิเคชันจากไอคอน
คลิกที่จารึก
เราพบโมดูล Bluetooth ที่ติดตั้ง HC-05 ในรายการ
หากมีการเชื่อมต่อ ที่อยู่และชื่อของโมดูล Bluetooth ที่ติดตั้งจะแสดงแทนคำจารึก
นั่นคือทั้งหมดที่ ตั้งค่าการควบคุมแบ็คไลท์ RGB แล้ว!
นี่คือตัวอย่างวิดีโอของโครงการของเราที่กำลังดำเนินการ:
นาฬิกา GPS บน Arduino ล็อคไบโอเมตริกซ์ - แผนผังจอแสดงผล LCD และชุดประกอบ
บทความนี้ครอบคลุมถึงพื้นฐานของการใช้ LED RGB (แดง เขียว น้ำเงิน) กับ Arduino
เราใช้ฟังก์ชัน analogWrite เพื่อควบคุมสี RGB ของ LED
เมื่อมองแวบแรก ไฟ LED RGB จะมีลักษณะเหมือนกับไฟ LED ทั่วไป แต่จริงๆ แล้วภายในมีไฟ LED สามดวง: สีแดงหนึ่งดวง สีเขียวหนึ่งดวง และใช่ สีน้ำเงินหนึ่งดวง ด้วยการควบคุมความสว่างของแต่ละอัน คุณสามารถควบคุมสีของ LED ได้
นั่นคือ เราจะปรับความสว่างของ LED แต่ละตัวและรับสีเอาต์พุตที่ต้องการ ราวกับว่าเป็นจานสีของศิลปิน หรือราวกับว่าคุณกำลังปรับความถี่ในเครื่องเล่นของคุณ สำหรับสิ่งนี้คุณสามารถใช้ตัวต้านทานแบบปรับค่าได้ แต่โครงการที่ได้จะค่อนข้างซับซ้อน โชคดีที่ Arduino มีฟังก์ชัน analogWrite ให้เรา หากเราใช้พินที่มีเครื่องหมาย "~" บนบอร์ด เราจะสามารถควบคุมแรงดันไฟฟ้าที่จ่ายให้กับ LED ที่เกี่ยวข้องได้
เพื่อดำเนินโครงการขนาดเล็กของเรา เราจะต้อง:
1 RGB LED 10 มม
ตัวต้านทาน 3 ตัว 270 Ω (แถบสีแดง สีม่วง สีน้ำตาล) คุณสามารถใช้ตัวต้านทานที่มีความต้านทานสูงถึง 1 kOhm ได้ แต่อย่าลืมว่าเมื่อความต้านทานเพิ่มขึ้น LED จะเริ่มส่องสว่างน้อยลง
ตัวเลขหกหลักตรงกับตัวเลขสามคู่ คู่แรกคือองค์ประกอบสีแดงของสี ตัวเลขสองหลักถัดไปคือองค์ประกอบสีเขียว และคู่สุดท้ายคือองค์ประกอบสีน้ำเงิน นั่นคือนิพจน์ #FF0000 สอดคล้องกับสีแดง เนื่องจากจะเป็นความสว่างสูงสุดของ LED สีแดง (FF คือ 255 ในเลขฐานสิบหก) และส่วนประกอบสีแดงและสีน้ำเงินจะเท่ากับ 0
ลองส่องสว่าง LED โดยใช้เฉดสีคราม เช่น #4B0082
ส่วนประกอบสีแดง เขียว และน้ำเงินของครามคือ 4B, 00 และ 82 ตามลำดับ เราสามารถใช้พวกมันภายในฟังก์ชัน "setColor" ด้วยโค้ดบรรทัดต่อไปนี้:
ตั้งค่าสี(0x4B, 0x0, 0x82); //สีคราม
สำหรับองค์ประกอบทั้งสาม เราใช้สัญกรณ์ที่นำหน้าแต่ละองค์ประกอบด้วยอักขระ "0x" นำหน้า
ในขณะที่คุณเล่นกับเฉดสีต่างๆ ของ LED RGB อย่าลืมตั้งค่า 'ดีเลย์' หลังจากใช้งานแต่ละเฉด
การมอดูเลตความกว้างพัลส์ (PWM เป็นภาษาอังกฤษ) เป็นหนึ่งในวิธีการจัดการพลังงาน ในกรณีของเรา PWM ใช้เพื่อควบคุมความสว่างของ LED แต่ละตัว
รูปด้านล่างแสดงสัญญาณจากพิน Arduino PWM อันใดอันหนึ่งตามแผนผัง
ทุกๆ 1/500 วินาทีเอาต์พุต PWM จะสร้างพัลส์ ความยาวของพัลส์นี้ถูกควบคุมโดยฟังก์ชัน "analogWrite" นั่นคือ "analogWrite(0)" จะไม่สร้างพัลส์ใดๆ แต่ "analogWrite(255)" จะสร้างสัญญาณที่จะคงอยู่จนถึงจุดเริ่มต้นของสัญญาณถัดไป นั่นคือจะปรากฏว่ามีการส่งพัลส์ต่อเนื่องหนึ่งอัน
เมื่อเราระบุค่าระหว่าง 0 ถึง 255 ภายในฟังก์ชัน analogWrite เราจะสร้างพัลส์ในช่วงเวลาหนึ่ง หากความยาวพัลส์เท่ากับ 5% เราจะจ่ายพลังงานสูงสุดที่มีอยู่ 5% ให้กับเอาต์พุต Arduino ที่ระบุ และปรากฏว่า LED ไม่ได้มีความสว่างสูงสุด
แสดงความคิดเห็น คำถาม และแบ่งปันประสบการณ์ส่วนตัวของคุณด้านล่าง แนวคิดและโครงการใหม่ ๆ มักเกิดในการสนทนา!
rf-gk.ru - พอร์ทัลสำหรับคุณแม่