Automatic home with Node-RED

Automatic home with Node-RED

ผู้เขียนนบทความ :

1. นางสาว กัญญารัตน์ ไชยชิต 023 #COE16

2. นายณัฐกิตติ์ จันทรพัฒน์ 029 #COE16

3. นายธนกฤต วรพงค์ 034 #COE16

คณะวิศวกรรมศาสตร์ สาขาวิศวกรรมคอมพิวเตอร์

วิชา : 04-513-201 การโปรแกรมคอมพิวเตอร์ขั้นสูง 1/2667

1. ความเป็นมา

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

Node-RED เป็นเครื่องมือที่มีประสิทธิภาพสูงในการพัฒนาแอปพลิเคชัน IoT เพราะมีหน้าต่างการพัฒนา
แบบกราฟิกที่ใช้งานง่าย ผู้ใช้งานสามารถสร้างและปรับแต่งโฟลว์ (flow) ของระบบได้อย่างยืดหยุ่น อีกทั้งยัง
สามารถเชื่อมต่อกับอุปกรณ์เซ็นเซอร์ เช่น เซ็นเซอร์แสง เซ็นเซอร์วัดระยะ และรีเลย์ เพื่อควบคุมการเปิด-ปิด
อุปกรณ์ไฟฟ้าในบ้านได้อย่างอัตโนมัติ นอกจากนี้ยังสามารถตั้งค่าโหมดควบคุมได้ทั้งแบบอัตโนมัติและแบบ
ควบคุมด้วยมือ

2. วัตถุประสงค์

2.1 เพิ่มความสะดวกสบายในการควบคุมระบบไฟฟ้า

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

2.3 สร้างความยืดหยุ่นในการตั้งค่าและการใช้งาน ผู้ใช้งานสามารถปรับ
แต่งการทำงานของระบบผ่าน Node-RED ได้ตามความต้องการ
ไม่ว่าจะเป็นการเพิ่มหรือลดฟังก์ชันการทำงานต่าง ๆ ของระบบ

3. ขอบเขต

3.1 สามารถควบคุมอุปกรณ์ไฟฟ้าภายในบ้าน ทั้งแบบอัตโนมัติ และแบบแมนนวล

3.2 สามารถทำงานร่วมกับเซ็นเซอร์และอุปกรณ์ IoT

3.3 สามารถเชื่อมต่อผ่าน Node-RED

3.4 สามารถแสดงค่าต่างๆ ใน dashboard ของ Node-RED

4. ประโยชน์ที่จะได้รับ

4.1 ควบคุมไฟได้ทุกที่ทุกเวลา : ผู้ใช้สามารถควบคุมไฟในบ้านหรือที่ทำงานได้ทุกที่ที่มีการเชื่อมต่ออินเทอร์เน็ต ไม่ว่าจะเป็นการเปิด-ปิดไฟห้องนอน, ห้องครัว, หรือสวน เพียงแค่ใช้แอปพลิเคชันหรือเว็บไซต์ Node-RED ผ่านอินเทอร์เฟซที่เข้าใจง่ายและใช้งานได้สะดวก.

4.2 ประหยัดพลังงาน : การควบคุมไฟโดยใช้ Automatic home และ Node-RED ช่วยให้ผู้ใช้ประหยัดพลังงานไฟฟ้าได้ เนื่องจากสามารถตั้งเวลาเปิด-ปิดไฟตามเวลาที่ต้องการได้แม่นยำ และยังสามารถปรับแต่งการใช้งานได้ตามสภาพแวดล้อม เช่น ปรับให้เปิดไฟในตอนเช้าและปิดในตอนกลางวันหากไม่มีคนใช้.

4.3 ความปลอดภัยและความสะดวกสบาย : การใช้ระบบ Automatic home ที่มีการควบคุมอย่างมั่นคง ช่วยเพิ่มความปลอดภัยให้กับบ้านหรือที่ทำงาน โดยสามารถตรวจสอบสถานะของไฟได้ตลอดเวลา และยังช่วยลดความเสี่ยงในการที่จะลืมปิดไฟหรือทิ้งไว้เมื่อไม่ใช้งานอีกด้วย

4.4 การปรับแต่งและการตั้งค่าที่ยืดหยุ่น : Node-RED ให้ความยืดหยุ่นในการตั้งค่าและปรับแต่งการทำงานของอุปกรณ์ต่าง ๆ ตามความต้องการของผู้ใช้ ทำให้สามารถปรับแต่งได้ให้เหมาะสมกับการใช้งานและสภาพแวดล้อมที่ต่างกัน

5. ความรู้ที่เกี่ยวข้อง

ESP32

https://thecustomizewindows.cachefly.net/wp-content/uploads/2019/03/Base64-Encoding-on-ESP32-Arduino.png

ESP32 เป็นไมโครคอนโทรลเลอร์ที่ พัฒนาโดยบริษัท Espressif Systems มี คุณสมบัติเด่นคือการรองรับการเชื่อมต่อ Wi-Fi และ Bluetooth ภายในชิปเดียว ทำให้เป็นตัวเลือกยอดนิยมในการพัฒนา โปรเจ็กต์ที่เกี่ยวข้องกับ Internet of Things (IoT) และสมาร์ทโฮมที่ต้องการ การสื่อสารแบบไร้สาย

LDR

https://th.bing.com/th/id/OIP.qOK8CRsIY3SyCVoDxcEc2AHaHa?rs=1&pid=ImgDetMain

เซนเซอร์วัดความเข้มแสงที่ตามอง เห็น ภายในโมดูลเป็น LDR และใช้แสง นำทางเป็น LED สามารถอ่านค่าความเข้ม แสงของวัตถุที่แสง LED ตกกระทบและ สะท้อนกลับมา เป็นค่า 0-1023 แบบ Analog สามารถนำประยุกต์ใช้มาใช้ตรวจ จับวัตถุที่อยู่งข้างหน้า หรือตรวจจับเส้น ขาวดำได้ ใช้สำหรับหาวัตถุ หรือตรวจจับ เส้นขาว/ดำ

Ultrasonic Sensor

https://www.easyelectronics.in/image/cache/catalog/Products/ultrasonic-sensor-1000×1000.jpg

HC-SR04 Ultrasonic Sensor เป็นเซนเซอร์ที่ใช้คลื่นเสียงในการวัด ระยะทางของวัตถุ โดยอาศัยการสะท้อน กลับของคลื่นเสียง ซึ่งเป็นคลื่นอัลตร้าโซนิคที่มีความถี่สูงกว่าช่วงการได้ยินของ มนุษย์ หลักการทำงานของเซ็นเซอร์นี้เรียก ว่า “Time of Flight” โดยจะคำนวณระยะ ทางจากเวลาที่คลื่นเสียงเดินทางจาก เซ็นเซอร์ไปยังวัตถุและสะท้อนกลับมา

Relay

https://image.makewebcdn.com/makeweb/m_1920x0/CRsULoX9c/DefaultData/%E0%B8%A3%E0%B8%B5%E0%B9%80%E0%B8%A5%E0%B8%A2%E0%B9%8C.jpg

คือ สวิตช์ไฟฟ้าที่ใช้แม่เหล็กไฟฟ้าในการเปิดหรือปิดหน้าสัมผัสอย่างน้อยหนึ่งหน้าสัมผัส ซึ่งเป็นส่วนประกอบสำคัญในระบบไฟฟ้าและอิเล็กทรอนิกส์ มักใช้ในการควบคุมวงจรกำลังไฟสูงด้วยสัญญาณกำลังต่ำ

Node-RED

https://www.stackhero.io/assets/src/images/servicesLogos/openGraphVersions/node-red.png?481ffe83

คือแพลตฟอร์มโอเพนซอร์สสำหรับ การเขียนโปรแกรมผ่านการเชื่อมต่อแบบ เวิร์กโฟลว์ ซึ่งพัฒนาโดย IBM Node- RED อนุญาตให้ผู้ใช้เชื่อมต่ออุปกรณ์ ฮาร์ดแวร์ API และบริการออนไลน์ผ่าน “nodes” ที่กำหนดค่าล่วงหน้า โดยไม่ต้อง เขียนโค้ดด้วยมือมากนัก ทำให้เหมาะสำหรับ การพัฒนาแอปพลิเคชันด้าน IoT และการ ทำงานแบบอัตโนมัติในระบบต่างๆ

MQTT

https://antomatix.com/wp-content/uploads/2023/02/mqtt-ver.png

