วันนี้ เรามีนัดการทำ Prototype ในพืชมงคลกันคะ 55555
ตอนนี้แบ่งงานออกเป็น 2 ฝ่ายใหญ่ๆ ก็คือ Hardware และ Software คะ โดยแบ่งกันตามความสนใจ
และ ด้วยปริมาณผู้ทำ Hardware จำนวนมาก ดาวก็เลยเลือกที่จะอยู่ทีม Software ที่น่าจะช่วยอะไรมากกว่า
งั้นมาเล่าถึงงานที่รับผิดชอบของแต่ละฝ่ายกันคะ
ฝ่าย Hardware งานหลักๆก็คือ ทำการเปลี่ยนสายไฟสีๆ ให้เป็นสายไฟใสทั้งหมด เพราะ ชุดการแสดงทำจากพลาสติกใส่ทั้งหมด
ฝ่าย Software คือ ทำการเขียนโปรแกรม Control ไฟ LED ซึ่ง ตอนนี้ LED Strip ที่ใช้ติดชุด ก็มีหลายแบบอยู่ด้วยกัน
เพราะบางชนิดเป็น LED แบบ หลอด RGB ซึ่งมีขา R G B 12V
บางชนิด ก็เป็น LED ที่มีขา 5v data ground
บางชนิด ก็เป็น LED ฟลูออเรสเซน ที่มีแค่ขา ไฟ กับ ground แต่รับด้วยไฟกระแสสลับ
จึงทำให้ Code ที่ใช้แตกต่างกันออกไป และมีการนำ Hardware มาช่วย เพื่อปรับแรงดันไฟ ให้เหมาะสม
โดยตัว Prototype นี้จะลองคุมไฟ เปิด-ปิด , กระพริบ , และ fade ให้ได้ทั้งหมดคะ เพื่อว่าจะได้มาเปลี่ยนแปลงเข้ากับการแสดงของ อ.พิเชษฐ กลั่นชื่น กันได้ง่าย
งั้นของเล่าถึง Step การทำงานของ การ Control LED คะ
คือ
เผื่อเพื่อนๆที่ไม่ได้มาทำงานส่วนนี้อาจจะไม่เข้าใจการทำงาน
ตามปกติแล้ว
การที่หลอดไฟดวงหนึ่งจะติดได้ คือ เราต้องต่อให้ขาหนึ่งของหลอดไฟต่อที่ เข้าไฟ และ
อีกขาหนึ่งต่อเข้าGND
ก็จะทำให้ครบวงจร และ ไฟติดถูกไหมคะ
แต่ต้องระวังว่า ต่อสลับข้างกัน ก็ทำให้ไฟไม่ติดได้นะคะ อิอิ โดยสามารถสังเกตว่าขาไหนบวก
ขาไหนลบของหลอด
LED ได้ด้วยการ ดูความยาวขา ไม่ก็ดูที่
บักที่หลอดไฟ คุ้นๆเหมือนที่อาจารย์เคยสอนตอนวิชา CPE111 รึป่าวคะ อิอิ
ที่นี่เราเวลาจะควบคุมไฟ
ด้วย arduino เราต้องทำกันยังไง
?
อย่างง่ายสุด
เริ่มที่ LED
ธรรมดาๆ
ทำได้สองแบบ
ที่เค้าเรียกกันว่า Active
Low และ
Active High
อย่างแรก
Active High
digitalWrite(2,
High); 5v => 0v แล้วไฟจะติด
เพราะ
ไฟจาก Pin2(5V) ไหลลง
ground
ไฟเลยติด
digitalWrite(2,
Low); ไฟไม่ติด
เพราะ
ไฟจาก Pin2(0V) ไหลลง
ground
(0v => 0v
ไม่มีความต่างศักย์)
ถัดมาคือ
Active
Low
digitalWrite(2,
Low); (5V =>5V) แล้วไฟจะติด
เพราะ
ไฟจาก Vsource(5V) ไหลลง
จาก Pin2(ground) ไฟเลยติด
digitalWrite(2,High); ไฟไม่ติด
เพราะ
ไฟจาก Vsource(5V) ไหลลง
จาก Pin2(5V =>5V ไม่มีความต่างศักย์)
แล้วพอที่นี่เราอยากทำให้ไฟกระพริบ
(Blink)
ก็ทำได้โดย
digitalWrite(2,
Low);
delay(1000); //wait 1 sec
digitalWrite(2,High);
delay(1000); //wait
1 sec
จาก code นี้ก็คือ ให้ไฟติด 1 sec แล้ว ดับ 1 sec
เพียงแค่นี้เพื่อนๆก็ได้ไฟกระพริบแล้ว
แล้วถ้าอยากให้
fade ได้ต้องทำยังไง ?
การที่ไฟสว่างมากหรือสว่างน้อย
ขึ้นอยู่กับ Volt
(V)
ดังนั้น
ถ้าเราอยากให้ ปรับความสว่างได้ ต้องไปเขียน
code คุมที่
volt กัน
ซึ่ง
board arduino มีความสามารถในปล่อยค่า Volt ได้ แต่ต้องเสียบช่องที่เป็น PWM นะคะ เพราะปกติช่อง digital จะปล่อยมาไฟออกมาสองค่าเท่านั้น
คือ
5V = logic1 และ 0v = logic 0
Code
หลักๆ ก็อยู่ที่
analogWrite(led, brightness);
เราก็อาจใช้วิธีวนloopในการเพิ่มค่าไปเรื่อยก็ได้คะ
For(brightness=0; brightness<255; brightness++)
{
analogWrite(pinled, brightness);
}
แต่ถ้าเราไม่ใช่ช่อง PWM ละ ก็ยังทำได้อีกวิธีนึง
ก็คือ
ใช้การกระพริบไฟในการหลอกตาคะ
เช่น
ไฟติด 10ms
ไฟดับ 100ms ก็จะให้ความรู้สึกว่าไฟสว่างน้อย
ในทางกลับกันไฟติด 100ms ไฟดับ 10ms ก็จะให้ความรู้สึกว่าไฟสว่างมาก
digitalWrite(2,
Low);
delay(10); //wait 10 ms
digitalWrite(2,High);
delay(100); //wait 100 ms
จะให้ผลลัพธ์ไฟสว่างมาก
====================================================
digitalWrite(2,
Low);
delay(100); //wait
100
ms
digitalWrite(2,High);
delay(10); //wait
10
ms
จะให้ผลลัพธ์ไฟสว่างน้อย
ภาพบรรยายกาศที่เราทำงานกัน ^^