Publish : 17 March 2023
หัวข้อในบทความนี้ - เตรียมอุปกรณ์
- ออกแบบการทำงาน
- ออกแบบโปรแกรม
- สร้างอุปกรณ์ ในระหว่างที่นั่งคิดว่า เอ๊ะ เดือนนี้ทำโปรเจคอะไรดี เพราะโปรเจคเราก็เขียนไปแทบจะหมดแล้ว ก็เปิดร้านมา 6 - 7 ปี เราก็เขียนไปเยอะ โปรเจคที่เหลือก็ยาวและยาก ต้องเขียนกัน 2 - 3 ตอน มันก็ไม่เข้าคอนเซ็ปต์ของปีนี้ที่ว่า "เดือนละ 1 โปรเจค" ในขณะที่กำลังจะเริ่มปวดหัวก็หันไปเห็นเด็ก ๆ เล่นบอร์ดเกมส์ทอยลูกเต๋ากัน อ่าห๊ะ เขียนเรื่องลูกเต๋าอิเล็กทรอนิกส์ละกัน กดปุ่มสุ่มเลย ไม่ต้องทอยเตรียมอุปกรณ์ ในโปรเจคนี้ไม่มีอะไรซับซ้อน เพียงแค่ให้ Arduino รับค่าปุ่มเข้ามา เมื่อมีการกดปุ่มก็ขับหลอด LED ตามต้องการ โดยอุปกรณ์ที่ใช้มีดังนี้ - บอร์ดไมโครคอนโทรลเลอร์ ตัวอย่างนี้ใช้ Arduino UNO - Tactile Switch หรือสวิตช์กดติดปล่อยดับ ตัวอย่างนี้ใช้ Tact switch 4 ขา - หลอด LED สีใด ๆ จำนวน 7 หลอด ตัวอย่างนี้สมมติว่าใช้สีน้ำเงิน - ตัวต้านทาน 10k Ohm สำหรับใช้ Pull-down ปุ่มกด - ตัวต้านทานจำกัดกระแสของ LED ค่าตามการคำนวณของแต่ละสี ตัวอย่างนี้ใช้ค่าสำหรับสีน้ำเงิน คือ 330 Ohm - บอร์ดทดลอง (Protoboard)ออกแบบการทำงาน การออกแบบการทำงาน เราออกแบบได้เป็นขั้นตอนหลัก ๆ คือ การรับค่าปุ่มกด การประมวลผล(สุ่มเลข) และการแสดงผล ทีนี้การประมวลผลเนี่ยมันก็มีแค่โค้ดสุ่มเลขง่าย ๆ ที่เราเคยเขียนบทความไปแล้ว การแสดงผลก็ digitalWrite ให้หลอดไฟเปิดปิดตามปกติ แต่การรับค่านี่แหละมันจะมีแยกว่าปุ่มของเรามันเป็น Active HIGH หรือแบบ Active LOW ซึ่งมันขึ้นอยู่กับการออกแบบของเราเอง ในตัวอย่างนี้ขอออกแบบให้เป็น Active HIGH (กด=HIGH ปล่อย=LOW) ก็แล้วกันครับออกแบบโปรแกรม คอนเซ็ปต์โปรแกรมเรามีไว้ตั้งแต่ออกแบบการทำงานแล้ว คือรับค่าปุ่มกด>ประมวลผล>แสดงผล การอ่านค่าจากปุ่มก็ใช้ digitalRead ตามปกติ แต่การแสดงผลนั้น แต่ละหน้าเราจะแสดงแบบไหน ก็ต้องกลับไปดูหน้าของลูกเต๋ากันครับ
เราจึงต้องออกแบบ LED ให้มีแถวบน 3 หลอด ตรงกลาง 1 และด้านล่าง 3 เพื่อให้สามารถแสดงได้ครบ
จากรูปหน้าลูกเต๋า และตำแหน่งของ LED ที่เรียงไว้ เราจะแปลผลออกมาว่าลูกเต๋าออกหน้าไหน หลอดไหนจะติด (HIGH) หลอดไหนจะดับ (LOW) ดังนี้
หน้า |
LED 1 |
LED 2 |
LED 3 |
LED 4 |
LED 5 |
LED 6 |
LED 7 |
1 |
LOW |
LOW |
LOW |
LOW |
LOW |
LOW |
HIGH |
2 |
HIGH |
LOW |
LOW |
HIGH |
LOW |
LOW |
LOW |
3 |
HIGH |
LOW |
LOW |
HIGH |
LOW |
LOW |
HIGH |
4 |
HIGH |
LOW |
HIGH |
HIGH |
LOW |
HIGH |
LOW |
5 |
HIGH |
LOW |
HIGH |
HIGH |
LOW |
HIGH |
HIGH |
6 |
HIGH |
HIGH |
HIGH |
HIGH |
HIGH |
HIGH |
LOW |
เมื่อเราแก้ส่วนที่ยากที่สุดไปแล้ว การเช็คเงื่อนไขปุ่มกดและการสุ่มเลขก็ง่าย ๆ แล้วครับ จับทั้งหมดมารวมกัน ได้โค้ดทั้งหมดดังนี้
สร้างอุปกรณ์ เราจะสร้างอุปกรณ์โดยการเริ่มจากต่อวงจรสวิตช์แบบ Active HIGH กันก่อน จากนั้นเราจะสร้างหน้าลูกเต๋าขึ้นมาจากหลอด LED และตัวต้านทาน และเนื่องด้วยเราทดลองกันบนบอร์ดทดลอง LED หลอดที่ 7 ก็ต้องเยื้อง ๆ หน่อย ความสวยงามหายไปนิดนึง
หลังจากได้ทั้งสองส่วนแล้ว เราก็จับมันโยงมาหาศูนย์กลางคือ Arduino UNO โดยในตัวอย่างนี้จะต่อ LED ทั้ง 7 มายังขา D2 D3 D4 D5 D6 D7 D8 ตามลำดับ ส่วนปุ่มกดนั้นต่อเข้ากับขา 12
เท่านี้อุปกรณ์ของเราก็พร้อมที่จะใส่โปรแกรมลงไปแล้วครับ อัพโหลดโปรแกรมเสร็จแล้วทดลองใช้งานดู อาจเพิ่ม delay เล็กน้อยเพื่อหน่วงเวลาให้ลุ้นกันหน่อย (จริง ๆ บอร์ดมันประมวลผลเร็วและเสร็จเรียบร้อยหมดแล้วหล่ะครับ เราแค่หน่วงให้มีลูกเล่นนิดหน่อย)แนวทางพัฒนาต่อยอด โปรเจคนี้สามารถต่อยอดได้อีกเยอะมากครับ ไม่ว่าจะให้กดแล้วมีไฟวิ่งก่อนจะแสดงผล หรือสุ่มแสดงหน้าลูกเต๋าซัก 5 - 6 ค่า ก่อนจะค้างที่ค่าสุดท้าย หรือจะให้มีการพัก เมื่อไม่ได้กดเป็นระยะหนึ่งก็ให้ไฟวิ่งไปเรื่อย ๆ ไม่ต้องค้างที่หน้าลูกเต๋าก็ได้ หรือจะทำให้แสดงผลเป็นลูกเต๋าสองลูกก็ได้แล้วแต่แนวคิดเลย ส่วนใครที่พอจะเข้าใจเรื่อง array ก็สามารถใช้ร่วมกับ for loop เพื่อย่นโค้ดให้สั้นลงได้ (ถ้าใครอยากให้เขียนเรื่อง array ก็บอกได้นะครับ จะเขียนอธิบายให้ซักตอนเต็ม ๆ) เป็นไงบ้างสำหรับโปรเจคประจำเดือนนี้ เหมือนจะเป็นโปรเจคเล่น ๆ แต่ก็แฝงด้วยการคิดและออกแบบที่ค่อนข้างซับซ้อนเลยทีเดียว ลองทำเล่นกันดูนะครับ
หากท่านเห็นว่าบทความมีประโยชน์ต้องการสนับสนุนเป็นกำลังใจ เพียงแค่สั่งซื้อสินค้าจากร้านเรา หรือสนับสนุนค่ากาแฟให้เรานั่งเขียนบทความตามลิงค์ด้านล่างนี้