เป็น Protocol ที่ออกแบบมาเพื่อการ เชื่อมต่อแบบ M2M (machine to machine) คือ อุปกรณ์ติดต่อหรือสื่อสารกับอุปกรณ์ โดย เป็นส่วนหนึ่งของเทคโนโลยี IoT ซึ่งเป็น เทคโนโลยีที่อินเทอร์เน็ตเชื่อมต่อกับอุปกรณ์ ต่าง ๆ เช่น โทรศัพท์มือถือ รถยนต์ โทรทัศน์ ตู้เย็น เข้ากับอินเทอร์เน็ตทำให้สามารถเชื่อมโยง สื่อสารกับอุปกรณ์ต่าง ๆ ได้ โดยผ่านเครือข่าย อินเทอร์เน็ต ซึ่งจะทำให้มนุษย์สามารถ ควบคุม อุปกรณ์ต่าง ๆ จากที่อื่นได้

Code ในส่วนประกาศตัวแปรและไลบรารี

#include <WiFi.h>
#include <PubSubClient.h>

// WiFi
const char* ssid = "ชื่อ WiFi"; 
const char* password = "รหัสผ่าน WiFi"; 

// Ultrasonic Sensor
const int trigPin = 12;
const int echoPin = 14;
#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701

long duration;
float distanceCm;
float distanceInch;

// Grayscale Sensor (LDR)
const int ldrPin = 36;

// Relay Pins
const int relay1 = 5;
const int relay2 = 4;
const int relay3 = 16;
const int relay4 = 17;

// MQTT Broker
const char* mqtt_broker = "ที่อยู่ MQTT Broker";
const char* topic = "sensor/esp32";
const char* relay_topic = "relay/esp32";
const char* ldr_topic = "ldr/esp32";
const char* mqtt_username = "123";
const char* mqtt_password = "123";
const int mqtt_port = 1883;

WiFiClient espClient;
PubSubClient client(espClient);

// Control mode
int controlMode = 0;

// Default thresholds
float distanceThreshold = 10.0;
int ldrThreshold = 50;

// Relay default delays
unsigned long relay1Delay = 10 * 1000;
unsigned long relay2Delay = 10 * 1000;

// Time variables for relay
unsigned long relay1OnTime = 0;
unsigned long relay2OnTime = 0;

Code ในส่วนฟังก์ชั่นจัดการข้อความ MQTT

void callback(char* topic, byte* message, unsigned int length) {
  String messageTemp;
  for (int i = 0; i < length; i++) {
    messageTemp += (char)message[i];
  }

  // ปรับโหมดควบคุม
  if (String(topic) == "relay/esp32") {
    if (messageTemp == "mode_manual") {
      controlMode = 1;
      Serial.println("Control mode set to MANUAL");
    } else if (messageTemp == "mode_auto") {
      controlMode = 0;
      Serial.println("Control mode set to AUTO");
    }

    // ควบคุมรีเลย์ในโหมดแมนนวล
    if (controlMode == 1) {
      if (messageTemp == "relay1_on") {
        digitalWrite(relay1, LOW);
        Serial.println("Relay 1 ON");
      } else if (messageTemp == "relay1_off") {
        digitalWrite(relay1, HIGH);
        Serial.println("Relay 1 OFF");
      } else if (messageTemp == "relay2_on") {
        digitalWrite(relay2, LOW);
        Serial.println("Relay 2 ON");
      } else if (messageTemp == "relay2_off") {
        digitalWrite(relay2, HIGH);
        Serial.println("Relay 2 OFF");
      }
    }

    // ควบคุมรีเลย์ 3 และ 4
    if (messageTemp == "relay3_on") {
      digitalWrite(relay3, LOW);
      Serial.println("Relay 3 ON");
    } else if (messageTemp == "relay3_off") {
      digitalWrite(relay3, HIGH);
      Serial.println("Relay 3 OFF");
    } else if (messageTemp == "relay4_on") {
      digitalWrite(relay4, LOW);
      Serial.println("Relay 4 ON");
    } else if (messageTemp == "relay4_off") {
      digitalWrite(relay4, HIGH);
      Serial.println("Relay 4 OFF");
    }
  }

  // ปรับค่าเกณฑ์ระยะทาง
  if (String(topic) == "threshold/distance") {
    distanceThreshold = messageTemp.toFloat();
    Serial.print("Distance threshold set to: ");
    Serial.println(distanceThreshold);
  }

  // ปรับค่าเกณฑ์ LDR
  if (String(topic) == "threshold/ldr") {
    ldrThreshold = messageTemp.toInt();
    Serial.print("LDR threshold set to: ");
    Serial.println(ldrThreshold);
  }

  // ตั้งค่าระยะเวลาของรีเลย์ 1
  if (String(topic) == "relay1/time") {
    relay1Delay = messageTemp.toInt() * 1000;
    Serial.print("Relay 1 time set to: ");
    Serial.print(relay1Delay / 1000);
    Serial.println(" seconds");
  }

  // ตั้งค่าระยะเวลาของรีเลย์ 2
  if (String(topic) == "relay2/time") {
    relay2Delay = messageTemp.toInt() * 1000;
    Serial.print("Relay 2 time set to: ");
    Serial.print(relay2Delay / 1000);
    Serial.println(" seconds");
  }
}

