วันศุกร์ที่ 9 พฤษภาคม พ.ศ. 2557

มาเริ่มทำ Prototype ชุดการแสดงกัน :)

วันนี้ เรามีนัดการทำ 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
จะให้ผลลัพธ์ไฟสว่างน้อย

ภาพบรรยายกาศที่เราทำงานกัน ^^




ไม่มีความคิดเห็น:

แสดงความคิดเห็น