CAT LoRa Starter Kit ตอนที่ 9 เปิด-ปิดควบคุมเครื่องใช้ไฟฟ้า ผ่านเครือข่าย LoRa IoT by CAT
สวัสดีครับ ในบทความนี้จะเป็นการนำโปรแกรมจากบทความที่แล้วมาเพิ่ม Relay Module เพื่อทำปลักไฟที่สามารถตั้งเวลาเปิด-ปิดได้จากเครือข่าย LoRa IoT by CAT
Relay Module คืออะไร ?
รีเลย์ คือ อุปกรณ์อิเล็กทรอนิกส์ที่ทำหน้าที่เป็นสวิตซ์ตัด-ต่อวงจร โดยการป้อนกระแสไฟฟ้าเข้าไปมีด้วยกันหลายชนิด แต่ในการพัฒนาโปรเจคของเรานี้เราจะใช้ Relay แบบที่ไม่ได้ดีเลิศนัก แต่ก็พอใช้งานได้ ราคาไม่แพง ถูกมาก ๆ โดยที่นิยมใช้จะมีด้วยกันสองชนิดคือ
1.General Relay — อุปกรณ์ที่ทำหน้าที่เป็นสวิตซ์ตัด-ต่อวงจร โดยใช้แม่เหล็กไฟฟ้า ซึ่งปกติถ้ามีการจ่ายไฟเข้าที่ตัวรีเลย์ (Relay) จะทำให้ขดลวดเหนี่ยวนำหน้าสัมผัสติดกัน จึงมีสถานะปิดวงจร (Closed Circuit) แต่ถ้าหากไม่มีการจ่ายไฟให้ รีเลย์ (Relay) ขดลวดเหนี่ยวนำหน้าสัมผัสไม่ติดกัน จะมีสถานะเปิดวงจร (Open Circuit) ข้อดีคือบำรุงรักษาง่าย ราคาไม่แพง ข้อเสียคือการตัด-ต่อแต่ละครั้งจะเกิดเสียงดัง เพราะเป็นการตัดต่อแบบอาศัยกลไกแมคคานิคในการทำงาน อีกทั้งหน้าสัมผัสของ Relay ค้าง และเสียง่าย
2.Solid State Relay (SSR) — หรือตัวย่อ SSR คืออุปกรณ์อิเล็กทรอนิกส์ที่ทำหน้าที่เป็นสวิตซ์ ที่ไม่ใช้หน้าสัมผัสในการตัด-ต่อวงจร โดยใช้เทคโนโลยีของ เซมิคอนดักเตอร์ (Semiconductor) ที่ไม่มีส่วนเคลื่อนที่ จึงไม่มีเสียงในขณะเวลาตัด-ต่อของหน้าสัมผัส (Contact) มีอายุการใช้งานยาวนาน แต่ข้อเสียคือเมื่อใช้งานต่อเนื่องนานๆ จะทำให้เกิดความร้อนขึ้นและพังได้
อุปกรณ์
- CAT LoRa Starter Kit จำนวน 1 บอร์ด
- DS3231 Module จำนวน 1 ชิ้น
- Red LED จำนวน 1 หลอด
- Green LED จำนวน 1 หลอด
- 330 ohm resistor จำนวน 2 อัน
- Relay Module (active low relay) แบบ 2 Channel ชนิด 5 โวลต์ จำนวน 1 อัน
- เต้าปลักไฟบ้านแบบ 2 ช่องแยกกัน จำนวน 1 อัน
- สายไฟ
การต่อวงจร
จากภาพจะเห็นว่าเรามีการดัดแปลงสาย micro usb เพื่อให้สามารถจ่ายไฟ 5 โวลต์ เข้าไปยัง Relay Module ได้ เพราะ CAT LoRa Starter Kit จ่ายไฟได้สูงสุดเพียง 3 โวลต์เท่านั้น
มีวิธีการจ่ายไฟ 5 โวลต์ อีกวิธีคือการใช้แหล่งจ่ายไฟภายนอกเช่น mobile adapter แล้วตัดสาย micro usb ออก แล้วสนใสสายแค่ 2 เส้น คือสายสีแดงเป็นขั้ว (+) และสายสีดำเป็นขั้ว (-) ส่วนสายสีขาวและเขียวให้ใช้เทปพันกันไว้เพื่อไม่ให้สายไฟพันกันจนซ็อต จากนั้นต่อสายไฟดังนี้
- GND ของ Relay → GND ของบอร์ด
- VCC ของ Relay → สายสีแดง (+)
- GND ของบอร์ด→ สายสีดำ (-)
เพียงเท่านี้เราก็จะใช้งาน Relay 5 โวลต์ได้
*** ถ้ามันยากไปแนะนำให้หาซื้อ Relay 3 โวลต์ จะทำให้เราสามารถนำมาต่อโดยตรงได้เลย 555+
Library ที่จำเป็น
- SmartEverything HTS221 : https://github.com/ameltech/sme-hts221-library
(เนื่องจากมีการใช้ CatLoRaS76S จากตอนที่ 4 ) - DS3231 Real-Time Clock : https://github.com/jarzebski/Arduino-DS3231
ออกแบบ Payload Format
ในบทความที่แล้วเราได้ออกแบบ Payload ให้ควบคุมหลอดไฟ LED เพียงหลอดเดียว ดังนั้นจึงใช้แค่ค่า StartDateTime และ StopDateTime เท่านั้นก็เพียงพอแล้ว แต่ในคราวนี้เราต้องควบคุม Relay จำนวน 2 ตัว เราจึงต้องเพิ่มส่วนที่บอกว่าเวลาที่ตั้งนี้เป็นของ Relay ตัวไหน โดยเราจะเพิ่ม Device type จำนวน 1 บิต นำหน้าเวลา ดังนี้
Payload (15 bit) = Device Type + StartDateTime + StopDateTime
Device Type (1 bit) : Relay A →
01
, Relay B →02
StartDateTime (7 bit) : 2020–01–24 12:10:59 →20200124121059
StopDateTime (7 bit) : 2020–01–24 14:30:00 →20200124143000
เขียนโปรแกรม
ทดลองส่งข้อมูล Downlink จาก LoRa by CAT
กำหนดให้
- Relay A เริ่มเปิดเวลา 2020–01–25 09:00:00 ถึง 2020–01–25 18:00:00
ดังนั้น Payload คือ012020012509000020200125180000
- Relay B เริ่มเปิดเวลา 2020–01–25 05:10:59 ถึง 2020–01–25 14:30:00
ดังนั้น Payload คือ022020012505105920200125143000
เราสามารถทดลองส่ง Payload มายัง Node ของเราได้ที่
Test Downlink : https://loraiot.cattelecom.com/portal/home/downlink
อธิบายการทำงาน
ในการเขียนโปรแกรมคราวนี้ผมได้นำโปรแกรมจากบทความที่แล้วมาดัดแปลงครับ โดยจะเปลี่ยนจากการควบคุมหลอดไฟมาเป็นการควบคุม Relay แทน ซึ่งผมได้สร้างไลบารารี่ RelayModule.h ขึ้นเพื่อใช้ควบคุมการเปิดและปิด Relay
content-catlora-lab8.ino
ฟังก์ชั่น setup() — เราจะสร้างออบเจ็ค relayA และ relayB จาก RelayModule Class ที่สร้างขึ้น ด้วยคำสั่ง
RelayModule relayA("Relay A", RELAY_A_PIN);
RelayModule relayB("Relay B", RELAY_B_PIN);
ทำการเปิดใช้งานและตั้งค่าการทำงานเบื้องต้นให้ Relay ทั้งสองตัวผ่านเมท็อด trunOnWhen(…);
String startTimeRelayA = "1970-01-01 00:00:01";
String stopTimeRelayA = "1970-01-01 00:00:01";String startTimeRelayB = "1970-01-01 00:00:01";
String stopTimeRelayB = "1970-01-01 00:00:01";RelayModule relayA("Relay A", RELAY_A_PIN);
RelayModule relayB("Relay B", RELAY_B_PIN);void setup(){ ...// Initialize Relay
relayA.begin();
relayB.begin();
relayA.trunOnWhen(startTimeRelayA, stopTimeRelayA);
relayB.trunOnWhen(startTimeRelayB, stopTimeRelayB); ...}
ฟังก์ชั่น loop() — จากเดิมเราเช็คค่าวันและเวลาเพื่อเปิดหลอดไฟสีเขียว แต่มาคราวนี้เราจะส่งวันที่และเวลาปัจจุบันไปเช็คกับออปเจ็ค relayA และ relayB ผ่านเมท็อด doAction(…);
void loop(){ ...// ----- Check datetime for action -----
relayA.doAction(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
relayB.doAction(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second); ...}
ฟังก์ชั่น loraReceive() — จะรับค่า Payload จาก Downling มาแตกข้อมูลออกเป็น DeviceType, StartDateTime และ StopDateTime ตาม Format ที่ได้ออกแบบไว้จากนั้นนำค่าที่ได้ไปตั้งค่าการทำงานให้แก่ Relay ตาม Device Type ที่ได้ผ่านเมท็อด doAction(…);
เพียงเท่านี้เราก็จะได้ ปลักไฟฟ้าที่สามารถตั้งเวลาเปิดปิดผ่านเครือข่าย LoRa IoT by CAT ครับ แต่จะสังเกตุเห็นว่าเราสามารถตั้งเวลาการเปิดปิดได้เพียงครั้งเดียวเท่านั้น เราควรจะปรับปรุงเพิ่มให้สามารถสั่งเปิดปิดได้ทันที และตั้งเวลาเปิดปิดแบบทวนซ้ำตามวันได้ตามใจ ซึ่งการจะทำแบบนี้ได้เราต้องออกแบบ Payload ให้รองรับด้วยครับ อีกทั้งเรายังไม่ได้กล่าวถึงในส่วนของการสร้าง Dashboard เพื่อที่เราจะได้ไม่ต้องมาจำ Payload Format เพื่อสั่งงานเพราะใครมันจะจำได้ละ เหอๆ … เอาไว้ในบทความท้าย ๆ ของซีรี่นี้ ผมจะมาสอนวิธีการสร้างครับ
ดาวน์โหลดไฟล์ตัวอย่าง
บทความนี้ก็ขอจบเพียงเท่านี้ครับ ในบทความหน้าจะเป็นการเพิ่มหน้าจอแสดงผลขนาดเล็กกันครับ