Code ในส่วนการเชื่อมต่อ WiFi และ MQTT

void get_network_info() {
  if (WiFi.status() == WL_CONNECTED) {
    Serial.println("WiFi connected");
    Serial.println("[+] ESP32 IP: " + WiFi.localIP().toString());
  }
}

void reconnect() {
  while (!client.connected()) {
    String client_id = "esp32-client-";
    client_id += String(WiFi.macAddress());
    if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
      Serial.println("Connected to MQTT broker");
      client.subscribe(relay_topic);
      client.subscribe("threshold/distance");
      client.subscribe("threshold/ldr");
      client.subscribe("relay1/time");
      client.subscribe("relay2/time");
      client.publish(topic, "Reconnected: Hello, I'm ESP32 ^^");
    } else {
      Serial.print("Failed to connect. State: ");
      Serial.println(client.state());
      delay(2000);
    }
  }
}

Code ในส่วนการตั้งค่าเริ่มต้นในฟังก์ชัน setup()

void setup() {
  Serial.begin(115200);
  delay(1000);

  // ตั้งค่า WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  get_network_info();

  // ตั้งค่าเซนเซอร์และรีเลย์
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
  digitalWrite(relay3, HIGH);
  digitalWrite(relay4, HIGH);

  // ตั้งค่า MQTT
  client.setServer(mqtt_broker, mqtt_port);
  client.setCallback(callback);
  reconnect();
}

