ระบบควบคุมการใช้ปริมาณไฟฟ้าภายในบ้าน (System for controlling the amount of electricity used in the home)

ผู้เขียนบทความ : 101 นางสาวพรนภัส รักษ์เกลี้ยง COE#15

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

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

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

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

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

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

 2.1 เพื่อทำระบบควบคุมการใช้ปริมาณไฟฟ้าภายในบ้านออกมาให้มีการแสดงผลแบบเรียลไทม์

2.2 เพื่อแก้ไขปัญหาการใช้ไฟฟ้าเกินความจำเป็น

3.ขอบเขต

3.1 เซนเซอร์สามารถรับค่ากระแสไฟฟ้าและค่าแรงดันไฟฟ้าได้

3.2 ใช้ ESP32 ในการประมวลผลและสร้างเงื่อนไขโดยใช้เซนเซอร์แรงดันไฟฟ้าและกระแสไฟฟ้า เพื่อให้ข้อมูลที่ถูกต้อง

3.3 สามารถออกแบบระบบควบคุมการใช้ปริมาณไฟฟ้าภายในบ้าน ด้วยเซนเซอร์วัดกระแสไฟฟ้าและเซนเซอร์วัดแรงดัน และแสดงผลบนแอปพลิเคชัน Blynk และแอปพลิเคชัน LINE แบบเรียลไทม์ได้

3.4 สามารถควบคุมปริมาณความเข้มแสงในโรงเรือนได้

 

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

4.1 สามารถวัดและติดตามการใช้พลังงานไฟฟ้าของอุปกรณ์ต่าง ๆ โดยแสดงผลบนแพลตฟอร์ม Blynk

4.2 ลดการใช้พลังงานไฟฟ้าอย่างสิ้นเปลืองให้น้อยลงได้

4.3 ได้ศึกษาและเข้าใจการเขียนโปรแกรมภาษา python เพื่อการพัฒนาเทคโนโลยีได้

4.4 สามารถนำความรู้การเขียนโปรแกรมภาษา python ไปประยุกต์ใช้ได้จริง

4.5 สามารถเขียนโปรแกรมภาษา python เพื่อควบคุมปริมาณการใช้ไฟฟ้าภายในบ้านได้

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

5.1 ความรู้เรื่องอุปกรณ์และแอปพลิเคชั่นที่เกี่ยวข้อง

5.1.1 CT sensor SCT-013 (100A/50mA) เซนเซอร์ที่ใช้วัดกระแสในไฟฟ้า AC 

  • สามารถวัดได้สูงสุดที่ 100A
  • กระแสไฟเข้า: 0 ~ 100A AC
  • โหมดเอาต์พุต: 0 ~ 50mA
  • ความไม่เชิงเส้น: ± 3%
  • อัตราส่วนการหมุน: 100A:0.05A
  • เกรดต้านทาน: เกรด B
  • อุณหภูมิในการทำงาน: -25°C ~ ﹢70°C
  • ความเป็นฉนวน (ระหว่างเปลือกและเอาต์พุต): 1000V AC/1 นาที 5mA
  • ลวดตะกั่วยาว: 1ม
  • ขนาดเปิด: 13 มม. x 13 มม

5.1.2 ZMPT101B เซ็นเซอร์วัดแรงดันไฟ AC 

  • สามารถวัดแรงดันไฟฟ้าได้ถึง 250 โวลต์
  • ให้เอาต์พุตแบบอะนาล็อก 
  •  ถ้าแรงดันที่วัดเปลี่ยน เอาต์พุตก็จะเปลี่ยนแปลงด้วย

5.1.3 ESP32 ESP-32S ESP-WROOM-32 Wifi+Bluetooth Development Board (38 Pins)

