- Vật liệu thiết yếu:
- Hoạt động của cảm biến dòng ACS712:
- Sơ đồ mạch
- Mã và Giải thích:
- Ứng dụng Android để theo dõi mức tiêu thụ điện:
Chúng ta đều biết về Đồng hồ đo năng lượng điện được lắp đặt trong nhà hoặc văn phòng của mọi người để đo lượng điện tiêu thụ. Cuối mỗi tháng, nhiều người trong chúng ta lo lắng về hóa đơn tiền điện tăng cao và thỉnh thoảng phải nhìn vào đồng hồ đo năng lượng. Nhưng điều gì sẽ xảy ra nếu chúng ta có thể giám sát việc sử dụng điện của mình từ mọi nơi trên thế giới và nhận được SMS / E-mail khi mức tiêu thụ năng lượng của bạn đạt đến một giá trị ngưỡng. Ở đây chúng tôi đang xây dựng Dự án Máy đo năng lượng dựa trên IoT.
Trước đây, chúng tôi đã xây dựng một mạch Đồng hồ đo năng lượng gửi cho bạn SMS về hóa đơn bằng mô-đun GSM. Trong dự án này, chúng tôi tạo ra một đồng hồ đo Năng lượng điện thông minh sử dụng Arduino và mô-đun Wi-Fi ESP8266, không chỉ có thể gửi cho bạn SMS / Email về Hóa đơn tiền điện mà bạn còn có thể theo dõi việc sử dụng năng lượng bất cứ lúc nào và từ bất kỳ đâu trên thế giới. Ở đây chúng tôi đã sử dụng Cảm biến dòng ACS712 để đo mức tiêu thụ năng lượng, chúng tôi sẽ thảo luận về nó ngay sau đây.
Chúng tôi sẽ hỗ trợ nền tảng IFTTT để liên kết Wi-Fi của chúng tôi với các thông báo SMS / E-mail. Chúng tôi cũng sẽ sử dụng Ứng dụng Android Bảng điều khiển MQTT để theo dõi việc sử dụng Năng lượng của chúng tôi. Vậy hãy bắt đầu….
Vật liệu thiết yếu:
- Arduino Uno
- ESP12 / NodeMCU
- Cảm biến dòng ACS712-30Amp
- Bất kỳ thiết bị AC nào
- Dây Nam-Nữ
Hoạt động của cảm biến dòng ACS712:
Trước khi chúng tôi bắt đầu xây dựng dự án, điều rất quan trọng là chúng tôi phải hiểu hoạt động của cảm biến dòng ACS712 vì nó là thành phần quan trọng của dự án. Đo dòng điện, đặc biệt là dòng điện AC luôn là một nhiệm vụ khó khăn do tiếng ồn cùng với vấn đề cách ly không phù hợp, v.v. Nhưng, với sự trợ giúp của mô-đun ACS712 được chế tạo bởi Allegro, mọi thứ đã trở nên dễ dàng hơn rất nhiều.
Mô-đun này hoạt động dựa trên nguyên lý hiệu ứng Hall, được phát hiện bởi Tiến sĩ Edwin Hall. Theo nguyên lý của ông, khi đặt một dây dẫn mang dòng điện vào từ trường, một điện áp được tạo ra trên các cạnh của nó vuông góc với hướng của cả dòng điện và từ trường. Chúng ta đừng đi quá sâu vào khái niệm này, nhưng hãy nói một cách đơn giản, chúng ta sử dụng một cảm biến Hall để đo từ trường xung quanh một vật dẫn mang dòng điện. Phép đo này sẽ tính bằng milivôn mà chúng tôi gọi là điện áp hội trường. Điện áp Hall đo được này tỷ lệ với dòng điện chạy qua dây dẫn.
Ưu điểm chính của việc sử dụng Cảm biến dòng ACS712 là có thể đo cả dòng AC và DC và nó cũng cung cấp sự cách ly giữa Tải (tải AC / DC) và Đơn vị đo (phần Vi điều khiển). Như trong hình, chúng ta có ba chân trên mô-đun lần lượt là Vcc, Vout và Ground.
Khối thiết bị đầu cuối 2 chân là nơi có dây dẫn dòng điện đi qua. Mô-đun hoạt động trên + 5V vì vậy Vcc phải được cấp nguồn 5V và nối đất với đất của hệ thống. Chân Vout có điện áp bù là 2500mV, nghĩa là khi không có dòng điện chạy qua dây thì điện áp đầu ra sẽ là 2500mV và khi dòng điện chạy dương thì điện áp sẽ lớn hơn 2500mV và khi dòng điện chạy qua là điện áp âm thì điện áp sẽ nhỏ hơn 2500mV.
Chúng ta sẽ sử dụng chân Analog của Arduino để đọc điện áp đầu ra (Vout) của mô-đun, sẽ là 512 (2500mV) khi không có dòng điện chạy qua dây. Giá trị này sẽ giảm khi dòng điện chạy theo chiều âm và sẽ tăng khi dòng điện chạy theo hướng dương. Bảng dưới đây sẽ giúp bạn hiểu điện áp đầu ra và giá trị ADC thay đổi như thế nào dựa trên dòng điện chạy qua dây dẫn.
Các giá trị này được tính toán dựa trên thông tin được cung cấp trong Datasheet của ACS712. Bạn cũng có thể tính toán chúng bằng các công thức dưới đây:
Điện áp Vout (mV) = (Giá trị ADC / 1023) * 5000 Dòng điện qua dây (A) = (Vout (mv) -2500) / 185
Bây giờ, chúng ta đã biết cách hoạt động của Cảm biến ACS712 và những gì chúng ta có thể mong đợi từ nó. Chúng ta hãy tiến hành sơ đồ mạch.
Chúng tôi đã sử dụng cảm biến này để chế tạo Mạch Ampe kế kỹ thuật số sử dụng Vi điều khiển PIC và ACS712.
Sơ đồ mạch
Bước 1: Đăng nhập IFTTT bằng thông tin đăng nhập của bạn.
Bước 2: Trên Applet của tôi, nhấp vào New Applet
Bước 3: Nhấp vào + cái này
Bước 4: Tìm kiếm AdaFruit và nhấp vào nó.
Bước 5: Nhấp vào Theo dõi nguồn cấp dữ liệu trên AdaFruit IO.
Bước 6: Chọn Nguồn cấp dữ liệu dưới dạng hóa đơn, Mối quan hệ là ' bằng' và giá trị ngưỡng mà bạn muốn có một E-mail. Nhấp vào Tạo hành động . Tôi đã sử dụng 4 làm giá trị kích hoạt ngưỡng của mình.
Bước 7: Nhấp vào + đó . Tìm kiếm G-mail và nhấp vào nó và Đăng nhập bằng thông tin đăng nhập g-mail của bạn.
Bước 8: Nhấp vào gửi email cho chính bạn.
Bước 9: Viết chủ đề và nội dung của bạn như hình và bấm để tạo.
Bước 10: ' Công thức ' của bạn đã sẵn sàng. Xem lại nó và nhấp vào kết thúc.
Bây giờ, chúng ta đã hoàn tất việc tích hợp web. Hãy chuyển sang phần viết mã..
Mã và Giải thích:
Chúng tôi đang sử dụng giao tiếp nối tiếp giữa ESP12 và Arduino. Vì vậy, chúng ta phải viết mã cho cả Arduino và NodeMCU để truyền và nhận.
Mã cho Phần phát tức là cho Arduino Uno:
Mã Arduino hoàn chỉnh được đưa ra ở cuối hướng dẫn này. Chúng tôi sẽ sử dụng thư viện cho Cảm biến hiện tại có thể được tải xuống từ Liên kết này.
Thư viện này có sẵn chức năng để tính toán dòng điện. Bạn có thể viết mã của mình để tính dòng điện nhưng thư viện này có các thuật toán đo dòng điện chính xác.
Đầu tiên, hãy bao gồm thư viện cho cảm biến hiện tại như:
#include "ACS712.h"
Tạo một mảng để lưu trữ năng lượng để gửi nó đến NodeMCU.
char watt;
Tạo một phiên bản để sử dụng ACS712-30Amp ở mã PIN A0. Thay đổi đối số Đầu tiên nếu bạn đang sử dụng biến thể 20Amp hoặc 5 Amp.
Cảm biến ACS712 (ACS712_30A, A0);
Trong chức năng thiết lập , xác định tốc độ truyền là 115200 để giao tiếp với NodeMCU. Gọi hàm sensor.calibrate () để hiệu chỉnh cảm biến dòng điện để có kết quả đọc chính xác.
void setup () { Serial.begin (115200); sensor.calibrate (); }
Trong hàm loop , chúng ta sẽ gọi sensor.getCurrentAC (); hàm lấy giá trị hiện tại và lưu trong biến float I. Sau khi nhận được dòng, tính công suất theo công thức P = V * I. Chúng tôi sử dụng 230V vì nó là tiêu chuẩn chung ở các nước Châu Âu, Hãy thay đổi theo địa phương của bạn, nếu cần
void loop () { float V = 230; float I = sensor.getCurrentAC (); float P = V * I;
Các đường này chuyển đổi công suất thành Wh.
last_time = current_time; current_time = millis (); Wh = Wh + P * ((current_time -last_time) /3600000.0);
Bây giờ, chúng ta phải chuyển đổi Wh này thành dạng ký tự để gửi nó tới NodeMCU, cho this dtostrf (); sẽ chuyển đổi một float thành một mảng char để sau đó nó có thể được in dễ dàng:
dtostrf (Wh, 4, 2, watt);
Định dạng là:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Viết mảng ký tự này vào bộ đệm nối tiếp bằng cách sử dụng Serial.write () ; chức năng. Điều này sẽ gửi giá trị Wh đến NodeMCU.
Serial.write (watt); trì hoãn (10000); }
Mã cho phần bộ thu NodeMCU ESP12:
Đối với điều này, chúng tôi cần thư viện AdaFruit MQTT có thể được tải xuống từ liên kết này.
Bây giờ, hãy mở Arduino IDE. Đi tới ví dụ -> Thư viện AdaFruit MQTT -> mqtt_esp8266
Chúng tôi sẽ chỉnh sửa mã này theo các khóa AIO và thông tin đăng nhập Wi-Fi và dữ liệu nối tiếp đến từ Arduino.
Đầu tiên, chúng tôi đã bao gồm tất cả các thư viện cho Mô-đun Wi-Fi ESP12 và AdaFruit MQTT.
#include
Chúng tôi xác định SSID và Mật khẩu cho Wi-Fi của bạn, từ đó bạn muốn kết nối ESp-12e của mình.
# xác định WLAN_SSID "xxxxxxxx" # xác định WLAN_PASS "xxxxxxxxxxx"
Phần này xác định máy chủ AdaFruit và cổng máy chủ được cố định lần lượt là “io.adafruit.com” và “1883”.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Thay thế các trường này bằng tên người dùng và khóa AIO mà bạn đã sao chép từ trang AdaFruit khi tạo Nguồn cấp dữ liệu.
# xác định AIO_USERNAME "********" # xác định AIO_KEY "******************************"
Sau đó, chúng tôi đã tạo một lớp ESP12 WiFiClient để kết nối với máy chủ MQTT.
Máy khách WiFiClient;
Thiết lập lớp máy khách MQTT bằng cách chuyển vào máy khách WiFi và máy chủ MQTT và thông tin đăng nhập.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Thiết lập một nguồn cấp dữ liệu có tên 'Power' và 'bill' để xuất bản các thay đổi.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
Trong chức năng thiết lập , chúng tôi kết nối mô-đun Wi-Fi với điểm truy cập Wi-fi.
void setup () { Serial.begin (115200); chậm trễ (10); Serial.println (F ("Bản trình diễn Adafruit MQTT")); // Kết nối với điểm truy cập WiFi. Serial.println (); Serial.println (); Serial.print ("Đang kết nối với"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); …. …. … }
Trong chức năng vòng lặp , chúng tôi sẽ kiểm tra dữ liệu đến từ Arduino và xuất bản dữ liệu này lên AdaFruit IO.
void loop () { // Đảm bảo kết nối với máy chủ MQTT vẫn hoạt động (điều này sẽ tạo // kết nối đầu tiên và tự động kết nối lại khi bị ngắt kết nối). Xem thêm định nghĩa hàm // MQTT_connect bên dưới. MQTT_connect (); int i = 0; float watt1;
Hàm này kiểm tra dữ liệu đến từ Arduino và lưu trữ dữ liệu này vào mảng watt bằng cách sử dụng hàm serial.read ().
if (Serial.available ()> 0) { delay (100); // cho phép nhận tất cả nối tiếp được gửi cùng nhau trong khi (Serial.available () && i <5) { watt = Serial.read (); } watt = '\ 0'; }
Hàm atof () chuyển đổi các ký tự thành giá trị float và chúng ta sẽ lưu trữ giá trị float này trong một biến float khác watt1.
watt1 = atof (watt);
Tính lượng hóa đơn bằng cách nhân công suất (tính bằng Wh) với biểu giá năng lượng và chia nó cho 1000 để thành công suất tính bằng KWh.
bill_amount = watt1 * (energyTariff / 1000); // 1unit = 1kwH
Bây giờ chúng tôi có thể xuất bản công cụ!
Serial.print (F ("\ nSending Power val")); Serial.println (watt1); Serial.print ("…");
Đoạn mã này đang xuất bản các giá trị nguồn lên Nguồn cấp
if (! power.publish (watt1)) { Serial.println (F ("Không thành công")); } else { Serial.println (F ("OK!")); }
Điều này sẽ công bố hóa đơn tiền điện vào nguồn cấp hóa đơn .
if (! bill.publish (bill_amount)) { Serial.println (F ("Không thành công")); } else { Serial.println (F ("OK!")); }
Số tiền trong hóa đơn của chúng tôi có thể thay đổi nhanh nhưng IFTTT cần thời gian để kích hoạt applet, vì vậy những dòng này sẽ cung cấp thời gian kích hoạt để chúng tôi có thể nhận được email ngưỡng.
Thay đổi giá trị bill_amount mà bạn muốn nhận email. Ngoài ra, hãy thay đổi thiết lập IFTTT AdaFruit IO.
if (bill_amount == 4) { for (int i = 0; i <= 2; i ++) { bill.publish (bill_amount); chậm trễ (5000); } bill_amount = 6; }
Mã hoàn chỉnh cho Arduino và NodeMCU ESP12 được đưa ra ở cuối hướng dẫn này.
Bây giờ, hãy tải mã lên cả hai bảng. Kết nối phần cứng của bạn như được hiển thị trong Sơ đồ mạch và Mở io.adafruit.com. Mở trang tổng quan bạn vừa tạo. Bạn sẽ thấy Mức tiêu thụ điện và Hóa đơn tiền điện đang cập nhật.
Khi hóa đơn của bạn đạt đến INR 4 thì bạn sẽ nhận được một email như thế này.
Ứng dụng Android để theo dõi mức tiêu thụ điện:
Bạn có thể sử dụng Ứng dụng Android để theo dõi các giá trị. Đối với điều này, hãy tải xuống ứng dụng Android Bảng điều khiển MQTT từ Cửa hàng Play hoặc từ Liên kết này.
Để thiết lập kết nối với io.adafruit.com, hãy làm theo các bước sau:
Bước 1: Mở ứng dụng và nhấp vào dấu “+”. Điền vào Id khách hàng bất cứ thứ gì bạn muốn. Máy chủ và cổng vẫn giống như trong ảnh chụp màn hình. Bạn sẽ nhận được Tên người dùng và mật khẩu (Khóa hoạt động) từ bảng điều khiển AdaFruit IO như hình dưới đây.
Active Key là mật khẩu của bạn.
Bước 2: Chọn Đồng hồ đo điện và chọn Đăng ký. Trong đăng ký, hãy đặt tên và chủ đề thân thiện. Định dạng chủ đề là ' yourusername' / feeds / 'feedname' và nhấp vào tạo.
Bước 3: Theo cách tương tự, hãy đăng ký nguồn cấp hóa đơn.
Bước 4: Khi thiết bị của bạn tiêu thụ năng lượng, các giá trị cập nhật sẽ được hiển thị trong Nguồn và Hóa đơn .
Đây là cách bạn có thể tạo Đồng hồ đo năng lượng điện thông minh, không chỉ có thể được theo dõi từ bất kỳ nơi nào trên thế giới mà còn kích hoạt Email khi bạn có mức tiêu thụ điện cao.
Đồng thời kiểm tra tất cả các Dự án IoT của chúng tôi.