ตอนสาธิต ใจเย็นๆ อย่าตื่นเต้น แล้วเว้นช่วงระหว่างการกระทำให้พอดี โดยเฉพาะตอนที่ต้องรอรีเซ็ตแบบที่กำลังจะเห็นต่อไปนี้ มันทำงานยังไงล่ะ?
1. ทุกครั้งที่เปิดไฟเลี้ยงอุปกรณ์ (ต้องเปิดสวิตช์ทุกตัวในตำแหน่ง "ปิด" ก่อนเสมอนะ) มันจะเข้าสู่โหมดเรียนรู้ โดยเริ่มจาก LED ตัวที่ 1 ก่อน วางการ์ดสีตามลำดับที่ต้องการเลย ใช้สีหนึ่งสำหรับ LED และอีกสีสำหรับสวิตช์
เปิดสวิตช์ตามลำดับสีของ LED ตั้งแต่ตัวที่ 1 ไปจนถึงตัวที่ 4 เริ่มจากเปิดสวิตช์สีที่ตรงกับ LED ตัวที่ 1 ก่อน เช่น ถ้า LED ตัวที่ 1 เป็นการ์ดสีแดง ก็เปิดสวิตช์สีแดงก่อน ต่อไปก็ดูสีจาก LED ตัวที่ 2 แล้วเปิดสวิตช์สีเดียวกัน ไล่ไปตามลำดับที่ 3, 4 ตามสีที่วางไว้ มันจะเรียนรู้ตามลำดับ LED 1...4 เสมอ ณ ตอนนี้ปุ่มต่างๆ จะถูก "บันทึก" เรียบร้อยแล้ว แต่ละตัวจะสว่างขึ้นตามการ์ดสีที่ตรงกัน และเราสามารถปิดหรือเปิดมันตามลำดับไหนก็ได้ตามใจชอบ ถ้าสวิตช์หมายเลข 1 ถูกปิดเป็นตัวสุดท้าย และค้างไว้ในตำแหน่ง "ปิด" นาน 3 วินาทีขึ้นไป อุปกรณ์จะเข้าสู่กระบวนการเรียนรู้ใหม่อีกครั้ง ย้ายการ์ดสีไปเรียงลำดับใหม่ตามที่ต้องการ กระบวนการเรียนรู้ก็เริ่มต้นใหม่ ผู้ชมจะทึ่งที่เห็นไฟติดตามลำดับที่เปลี่ยนไป! สำหรับการแสดงที่ปังๆ ลองย้ายการ์ดสีทั้งที่ LED และสวิตช์ แล้วให้ผู้ชมเป็นคนจัดลำดับเองเลย จะได้เห็นความอัศจรรย์ที่สวิตช์สีไหนจะเปิดไฟสีนั้นได้ถูกต้อง แม้ลำดับจะสลับไปมา สุดยอดใช่ไหมล่ะ?
ก่อนจะไปทริคที่ 2 อย่าลืมปิดสวิตช์หมายเลข 3 (ตัวสุดท้าย) แล้วรอ 3 วินาทีขึ้นไปนะ ไปลุยทริคที่ 2 กัน!
2. ถ้าสวิตช์หมายเลข 3 ถูกปิดเป็นตัวสุดท้าย และค้างไว้ในตำแหน่งปิดนาน 3 วินาทีขึ้นไป อุปกรณ์จะเข้าสู่ทริคหมายเลข 2 ให้ค้างสวิตช์ตัวใดตัวหนึ่งในตำแหน่ง "ปิด" นาน 4 วินาทีขึ้นไป มันจะกลายเป็นไม่ทำงาน ชั่วคราว พอสลับกลับมาที่ตำแหน่ง "ปิด" อีกครั้งและรอ 4 วินาทีขึ้นไป มันก็จะกลับมาทำงานอีกครั้ง ข้อควรระวัง: ในขั้นตอนการสาธิตนี้ ต้องมีสวิตช์อย่างน้อย 1 ตัวอยู่ในตำแหน่ง "เปิด" เสมอนะ
ลองเปิด-ปิดสวิตช์สักสองสามรอบ ทิ้งสวิตช์ตัวใดตัวหนึ่ง (ตัวไหนก็ได้) ไว้ในตำแหน่ง "ปิด" และอีก 3 ตัวที่เหลืออยู่ในตำแหน่ง "เปิด" รอ 4 วินาทีขึ้นไป ในช่วงเวลานี้ให้ดึงการ์ดสีออก ไม่ว่าจะจากสวิตช์หรือจาก LED สีที่ตรงกัน จากนั้นให้สลับสวิตช์นั้นไปที่ตำแหน่ง "เปิด" ไฟ LED จะหยุดติด! ผู้ชมจะเห็นว่าถ้าสีหายไป ไฟก็จะไม่ติด อลังการใช่ไหม? มาดูต่อ: กลับไปปิดสวิตช์ตัวนั้นอีกครั้ง รอ 4 วินาทีขึ้นไป (ช่วงนี้ก็คุยกับผู้ชมไปพลางๆ) แล้วเอาการ์ดสีกลับไปวางที่เดิม พอเปิดสวิตช์ ไฟก็จะกลับมาติดอีกครั้งอย่างน่าอัศจรรย์! เอฟเฟกต์สุดปัง! ลองฝึกจนสามารถดับไฟได้ 3 ดวง โดยการปิดสวิตช์และเอาสีออกตามลำดับดู
ปิดสวิตช์ตัวสุดท้าย เอาสีออก ณ ตอนนี้จะไม่มี LED ตัวไหนติดเลย เปิดสวิตช์ทุกตัวกลับไปที่ตำแหน่ง "เปิด" แล้วไปต่อที่ทริคที่ 3 กันเลย!
3. ปิดสวิตช์ทั้ง 4 ตัวให้หมด รอ 5 วินาที แล้วเจ้าเครื่องจะล็อกลำดับ 1234 ให้เรียบร้อย! หลังจากนั้นน้องจะเปิดไฟ LED ตามลำดับไหนก็ได้ แต่ต้องใช้สวิตช์ที่ถูกกำหนดไว้ตรงหน้า LED นั้นเท่านั้นนะ ระหว่างนั้นก็อย่าลืมวางการ์ดสีของ LED กับสวิตช์ให้ตรงลำดับกันด้วย สีของ LED ตัวที่ 1 ต้องตรงกับสีของสวิตช์ตัวที่ 1, LED ตัวที่ 2 ตรงกับสวิตช์ตัวที่ 2, ... ไปเรื่อยๆ จนถึงตัวที่ 4
!!! ช่วงนี้นี่แหละที่น้องสามารถส่งกล่องให้คนดูเล่นได้เลย มันถูกล็อกแล้ว จะเข้าโหมดตั้งค่าใหม่ไม่ได้แล้ว ทำงานเหมือนวงจรธรรมดาๆ ตัวหนึ่งเลย
4. ถ้าอยากปลดล็อก ก็ทำได้ 3 วิธีจ้า: (1) ถอดแบตเตอรี่ออกเลย (2) กดสวิตช์หมายเลข 2 จากตำแหน่ง off/on ต่อเนื่องกัน 5 ครั้งขึ้นไป (โดยที่สวิตช์ตัวอื่นต้องอยู่ในตำแหน่ง off นะ) พอทำเสร็จเจ้าเครื่องก็จะกลับมาอยู่ในโหมดเรียนรู้ลำดับสวิตช์อีกครั้ง
แผนผังวงจร (Schematic Diagram):
วงจรนี้เรียบง่ายมาก ไม่ต้องอธิบายอะไรมาก แค่จ่ายไฟ 6...12 โวลต์เข้าไปที่ขา Vin ของบอร์ด Arduino ก็พอ
ระวังลำดับการต่อ LED กับสวิตช์ให้ดีนะ

ส่วนประกอบและการประกอบ (Mechanical Construction)
พี่ประกอบทุกอย่างลงในกล่องพลาสติก เจาะรูสำหรับ LED 4 ดวงและสวิตช์ 4 ตัว แน่นอนว่าต้องซ่อนข้างในกล่องไม่ให้คนดูเห็นนะ น้องจะดัดแปลงยังไงก็ได้ เช่น เปลี่ยนจาก LED เป็นหลอดไฟแล้วทาสีเอง หรือจะย้ายหลอดไฟแทนการย้ายกระดาษสีก็ได้ ตอนแรกพี่ใช้ท่อหดสีสวมบนคันสวิตช์ แต่มันใช้งานยากไป เลยเปลี่ยนมาใช้กระดาษสีแทน สะดวกดี




ลงลึกรายละเอียดทางเทคนิค (EXPANDED TECHNICAL DETAILS)
โปรเจกต์นี้มักถูกจัดอยู่ในหมวด "วิศวกรรมเพื่อความบันเทิง" หรือ "เครื่องจักรไร้ประโยชน์" มันคือกลไกแอนิเมทรอนิกส์ที่สร้างมุกตลก โดยอาศัยการรับอินพุตจากไมโครสวิตช์ที่แม่นยำและลอจิกที่อิงตามสถานะ (state-based logic) ความมหัศจรรย์ของมันไม่ได้อยู่ที่การแก้ปัญหา แต่คือการสร้างปฏิสัมพันธ์ที่ทั้งน่าประหลาดใจและฮาได้นั่นเอง จัดไปวัยรุ่น!
กลไกหลักและระบบลับที่ซ่อนอยู่
Arduino ทำหน้าที่เป็นสมอง คอยเฝ้าดูสถานะของสวิตช์ทั้งสี่ตัวตลอดเวลา มันไม่ได้แค่ตอบสนองต่อสัญญาณเปิด/ปิดธรรมดาๆ แต่ยังติดตามลำดับ, เวลา, และขั้นตอนการทำงาน เพื่อตัดสินใจว่าจะเปิดโหมด "กล" อะไร
- การออกแบบ State Machine: โค้ดถูกสร้างขึ้นบนพื้นฐานของ state machine มันจะมีสถานะที่ชัดเจน (เช่น "โหมดเรียนรู้", "โหมดกลที่ 2", "โหมดล็อค") การเปลี่ยนระหว่างสถานะเหล่านี้จะถูกกระตุ้นโดยลำดับการกดสวิตช์และการกดค้างตามเวลาที่กำหนด ตามที่อธิบายไว้ในขั้นตอนด้านบน
- การปรับสัญญาณอินพุต: Arduino ใช้ฟังก์ชัน debouncing เพื่อให้แน่ใจว่าการสั่นไหวทางกลของสวิตช์ตอนถูกกด จะถูกอ่านเป็นเพียงการกดครั้งเดียวที่สะอาดตา ฟังก์ชัน
millis()ถูกใช้สำหรับการทำงานเกี่ยวกับเวลาทั้งหมด (กดค้าง 3 วินาที, รอ 4 วินาที, ล็อค 5 วินาที) ทำให้การทำงานไม่บล็อกและน่าเชื่อถือ - การควบคุมเอาต์พุต: LED ถูกขับโดยพินดิจิตอลของ Arduino น่าจะผ่านตัวต้านทาน (Resistor) จำกัดกระแสตามที่เห็นในแผนภาพ ตรรกะจะกำหนดว่า LED ตัวไหนควรสอดคล้องกับสวิตช์ตัวไหน ตามการตั้งค่าที่เรียนรู้หรือถูกล็อคไว้
การเพิ่ม "บุคลิก" ให้กับโค้ด
แม้กล่องนี้จะใช้ LED แต่หลักการเพิ่มบุคลิกที่คาดเดาไม่ได้คือจุดเด่นของเครื่องจักรตลกๆ นะครับ สามารถทำได้ผ่านฟังก์ชัน random() และการควบคุมเซอร์โวที่ซับซ้อนขึ้น ลองจินตนาการเวอร์ชันที่:
- ปฏิกิริยาแบบที่ 1: LED ตัวที่ตรงกันติดสว่างทันที
- ปฏิกิริยาแบบที่ 2: LED กะพริบแบบลังเลสองสามที ก่อนจะค้างสว่าง
- ปฏิกิริยาแบบที่ 3: LED ทั้งหมดวิ่งไล่กันกะพริบก่อน แล้วตัวที่ถูกถึงจะสว่าง
- ปฏิกิริยาแบบที่ 4: มีเซอร์โวตัวจิ๋วในกล่องเคาะฝากล่องแบบรำคาญก่อน แล้ว LED ถึงจะติด
ส่วนประกอบและข้อควรรู้ตอนประกอบ
- Arduino Nano: ขนาดเล็กกำลังดี เหมาะจะซ่อนในกล่อง
- สวิตช์แบบ Toggle (x4): ใช้สวิตช์แบบ SPDT (Single Pole, Double Throw) เพื่อให้สัญญาณ ON/OFF ที่ชัดเจน
- LED (x4) พร้อมตัวต้านทาน: ตัวต้านทาน (Resistor) จำกัดกระแส (เช่น 220Ω) สำคัญมากเพื่อปกป้องทั้ง LED และพินของ Arduino ตามที่เห็นในแผนภาพ ห้ามช็อตนะตัวนี้!
- แหล่งจ่ายไฟ: ใช้แบตเตอรี่ 6...12V ต่อกับขา Vin เพื่อให้เรกูเลเตอร์บนบอร์ดจ่ายไฟ 5V ที่เสถียรให้วงจร
- กล่อง: ตามที่เห็นในรูปประกอบ ใช้กล่องพลาสติกหรือไม้เพื่อซ่อนอิเล็กทรอนิกส์ ช่วยเพิ่มเอฟเฟกต์ "เวทมนตร์" การเจาะรูสวิตช์และ LED ให้สะอาดเรียบร้อยเป็นสิ่งสำคัญเพื่อให้ดูโปร จัดไปวัยรุ่น!
โค้ดนี้ใช้ส่วนประกอบดิจิตอล, ไทเมอร์, ฟลิปฟล็อป, เกตลอจิก, และเคาน์เตอร์เยอะอยู่ ส่วนประกอบโค้ดเหล่านี้ใน Visuino หรือฟังก์ชันเทียบเท่าใน Arduino IDE (เช่น millis(), digitalRead(), และ digitalWrite()) นี่แหละที่พิมพ์วิธีการแสดงกลทั้ง 4 ของกล่องวิเศษออกมา
โค้ดนี้คอมไพล์ในโปรแกรม Visuino แต่คุณสามารถหาโค้ดในรูปแบบ Arduino IDE และ Visuino ได้ในไฟล์แนบ ถ้าจะใช้ Arduino IDE ให้คัดลอกโฟลเดอร์ "Mitov" ไปไว้ในโฟลเดอร์ไลบรารีของ Arduino ในคอมพิวเตอร์คุณ
โค้ดนี้มีส่วนประกอบดิจิทัลเพียบเลยจ้า ทั้งตัวจับเวลา (Timer), ฟลิปฟล็อป, เกตลอจิก, เคาน์เตอร์ ตัวโค้ดพวกนี้แหละที่พิมพ์วิธีการทำงานของกล่องมายากล 4 ท่าให้เราเห็น
เอาโค้ดไปโหลดใน Visuino หรือ Arduino IDE เลือกพอร์ตให้ถูก แล้วอัพโหลดลงบอร์ด Arduino ได้เลย
ไฟล์ทั้งหมดที่ต้องใช้ในโปรเจคนี้
ถ้ามีคำถามอะไร ถามมาในคอมเมนต์ได้เลยจ้า ดูวิดีโอประกอบจะเข้าใจหลักการทำงานง่ายขึ้นเยอะ!!!