Introduction:
เจ้า Smart Heater ที่ทำด้วย Arduino IoT Cloud เนี่ย ควบคุมด้วย Amazon Alexa ผ่าน Arduino Alexa skill ได้เลยนะ เราใช้รีเลย์ (Relay) ไป "แฮก" ปุ่มบนรีโมท (ใช้รีเลย์เพราะอยากใช้บอร์ด MKR IoT Carrier น่ะ) แต่จะใช้ opto-isolator/optocoupler แทนก็ได้เหมือนกัน โครงการนี้ใช้ Arduino IoT Cloud ในการคุยกับอุปกรณ์ Amazon Alexa ด้านล่างนี้พี่จะสอนวิธีสร้างและปรับใช้โครงการนี้ให้ดู พี่พบว่าการตั้งดีเลย์ (delay) ไว้ที่ 100 มิลลิวินาที ทำงานได้ดีสุดสำหรับการกระตุ้นรีเลย์ มันไม่เร็วเกินไปจนรีเลย์ไหม้ และรีโมทก็รับสัญญาณได้ทัน
IoT Retrofitting: The Alexa-Enabled Heater
Fully Alexa Controlled Smart Heater เนี่ยคือ "ฮาร์ดแวร์แฮก" ระดับโปร ที่พาเครื่องใช้ไฟฟ้าเก่าๆ มาอยู่ในยุคควบคุมด้วยเสียงได้เลย แทนที่จะใช้สมาร์ทปลั๊กทั่วๆ ไป (ที่แค่จ่ายไฟได้แต่ปรับการตั้งค่าเครื่องทำความร้อนแบบเจาะจงไม่ได้) โครงการนี้ใช้ Arduino Oplà IoT Kit ในการจำลองการกดปุ่มบนรีโมทเครื่องทำความร้อนจริงๆ เลย ทำให้เราควบคุม โหมดความร้อน, การตั้งเวลา และ สถานะการเปิด/ปิด ได้หมดผ่านคำสั่งเสียงไปหา Amazon Alexa เลย งานนี้จัดไปวัยรุ่น!
The Engineering "Hack": Relay Simulation
หัวใจของโครงการนี้คือการเชื่อมต่อระหว่าง MKR IoT Carrier กับวงจรของเครื่องทำความร้อน:
- Direct Button Interfacing: เราใช้การบัดกรีสายไฟเล็กๆ เข้ากับขาทแยงของสวิตช์แบบกดค้าง (momentary switch) บนรีโมท เพื่อเข้าถึงลอจิกของเครื่องทำความร้อนทางไฟฟ้า
- The Relay Bridge: สายไฟพวกนั้นก็จะถูกต่อเข้ากับขา COM (Common) และ NC (Normally Closed) ของรีเลย์ที่ติดมากับบอร์ด Oplà
- Timing Logic: เราตั้งโปรแกรม Arduino ให้ "ปั๊ม" สัญญาณไปที่รีเลย์เป็นเวลา 100ms พอดี วิธีนี้จำลองการกดปุ่มด้วยนิ้วมนุษย์ได้เป๊ะมาก กดให้รีโมทส่งสัญญาณได้โดยที่รีเลย์ไม่ไหม้ และเครื่องก็รับอินพุตได้ทัน ห้ามช็อตนะตัวนี้!
Project Tutorial:
Step 1, Configuring IoT Cloud:
เพิ่มตัวแปรเหล่านี้ลงใน IoT Cloud (ตัวแปรทั้งหมดจะปรากฏเป็น "devices" ใน Alexa แต่มันไม่จำเป็นต้องเป็นแบบนั้นเสมอไป) น้องอาจต้องปรับให้เหมาะกับความต้องการและแก้โค้ดด้วย:
- Variable name: Heater, Variable type: Cloud Switch (Alexa Compatible), Variable Update Policy: On Change, Purpose: ใช้ตัวแปรนี้เปิด-ปิดเครื่องทำความร้อน
- Variable name: high_power_mode, Variable type: Cloud Switch (Alexa Compatible), Variable Update Policy: On Change, Purpose: ใช้ตัวแปรนี้สลับโหมดความร้อนสูง
- Variable name: low_power_mode, Variable type: Cloud Switch (Alexa Compatible), Variable Update Policy: On Change, Purpose: ใช้ตัวแปรนี้สลับโหมดความร้อนต่ำ
เครื่องทำความร้อนของพี่มีสวิตช์แบบสลับ (toggle) นะ น้องอาจต้องปรับวิธีนี้สำหรับรีโมทแบบอื่นๆ
Cloud Integration: Alexa Compatibility
ซอฟต์แวร์ของเราอยู่บน Arduino IoT Cloud ใช้ตัวแปรที่ตั้งค่าให้ Alexa รู้จักได้ทันที:
- Cloud Switches: สร้างสวิตช์หลักสามตัว: "Heater," "High Power Mode," และ "Low Power Mode."
- Naming Constraints: มีเคล็ดลับสำคัญที่พบในโครงการนี้คือ Alexa มันไม่เข้าใจเครื่องหมายขีดล่าง (_) ต้องไปเปลี่ยนชื่อตัวแปรในแอป Alexa ใหม่ (เช่น จาก
high_power_modeเป็น "High Power Mode") คำสั่งเสียงถึงจะทำงานได้ปกติ จำไว้ให้ดี สู้งานนะน้อง!
ขั้นตอนที่ 2, ลงมือเดินวงจร:
พอแกะรีโมทออกมา บอร์ดข้างในอาจจะเป็นปุ่มกดแบบ momentary switch แบบของพี่ หรืออาจจะเป็นลายทองแดงแบบง่ามๆ ที่เวลากดปุ่ม วัสดุนำไฟฟ้าด้านหลังปุ่มจะมาต่อวงจรให้ - ถ้าเป็นแบบแรก: เอาแร่มาบัดกรีสายไฟสองเส้นที่ขาปุ่มสองขาที่อยู่ตรงข้ามกัน (diagonal) - ถ้าเป็นแบบสอง: บัดกรีสายไฟสองเส้นที่ปลายทั้งสองข้างของลายทองแดงง่ามๆ นั้น จากนั้น เอาเส้นนึงไปเสียบที่ขา COM (common) บนขารีเลย์ของ Arduino Opla มันจะล็อกเอง แล้วเอาเส้นที่สองไปเสียบที่ขา NC (normally closed) มันก็จะล็อกเหมือนกัน วิธีนี้จะทำให้เราสามารถต่อ-ตัดวงจรของปุ่มรีโมทได้ สำหรับใครที่ยังไม่รู้ว่ารีเลย์ทำงานยังไง มันใช้แม่เหล็กไฟฟ้าดึงให้ขา COM ไปต่อกับขา NC หรือ NO แบบกลไกนั่นเอง
ขั้นตอนที่ 3, เขียนโค้ดลง Arduino:
ข้อสำคัญนะเว้ย: ในโค้ดจะมีกลไกสำหรับตรวจจับเวลาตัวแปรเปลี่ยนค่า แล้วก็จะเห็นว่ามีฟังก์ชันที่ Arduino IoT Cloud สร้างให้อัตโนมัติชื่อ On[ชื่อตัวแปร]Change สาเหตุที่เราไม่ใช้ฟังก์ชันนั้นเพราะสำหรับตัวแปรที่เข้ากับ Alexa แล้ว มันจะไม่เรียกฟังก์ชันตอนที่ค่าตัวแปร "เปลี่ยน" เท่านั้นนะ แต่จะเรียกทุกครั้งที่มีคำสั่งไปหา Alexa ที่เกี่ยวกับตัวแปรนั้นเลย ซึ่งมันสร้างปัญหาให้เราเพราะฮีตเตอร์เราใช้สวิตช์แบบ toggle ถ้าผู้ใช้สั่ง Alexa ซ้ำสองครั้งโค้ดเราจะรวนทันที
นอกจากจุดนั้นโค้ดก็อ่านแล้วเข้าใจได้ไม่ยาก แต่เรายังต้องใช้ฟังก์ชันที่ Cloud สร้างให้สำหรับการสลับค่าโหมด Low power กับ High power อยู่ ตัวอย่างเช่น พอเปิดโหมด High power โหมด Low power ก็จะถูกปิดอัตโนมัติ โค้ดยังใช้หน้าจอของ Arduino Opla แสดงสถานะให้ดูอีกด้วย
ขั้นตอนที่ 4, ตั้งค่า Amazon Alexa:
ขั้นตอนนี้ต้องใช้แอป Amazon Alexa และ (แน่นอน) อุปกรณ์ Amazon Alexa ด้วย เปิดแอปเข้าไปที่ส่วน Skills แล้วติดตั้ง Arduino skill จากนั้นเข้าไปที่ส่วน Devices เลื่อนลงไปแล้วกด YOUR SMART HOME SKILLS แล้วกด Enable to use จากนั้นให้ค้นหาอุปกรณ์สมาร์ทโฮม จะมีสามตัวโผล่มา (heater, low_power_mode และ high_power_mode) ตั้งค่า heater เป็น off และ mode เป็นโหมดที่ฮีตเตอร์ของคุณเป็นตอนเปิดเครื่องครั้งแรก
ฟังนี่ให้ดี: Alexa มันไม่เข้าใจ underscore (_) นะเว้ย! ต้องไปเปลี่ยนชื่อ "อุปกรณ์" high_power_mode กับ low_power_mode เป็น high power mode กับ low power mode โดยแทนที่ underscore ด้วยช่องว่างธรรมดา
ความปลอดภัยและการใช้งาน
เนื่องจากเรากำลังเล่นกับเครื่องใช้ไฟฟ้ากำลังสูงอย่างฮีตเตอร์ การสร้างชิ้นงานนี้จึงมีข้อควรระวังด้านความปลอดภัยสำคัญ:
- การชดเชยตอนบูตเครื่อง: รีเลย์บน MKR Carrier อาจจะเปิดปิดตอนอัปโหลดเฟิร์มแวร์ใหม่ ต้องรอให้ระบบทำงานเสถียรสนิทก่อน ค่อยเสียบปลั๊กฮีตเตอร์เข้ากับเต้ารับหลัก
- แสดงสถานะ: หน้าจอ OLED วงกลมบน Oplà ถูกโปรแกรมให้แสดงสถานะแบบเรียลไทม์ เป็นเหมือน "แดชบอร์ด" ทางกายภาพที่ยืนยันว่าคำสั่ง Alexa ของคุณทำงานสำเร็จหรือยัง
ขั้นตอนที่ 5, วิธีใช้และตั้งค่า (ของสำคัญ):
ใส่แบตเตอรี่ในรีโมท (แต่ยังอย่าเพิ่งเสียบฮีตเตอร์นะ เพราะรีเลย์บน MKR IoT Carrier มักจะเปิดปิดตอนสตาร์ทและอัปโหลด) แล้วเปิด Arduino ทิ้งไว้ รอจนกว่ารีเลย์จะหยุดกระพริบและ Arduino ชดเชยการเปลี่ยนแปลงต่างๆ ที่เกิดตอนเครื่องปิดไปแล้ว ค่อยเสียบปลั๊กฮีตเตอร์ อุปกรณ์นี้ถูกออกแบบมาให้เปิดทิ้งไว้ตลอด แต่ถ้าจะปิดเครื่องสักพัก ต้องแน่ใจว่าฮีตเตอร์ปิดแล้ว และโหมดถูกตั้งค่าเป็นค่าเริ่มต้นของฮีตเตอร์ตอนเปิดเครื่อง อย่าไปเปลี่ยนค่าตัวแปรตอนที่อุปกรณ์ปิดอยู่
เรียบร้อยแล้ววว! มาบอกพี่ในคอมเมนต์หน่อยว่าน้องคิดยังไงกับโปรเจกต์นี้
โปรเจกต์นี้เป็นตัวอย่างชั้นเลิศเลยว่าเหล่า makers อย่างเราจะเชื่อมโลกของฮาร์ดแวร์ "รุ่นเก่า" เข้ากับระบบ IoT "รุ่นใหม่" ได้ยังไง สร้างบ้านให้มันฉลาดและเชื่อมโยงกันไปหมดเลย งานนี้จัดไปวัยรุ่น!