ไอเดียเบื้องหลังโปรเจค
มีโปรเจคเยอะแยะที่ใช้ Arduino เปิดปิดอุปกรณ์ไฟฟ้า (พร้อมวงจรที่วาดซับซ้อนมาก) แต่กลับไม่มีใครบอกเลยว่าจะควบคุมอุปกรณ์ไฟฟ้าผ่านเว็บหรือมือถือยังไง (ด้วยวงจรง่ายๆ) และถ้ามีวิธีทำ มันก็ยาวและน่าเบื่อสุดๆ เลยต้องมีใครสักคนก้าวยาวสักก้าว ผมเลยตัดสินใจก้าวยาวก่อนเพื่อลดความลำบากของคนอื่นนั่นเอง
เพื่อให้สำเร็จ ผมเลยสร้างแพลตฟอร์มเว็บกลางขึ้นมา ที่จะทำให้คุณควบคุมอุปกรณ์อะไรก็ได้ด้วยขั้นตอนง่ายๆ โดยไม่ต้องเขียนโปรแกรมอะไรนอกจากโค้ด Arduino และแค่ทำงานกับรีเลย์เท่านั้น นี่แหละคือไอเดียหลักเบื้องหลังโปรเจคเจ๋งๆ นี้ มันเป็นหนึ่งในตัวอย่าง DIY ที่ใครๆ ก็ทำตามได้ง่ายๆ และใช้งบไม่เกิน 5 ดอลลาร์ เพราะใช้แค่รีเลย์ 5V กับสายไฟ/ปลั๊กนิดหน่อย
มันทำงานยังไง?
เราได้สร้างแพลตฟอร์มเว็บที่เปิดให้ใช้ฟรี โดยคุณสามารถจัดการอุปกรณ์ไฟฟ้าหรือทำให้เครื่องใช้ในบ้านอัตโนมัติได้ง่ายมากๆ มันเป็นอุปกรณ์ที่มีประโยชน์สุดๆ สมมติคุณออกจากบ้านแล้วลืมเปิด/ปิดเครื่องใช้ไฟฟ้า ไม่ต้องกังวลไป เพราะคุณสามารถควบคุมมันจากมือถือหรือคอมได้เลยผ่านหน้าเว็บไซต์
การใช้งานโปรเจคนี้ คุณแค่ต้องคัดลอกและวาง โค้ด Arduino ที่อ่านค่าอินพุตจาก Serial ของ Processing และควบคุมรีเลย์เพื่อช่วยเปิด/ปิด อุปกรณ์ไฟฟ้า
ตอนนี้คุณอาจสงสัยว่า รีเลย์ และ โปรแกรม Arduino ทำงานยังไง แล้ว Processing เกี่ยวอะไรด้วย? มาหาคำตอบกันทีละขั้นตอนดีกว่า
กลไกการทำงานแบ่งออกเป็น 3 ส่วนหลัก:
- เว็บ/มือถืออินเทอร์เฟซ: ผู้ใช้กดปุ่มบนหน้าเว็บเพื่อเปลี่ยนสถานะ (เปิด/ปิด)
- Processing (สะพานเชื่อม): โปรแกรม Processing ที่รันบนคอมพิวเตอร์ ทำหน้าที่เป็น "บุรุษไปรษณีย์" ดึงข้อมูลจาก API ของเว็บไซต์ แล้วส่งสถานะนั้นไปยัง Arduino ผ่านพอร์ต Serial (พอร์ต USB)
- Arduino & รีเลย์: รับคำสั่งจาก Processing และสั่งการให้รีเลย์ตัดหรือเชื่อมต่อวงจรไฟฟ้าแรงสูง
รีเลย์ทำงานยังไง: หัวใจของการควบคุมไฟฟ้าแรงสูง
สำหรับมือใหม่ที่สงสัยว่า Arduino 5V จะควบคุมไฟฟ้าบ้าน 220V ได้ยังไง คำตอบคือ รีเลย์ นั่นเอง
รีเลย์คือสวิตช์แม่เหล็กไฟฟ้าที่แยกส่วนควบคุม (แรงดันต่ำ) ออกจากส่วนจ่ายไฟ (แรงดันสูง) อย่างปลอดภัย มันมีขาสำคัญๆ ดังนี้:
- COM (ขาร่วม): จุดเชื่อมต่อกลางที่รับไฟจากแหล่งจ่ายหลัก
- NO (ปกติเปิด): ในสถานะปกติ วงจรจะ "เปิด" (ไฟดับ) เมื่อได้รับคำสั่งจาก Arduino รีเลย์จะดึงหน้าสัมผัสมาเชื่อมกับ COM ทำให้วงจรปิดและไฟติด (เราจะใช้ขานี้เป็นหลัก)
- NC (ปกติปิด): ในสถานะปกติ วงจรจะ "ปิด" (ไฟติดตลอด) และจะตัดไฟเมื่อได้รับคำสั่ง ทำงานตรงข้ามกับ NO
การทำงานของรีเลย์: (ถ้ารู้แล้วข้ามไปได้เลยจ้า)
จะใช้รีเลย์ควบคุมไฟ AC ยังไง? AC คือกระแสสลับ 220V (ของอินเดีย) ที่ใช้จ่ายไฟให้หลอดไฟ Arduino ควบคุมแรงดันและกระแสสูงไม่ได้ แต่รีเลย์ทำได้ นั่นคือหน้าที่ของมันเลย ดังนั้นเราจึงใช้รีเลย์เป็นสวิตช์เพื่อควบคุมอุปกรณ์ไฟฟ้ากำลังสูง NO, NC และ COM ในรีเลย์คืออะไร?
- COM = ขาร่วม (Common Connection)
- NC = ขาปกติปิด (Normally Closed Connection)
- NO = ขาปกติเปิด (Normally Open Connection)
ผมอธิบาย NO, NC และ COM ไว้ละเอียดด้านล่างแล้ว ดูได้ถ้ายังงงๆ อยู่ เราจะใช้ขา NO (ปกติเปิด) เป็นหลัก
COM - ขาร่วม มันคือขากลาง เป็นขาที่ "ร้อน" เพราะไฟที่จะจ่ายให้โหลด (อุปกรณ์ไฟฟ้า) ต่ออยู่ที่ขานี้
NO (ปกติเปิด) - มันทำหน้าที่เหมือนสวิตช์ เนื่องจากมัน "เปิด" อยู่ จะไม่มีการสัมผัสระหว่าง COM กับ NO เมื่อเราทริกเกอร์โมดูลรีเลย์ (สั่งงาน) มันจะเชื่อมต่อกับ COM ผ่านแม่เหล็กไฟฟ้าภายในรีเลย์ และจ่ายไฟให้โหลดได้ ทำให้ไฟติด วงจรก็จะปิดอยู่จนกว่าเราจะสั่งให้รีเลย์กลับไปสถานะ Low (ไม่ทำงาน)
NC (Normally Closed - ปิดตามปกติ) - มันจะต่อกับ COM ตลอดเวลา แม้รีเลย์จะยังไม่ได้ไฟเลี้ยง พอเราทริกรีเลย์มันก็จะเปิดวงจร ทำให้การเชื่อมต่อหายไป ทำงานตรงข้ามกับ NO แบบเป๊ะๆ
การโปรแกรมและวงจร
ฝั่ง Arduino:
เราใช้ Arduino อ่านข้อมูลจากพอร์ตอนุกรมที่ส่งมาจากโปรแกรม Processing แล้วก็เขียนข้อมูลลงพอร์ตอนุกรมเพื่อสั่งเปิด/ปิด รีเลย์ หรือวงจรที่เราต่อไว้ อย่างที่เห็นในโค้ดด้านล่าง เราอ่านข้อมูลจากพอร์ตอนุกรม (ที่มาจาก Processing) แล้วเอามาเช็คว่า ถ้าได้ "1" ก็สั่งเปิดรีเลย์ ถ้าได้ "0" ก็สั่งปิดรีเลย์ หลักการทำงานของรีเลย์เดี๋ยวเราค่อยว่ากัน
วิเคราะห์ Logic จากโค้ดต้นฉบับ:
//บางส่วนของโค้ดจริง
if(Serial.available()>0){ //อ่านข้อมูลจาก Serial
readSerial = Serial.read();
delay(100);
if(readSerial == '1'){ //ถ้าได้ '1' ก็เปิดรีเลย์
digitalWrite(RELAY1,HIGH);
}
if(readSerial == '0'){ //ถ้าได้ '0' ก็ปิดรีเลย์
digitalWrite(RELAY1,LOW);;
}
}
ฝั่ง Processing:
โค้ด Processing เนี่ยคือหัวใจของโปรเจคเราเลย มันทำหน้าที่สื่อสารระหว่างสองฝั่งคือ เว็บแอปพลิเคชันกับ Arduino ให้นึกภาพมันเหมือนสะพาน หรือเหมือนบุรุษไปรษณีย์สมัยก่อนที่คอยรับจดหมายจากตู้แล้วส่งไปตามที่อยู่ ในที่นี้ Processing จะเรียก API ที่เราสร้างขึ้นมา
(เว็บไซต์ที่ใช้นี้เป็นแค่ตัวอย่างนะ) โดยการเรียก API ผ่านซอฟต์แวร์ Processing เราจะได้สถานะปัจจุบันของสวิตช์มา จากนั้นเราก็อ่านค่าใน Processing แล้วส่งต่อไปยังโปรแกรม Arduino ตามที่คุยกันไว้ สุดท้าย Arduino ก็จะเขียนค่าลงบอร์ด
ฝั่งเว็บ/มือถือ: สำหรับการเข้าถึงเว็บ เราใช้แพลตฟอร์ม gadget programmers
วงจร: ตามที่แสดงในไดอะแกรม
- ต่อขา 7 ของ Arduino ไปที่ขา IN1 ของรีเลย์
- ต่อขา 5V ของ Arduino ไปที่ขา Vcc ของรีเลย์
- ต่อสายไฟบ้าน (AC) ข้างหนึ่งไปที่ขา Common (COM) ของรีเลย์ (ขาตรงกลาง)
- ต่อขาหนึ่งของหลอดไฟ (Bulb) ไปที่ขา NC ของรีเลย์
- ต่อสายไฟที่เหลือจากหลอดไฟ และสายไฟที่เหลือจากไฟบ้าน อีกด้านหนึ่งเข้าสู่แหล่งจ่ายไฟ AC หลัก
แผนภาพวงจร เพื่อให้ระบบทำงานถูกต้อง ให้ต่อส่วนประกอบต่างๆ ดังนี้:
- ต่อ ขา 7 ของ Arduino ไปที่ขา IN1 ของโมดูลรีเลย์
- ต่อ 5V และ GND ของ Arduino ไปที่ VCC และ GND ของรีเลย์
- ด้านแรงดันสูง (AC):
- ตัดสายไฟบ้านเส้นหนึ่ง (เช่น สาย Line) แล้วต่อปลายด้านหนึ่งเข้ากับขา COM (ขาตรงกลาง) ของรีเลย์
- ต่อปลายอีกด้านของสายนั้น ซึ่งจะไปยังหลอดไฟ เข้ากับขา NO (Normally Open) ของรีเลย์
- ต่อสายไฟที่เหลือจากแหล่งจ่ายไฟ ตรงไปยังหลอดไฟอีกขา
ขั้นตอนรันโปรเจค
- ก็อปปี้โค้ด Arduino ที่ให้ไว้ไปวางใน Arduino editor ซะ
- อัพโหลดโค้ดลงบอร์ด Arduino ให้เรียบร้อย
- ดาวน์โหลดไฟล์ zip ของ Processing แล้วเลือกไฟล์ที่ตรงกับระบบปฏิบัติการ (OS) ของน้อง
- ตอนนี้ก็รันไฟล์ exe (สำหรับ Windows) จาก zip ของ Processing ที่ตรงกับ OS ของน้องเลย
- เปิดเว็บเบราว์เซอร์ขึ้นมา
กดปุ่มเพื่อเปิด-ปิดไฟได้เลยจ้า
คำปิดท้าย
เย่! ถ้าทุกอย่างราบรื่น น้องจะเห็นไฟทำงานตามที่สั่งเลย สุดยอดไปเลย! ถ้าน้องทำตามขั้นตอนทั้งหมดนี้ น้องก็จะสามารถเปลี่ยนบ้านธรรมดาๆ ให้กลายเป็น Smart Home ด้วยงบน้อยและวงจรไม่ซับซ้อนได้แล้ว
ขอบคุณที่สละเวลาอ่านกันนะครับ ถ้ามีคำถามอะไรก็ตะโกนถามมาในคอมเมนต์ได้เลย อย่าเกรงใจ