โมดูล Wifi ESP-32 รุ่น ESP-WROOM-32 โมดูล Wifi + Bluetooth 4.2 + Touch/Temp Sensorทำงานแบบ Dual Core ที่ความเร็ว 240Mhz มี SRAM 512K หน่วยความจำ Flash สำหรับอัพโหลดโปรแกรมขนาด 16M มีขา GPIO 38 ขา ความละเอียดในการอ่านค่า ADC 12Bit  สามารถเขียนโปรแกรม ผ่าน Arduino IDE เหมือนเขียน Arduino ได้ ใช้ USB UART Controller CP2102  โมดูลรวม USB TTL และ ESP-32 ไว้ในตัวแล้วคล้ายกับ NodeMCU จึงไม่ต้องบัดกรีหรือต่อวงจรเพิ่ม ติดตั้งบอร์ดใน Arduino IDE แล้วเสียบสาย USB โปรแกรมได้เลย

5.1.4 สวิตช์แบบกดติดกดดับ

แบบกดติดกดดับหรือแบบ push on / push off เป็นปุ่มกดที่เมื่อกดเปิด – ปิดลงไปแล้ว ตัวสวิตช์จะค้างในตำแหน่งนั้นทันที จะกลับสู่ตำแหน่งเดิมได้ ต่อเมื่อกดลงไปในอีกทางหนึ่งอีกครั้ง นิยมใช้กับเครื่องใช้ไฟฟ้า หรือ เครื่องจักร ที่มีฟังก์ชันการทำงานไม่ซับซ้อน เช่น Start/stop สายพานลำเลียง เป็นต้น

5.1.5 Switching Power Supply

Power Supply จริงๆ ก็คือแหล่งจ่ายพลังงานไฟฟ้าให้กับตัวอุปกรณ์หรือ Device ที่เราใช้งาน ซึ่งก็มีหลากหลายประเภท มีแบบที่เป็น linear Power Supply ก็คือพวก Tranfromer กับ Non-linear Power Supply หรือ Switching Power Supply โดยเฉพาะ Switching Power Supply ที่เราจะมาแนะนำนี้ เป็นอุปกรณ์ที่จ่ายพลังงานไฟฟ้าให้กับอุปกรณ์ไฟฟ้าต่างๆ โดยจะทำหน้าที่แปลงแรงดันไฟฟ้ากระแสสลับ (AC) เป็นแรงดันไฟฟ้ากระแสตรง (DC) เนื่องจากอุปกรณ์ไฟฟ้าต่างๆ ต้องการแรงดันไฟฟ้ากระแสตรงเพื่อให้ฟังก์ชันในอุปกรณ์ทำงานได้ (ส่งแรงดันไฟฟ้าไปยัง Capacitor หรือ Chips ของอุปกรณ์นั้น)

5.1.6 จอแสดงผล LCD แบบเรียลไทม์

Character LCD เป็นจอที่แสดงผลเป็นตัวอักษรตามช่องแบบตายตัว เช่น จอ LCD ขนาด 20×4 หมายถึงใน 1 แถว มีตัวอักษรใส่ได้ 20 ตัว และมีทั้งหมด 4 บรรทัดให้ใช้งาน การเชื่อมต่ออุปกรณ์จะเป็นการเชื่อมต่อแบบอนุกรม – เป็นการเชื่อต่อกับจอ LCD ผ่านโมดูลแปลงรูปแบบการเชื่อมต่อกับจอ LCD จากแบบขนาน มาเป็นการเชื่อมต่อแบบอื่นที่ใช้สายน้อยกว่า เช่น การใช้โมดูล I2C Serial Interface จะเป็นการนำโมดูลเชื่อมเข้ากับตัวจอ LCD แล้วใช้บอร์ด ESP32 เชื่อมต่อกับบอร์ดโมดูลผ่านโปรโตคอล I2C ทำให้ใช่สายเพียง 4 เส้น ก็ทำให้หน้าจอแสดงผลข้อความต่างๆออกมาได้ โดยจะเชื่อมต่อขาอุปกรณ์ดังนี้

  • VIN (5V)-> VCC
  • GND-> GND
  • D21 -> SDA
  • D22-> SCL

5.1.7 Relar 5v

Relay 1 channel DC 5V module 
รีเลย์ (Relay) เป็นอุปกรณ์อิเล็กทรอนิกส์ที่ถูกนำมาใช้งานกันอย่างแพร่หลายในวงจรควบคุมอัตโนมัติ โดยจะทำหน้าที่เปรียบเสมือนสวิตซ์ไฟ ที่ใช้แรงดันไฟฟ้าในการเปิด-ปิดอุปกรณ์ไฟฟ้าต่าง ๆ เพื่อควบคุมวงจรอัตโนมัติ หากเกิดข้อผิดพลาดระหว่างวงจรไฟฟ้า รีเลย์ จะทำการสั่งให้เบรกเกอร์ตัดวงจรไฟฟ้าทันที เพื่อความปลอดภัยในการใช้งาน

  • รีเลย์ 1 แชนแนล
  • แรงดันไฟเลี้ยง : 5Vdc
  • สัญญาณทริกทำงานที่ลอจิก 0 (Active Low)

5.1.8 Blynk App

Blynk App คือ แอปพลิเคชันสำเร็จรูปที่ใช้สำหรับงานที่เกี่ยวกับอินเทอร์เน็ตของสรรพสิ่ง (Internet of Things, IoT) ที่ทำให้เราสามารถเชื่อมต่ออุปกรณ์ต่าง ๆ เข้ากับอินเทอร์เน็ตในลักษณะการเชื่อมต่อเครื่องแม่ข่าย (Server) ไปยังอุปกรณ์ลูกข่าย (Client) เช่น Arduino,ESP-8266, ESP-32, NodeMCU และ Raspberry Pi ซึ่งแอปพลิเคชัน Blynk สามารถใช้งานได้ฟรีและใช้งานได้ทั้งบนระบบปฏิบัติการ IOS และ Android มีรายการอุปกรณ์ต่าง ๆ ที่สามารถเชื่อมต่อ แสดงผล และ/หรือ ควบคุมด้วย Blynk App ได้ 

การเริ่มต้นใช้งาน Blynk App
ขั้นตอนการสมัครและเปิดใช้งานแอปพลิเคชัน Blynk App มีดังนี้
1. ค้นหาและติดตั้งแอปพลิเคชัน Blynk – IoT

2. เปิดโปรแกรม Blynk App แล้วทำการสร้างบัญชีผู้ใช้ (account) แล้วเข้าใช้ (sign up) ดังรูปที่ 12.4

3. เมื่อเชื่อมต่อ Blynk Server ได้แล้ว โปรแกรมจะพร้อมให้เราสร้างโปรเจคใหม่ โดยการเลือก ‘+ New Project’ แล้วตั้งชื่อโปรเจค เป็น Blynk Test จากนั้นจึงเลือกอุปกรณ์เป็น NodeMCU และเลือกการเชื่อมต่อเป็นแบบ Wi-Fi จากนั้นจึงกดปุ่ม Create ก็จะมีการส่งอีเมลรหัส Token มาให้ในอีเมลที่ลงทะเบียนไว้ เพื่อให้ผู้ใช้นำไปเป็นรหัสที่ใช้ในการเชื่อมต่อระหว่าง NodeMCU และ Blynk ต่อไป

4. ภายใน Blynk จะมีปุ่มต่าง ๆ ให้เลือกสร้าง App ได้ตามที่ผู้ใช้ต้องการ

5.1.9  LINE Notify

LINE Notify เป็นบริการของ LINE ที่ทำให้เราสามารถส่งข้อความหาผู้ที่ขอใช้ หรือกลุ่มที่ผู้ขอใช้เป็นสมาชิก ซึ่งเราสามารถส่งข้อความ สติกเกอร์ หรือรูปภาพ เข้าไปที่โทรศัพท์ผ่านโปรแกรม Line ได้ โดยใช้ฟังก์ชั่น Line Notify ของ Line ที่ให้บริการเราติดต่อส่งข้อความผ่านทาง API HTTP POST

