โปรเจกต์: แถวไฟ LED วิ่งตามหมุน (Rotary Controlled LED Row)
ภาพรวมโปรเจกต์ (Project Overview)
โปรเจกต์ Rotary Controlled LED Row นี้จะพาน้องๆ ไปลองของกับการรับค่า analog input มาบวกกับการคุม digital output แบบหลายดวงพร้อมกัน แค่บิดตัวปรับค่า (potentiometer) ตัวเดียว ก็สั่งให้ไฟ LED ติดไล่ตามกันเป็นแถวได้แล้ว อารมณ์เหมือนพวก VU meter บนเครื่องเสียง หรือปุ่มเลือกโหมดนั่นแหละ จัดไปวัยรุ่น!
โครงสร้าง Hardware (สายลุยต้องรู้)
- Analog Input (Potentiometer): ใช้ potentiometer ขนาด 10k โอห์ม ต่อคร่อม 5V กับ GND เข้าไป ส่วนขาตรงกลาง (wiper) ก็ลากสายไปจิ้มที่ Analog Pin A0 เลย
- Digital Outputs (LED Row): เอา LED มาเรียงแถวกันสัก 8-10 ดวง ต่อเข้ากับ digital Pins ของ Arduino (เช่น Pins 2 ถึง 9) แล้วอย่าลืมใส่ตัวต้านทาน (resistor) ดักไว้ทุกดวงด้วยล่ะ เดี๋ยวไฟเกินจน LED บึ้มแล้วจะหาว่าพี่ไม่เตือน ห้ามช็อตนะตัวนี้!
การแปลงข้อมูล: จาก Analog เป็น Digital
ตัว Arduino ของเรามี Analog-to-Digital Converter (ADC) ที่จะคอยเปลี่ยนค่าแรงดันจากตัวบิดให้กลายเป็นตัวเลขดิจิทัลตั้งแต่ 0 ถึง 1023 จากนั้นเราก็ใช้ฟังก์ชัน "map" แปลงช่วงค่าพวกนี้ให้เข้ากับจำนวน LED ในแถวของเรา:
int val = analogRead(A0);
int numLedsLit = map(val, 0, 1023, 0, 8);
หลักการแสดงผล (Display Functionality)
ใน Code เราจะให้มันวิ่งวน Loop เช็ก Pins ของ LED ถ้าลำดับของไฟดวงไหนยังน้อยกว่าค่า numLedsLit ที่เราคำนวณไว้ ก็สั่งให้ไฟติดเป็น HIGH ไปเลย ส่วนที่เหลือก็ให้เป็น LOW (ดับ) ไว้ แค่นี้เราก็ได้แถวไฟ "bar" ที่วิ่งขึ้นลงตามมือบิดเราแล้ว หล่อเท่เลยงานนี้!
อยากเทพกว่านี้? ลองปรับดู (Creative Customization)
ถ้าอยากให้ออกมาดู Professional เหมือนรุ่นพี่ทำ ก็ลองพวกนี้ดู:
- Pulse Width Modulation (PWM): ลองใช้ PWM สั่งให้ LED "ดวงสุดท้าย" ค่อยๆ สว่างหรือหรี่ตามตำแหน่งการบิดดูสิ จะทำให้ดูเนียนกว่าแค่ติดๆ ดับๆ เยอะเลย
- เล่นท่ายาก (Reverse Action): ลองแก้ Code ให้มันติดแค่ "ดวงเดียว" วิ่งตามตำแหน่งบิดแทนที่จะติดเป็นแถบยาวๆ ก็จะกลายเป็นปุ่มเลือก Selector แบบเฟี้ยวๆ
- เอาเสียงมาเล่น (Audio Input): ลองเอาสัญญาณจากแอมป์ขยายเสียงมาจิ้มเข้า Analog Pin แทนตัวบิดดูสิ น้องจะได้ Audio Spectrum Visualizer เอาไว้โชว์ไฟตามจังหวะเพลงแบบโครตตึง!
การใช้งานจริง
พวกอินเตอร์เฟซแบบนี้เราเห็นได้บ่อยๆ ในปุ่มปรับระดับเสียง, แถบบอกระดับแบตเตอรี่ หรือพวกปุ่มควบคุมเครื่องใช้ไฟฟ้าทั่วไป สู้งานนะน้อง!