การเชื่อมต่อและควบคุมแถบ LED เข้ากับ Arduino เราสร้าง RGB LED พร้อม Arduino ชิมเมอร์ด้วยสีทั้งหมดของการเชื่อมต่อโมดูล Rgb สายรุ้งกับ Arduino

บ้าน

ซีรีส์ "กล้า" RGB ย่อมาจาก
เป็นตัวย่อของสีแดง เขียว น้ำเงิน โดยใช้สีเหล่านี้ คุณจะได้สีใดก็ได้โดยการผสม RGB LED ประกอบด้วยคริสตัลขนาดเล็ก 3 อัน R, G, B ซึ่งเราสามารถสังเคราะห์สีหรือเฉดสีใดก็ได้ ในบทช่วยสอนนี้ เราจะเชื่อมต่อ RGB LED เข้ากับบอร์ด Arduino และทำให้มันเปล่งประกายด้วยสีรุ้งทั้งหมด

  1. สำหรับโปรเจ็กต์นี้ คุณจะต้องมีชิ้นส่วนที่มีอยู่ในชุด "พื้นฐาน" และ "การเรียนรู้ Arduino":
  2. อาร์ดูโน่ อูโน่;
  3. สายยูเอสบี;
  4. บอร์ดสร้างต้นแบบ
  5. สายชาย - ชาย - 7 ชิ้น;
  6. ตัวต้านทาน 220 โอห์ม – 3 ชิ้น;
  7. RGB LED – 1 ชิ้น;

โพเทนชิออมิเตอร์

เราประกอบวงจรดังแสดงในรูปที่ 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" ซึ่งอธิบายรายละเอียดเกี่ยวกับกลไกของการปรับความกว้างพัลส์

  • อัลกอริธึมการดำเนินการโปรแกรม:
  • เราเพิ่มค่าขององค์ประกอบสีเขียวของ G จนกระทั่งถึงค่าสีส้ม (255,125,0)
  • เราเพิ่มค่าขององค์ประกอบสีเขียวของ G จนกระทั่งถึงสีเหลือง (255,255,0)
  • เราลดค่าขององค์ประกอบสีแดง R ให้เป็นค่าสีเขียว (0.255.0)
  • จุดเริ่มต้นคือสีแดง (255,0,0)
  • เราเพิ่มค่าขององค์ประกอบสีน้ำเงิน B เป็นค่าของสีน้ำเงิน (0.255.255)
  • ลดค่าขององค์ประกอบสีเขียว G ให้เป็นค่าสีน้ำเงิน (0,0,255)
  • ลดค่าขององค์ประกอบสีน้ำเงิน B ให้เป็นค่าสีแดง (255,0,0)

เรามาต่อกันที่ขั้นตอนที่ 1 กันเลย

หลังจากแต่ละขั้นตอน เราจะหยุดชั่วคราวเพื่อบันทึกการแสดงสี

ล่าช้า (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 แบบอะนาล็อกมาตรฐานซึ่งฉันคิดว่าเป็นเรื่องธรรมดาที่สุด

  • ความกว้าง 10.5 มม. (0.41"), ความหนา 3 มม. (0.12"), ความยาว 100 มม. (3.95") ต่อส่วน
  • มีแบบกันน้ำ ( กันน้ำ) และไม่มีการป้องกัน ( ไม่กันน้ำ)
  • มีเทปกาวด้านหลังสำหรับติดเทป
  • แรงดันไฟฟ้าสูงสุด 12V และ 60mA ต่อเซ็กเมนต์
  • ไฟ LED 3 ดวงพร้อมขั้วบวกร่วมในแต่ละส่วน
  • ความยาวคลื่น LED: 630nm/530nm/475nm
  • ไม่มีไมโครคอนโทรลเลอร์หรือชิปคอนโทรลเลอร์ (การควบคุมแบบอะนาล็อกล้วนๆ)

ก่อนที่คุณจะเริ่มทำงานด้วย อาร์ดูโน่และแรงดันไฟฟ้าที่สูงกว่า 5 โวลต์ฉันขอแนะนำให้อ่านเรื่องนี้มากเพื่อไม่ให้คุณไหม้ อาร์ดูโน่- อธิบายการใช้งานได้ดี MOSFETกับ อาร์ดูโน่- หากคุณได้อ่านบทความนี้แล้วเรามาดูกันดีกว่า
ในการทำงานกับแถบ LED เราจะต้อง:

  1. มอสเฟตทรานซิสเตอร์ที่สามารถพบได้บนอีเบย์
  2. ตัวต้านทาน 10k?
  3. เขียงหั่นขนมไร้บัดกรี ( เขียงหั่นขนม)
  4. สายไฟสำหรับการเชื่อมต่อ อาร์ดิโนพร้อมเขียงหั่นขนม (ชาย-ชาย)
  5. แถบ LED (ฉันเอามันไป aliexpressเทปนี้และฉันวางแผนที่จะสั่งซื้อเพิ่มอีกสองรายการจากผู้ขายรายเดียวกัน)

ตอนนี้เรามาดูแผนภาพการเชื่อมต่อกันซึ่งส่วนหลักของบทความนี้จะชัดเจน:

ตอนนี้เรามาดูกันดีกว่า อาร์ดูโน่ 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:

  1. โมดูล Bluetooth HC-05 สำหรับการสื่อสารไร้สายกับ Arduino
  2. Arduino nano, mini, บอร์ด Uno พร้อมไมโครโปรเซสเซอร์ เอทีเมก้า 8, เอทีเมก้า 168, เอทีเมก้า 328.
  3. แถบ LED RGB (หากจำเป็น) มีหรือไม่มีการออกแบบกันน้ำ IP65
  4. สมาร์ทโฟน Android เป็นรีโมทคอนโทรลสำหรับแสง RGB
  5. ทรานซิสเตอร์สนามแม่เหล็ก MOSFET เช่น P3055LD, P3055LDG, PHD3355L แต่ดีกว่าด้วยลีดสำหรับการติดตั้งในรูยึด ทรานซิสเตอร์แบบไบโพลาร์ทำงานได้แย่ลง .
  6. ตัวต้านทาน 10 kOhm, 0.125 W - 3 ชิ้น

ทฤษฎีเล็กๆ น้อยๆ เกี่ยวกับการเชื่อมต่อเทป 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:

  • VCC - 5V (จ่าย +5 V);
  • GND - GND (กราวด์, ทั่วไป);
  • RX - TX บน Arduino nano, mini, Uno;
  • TX - RX บน Arduino nano, mini, Uno;
  • LED - ไม่ได้ใช้;
  • คีย์ - ไม่ได้ใช้

ภาพร่างของโปรแกรมด้านล่างนี้เป็นสากลสำหรับการควบคุมทั้ง 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 และ Arduino

การมอดูเลตความกว้างพัลส์ (PWM เป็นภาษาอังกฤษ) เป็นหนึ่งในวิธีการจัดการพลังงาน ในกรณีของเรา PWM ใช้เพื่อควบคุมความสว่างของ LED แต่ละตัว

รูปด้านล่างแสดงสัญญาณจากพิน Arduino PWM อันใดอันหนึ่งตามแผนผัง


ทุกๆ 1/500 วินาทีเอาต์พุต PWM จะสร้างพัลส์ ความยาวของพัลส์นี้ถูกควบคุมโดยฟังก์ชัน "analogWrite" นั่นคือ "analogWrite(0)" จะไม่สร้างพัลส์ใดๆ แต่ "analogWrite(255)" จะสร้างสัญญาณที่จะคงอยู่จนถึงจุดเริ่มต้นของสัญญาณถัดไป นั่นคือจะปรากฏว่ามีการส่งพัลส์ต่อเนื่องหนึ่งอัน

เมื่อเราระบุค่าระหว่าง 0 ถึง 255 ภายในฟังก์ชัน analogWrite เราจะสร้างพัลส์ในช่วงเวลาหนึ่ง หากความยาวพัลส์เท่ากับ 5% เราจะจ่ายพลังงานสูงสุดที่มีอยู่ 5% ให้กับเอาต์พุต Arduino ที่ระบุ และปรากฏว่า LED ไม่ได้มีความสว่างสูงสุด

แสดงความคิดเห็น คำถาม และแบ่งปันประสบการณ์ส่วนตัวของคุณด้านล่าง แนวคิดและโครงการใหม่ ๆ มักเกิดในการสนทนา!



อ่านอะไรอีก.