โดยก่อนใช้งาน จะต้องมี Line Token ก่อน โดยสามารถจัดการได้ ดังนี้ 
1. ไปที่ https://notify-bot.line.me/th/ 
2. กรอก Email และ Password ของ Line เพื่อเข้าสู่ระบบ
3. เมื่อเข้าสู่ระบบแล้ว ให้คลิกชื่อ Line ที่มุมขวาบน คลิกหน้าของฉัน
4. เข้ามาแล้วให้คลิกที่ปุ่ม ออก Token
5. กำหนดชื่อ Token เวลาแสดงแจ้งเตือน
6. เลือกแชทที่ต้องการส่งข้อความแจ้งเตือน จากตัวอย่างจะเป็นการแจ้งเตือน แบบส่วนตัวจาก Line Noti ในกรณีที่ร้านค้ามีการจัดการหลายคน ก็ให้เลือกการกลุ่มแชท เพิ่มเติมคือเมื่อเลือกกลุ่มแชทและออก Token แล้ว ให้ดึง Line Noti เข้ากลุ่ม

7. กด คัดลอก Token เอาไว้ เพื่อนำไปเชื่อมต่อกับเว็บไซต์ของเรา
8. กด คัดลอก Token เอาไว้ เพื่อนำไปเชื่อมต่อกับเว็บไซต์ของเรา จากนั้นกดปิด 

Code

5.2 การเรียกใช้ไลบารี่

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
  • #include <WiFi.h>: ใช้สำหรับการเชื่อมต่อกับเครือข่าย WiFi โดยใช้คำสั่งที่เกี่ยวข้องกับไลบรารี WiFi

  • #include <WiFiClient.h>: ไลบรารีนี้จะให้ฟังก์ชันที่เกี่ยวข้องกับการจัดการการเชื่อมต่อผ่าน WiFi และการจัดการกับข้อมูลที่ส่งผ่าน WiFi

  • #include <BlynkSimpleEsp32.h>: นี่คือไลบรารีที่เชื่อมต่อ ESP32 กับ Blynk โดยใช้คำสั่งที่เกี่ยวข้องกับ Blynk
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
  • #include <Wire.h>: ไลบรารี Wire ใช้สำหรับการเชื่อมต่อและสื่อสารผ่าน I2C ระหว่าง Arduino หรือไมโครคอนโทรลเลอร์กับอุปกรณ์ที่รองรับ I2C เช่น หน้าจอ LCD I2C, ตัวเซ็นเซอร์, หรืออุปกรณ์อื่น ๆ.

  • #include <LiquidCrystal_I2C.h>: ไลบรารี LiquidCrystal_I2C ใช้สำหรับการควบคุมหน้าจอ LCD ที่เชื่อมต่อผ่าน I2C. หน้าจอ LCD I2C ทำให้การใช้งานหน้าจอ LCD กับ Arduino ง่ายขึ้น เนื่องจากลดจำนวนสายที่ต้องใช้ (สายสัญญาณ SDA, SCL).

#include <TridentTD_LineNotify.h>
  • เป็นการ include library ที่เกี่ยวข้องกับการใช้บริการ Line Notify บนโปรแกรม Arduino หรือไมโครคอนโทรลเลอร์ที่รองรับ Arduino IDE
  • TridentTD_LineNotify เป็นไลบรารีที่ถูกพัฒนาขึ้นโดยชุดคำสั่ง “TridentTD” สำหรับการส่งข้อความหรือการแจ้งเตือนผ่านบริการ Line Notify ของ Line. Line Notify เป็นบริการที่ให้สามารถส่งข้อความหรือการแจ้งเตือนจากระบบหรืออุปกรณ์ที่ควบคุมไปยังแชทของ Line ที่เป็นส่วนตัวของผู้ใช้งาน

5.3 การสร้างคลาสเพื่อการกำหนดค่าและตั้งค่าต่าง ๆ

LiquidCrystal_I2C lcd(0x27, 20, 4);
const int Relay1 = 19; 
int sw =  18;
int sensorpin1 = A0;
int sensorpin2 = A7;
  • LiquidCrystal_I2C lcd(0x27, 20, 4);: สร้างอ็อบเจ็กต์ของคลาส LiquidCrystal_I2C โดยกำหนดที่อยู่ I2C ของหน้าจอ LCD (0x27) และขนาดของหน้าจอ (20 ตัวอักษรต่อแถว และ 4 แถว)

  • const int Relay1 = 19;: กำหนดค่าคงที่ Relay1 เท่ากับ 19 ใช้ในการควบคุมรีเลย์ที่เชื่อมต่อกับขาที่ 19 ของ ESP32

  • int sw = 18;: กำหนดตัวแปร sw เท่ากับ 18 ใช้เป็นขาที่เชื่อมต่อกับสวิตช์หรือปุ่ม

  • int sensorpin1 = A0;: กำหนดตัวแปร sensorpin1 เท่ากับ A0 ใช้ในการอ่านค่าจากเซ็นเซอร์ที่เชื่อมต่อกับขา A0 ของ ESP32

  • int sensorpin2 = A7;: กำหนดตัวแปร sensorpin2 เท่ากับ A7 ใช้ในการอ่านค่าจากเซ็นเซอร์ที่เชื่อมต่อกับขา A7 ของ ESP32

5.4 ฟังก์ชัน setup

void setup() {
  pinMode(sw, INPUT);
  pinMode(sensorpin1, INPUT);
  pinMode(sensorpin2, INPUT);
  pinMode(Relay1, OUTPUT);

  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  WiFi.begin(SSID, PASSWORD);
  Serial.printf("WiFi connecting to %s\n",  SSID);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(400);
  }
  Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP());
  LINE.setToken(LINE_TOKEN);

  lcd.begin();
  lcd.backlight();
  Serial.begin(115200);
}
  • pinMode(sw, INPUT);: กำหนดโหมดของขา sw เป็น INPUT, เป็นสวิตช์ที่เชื่อมต่อกับขาที่ 18 ของ ESP32

  • pinMode(sensorpin1, INPUT);: กำหนดโหมดของขา sensorpin1 เป็น INPUT, จะเป็นขาที่ A0 ที่ใช้ในการอ่านค่าจากเซ็นเซอร์  (ZMPT101B)

  • pinMode(sensorpin2, INPUT);: กำหนดโหมดของขา sensorpin2 เป็น INPUT, จะเป็นขาที่ A7 ที่ใช้ในการอ่านค่าจากเซ็นเซอร์  (CT sensor SCT-013)

  • pinMode(Relay1, OUTPUT);: กำหนดโหมดของขา Relay1 เป็น OUTPUT, จะเป็นขาที่ 19 ที่ใช้ในการควบคุมรีเลย์

  • Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);: เริ่มต้นการใช้งาน Blynk โดยใช้ BLYNK_AUTH_TOKEN, ssid, และ pass ที่ทำการเชื่อมไว้ก่อนหน้านี้

  • WiFi.begin(SSID, PASSWORD);: เริ่มต้นการเชื่อมต่อกับเครือข่าย WiFi โดยใช้ SSID และ PASSWORD 

  • LINE.setToken(LINE_TOKEN);: กำหนด Token ของ Line Notify สำหรับใช้ในการส่งข้อความ.

  • lcd.begin();: เริ่มต้นการใช้งาน LCD.

  • lcd.backlight();: เปิดไฟหลังจากที่ LCD ถูกเริ่มต้น.

  • Serial.begin(115200);: เริ่มต้นการใช้งาน Serial ที่ baud rate 115200 bps.

5.5 ฟังก์ชัน loop

void loop() {
  Blynk.run();
  int swmode = digitalRead(sw);
  if (swmode == 0) {
    val = analogRead(sensorpin1);
    I   = analogRead(sensorpin2);
    delay(1000);
    voltage = val / 12.00;
    current = I / 100;
    power = (voltage * current)/1000;
    unit = ((power * 1) / 1000) * 24;
    if(unit = true){
      valunit++;
    }
    
    if(valunit > 10){
      digitalWrite(Relay1,LOW);
      int stat = 0;
      Blynk.virtualWrite(V5,stat);
    }
    else{
      digitalWrite(Relay1,HIGH);
      int stat = 1;
      Blynk.virtualWrite(V5,stat);
    }
      lcd.setCursor (1, 0);
      lcd.print ("Unit   :");
      lcd.setCursor (10, 0);
      lcd.print (valunit);
      lcd.setCursor (13, 0);
      lcd.print ("unit");

      lcd.setCursor (1, 1);
      lcd.print ("Voltage :");
      lcd.print (voltage);
      lcd.setCursor (17, 1);
      lcd.print ("V");

      lcd.setCursor (1, 2);
      lcd.print ("Current :");
      lcd.print (current);
      lcd.setCursor (17, 2);
      lcd.print ("A");

      lcd.setCursor (1, 3);
      lcd.print ("Power   :");
      lcd.print (power);
      lcd.setCursor (17, 3);
      lcd.print ("kW");

      
      Blynk.virtualWrite(V0, voltage);
      Blynk.virtualWrite(V1, current);
      Blynk.virtualWrite(V2, power);
      Blynk.virtualWrite(V3, valunit);
      Blynk.virtualWrite(V4, swmode);

      LINE.notify(valunit);
      delay(3500);
  }

โค้ดจะทำงานซ้ำๆ ไปเรื่อย ๆ โดยตรวจสอบค่าที่ได้จากสวิตช์ (sw) และดำเนินการตามเงื่อนไขที่กำหนด

  • Blynk.run();: รัน Blynk เพื่อตรวจสอบและดำเนินการตามคำสั่งจากแอป Blynk

  • int swmode = digitalRead(sw);: อ่านค่าจากสวิตช์ที่ต่อกับขา sw และเก็บค่าไว้ในตัวแปร swmode

  • ตรวจสอบเงื่อนไข if (swmode == 0) { เพื่อทำงานเฉพาะเมื่อสวิตช์ถูกกด (ค่าเป็น 0)

  • อ่านค่าจากเซ็นเซอร์ที่ต่อกับ sensorpin1 และ sensorpin2 และคำนวณค่าไฟฟ้า (Voltage, Current, Power, Unit)

  • ตรวจสอบเงื่อนไข if(unit = true){ เพื่อเพิ่มค่า valunit ทุกครั้งที่ unit เป็น true (ซึ่งมีการใช้เครื่องหมาย = ซึ่งเป็นการกำหนดค่า ไม่ใช่การเปรียบเทียบ)

  • ตรวจสอบเงื่อนไข if(valunit > 10){ เพื่อทำการปิด Relay1 และส่งค่า stat ให้กับแอป Blynk ที่ Virtual Pin 5

  • ในกรณีที่ไม่เข้าเงื่อนไขข้างบน, Relay1 จะถูกเปิดและส่งค่า stat ที่เป็น 1 ไปยังแอป Blynk ที่ Virtual Pin 5

  • แสดงข้อมูลที่ได้จากการคำนวณบน LCD

  • ส่งค่า Voltage, Current, Power, Unit, และสถานะของสวิตช์ (swmode) ไปยังแอป Blynk ที่ Virtual Pin 0-4

  • ส่งการแจ้งเตือนผ่าน Line Notify โดยใช้ค่า valunit

  • หน่วงเวลา 3.5 วินาที (3500 มิลลิวินาที) ก่อนที่จะทำกระบวนการซ้ำ

 if (swmode == 1) {
    digitalWrite(Relay1, HIGH);
    int stat = 1;
    lcd.setCursor (0, 0);
    lcd.print ("Pornnapat Rakkleang");
    lcd.setCursor (4, 1);
    lcd.print ("SWITCH = OPEN");
    lcd.setCursor (4, 2);
    lcd.print ("LIGHT = ON");
    Blynk.virtualWrite(V4, swmode);
    Blynk.virtualWrite(V5,stat);
  }
lcd.clear();
}

ในส่วนที่กล่าวถึงใน if (swmode == 1) {, จะทำงานเมื่อค่า swmode มีค่าเป็น 1 (หรือเป็น HIGH). ในกรณีนี้ โค้ดทำการทำตามขั้นตอนต่อไปนี้

  • digitalWrite(Relay1, HIGH);: เปิด Relay1 โดยกำหนดขาที่เชื่อมต่อกับ Relay1 ให้มีสถานะ HIGH

  • int stat = 1;: กำหนดค่า stat เป็น 1

  • lcd.setCursor (0, 0); lcd.print ("Pornnapat Rakkleang");: แสดงข้อความ “Pornnapat Rakkleang” ที่ตำแหน่ง (0, 0) บน LCD

  • lcd.setCursor (4, 1); lcd.print ("SWITCH = OPEN");: แสดงข้อความ “SWITCH = OPEN” ที่ตำแหน่ง (4, 1) บน LCD

  • lcd.setCursor (4, 2); lcd.print ("LIGHT = ON");: แสดงข้อความ “LIGHT = ON” ที่ตำแหน่ง (4, 2) บน LCD

  • Blynk.virtualWrite(V4, swmode);: ส่งค่า swmode ไปยังแอป Blynk ที่ Virtual Pin 4

  • Blynk.virtualWrite(V5, stat);: ส่งค่า stat ไปยังแอป Blynk ที่ Virtual Pin 5

6.ผลการดำเนินงานและผลการทดลอง

6.1 บล็อกไดอะแกรมกรทำงานของระบบ

6.2 การทำงานของระบบ

6.3 การทดลอง

6.3.1.วิธีทดลองรับค่าจากเซนเซอร์

โดยการทดลองการตรวจสอบค่าต่างๆ ที่แสดงผลบนจอแอลซีดี จะแบ่งออกเป็น 4 ส่วนดังต่อไปนี้

            (1). ตรวจสอบค่าแรงดันไฟฟ้า การตรวจสอบค่าแรงดันไฟฟ้าจะใช้เซนเซอร์วัดแรงดันไฟฟ้า จากนั้นนำค่าที่ได้จากการวัดมาคำนวณเพื่อไปแสดงผลที่จอแอลซีดี

            (2). ตรวจสอบค่ากระแสไฟฟ้า โดยการตรวจสอบค่ากระแสไฟฟ้าจากเซนเซอร์วัดกระแสไฟฟ้า  จากนั้นนำค่าที่ได้มาคำนวณเพื่อไปแสดงผลที่จอแอลซีดี

            (3). คำนวณค่าพลังงานไฟฟ้า ทำการนำค่าของกระแสไฟฟ้าจากเซนเซอร์วัดกระแสไฟฟ้า  และค่าแรงดันไฟฟ้าจะใช้เซนเซอร์วัดแรงดันไฟฟ้ามาคูณกันเพื่อให้ได้ค่าของพลังงานไฟฟ้าเพื่อไปแสดงผลที่จอแอลซีดี

            (4). ค่าพลังงานที่ใช้ในแต่ละวัน (Unit) ทำการนำค่าของพลังงานฟ้าที่ได้จากข้อ (3). มาคำนวณเพื่อให้ได้ค่าพลังงานที่ใช้ในแต่ละวัน (Unit) เพื่อไปแสดงผลที่จอแอลซีดี

6.3.2. วิธีทดลองการทำงานของหลอดไฟผ่านรีเลย์

    จะเป็นการทดลองตามค่าพลังงานที่ใช้ในแต่ละวัน(Unit) โดยจะแสดงสถานะการทำงานของสวิตช์และหลอดไฟผ่านรีเลย์ไปบันทึกลงในตาราง

6.3.3. วิธีทดลองการแสดงผลของการทำงานผ่านแอปพลิเคชัน

       จะเป็นการทดลองตามจำนวนครั้งในข้อที่ 1 . จากนั้นนำการแสดงสถานะการทำงานของแอปพลิเคชันไปบันทึกลงในตาราง

6.4 ผลการทดลอง

ตารางที่ 1 ตารางบันทึกการรับค่าจากเซนเซอร์

ตารางที่ 2ตารางบันทึกการทำงานของหลอดไฟผ่านรีเลย์

ตารางที่ 3 ตารางบันทึกการทำงานของแอปพลิเคชัน

7. สรุปผล

7.1 เซนเซอร์สามารถรับค่ากระแสไฟฟ้าและค่าแรงดันไฟฟ้าได้

7.2 จอแอลซีดีสามารถแสดงผลแบบเรียลไทม์ได้ตามที่ต้องการ

7.3 รีเลย์สามารถทำได้ตามเงื่อนไขที่กำหนด

7.4 สวิตช์เปลี่ยนโหมดสามารถควบคุมการเปิด-ปิดหลอดไฟได้ตามที่กำหนดไว้

7.5 แอปพลิเคชันสามารถแสดงค่าของเซนเซอร์ , สถานะการทำงานของสวิตช์และหลอดไฟได้อย่างรวดเร็ว

7.6 จากผลการทดลองหลายๆครั้งพบว่า หลังจากทำการทดลองจะพบว่าระบบควบคุมการใช้ปริมาณไฟฟ้าภายในบ้านสามารถทำงานได้อย่างมีประสิทธิภาพ

7.7 การควบคุมพลังงานไฟฟ้าในแต่ละวันจะช่วยลดการใช้พลังงานไฟฟ้าให้น้อยลงได้

 

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

[1] Khushal Babu and others ; Smart Metering of Electricity. [ออนไลน์] 2565. [สืบค้นเมื่อวันที่ 14 กรกฎาคม 2566 ] จาก https://ieeexplore.ieee.org/document/9696870

[2] how2electronics ; IoT Based Electricity Energy Meter using ESP32 & Blynk. [ออนไลน์] 2566. [สืบค้นเมื่อวันที่ 15 กรกฎาคม 2566 ] จาก https://ieeexplore.ieee.org/document/9854599
[3] นายไกรสร สืบบุญ.วิธีใช้งานเซนเซอร์วัดโวลต์ ZMPT101B           Voltage Sensor Arduino code library [ออนไลน์]2564.[สืบค้นเมื่อวันที่ 5 ตุลาคม 2566].จากhttps://www.allnewstep.com/article/424

[4] Pramil ; ZMPT101B.[ออนไลน์]2563. [สืบค้นเมื่อวันที่ 5 ตุลาคม

2566].จากhttps://innovatorsguru.com/zmpt101b

[5] ThaiEasyElec enable your design ; ความรู้เบื้องต้นเกี่ยวกับ Current Sensor (เซ็นเซอร์วัดกระเเส).[ออนไลน์] 2560.[สืบค้นเมื่อวันที่ 6 ตุลาคม 2566].จากhttps://blog.thaieasyelec.com/basic-knowledge-about-current-sensor/

วิดีโอนำเสนอการทำงานของระบบควบคุมการใช้ปริมาณไฟฟ้าภายในบ้าน 

You may also like...

ใส่ความเห็น

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