Introduction
โปรเจคนี้จะมาสอนวิธีควบคุม RGB SMD LED ด้วย HC-05 Bluetooth Module กับ Arduino กันนะน้อง
แอพ Android ที่เราทำจะมีสองโหมดให้เลือกเปลี่ยนสี LED นะ ตัวแรกคือ Palette กับตัวที่สองคือ Slider
โหมด Palette น้องก็แค่จิ้มเลือกสีจากแผงสีได้เลย ง่ายๆ
ส่วนโหมด Slider น้องจะได้ปรับค่าความเข้มของสีพื้นฐาน (RGB) แต่ละตัวด้วยตัวเองเลย
พอเลือกสีได้แล้ว แอพก็จะส่งข้อมูลสีมาให้ HC-05 จากนั้น Arduino ก็จะอ่านข้อมูลแล้วสั่งงาน LED ตามนั้นเลยจ้า
สำหรับโค้ดแอพ น้องๆ ไปดูใน description ของวิดีโอได้เลย
Video
Wireless Photonics: Bluetooth RGB Controller
รีโมต RGB ทั่วไปที่ใช้ Infrared (IR) นี่มันโบราณแล้วน้อง มันต้องหันไปหาตัวรับตรงเป๊ะๆ ถึงจะใช้ได้ โปรเจค Bluetooth HC-05 RGB LED Light นี้เราจะทิ้งเซนเซอร์ IR แล้วอัพเกรดมาใช้ลิงก์ Serial 2.4GHz แรงๆ แทน ด้วยการแยกข้อมูลหลายไบต์จากแอพเลือกสีบน Android แล้ว Arduino ก็จะใช้พิน PWM สามตัวผสมสีได้ถึง 16 ล้านสีแบบเนียนๆ โดยที่ไม่ต้องหันไปมองไฟเลย!
The Bluetooth Protocol (Hex / String Parsing)
เวลาน้องลากวงล้อสีบนแอพ Android ไปที่สี "ส้ม" มันไม่สามารถส่งแค่คำว่า "ส้ม" มาได้หรอก มันจะส่งสตริงข้อความดิบๆ มา ซึ่งมักจะฟอร์แมตเป็นโค้ด Hex หรือคั่นด้วยคอมม่าแบบนี้: R255G128B0\n
- พิน RX ของ HC-05 จะรับสตริงตัวอักษรยาวๆ นี้เข้ามา
- Arduino ต้องทำการบัฟเฟอร์ข้อมูลนี้แบบดุเดือดด้วย
while(Serial.available()) - คณิตศาสตร์การแยกข้อมูล (Index Parsing Math): น้องต้องใช้
indexOf()กับsubstring()ในการตัดข้อมูลออกเป็นส่วนๆ!
int rIndex = incomingData.indexOf('R');
int gIndex = incomingData.indexOf('G');
int bIndex = incomingData.indexOf('B');
String redString = incomingData.substring(rIndex + 1, gIndex);
int redPWM = redString.toInt(); // แปลงสตริง "255" ให้เป็นเลขจำนวนเต็ม 255!
- พอได้ค่าจำนวนเต็มสามตัว (
redPWM, greenPWM, bluePWM) มาแล้ว Arduino ก็จะโยนมันไปให้ฮาร์ดแวร์ทำงานต่อทันที!
The AnalogWrite PWM Mixing Array
LED RGB มันก็คือ LED เล็กๆ สามดวง (แดง, เขียว, น้ำเงิน) ที่ถูกยัดรวมอยู่ในพลาสติกทรงโดมเดียวกันนั่นแหละ
analogWrite(RedPin, redPWM);(ปกติจะเป็น Pin 9)analogWrite(GreenPin, greenPWM);(ปกติจะเป็น Pin 10)analogWrite(BluePin, bluePWM);(ปกติจะเป็น Pin 11)- ด้วยการสั่งให้พินทั้งสามสั่นด้วยความเร็วต่างกัน ดวงตาคนเราก็จะหลงคิดว่าเห็นเป็นสีเดียวที่สวยงาม เช่น
R:255, G:128, B:0ก็จะได้สีส้มอันร้อนแรงออกมา!
Bluetooth RGB Hardware Needs
- Arduino Uno/Nano.
- โมดูล HC-05 Transceiver (ต้องใช้ตัวต้านทาน (Resistor) 1K / 2K ทำ Voltage divider บนพิน RX ด้วยนะ! เพราะ Uno ใช้ 5V แต่ HC-05 ใช้ Logic 3.3V!).
- Common Cathode RGB LED (ขาที่ยาวสุดให้ต่อกับ GND).
- หรือจะอัพสเกล: ใช้ ทรานซิสเตอร์ NPN แบบ TIP120 3 ตัว เพื่อขับ RGB LED strip แบบอะนาล็อก ขนาด 5 เมตร 12V ให้สว่างไสวไปทั้งห้องเลยก็ได้! สู้งานนะน้อง