วิธีเชื่อมต่อแถบ LED ที่สามารถระบุตำแหน่งได้ WS2812B กับ Arduino
การพัฒนาเทคโนโลยีแสงสว่างโดยใช้ไฟ LED ยังคงดำเนินต่อไปอย่างรวดเร็ว เมื่อวานนี้ ริบบอน RGB ที่ควบคุมด้วยคอนโทรลเลอร์ ซึ่งสามารถปรับความสว่างและสีได้โดยใช้รีโมทคอนโทรล ดูราวกับเป็นปาฏิหาริย์ วันนี้โคมไฟที่มีคุณสมบัติมากยิ่งขึ้นได้ปรากฏตัวขึ้นในตลาด
แถบ LED ตาม WS2812B
ความแตกต่างระหว่างแถบ LED ที่สามารถระบุตำแหน่งได้และแถบมาตรฐาน RGB สิ่งที่เป็น ความสว่างและอัตราส่วนสีของแต่ละองค์ประกอบจะถูกปรับแยกกัน. วิธีนี้ช่วยให้คุณได้เอฟเฟกต์แสงที่ไม่สามารถเข้าถึงได้โดยพื้นฐานสำหรับอุปกรณ์ให้แสงสว่างประเภทอื่น การเรืองแสงของแถบ LED ที่กำหนดแอดเดรสได้นั้นถูกควบคุมในลักษณะที่ทราบ - โดยใช้การมอดูเลตความกว้างพัลส์ คุณลักษณะของระบบคือการติดตั้ง LED แต่ละตัวด้วยตัวควบคุม PWM ของตัวเอง ชิป WS2812B เป็นไดโอดเปล่งแสงสามสีและวงจรควบคุมที่รวมอยู่ในแพ็คเกจเดียว

องค์ประกอบต่างๆ จะรวมกันเป็นเทปจ่ายไฟแบบขนาน และควบคุมผ่านบัสอนุกรม - เอาต์พุตขององค์ประกอบแรกเชื่อมต่อกับอินพุตควบคุมของส่วนที่สอง ฯลฯ ในกรณีส่วนใหญ่ บัสอนุกรมถูกสร้างขึ้นบนสองบรรทัด โดยหนึ่งในนั้นส่งแฟลช (พัลส์นาฬิกา) และอีกสายหนึ่ง - ข้อมูล

บัสควบคุมของชิป WS2812B ประกอบด้วยหนึ่งบรรทัด - ข้อมูลถูกส่งผ่าน ข้อมูลถูกเข้ารหัสเป็นพัลส์ของความถี่คงที่ แต่มีรอบการทำงานต่างกัน หนึ่งพัลส์ - หนึ่งบิต. ระยะเวลาของแต่ละบิตคือ 1.25 µs บิตศูนย์ประกอบด้วยระดับสูงด้วยระยะเวลา 0.4 µs และระดับต่ำ 0.85 µs หน่วยดูเหมือนระดับสูงสำหรับ 0.8 µs และระดับต่ำสำหรับ 0.45 µs การระเบิดแบบ 24 บิต (3 ไบต์) จะถูกส่งไปยัง LED แต่ละดวง ตามด้วยการหยุดชั่วขณะระดับต่ำเป็นเวลา 50 µs ซึ่งหมายความว่าข้อมูลจะถูกส่งไปสำหรับ LED ถัดไป และสำหรับองค์ประกอบทั้งหมดของห่วงโซ่ การถ่ายโอนข้อมูลสิ้นสุดลงด้วยการหยุดชั่วคราว 100 µs ซึ่งบ่งชี้ว่ารอบการตั้งโปรแกรมเทปเสร็จสมบูรณ์ และสามารถส่งชุดข้อมูลชุดถัดไปได้

โปรโตคอลดังกล่าวทำให้สามารถรับส่งข้อมูลได้เพียงบรรทัดเดียว แต่ต้องการความแม่นยำในการรักษาช่วงเวลา อนุญาตให้มีความคลาดเคลื่อนได้ไม่เกิน 150 ns นอกจากนี้ภูมิคุ้มกันเสียงของรถบัสดังกล่าวยังต่ำมาก ผู้ควบคุมสามารถรับรู้การรบกวนใด ๆ ของแอมพลิจูดที่เพียงพอเป็นข้อมูล สิ่งนี้กำหนดข้อจำกัดเกี่ยวกับความยาวของตัวนำจากวงจรควบคุม ในทางกลับกัน สิ่งนี้ทำให้เป็นไปได้ ตรวจสุขภาพริบบิ้น โดยไม่ต้องใช้อุปกรณ์เพิ่มเติมหากคุณจ่ายไฟให้กับหลอดไฟและใช้นิ้วแตะแผงสัมผัสของบัสควบคุม ไฟ LED บางดวงอาจสว่างขึ้นและดับลงแบบสุ่ม
ข้อมูลจำเพาะขององค์ประกอบ WS2812B
ในการสร้างระบบไฟส่องสว่างโดยใช้เทปที่อยู่ คุณจำเป็นต้องทราบพารามิเตอร์ที่สำคัญขององค์ประกอบการเปล่งแสง
| ขนาด LED | 5x5mm |
| ความถี่มอดูเลต PWM | 400 Hz |
| การบริโภคปัจจุบันที่ความสว่างสูงสุด | 60 mA ต่อเซลล์ |
| แรงดันไฟจ่าย | 5 โวลต์ |
Arduino และ WS2812B
แพลตฟอร์ม Arduino ซึ่งเป็นที่นิยมทั่วโลก ช่วยให้คุณสร้างภาพร่าง (โปรแกรม) สำหรับจัดการเทปที่อยู่ ความสามารถของระบบนั้นกว้างพอ แต่หากไม่เพียงพอในบางระดับ ทักษะที่ได้รับก็เพียงพอแล้วที่จะเปลี่ยนไปใช้ C ++ หรือแม้แต่แอสเซมเบลอร์อย่างไม่ลำบาก แม้ว่าความรู้เบื้องต้นจะง่ายกว่าที่จะได้รับบน Arduino
การเชื่อมต่อ WS2812B Ribbon กับ Arduino Uno (นาโน)
ในระยะแรกบอร์ด Arduino Uno หรือ Arduino Nano ธรรมดาก็เพียงพอแล้ว ในอนาคต สามารถใช้บอร์ดที่ซับซ้อนมากขึ้นเพื่อสร้างระบบที่ซับซ้อนมากขึ้นได้ เมื่อเชื่อมต่อแถบ LED ที่สามารถระบุตำแหน่งได้กับบอร์ด Arduino ต้องปฏิบัติตามเงื่อนไขหลายประการ:
- เนื่องจากการป้องกันสัญญาณรบกวนต่ำ ตัวนำเชื่อมต่อของสายข้อมูลควรสั้นที่สุด (คุณควรพยายามทำให้อยู่ภายใน 10 ซม.)
- คุณต้องเชื่อมต่อตัวนำข้อมูลกับเอาต์พุตดิจิตอลฟรีของบอร์ด Arduino - จากนั้นจะถูกระบุโดยทางโปรแกรม
- เนื่องจากการใช้พลังงานสูง จึงไม่จำเป็นที่จะต้องจ่ายไฟให้กับเทปจากบอร์ด - มีการจัดหาแหล่งจ่ายไฟแยกต่างหากเพื่อการนี้
ต้องต่อสายไฟทั่วไปของหลอดไฟและ Arduino

พื้นฐานการควบคุมโปรแกรม WS2812B
มีการกล่าวไว้แล้วว่าเพื่อควบคุมไมโครเซอร์กิต WS2812B จำเป็นต้องสร้างพัลส์ที่มีความยาวที่แน่นอน โดยคงไว้ซึ่งความแม่นยำสูง มีคำสั่งในภาษา Arduino สำหรับการก่อตัวของพัลส์สั้น ดีเลย์ไมโครวินาที และ micros. ปัญหาคือความละเอียดของคำสั่งเหล่านี้คือ 4 ไมโครวินาที นั่นคือจะไม่ทำงานเพื่อสร้างการหน่วงเวลาด้วยความแม่นยำที่กำหนด จำเป็นต้องเปลี่ยนไปใช้เครื่องมือ C ++ หรือ Assembler และคุณสามารถจัดระเบียบการควบคุมแถบ LED ที่กำหนดแอดเดรสได้ผ่าน Arduino โดยใช้ไลบรารี่ที่สร้างขึ้นเป็นพิเศษสำหรับสิ่งนี้ คุณสามารถเริ่มทำความรู้จักกับโปรแกรม Blink ซึ่งจะทำให้องค์ประกอบที่เปล่งแสงกะพริบ
นำอย่างรวดเร็ว
ห้องสมุดนี้เป็นสากล นอกจากเทปที่อยู่แล้ว ยังรองรับอุปกรณ์ที่หลากหลาย รวมถึงเทปที่ควบคุมโดยอินเทอร์เฟซ SPI มันมีความเป็นไปได้ที่กว้าง
ขั้นแรกต้องรวมห้องสมุด สิ่งนี้ทำก่อนบล็อกการตั้งค่า และบรรทัดจะมีลักษณะดังนี้:
#include <FastLED.h>
ขั้นตอนต่อไปคือการสร้างอาร์เรย์เพื่อเก็บสีของไดโอดเปล่งแสงแต่ละตัว จะมีแถบชื่อและขนาด 15 - ตามจำนวนองค์ประกอบ (ควรกำหนดค่าคงที่ให้กับพารามิเตอร์นี้ดีกว่า)
CRGB สตริป[15]
ในบล็อกการตั้งค่า คุณต้องระบุเทปที่จะใช้งานแบบร่าง:
การตั้งค่าเป็นโมฆะ () {
FastLED.addLeds < WS2812B, 7, RGB> (แถบ 15);
intg;
}
พารามิเตอร์ RGB กำหนดลำดับสี 15 หมายถึงจำนวน LED 7 คือจำนวนเอาต์พุตที่กำหนดสำหรับการควบคุม (ควรกำหนดค่าคงที่ให้กับพารามิเตอร์สุดท้ายด้วย)
บล็อกลูปเริ่มต้นด้วยการวนซ้ำที่เขียนตามลำดับไปยังแต่ละส่วนของอาร์เรย์ สีแดง (เรืองแสงสีแดง):
สำหรับ (g=0; g< 15; g++)
{แถบ[g]=CRGB::สีแดง;}
ถัดไปอาร์เรย์ที่สร้างขึ้นจะถูกส่งไปยังหลอดไฟ:
FastLED.show();
หน่วงเวลา 1,000 มิลลิวินาที (วินาที):
ล่าช้า (1000);
จากนั้นคุณสามารถปิดองค์ประกอบทั้งหมดในลักษณะเดียวกันโดยเขียนสีดำลงไป
สำหรับ (int g=0; g< 15; g++)
{แถบ[g]=CRGB::สีดำ;}
FastLED.show();
ล่าช้า (1000);

หลังจากรวบรวมและอัปโหลดภาพร่างแล้ว เทปจะกะพริบเป็นเวลา 2 วินาที หากคุณต้องการจัดการองค์ประกอบสีแต่ละส่วนแยกกัน แทนที่จะใช้เส้น {แถบ[g]=CRGB::สีแดง;} ใช้หลายบรรทัด:
{
แถบ[g].r=100;// ตั้งค่าระดับการเรืองแสงขององค์ประกอบสีแดง
แถบ[g].g=11;// สีเขียวเหมือนกัน
แถบ[g].b=250;// เหมือนกันสำหรับสีน้ำเงิน
}
NeoPixel
ไลบรารีนี้ใช้งานได้กับวงแหวน LED NeoPixel Ring เท่านั้น แต่ใช้ทรัพยากรน้อยกว่าและมีเฉพาะสิ่งจำเป็นเท่านั้น ในภาษา Arduino โปรแกรมมีลักษณะดังนี้:
#include <Adafruit_NeoPixel.h>
ในกรณีก่อนหน้านี้ ไลบรารีถูกเชื่อมต่อ และอ็อบเจ็กต์ lenta ถูกประกาศ:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// โดยที่ 15 คือจำนวนองค์ประกอบและ 6 คือผลลัพธ์ที่กำหนด
ในบล็อกการตั้งค่า เทปจะถูกเตรียมข้อมูลเบื้องต้น:
การตั้งค่าเป็นโมฆะ () {
lenta.begin()
}
ในบล็อกการวนซ้ำ องค์ประกอบทั้งหมดจะถูกเน้นด้วยสีแดง ตัวแปรจะถูกส่งไปยังฟีด และสร้างความล่าช้า 1 วินาที:
สำหรับ (int y=0; y<15; y++)// 15 - จำนวนองค์ประกอบในหลอดไฟ
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
เทป.show();
ล่าช้า (1000);
เรืองแสงหยุดด้วยบันทึกสีดำ:
สำหรับ (int y=0; y< 15; y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
เทป.show();
ล่าช้า (1000);

วิดีโอสอน: ตัวอย่างเอฟเฟกต์ภาพโดยใช้เทปที่อยู่
เมื่อคุณได้เรียนรู้วิธีแฟลช LED แล้ว คุณสามารถเรียนรู้วิธีสร้างเอฟเฟกต์สีต่อไปได้ ซึ่งรวมถึง Rainbow และ Aurora Borealis ยอดนิยมที่มีการเปลี่ยนภาพที่ราบรื่น ไฟ LED ที่สามารถระบุตำแหน่งได้ WS2812B และ Arduino ให้ความเป็นไปได้ที่แทบไร้ขีดจำกัดสำหรับสิ่งนี้