Code ในส่วนลูปหลัก loop()

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  if (controlMode == 0) {  // โหมดอัตโนมัติ
    // วัดระยะทางโดยใช้เซนเซอร์อัลตร้าโซนิค
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    duration = pulseIn(echoPin, HIGH);
    distanceCm = duration * SOUND_SPEED / 2;
    Serial.print("Distance (cm): ");
    Serial.println(distanceCm);

    // ควบคุมรีเลย์ 2 โดยอัตโนมัติจากเกณฑ์ระยะทาง
    if (distanceCm < distanceThreshold) {
      digitalWrite(relay2, LOW);
      relay2OnTime = millis();
      Serial.println("Relay 2 ON (Auto)");
    }

    if (millis() - relay2OnTime >= relay2Delay) {
      digitalWrite(relay2, HIGH);
      Serial.println("Relay 2 OFF (Auto, timed)");
    }

    // อ่านค่าจาก LDR
    int ldrValueRaw = analogRead(ldrPin);
    int ldrValue = map(ldrValueRaw, 0, 4095, 0, 100);
    Serial.print("LDR Value (0-100): ");
    Serial.println(ldrValue);

    // ควบคุมรีเลย์ 1 โดยอัตโนมัติจากเกณฑ์ LDR
    if (ldrValue < ldrThreshold) {
      digitalWrite(relay1, LOW);
      relay1OnTime = millis();
      Serial.println("Relay 1

6. การดำเนินงาน

Diagram : การทำงานของระบบ

Flowchart : ลำดับการทำงานของระบบ

ขั้นตอนในการทำงาน

ขั้นตอนที่ 1 ศึกษาอุปกรณ์ต่างๆ เพื่อทำความเข้าใจอุปกรณ์ก่อนทำงานจริง

ขั้นตอนที่ 2 เริ่มทำการแก้ไขในส่วนของโค๊ดและทำการออกแบบโมเดลจำลอง

ขั้นตอนที่ 3 สรุปผลการทดลอง

1.การทดลองแต่ละส่วน

    การทดลองของระบบควบคุมไฟฟ้าในบ้านอัตโนมัติ แบ่งเป็น 2 ส่วนคือ

    1.การทดลอง ระบบควบคุมไฟฟ้าในบ้านแบบอัตโนมัติ

      การทดลองระบบควบคุมไฟฟ้าในบ้านแบบอัตโนมัติ ทดลองในกรณีต่างๆ โดยที่ถ้ามีคนเดินผ่านระยะ ไฟดวงที่ 1 จะติด

      และ ถ้ามีแสงไม่เพียงพอ ไฟดวงที่ 2 จะติด ตามในแบบทดลองนี้

      2.การทดลอง ระบบควบคุมไฟฟ้าในบ้านแบบควบคุมเองผ่าน Node-RED

        การทดลองระบบควบคุมไฟฟ้าในบ้านแบบควบคุมเองผ่าน Node-RED ทดลองในกรณีต่างๆ โดยควบคุมการเปิด-ปิด

        ดังนี้

        7. วิธีการใช้งาน

        1. เปิด MQTT Broker

        2.เปิด Node-RED

        3.เปิดเบราว์เซอร์ 127.0.0.1:1880/ui เพื่อควบคุม

        9.เทคนิคการประยุคเพื่อเพิ่มประสิทธิภาพมากขึ้น

        1. เพิ่มความเสถียรในการเชื่อมต่อ WiFi และ MQTT

        • ใช้การตรวจสอบการเชื่อมต่อซ้ำ: ปรับปรุงโค้ดเพื่อตรวจสอบการเชื่อมต่อ WiFi และ MQTT Broker อย่างต่อเนื่องและทำการเชื่อมต่อใหม่โดยอัตโนมัติหากมีการหลุดจากการเชื่อมต่อ เพื่อป้องกันการหยุดทำงานของระบบ
        • ตั้งค่า Keep-Alive ของ MQTT: ลดค่า Keep-Alive interval ของ MQTT Broker เพื่อให้การเชื่อมต่อ MQTT มีการตรวจสอบบ่อยขึ้นและลดโอกาสที่การเชื่อมต่อจะถูกตัดcppคัดลอกโค้ดclient.setKeepAlive(15); // กำหนด Keep-Alive ให้ทำงานทุก 15 วินาที
        • ใช้ QoS (Quality of Service): เพิ่มการรับประกันการส่งข้อมูล MQTT โดยใช้ QoS ระดับ 1 หรือ 2 ขึ้นอยู่กับความสำคัญของข้อมูล เพื่อให้แน่ใจว่าข้อมูลถึงปลายทางcppคัดลอกโค้ดclient.publish(topic, payload, true); // QoS ระดับ 1 เพื่อยืนยันการรับข้อมูล

        2. ปรับปรุงการจัดการพลังงาน

        • ใช้ Deep Sleep Mode: สำหรับการใช้งานที่ไม่จำเป็นต้องส่งข้อมูลต่อเนื่อง เช่น การวัดเซนเซอร์อัลตราโซนิกในช่วงเวลาที่กำหนด สามารถใช้ Deep Sleep Mode ของ ESP32 เพื่อประหยัดพลังงาน โดยกำหนดให้บอร์ดตื่นขึ้นมาวัดค่าหรือส่งข้อมูลในช่วงเวลาที่กำหนดเท่านั้นcppคัดลอกโค้ดesp_sleep_enable_timer_wakeup(10 * 1000000); // ปลุก ESP32 ทุก 10 วินาที esp_deep_sleep_start();
        • ลดการใช้พลังงานของเซนเซอร์: ในการใช้งานเซนเซอร์ที่มีการใช้พลังงานสูง เช่น อัลตราโซนิก สามารถกำหนดให้เปิดใช้งานเซนเซอร์เฉพาะเวลาที่ต้องการวัดผล แล้วปิดเพื่อประหยัดพลังงาน

        3. เพิ่มประสิทธิภาพการประมวลผล

        • ใช้การคำนวณแบบไม่บล็อก (Non-blocking): แทนที่จะใช้ delay() เพื่อหน่วงเวลา สามารถใช้ฟังก์ชันตรวจสอบเวลาจาก millis() เพื่อให้ ESP32 สามารถทำงานอื่นระหว่างการรอได้cppคัดลอกโค้ดif (millis() - previousMillis >= interval) { // ทำการอ่านข้อมูลหรือส่งข้อมูล previousMillis = millis(); }
        • ลดขนาดข้อมูลที่ส่งผ่าน MQTT: ส่งเฉพาะข้อมูลที่จำเป็นเท่านั้น ตัวอย่างเช่น ลดจำนวนทศนิยมที่ส่งออกเพื่อประหยัดแบนด์วิดธ์cppคัดลอกโค้ดclient.publish(topic, String(distanceCm, 1).c_str()); // ส่งทศนิยม 1 ตำแหน่งเท่านั้น

        4. การจัดการข้อมูลจากเซนเซอร์

        • การกรองสัญญาณจากเซนเซอร์ (Sensor Filtering): การอ่านข้อมูลจากเซนเซอร์หลายครั้งและคำนวณค่าเฉลี่ยช่วยให้ค่าที่ได้มีความเสถียรขึ้น ลดผลกระทบจากสัญญาณรบกวนcppคัดลอกโค้ดfloat sum = 0; for (int i = 0; i < 5; i++) { sum += distanceCm; delay(50); // หน่วงเวลาเล็กน้อยระหว่างการอ่านค่า } distanceCm = sum / 5; // ค่าเฉลี่ยของการอ่าน 5 ครั้ง
        • การเก็บข้อมูลแบบขนาน (Concurrent Data Handling): การประมวลผลข้อมูลจากเซนเซอร์หลายตัว เช่น Ultrasonic และ LDR ในเวลาเดียวกันโดยไม่ต้องรอผลจากเซนเซอร์อื่น ช่วยเพิ่มความเร็วในการประมวลผลข้อมูล

        5. เพิ่มความยืดหยุ่นในการตั้งค่า

        • ใช้การกำหนดค่าผ่าน Web Interface หรือ Mobile App: เพิ่มฟังก์ชันการตั้งค่าผ่าน Web Interface หรือ Mobile App ที่เชื่อมต่อกับ ESP32 ผ่าน WiFi ให้ผู้ใช้สามารถปรับค่าเกณฑ์ระยะทางหรือค่า LDR ได้โดยตรงจากอินเตอร์เฟสที่ใช้งานง่าย
          • สามารถใช้ไลบรารี ESPAsyncWebServer สำหรับสร้าง Web Interface บน ESP32
          • ใช้แอปบนมือถือเช่น Blynk หรือ ESP8266/ESP32 Remote Control App เพื่อควบคุมผ่านมือถือ

        6. ความปลอดภัยของข้อมูล

        • เข้ารหัสการส่งข้อมูล MQTT ด้วย TLS: เพิ่มความปลอดภัยในการส่งข้อมูลผ่าน MQTT โดยใช้การเข้ารหัส TLS เพื่อป้องกันการดักจับข้อมูลระหว่างทางcppคัดลอกโค้ดconst char* mqtt_broker = "mqtts://broker_address"; // ใช้โปรโตคอล MQTT ผ่าน TLS
        • เพิ่มการยืนยันตัวตน (Authentication): ใช้การยืนยันตัวตนแบบสองขั้นตอนหรือการกำหนดสิทธิ์การเข้าถึง MQTT เพื่อป้องกันการควบคุมที่ไม่ได้รับอนุญาตcppคัดลอกโค้ดclient.connect(client_id.c_str(), mqtt_username, mqtt_password);

        7. การตรวจสอบและบำรุงรักษาระบบ

        • ระบบแจ้งเตือน (Alert System): เพิ่มการแจ้งเตือนผ่าน Email หรือแอปพลิเคชันเมื่อเกิดปัญหาหรือการเชื่อมต่อหลุด เช่น การใช้ไลบรารี IFTTT หรือ Telegram Bot ในการแจ้งเตือนผู้ใช้

        10. สรุปผล

        จากการศึกษาโปรแกรมนี้สร้างขึ้นเพื่อควบคุมระบบเซนเซอร์และรีเลย์ด้วยการเชื่อมต่อ WiFi และ MQTT บนบอร์ด ESP32 โดยรองรับทั้งโหมดอัตโนมัติและโหมดแมนนวล โปรแกรมเริ่มต้นด้วยการเชื่อมต่อกับเครือข่าย WiFi โดยใช้ชื่อ (SSID) และรหัสผ่านที่กำหนด จากนั้นบอร์ด ESP32 จะเชื่อมต่อกับ MQTT Broker เพื่อใช้ในการสื่อสารกับระบบควบคุมต่างๆ โดยจะส่งและรับข้อมูลผ่านหัวข้อ MQTT ที่กำหนดไว้ เซนเซอร์อัลตราโซนิก (Ultrasonic Sensor) จะทำงานโดยการส่งสัญญาณจากขา TrigPin และรับสัญญาณกลับที่ขา EchoPin จากนั้นคำนวณระยะทางจากเวลาเดินทางของสัญญาณ โดยใช้สูตรที่อิงตามความเร็วของเสียง ข้อมูลที่ได้จะถูกนำไปใช้เพื่อควบคุมรีเลย์ 2 ในโหมดอัตโนมัติ ถ้าระยะทางที่วัดได้ต่ำกว่าค่าที่กำหนดไว้ (เช่น 10 ซม.) รีเลย์ 2 จะเปิดทำงาน และจะปิดตามเวลาที่ตั้งค่าไว้  ในส่วนของเซนเซอร์แสง (LDR) ระบบจะอ่านค่าจากขา ldrPin และแปลงค่าที่ได้ให้อยู่ในช่วง 0-100 โดยค่าที่ต่ำกว่าค่าที่กำหนด (เช่น ต่ำกว่า 50) จะทำให้รีเลย์ 1 เปิดทำงาน รีเลย์นี้จะปิดตามเวลาที่ตั้งไว้ล่วงหน้าเช่นกัน สำหรับโหมดการควบคุม ระบบมี 2 โหมด คือ โหมดแมนนวล (Manual Mode) และ โหมดอัตโนมัติ (Auto Mode) ในโหมดแมนนวล ผู้ใช้สามารถส่งคำสั่งผ่าน MQTT เพื่อเปิดหรือปิดรีเลย์ 1 และ 2 ด้วยตนเอง ส่วนในโหมดอัตโนมัติ ระบบจะควบคุมการทำงานของรีเลย์ตามข้อมูลที่ได้รับจากเซนเซอร์โดยอัตโนมัติ รีเลย์ 3 และ 4 สามารถควบคุมได้ตลอดไม่ว่าจะอยู่ในโหมดใด โดยจะรับคำสั่งผ่าน MQTT เพียงอย่างเดียว  ระบบนี้ยังมีฟังก์ชันในการสมัครรับข้อมูลจากหัวข้อ MQTT เพื่อนำข้อมูลต่างๆ เช่น ระยะทางที่กำหนด (Threshold) ค่าแสงจาก LDR และเวลาทำงานของรีเลย์มาใช้ในการควบคุม ผู้ใช้สามารถปรับค่าเหล่านี้จากภายนอก เช่น ผ่าน Node-RED ได้ นอกจากนี้ ข้อมูลจากเซนเซอร์อัลตราโซนิกและ LDR จะถูกส่งไปยัง MQTT Broker เพื่อตรวจสอบหรือควบคุมจากระยะไกล

        9. ข้อมูลอ้างอิง

        [1] ESP32

        [2] การใช้งาน ESP32

        https://www.cybertice.com/article/226/

        [3] relay

        https://misumitechnical.com/technical/electrical/relay-working-principles

        [4]การเริ่มต้นใช้ node-red

        https://medium.com/mmp-li/

        [6] node-red

        [7] mqtt

        https://aws.amazon.com/th/what-is/mqtt

        [8] หลักการทำงานของ

        ultrasonic sensor hc-sr04 https://docs.google.com/document/d/18zTOh1EzQZErX_Utlpe0_BtMqXFMBVTS80jO6rIKhnQ/preview?hgd=1

        [9] การใช้งาน Grayscale Sensor Module

        https://www.arduitronics.com/product/2594/grayscale-sensor-module-line-finder-sensor

        [10] การต่อ relay

        https://www.cybertice.com/article/

        [11]ไมโครคอลโทรลเลอร์

        https://th.wikipedia.org/wiki/

        วิดีโอการใช้งาน Automatic home with Node-RED

        You may also like...

        ใส่ความเห็น

        อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *