Đồng hồ đo điện IoT bằng ESP32 và Blynk

0
4
Đồng hồ đo điện IoT

Đồng hồ đo điện IoT đang trở thành xu hướng trong việc giám sát và quản lý năng lượng tiêu thụ.

Trong thời đại công nghệ 4.0, việc giám sát và tiết kiệm năng lượng điện ngày càng trở nên quan trọng. Việc theo dõi lượng điện năng tiêu thụ theo cách truyền thống khá tẻ nhạt và mất thời gian. Giải pháp đồng hồ đo điện thông minh (IoT Energy Meter) ra đời giúp tự động hóa quy trình này, mang lại sự tiện lợi và hiệu quả.

Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách chế tạo một chiếc đồng hồ đo điện năng thông minh sử dụng module ESP32 và ứng dụng Blynk. Thiết bị này cho phép bạn giám sát điện năng tiêu thụ từ xa thông qua điện thoại hoặc máy tính bảng một cách dễ dàng.

Các linh kiện chính của đồng hồ đo điện IoT

ESP32

Là trung tâm xử lý dữ liệu, giao tiếp với các cảm biến và hỗ trợ kết nối Wifi để gửi dữ liệu lên Blynk.

Xem thêm bài viết: Giới thiệu module ESP32

Cảm biến dòng điện SCT-013

SCT-013-000 là cảm biến dòng điện không xâm lấn, dạng kẹp, có khả năng đo dòng điện xoay chiều tối đa 100A. Cảm biến này có thể kẹp trực tiếp vào dây điện mà không cần cắt dây, giúp việc lắp đặt nhanh chóng và an toàn hơn.

Cảm biến SCT-013 đặc biệt hữu ích trong việc giám sát điện năng tiêu thụ của toàn bộ tòa nhà, hệ thống điện công nghiệp và dân dụng. Nó được ứng dụng rộng rãi trong các lĩnh vực như: giám sát và bảo vệ động cơ AC, thiết bị nén khí, hệ thống chiếu sáng, giám sát quá dòng và bảo vệ thiết bị điện.

Cảm biến dòng điện SCT-013

Thông số kỹ thuật:

  • Model: SCT-013
  • Dòng điện đầu vào: 0 – 100A AC
  • Dòng điện đầu ra: 0 – 50mA
  • Độ chính xác: ±1%
  • Độ tuyến tính: ≤0.2%
  • Tỷ lệ biến dòng: 1:1800
  • Điện áp làm việc tối đa: 660V
  • Tần số hoạt động: 50Hz – 1kHz
  • Nhiệt độ hoạt động: -25°C ~ +70°C
  • Nhiệt độ bảo quản: -40°C ~ +85°C
  • Độ bền điện môi: 3kV
  • Khả năng chống cháy: UL94-V0
  • Vật liệu lõi: Ferrite
  • Trọng lượng: 55g

Với thiết kế nhỏ gọn, dễ dàng lắp đặt và độ chính xác cao, SCT-013 là lựa chọn lý tưởng cho các hệ thống đo lường và giám sát dòng điện trong nhiều ứng dụng khác nhau.

Cảm biến điện áp ZMPT101B

ZMPT101B là cảm biến điện áp xoay chiều có độ chính xác cao, được sử dụng để đo và giám sát điện áp AC trong nhiều ứng dụng khác nhau. Module này tích hợp một biến áp đo điện áp chính xác cao và một bộ khuếch đại thuật toán (op-amp) giúp điều chỉnh và hiệu chỉnh tín hiệu đầu ra, đảm bảo độ ổn định và chính xác trong quá trình đo lường.

Cảm biến ZMPT101B thích hợp cho các hệ thống đo lường điện áp, giám sát lưới điện, phân tích chất lượng điện năng và các ứng dụng điện tử khác.

Cảm biến điện áp ZMPT101B

Thông số kỹ thuật:

  • Dòng điện đầu vào: 2mA
  • Độ trễ (với đầu vào 2mA, điện trở lấy mẫu 100Ω): 20s
  • Phạm vi đo tuyến tính: 0 – 1000V AC
  • Điện áp cách ly: 4000V
  • Nhiệt độ hoạt động: -40°C ~ +70°C

Với thiết kế nhỏ gọn, độ cách ly cao và khả năng đo chính xác, ZMPT101B là lựa chọn lý tưởng cho các hệ thống giám sát điện áp trong công nghiệp và dân dụng.

Ứng dụng Blynk

Blynk là một nền tảng IoT (Internet of Things) mạnh mẽ, cho phép người dùng dễ dàng tạo giao diện đồ họa trên điện thoại thông minh để giám sát và điều khiển các thiết bị IoT từ xa. Với Blynk, bạn có thể kết nối và quản lý các vi điều khiển như Arduino, ESP8266, ESP32, Raspberry Pi và nhiều loại phần cứng khác thông qua kết nối Wi-Fi, Ethernet, hoặc mạng di động.

Các linh kiện khác:

  • Module ESP32 LCD 16×2 (tùy chọn)
  • Điện trở 10KΩ (2 con)
  • Điện trở 100Ω
  • Tụ điện 10µF
  • Biến trở 10KΩ (nếu sử dụng LCD)

Sơ đồ mạch và kết nối

Sơ đồ mạch của đồng hồ đo điện IoT được thiết kế đơn giản bằng phần mềm Fritzing như sau:

Sơ đồ mạch đồng hồ đo điện IoT
  • Cả hai cảm biến dòng điện SCT-013 và cảm biến điện áp ZMPT101B đều được cấp nguồn 5V từ chân Vin của ESP32.
  • Chân GND của hai module được nối với chân GND của ESP32.
  • Chân tín hiệu analog của cảm biến điện áp ZMPT101B được kết nối với chân GPIO35 của ESP32.
  • Chân tín hiệu analog của của cảm biến dòng điện SCT-013 được kết nối với chân GPIO34 của ESP32.
  • Mạch sử dụng thêm hai điện trở 10K, một điện trở 100 ohm và một tụ điện 10uF.

Ngoài phần kết nối này, các dây AC nơi cần đo dòng điện và điện áp được kết nối với đầu vào AC của cảm biến điện áp. Tương tự, kẹp cảm biến dòng điện không có bất kỳ kết nối nào và một dây pha hoặc dây trung tính đơn được chèn vào phần kẹp như trong sơ đồ mạch ở trên.

Màn hình LCD 16×2 sử dụng trong dự án này là tùy chọn. Trong trường hợp bạn muốn kết nối LCD, cần nhiều kết nối. Kết nối các chân số 4, 6, 11, 12, 13, 14 của LCD với các chân D13, D12, D14, D27, D26, D25 của ESP32. Đồng thời kết nối các chân 1, 5, 16 của LCD với GND và các chân 2, 15 với nguồn 5V VCC. Sử dụng chiết áp 10K tại chân 3 của LCD để điều chỉnh độ tương phản LCD.

Cài đặt ứng dụng Blynk

Blynk là một ứng dụng chạy trên các thiết bị Android và IOS để giám sát hoặc điều khiển bất kỳ ứng dụng nào dựa trên IoT bằng điện thoại thông minh. Nó cho phép bạn tạo giao diện người dùng đồ họa cho ứng dụng IoT. Ở đây chúng ta sẽ hiển thị dữ liệu đồng hồ đo điện năng IoT trên ứng dụng Blynk.  

  1. Tải xuống và cài đặt ứng dụng Blynk từ Google Play Store. Người dùng IOS có thể tải xuống từ App Store. Sau khi cài đặt xong, mở ứng dụng và đăng ký bằng id Email và Mật khẩu của bạn.  
  2. Từ bảng điều khiển, tạo một dự án mới và chọn ESP32 & Kết nối Wifi.  
  3. Sau đó kéo & thả hoặc thêm 4 widget để hiển thị điện áp, dòng điện, công suất và tổng năng lượng tiêu thụ (kWh) và gán biến theo mã và sau đó gửi email mã xác thực.  
  4. Bạn sẽ nhận được mã xác thực trong email. Sao chép mã xác thực này. Mã này sẽ được sử dụng trong chương trình của bạn.

Cài đặt thư viện cần thiết

Thư viện EmonLib: Thư viện EmonLib được sử dụng cho đồng hồ đo điện năng, tính toán giá trị hiệu dụng và công suất. EmonLib là Giám sát liên tục năng lượng điện lặp lại, cứ sau 5 hoặc 10 giây, một chuỗi các phép đo điện áp và dòng điện. EemonLib liên tục đo trong nền điện áp và tất cả các kênh đầu vào hiện tại, tính toán số lượng trung bình thực cho mỗi kênh và sau đó thông báo cho bản phác thảo rằng các phép đo có sẵn và nên được đọc và xử lý.  

Thư viện Blynk: Blynk là nền tảng Internet of Things phổ biến nhất để kết nối bất kỳ phần cứng nào với đám mây, thiết kế ứng dụng để điều khiển chúng và quản lý các sản phẩm đã triển khai của bạn ở quy mô lớn. Với Blynk Library, bạn có thể kết nối hơn 400 mô hình phần cứng bao gồm Arduino, ESP8266 & ESP32 với Blynk Cloud.  

Nguyên lý hoạt động

Đo lường: Cảm biến SCT-013 đo dòng điện và ZMPT101B đo điện áp của mạch điện.

Xử lý dữ liệu: ESP32 nhận dữ liệu từ hai cảm biến này và sử dụng thư viện EmonLib để tính toán các thông số như điện áp hiệu dụng (Vrms), dòng điện hiệu dụng (Irms), công suất biểu kiến (apparent power) và điện năng tiêu thụ (kWh).

Truyền dữ liệu: Dữ liệu này sau đó được gửi đến ứng dụng Blynk thông qua kết nối wifi.

Hiển thị và giám sát: Ứng dụng Blynk hiển thị các thông số điện năng một cách trực quan, giúp người dùng dễ dàng theo dõi mức tiêu thụ điện.

Lập trình ESP32

Sau khi cài đặt các thư viện cần thiết, bạn có thể nạp mã nguồn/chương trình vào ESP32.
Lưu ý:

  • Thay đổi SSID, mật khẩu Wifi và mã xác thực Blynk trong mã nguồn cho phù hợp với thông tin của bạn.
  • Mã nguồn bao gồm hai phiên bản: có sử dụng LCD và không sử dụng LCD.

Mã nguồn (không sử dụng LCD):

#define BLYNK_PRINT Serial

#include “EmonLib.h”    //https://github.com/openenergymonitor/EmonLib

#include <WiFi.h>

#include <WiFiClient.h>

#include <BlynkSimpleEsp32.h>

EnergyMonitor emon;

#define vCalibration 106.8

#define currCalibration 0.52

BlynkTimer timer;

char auth[] = “*********************”;

char ssid[] = “*********************”;

char pass[] = “*********************3”;

float kWh = 0;

unsigned long lastmillis = millis();

void myTimerEvent() {

  emon.calcVI(20, 2000);

  Serial.print(“Vrms: “);

  Serial.print(emon.Vrms, 2);

  Serial.print(“V”);

  Blynk.virtualWrite(V0, emon.Vrms);

  Serial.print(“\tIrms: “);

  Serial.print(emon.Irms, 4);

  Serial.print(“A”);

  Blynk.virtualWrite(V1, emon.Irms);

  Serial.print(“\tPower: “);

  Serial.print(emon.apparentPower, 4);

  Serial.print(“W”);

  Blynk.virtualWrite(V2, emon.apparentPower);

  Serial.print(“\tkWh: “);

  kWh = kWh + emon.apparentPower*(millis()-lastmillis)/3600000000.0;

  Serial.print(kWh, 4);

  Serial.println(“kWh”);

  lastmillis = millis();

  Blynk.virtualWrite(V3, kWh);

}

void setup() {

  Serial.begin(9600);

  emon.voltage(35, vCalibration, 1.7);  // Voltage: input pin, calibration, phase_shift

  emon.current(34, currCalibration);    // Current: input pin, calibration.

  Blynk.begin(auth, ssid, pass);

  timer.setInterval(5000L, myTimerEvent);

}

void loop() {

  Blynk.run();

  timer.run();

}

Mã nguồn (có sử dụng LCD):

#include <LiquidCrystal.h>

LiquidCrystal lcd(13, 12, 14, 27, 26, 25);

#define BLYNK_PRINT Serial

#include “EmonLib.h”

#include <WiFi.h>

#include <WiFiClient.h>

#include <BlynkSimpleEsp32.h>

EnergyMonitor emon;

#define vCalibration 83.3

#define currCalibration 0.50

BlynkTimer timer;

char auth[] = “xxxxxxxxxxx”;

char ssid[] = “xxxxx”;

char pass[] = “xxxxx”;

float kWh = 0;

unsigned long lastmillis = millis();

void myTimerEvent()

{

  emon.calcVI(20, 2000);

  kWh = kWh + emon.apparentPower*(millis()-lastmillis)/3600000000.0;

  yield();

  Serial.print(“Vrms: “);

  Serial.print(emon.Vrms, 2);

  Serial.print(“V”);

  Serial.print(“\tIrms: “);

  Serial.print(emon.Irms, 4);

  Serial.print(“A”);

  Serial.print(“\tPower: “);

  Serial.print(emon.apparentPower, 4);

  Serial.print(“W”);

  Serial.print(“\tkWh: “);

  Serial.print(kWh, 5);

  Serial.println(“kWh”);

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print(“Vrms:”);

  lcd.print(emon.Vrms, 2);

  lcd.print(“V”);

  lcd.setCursor(0, 1);

  lcd.print(“Irms:”);

  lcd.print(emon.Irms, 4);

  lcd.print(“A”);

  delay(2500);

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print(“Power:”);

  lcd.print(emon.apparentPower, 4);

  lcd.print(“W”);

  lcd.setCursor(0, 1);

  lcd.print(“kWh:”);

  lcd.print(kWh, 4);

  lcd.print(“W”);

  delay(2500);

  lastmillis = millis();

  Blynk.virtualWrite(V0, emon.Vrms);

  Blynk.virtualWrite(V1, emon.Irms);

  Blynk.virtualWrite(V2, emon.apparentPower);

  Blynk.virtualWrite(V3, kWh);

}

void setup()

{

  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);

  lcd.begin(16, 2);

  emon.voltage(35, vCalibration, 1.7);  // Voltage: input pin, calibration, phase_shift

  emon.current(34, currCalibration);    // Current: input pin, calibration.

  timer.setInterval(5000L, myTimerEvent);

  lcd.setCursor(3, 0);

  lcd.print(“IoT Energy”);

  lcd.setCursor(5, 1);

  lcd.print(“Meter”);

  delay(3000);

  lcd.clear();

}

void loop()

{

  Blynk.run();

  timer.run();

}

Giải thích mã nguồn

  • Đầu tiên, chúng ta khai báo các thư viện cần thiết, bao gồm EmonLib, WiFi, WiFiClient và BlynkSimpleEsp32.
  • Tạo đối tượng EnergyMonitor và BlynkTimer.
  • Khai báo các biến và hằng số, bao gồm mã xác thực Blynk, SSID và mật khẩu Wifi, biến kWh và lastmillis.
  • Hàm myTimerEvent() được gọi định kỳ để tính toán và gửi dữ liệu lên Blynk.
  • Hàm setup() khởi tạo kết nối Wifi, cảm biến điện áp, cảm biến dòng điện và Blynk.
  • Hàm loop() chạy liên tục để cập nhật dữ liệu và gửi lên Blynk.

Kiểm tra hoạt động

Sau khi nạp chương trình cho ESP32, thiết bị sẽ kết nối với mạng Wifi. Màn hình LCD sẽ hiển thị thông tin về điện áp, dòng điện, công suất và tổng năng lượng tiêu thụ. Bạn cũng có thể theo dõi các thông số này trên ứng dụng Blynk.

Kết luận

Việc tự chế tạo đồng hồ đo điện IoT không chỉ giúp bạn nâng cao kiến thức về điện tử và lập trình mà còn mang lại lợi ích thiết thực trong việc kiểm soát năng lượng tiêu thụ, góp phần tiết kiệm chi phí và bảo vệ môi trường. Hy vọng bài viết này đã cung cấp cho bạn những thông tin hữu ích để bắt đầu hành trình khám phá thế giới IoT.

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây