CAT LoRa Starter Kit ตอนที่ 9 เปิด-ปิดควบคุมเครื่องใช้ไฟฟ้า ผ่านเครือข่าย LoRa IoT by CAT

Choonewza
4 min readJan 25, 2020

สวัสดีครับ ในบทความนี้จะเป็นการนำโปรแกรมจากบทความที่แล้วมาเพิ่ม Relay Module เพื่อทำปลักไฟที่สามารถตั้งเวลาเปิด-ปิดได้จากเครือข่าย LoRa IoT by CAT

Relay Module คืออะไร ?

รีเลย์ คือ อุปกรณ์อิเล็กทรอนิกส์ที่ทำหน้าที่เป็นสวิตซ์ตัด-ต่อวงจร โดยการป้อนกระแสไฟฟ้าเข้าไปมีด้วยกันหลายชนิด แต่ในการพัฒนาโปรเจคของเรานี้เราจะใช้ Relay แบบที่ไม่ได้ดีเลิศนัก แต่ก็พอใช้งานได้ ราคาไม่แพง ถูกมาก ๆ โดยที่นิยมใช้จะมีด้วยกันสองชนิดคือ

1.General Relay — อุปกรณ์ที่ทำหน้าที่เป็นสวิตซ์ตัด-ต่อวงจร โดยใช้แม่เหล็กไฟฟ้า ซึ่งปกติถ้ามีการจ่ายไฟเข้าที่ตัวรีเลย์ (Relay) จะทำให้ขดลวดเหนี่ยวนำหน้าสัมผัสติดกัน จึงมีสถานะปิดวงจร (Closed Circuit) แต่ถ้าหากไม่มีการจ่ายไฟให้ รีเลย์ (Relay) ขดลวดเหนี่ยวนำหน้าสัมผัสไม่ติดกัน จะมีสถานะเปิดวงจร (Open Circuit) ข้อดีคือบำรุงรักษาง่าย ราคาไม่แพง ข้อเสียคือการตัด-ต่อแต่ละครั้งจะเกิดเสียงดัง เพราะเป็นการตัดต่อแบบอาศัยกลไกแมคคานิคในการทำงาน อีกทั้งหน้าสัมผัสของ Relay ค้าง และเสียง่าย

General Relay — แบบในรูปรองรับไฟฟ้ากระแสสลับได้ 10A

2.Solid State Relay (SSR) — หรือตัวย่อ SSR คืออุปกรณ์อิเล็กทรอนิกส์ที่ทำหน้าที่เป็นสวิตซ์ ที่ไม่ใช้หน้าสัมผัสในการตัด-ต่อวงจร โดยใช้เทคโนโลยีของ เซมิคอนดักเตอร์ (Semiconductor) ที่ไม่มีส่วนเคลื่อนที่ จึงไม่มีเสียงในขณะเวลาตัด-ต่อของหน้าสัมผัส (Contact) มีอายุการใช้งานยาวนาน แต่ข้อเสียคือเมื่อใช้งานต่อเนื่องนานๆ จะทำให้เกิดความร้อนขึ้นและพังได้

Solid State Relay (SSR) — แบบในรูปรองรับไฟฟ้ากระแสสลับได้ 2A

อุปกรณ์

  1. CAT LoRa Starter Kit จำนวน 1 บอร์ด
  2. DS3231 Module จำนวน 1 ชิ้น
  3. Red LED จำนวน 1 หลอด
  4. Green LED จำนวน 1 หลอด
  5. 330 ohm resistor จำนวน 2 อัน
  6. Relay Module (active low relay) แบบ 2 Channel ชนิด 5 โวลต์ จำนวน 1 อัน
  7. เต้าปลักไฟบ้านแบบ 2 ช่องแยกกัน จำนวน 1 อัน
  8. สายไฟ

การต่อวงจร

การต่อวงจรอุปกรณ์

จากภาพจะเห็นว่าเรามีการดัดแปลงสาย micro usb เพื่อให้สามารถจ่ายไฟ 5 โวลต์ เข้าไปยัง Relay Module ได้ เพราะ CAT LoRa Starter Kit จ่ายไฟได้สูงสุดเพียง 3 โวลต์เท่านั้น

สายไฟภายในสาย Micro USB
ทดสอบสายสีแดง(+) สายสีดำ (-)
การแยกสายไฟมาเข้ากับ Relay

มีวิธีการจ่ายไฟ 5 โวลต์ อีกวิธีคือการใช้แหล่งจ่ายไฟภายนอกเช่น mobile adapter แล้วตัดสาย micro usb ออก แล้วสนใสสายแค่ 2 เส้น คือสายสีแดงเป็นขั้ว (+) และสายสีดำเป็นขั้ว (-) ส่วนสายสีขาวและเขียวให้ใช้เทปพันกันไว้เพื่อไม่ให้สายไฟพันกันจนซ็อต จากนั้นต่อสายไฟดังนี้

  • GND ของ Relay → GND ของบอร์ด
  • VCC ของ Relay → สายสีแดง (+)
  • GND ของบอร์ด→ สายสีดำ (-)

เพียงเท่านี้เราก็จะใช้งาน Relay 5 โวลต์ได้

*** ถ้ามันยากไปแนะนำให้หาซื้อ Relay 3 โวลต์ จะทำให้เราสามารถนำมาต่อโดยตรงได้เลย 555+

Library ที่จำเป็น

  1. SmartEverything HTS221 : https://github.com/ameltech/sme-hts221-library
    (เนื่องจากมีการใช้ CatLoRaS76S จากตอนที่ 4 )
  2. 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:0020200124143000

เขียนโปรแกรม

ทดลองส่งข้อมูล 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 A
ตั้งเวลาเปิดปิด Relay B

อธิบายการทำงาน

ในการเขียนโปรแกรมคราวนี้ผมได้นำโปรแกรมจากบทความที่แล้วมาดัดแปลงครับ โดยจะเปลี่ยนจากการควบคุมหลอดไฟมาเป็นการควบคุม 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 เพื่อสั่งงานเพราะใครมันจะจำได้ละ เหอๆ … เอาไว้ในบทความท้าย ๆ ของซีรี่นี้ ผมจะมาสอนวิธีการสร้างครับ

ดาวน์โหลดไฟล์ตัวอย่าง

บทความนี้ก็ขอจบเพียงเท่านี้ครับ ในบทความหน้าจะเป็นการเพิ่มหน้าจอแสดงผลขนาดเล็กกันครับ

--

--