- Wymagane materiały:
- Działanie czujnika prądu ACS712:
- Schemat obwodu
- Kod i wyjaśnienie:
- Aplikacja na Androida do monitorowania zużycia energii elektrycznej:
Wszyscy wiemy o licznikach energii elektrycznej, które są instalowane w każdym domu lub biurze w celu pomiaru zużycia energii elektrycznej. W końcu każdego miesiąca wielu z nas martwi się wysokimi rachunkami za prąd i od czasu do czasu musimy spojrzeć na licznik energii. Ale co, jeśli możemy monitorować nasze zużycie energii elektrycznej z dowolnego miejsca na świecie i otrzymać SMS / e-mail, gdy zużycie energii osiągnie wartość progową. Tutaj budujemy projekt licznika energii oparty na IoT.
Wcześniej zbudowaliśmy obwód licznika energii, który wysyła SMS-a o rachunku za pomocą modułu GSM. W tym projekcie wykonujemy inteligentny licznik energii elektrycznej za pomocą Arduino i modułu Wi-Fi ESP8266, który może nie tylko wysłać SMS / e-mail z rachunkiem za energię elektryczną, ale także monitorować zużycie energii w dowolnym czasie iz dowolnego miejsca na świecie. Tutaj użyliśmy czujnika prądu ACS712 do pomiaru zużycia energii, omówimy to wkrótce.
Skorzystamy z pomocy platformy IFTTT, aby połączyć nasze Wi-Fi z powiadomieniami SMS / E-mail. Będziemy również używać aplikacji MQTT Dashboard dla systemu Android do monitorowania zużycia energii. Więc zacznijmy….
Wymagane materiały:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp Czujnik prądu
- Dowolne urządzenie AC
- Przewody męsko-żeńskie
Działanie czujnika prądu ACS712:
Zanim zaczniemy budować projekt, bardzo ważne jest, abyśmy zrozumieli działanie czujnika prądu ACS712, ponieważ jest to kluczowy element projektu. Pomiar prądu, zwłaszcza prądu zmiennego, jest zawsze trudnym zadaniem ze względu na szum związany z nim, problem z nieprawidłową izolacją itp. Jednak z pomocą tego modułu ACS712, który został zaprojektowany przez Allegro, sprawa stała się o wiele łatwiejsza.
Moduł ten działa na zasadzie efektu Halla, którą odkrył dr Edwin Hall. Zgodnie z jego zasadą, kiedy przewodnik przewodzący prąd jest umieszczany w polu magnetycznym, napięcie jest generowane na jego krawędziach prostopadle do kierunków zarówno prądu, jak i pola magnetycznego. Nie zagłębiajmy się zbytnio w tę koncepcję, ale po prostu używamy czujnika Halla do pomiaru pola magnetycznego wokół przewodnika przewodzącego prąd. Ten pomiar będzie wyrażony w miliwoltach, które nazwaliśmy napięciem halla. To zmierzone napięcie Halla jest proporcjonalne do prądu przepływającego przez przewodnik.
Główną zaletą stosowania czujnika prądu ACS712 jest to, że może mierzyć zarówno prąd AC, jak i DC, a także zapewnia izolację między obciążeniem (obciążenie AC / DC) a jednostką pomiarową (część mikrokontrolera). Jak pokazano na rysunku, mamy trzy piny w module, które są odpowiednio Vcc, Vout i Ground.
2-pinowa listwa zaciskowa to miejsce, w którym należy przeprowadzić przewód przewodzący prąd. Moduł pracuje na + 5V więc Vcc powinno być zasilane napięciem 5V a masa powinna być podłączona do uziemienia systemu. Pin Vout ma przesunięcie napięcia 2500 mV, co oznacza, że gdy nie ma prądu przepływającego przez przewód, wówczas napięcie wyjściowe będzie wynosić 2500 mV, a gdy przepływający prąd jest dodatni, napięcie będzie większe niż 2500 mV, a gdy przepływający prąd będzie ujemny, napięcie będzie mniejsze niż 2500mV.
Wykorzystamy pin analogowy Arduino do odczytu napięcia wyjściowego (Vout) modułu, które będzie wynosić 512 (2500mV), gdy przez przewód nie będzie płynął prąd. Wartość ta zmniejszy się, gdy prąd płynie w kierunku ujemnym i wzrośnie, gdy prąd płynie w kierunku dodatnim. Poniższa tabela pomoże ci zrozumieć, jak zmienia się napięcie wyjściowe i wartość ADC w zależności od prądu przepływającego przez przewód.
Wartości te zostały obliczone na podstawie informacji podanych w arkuszu danych ACS712. Możesz je również obliczyć za pomocą poniższych wzorów:
Napięcie Vout (mV) = (Wartość ADC / 1023) * 5000 Prąd przepływający przez przewód (A) = (Vout (mv) -2500) / 185
Teraz, gdy wiemy, jak działa czujnik ACS712 i czego możemy się po nim spodziewać. Przejdźmy do schematu obwodu.
Użyliśmy tego czujnika do wykonania obwodu cyfrowego amperomierza za pomocą mikrokontrolera PIC i ACS712.
Schemat obwodu
Krok 1: Zaloguj się do IFTTT za pomocą swoich poświadczeń.
Krok 2: Na Moje aplety kliknij Nowy aplet
Krok 3: Kliknij + this
Krok 4: Wyszukaj AdaFruit i kliknij go.
Krok 5: Kliknij Monitoruj kanał w AdaFruit IO.
Krok 6: Wybierz Feed jako rachunek, Relację jako „ równą” i wartość progową, przy której chcesz otrzymać e-mail. Kliknij Utwórz akcję . Użyłem 4 jako mojej progowej wartości wyzwalającej.
Krok 7: Kliknij + to . Wyszukaj G-mail i kliknij go i zaloguj się przy użyciu swoich danych logowania do poczty g-mail.
Krok 8: Kliknij Wyślij do siebie e-mail.
Krok 9: Napisz temat i treść, jak pokazano, i kliknij, aby utworzyć.
Krok 10: Twój „ przepis ” jest gotowy. Przejrzyj to i kliknij Zakończ.
Skończyliśmy z integracją internetową. Przejdźmy do kodowania.
Kod i wyjaśnienie:
Używamy komunikacji szeregowej między ESP12 i Arduino. Musimy więc napisać kod zarówno dla Arduino, jak i NodeMCU do wysyłania i odbierania.
Kod części nadajnika, czyli dla Arduino Uno:
Pełny kod Arduino znajduje się na końcu tego samouczka. Będziemy używać biblioteki dla czujnika prądu, którą można pobrać z tego linku.
Ta biblioteka ma wbudowaną funkcję obliczania prądu. Możesz napisać kod, aby obliczyć prąd, ale ta biblioteka ma dokładne algorytmy pomiaru prądu.
Najpierw dołącz bibliotekę dla aktualnego czujnika jako:
#include „ACS712.h”
Utwórz tablicę do przechowywania energii do wysłania jej do NodeMCU.
char wat;
Utwórz instancję, aby używać ACS712-30Amp na PIN A0. Zmień pierwszy argument, jeśli używasz wariantu 20 A lub 5 A.
Czujnik ACS712 (ACS712_30A, A0);
W funkcji konfiguracji zdefiniuj szybkość transmisji 115200 do komunikacji z NodeMCU. Wywołaj funkcję sensor.calibrate () do kalibracji czujnika prądu, aby uzyskać dokładne odczyty.
void setup () { Serial.begin (115200); sensor.calibrate (); }
W funkcji pętli wywołamy sensor.getCurrentAC (); funkcji, aby uzyskać bieżącą wartość i zapisać w zmiennej float I. Po uzyskaniu prądu obliczyć moc za pomocą wzoru P = V * I. Używamy 230 V, ponieważ jest to powszechny standard w krajach europejskich, w razie potrzeby zmień na lokalny
void loop () { float V = 230; float I = sensor.getCurrentAC (); pływak P = V * I;
Linie te zamieniają moc na Wh.
last_time = current_time; current_time = millis (); Wh = Wh + P * ((current_time -last_time) / 3600000,0);
Teraz musimy przekonwertować ten Wh na postać znakową, aby wysłać go do NodeMCU, dla tego dtostrf (); przekonwertuje zmiennoprzecinkowy na tablicę znaków, dzięki czemu będzie można ją łatwo wydrukować:
dtostrf (Wh, 4, 2, wat);
Format to:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Zapisz tę tablicę znaków do bufora szeregowego za pomocą Serial.write () ; funkcjonować. Spowoduje to wysłanie wartości Wh do NodeMCU.
Serial.write (wat); opóźnienie (10000); }
Kod części odbiornika NodeMCU ESP12:
Do tego potrzebujemy biblioteki AdaFruit MQTT, którą można pobrać z tego linku.
Teraz otwórz Arduino IDE. Przejdź do przykładów -> Biblioteka AdaFruit MQTT -> mqtt_esp8266
Zmodyfikujemy ten kod zgodnie z naszymi kluczami AIO i danymi uwierzytelniającymi Wi-Fi oraz przychodzącymi danymi szeregowymi z Arduino.
Najpierw dołączyliśmy wszystkie biblioteki modułu Wi-Fi ESP12 i AdaFruit MQTT.
#zawierać
Definiujemy SSID i hasło do Twojej sieci Wi-Fi, z której chcesz połączyć ESp-12e.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Ta sekcja definiuje serwer i port serwera AdaFruit, które są ustalone odpowiednio jako „io.adafruit.com” i „1883”.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Zastąp te pola nazwą użytkownika i kluczami AIO, które skopiowałeś ze strony AdaFruit podczas tworzenia kanału.
#define AIO_USERNAME "********" #define AIO_KEY "******************************"
Następnie utworzyliśmy klasę ESP12 WiFiClient do łączenia się z serwerem MQTT.
Klient WiFiClient;
Skonfiguruj klasę klienta MQTT, przekazując klienta WiFi i serwer MQTT oraz dane logowania.
Adafruit_MQTT_Client mqtt (& klient, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Skonfiguruj kanał o nazwie „Zasilanie” i „rachunek” do publikowania zmian.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
W funkcji konfiguracji podłączamy moduł Wi-Fi do punktu dostępowego Wi-Fi.
void setup () { Serial.begin (115200); opóźnienie (10); Serial.println (F ("Demo Adafruit MQTT")); // Połącz się z punktem dostępu WiFi. Serial.println (); Serial.println (); Serial.print ("Łączenie z"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); … … … }
W funkcji pętli sprawdzimy dane przychodzące z Arduino i opublikujemy je do AdaFruit IO.
void loop () { // Upewnij się, że połączenie z serwerem MQTT działa (spowoduje to wykonanie pierwszego // połączenia i automatyczne ponowne połączenie po rozłączeniu). Zobacz definicję funkcji MQTT_connect // poniżej. MQTT_connect (); int i = 0; float watt1;
Ta funkcja sprawdza przychodzące dane z Arduino i przechowuje te dane w tablicy wat za pomocą funkcji serial.read ().
if (Serial.available ()> 0) { delay (100); // pozwala na odbieranie wszystkich wysłanych szeregów jednocześnie while (Serial.available () && i <5) { watt = Serial.read (); } wat = '\ 0'; }
Funkcja atof () konwertuje znaki na wartości zmiennoprzecinkowe i zapiszemy tę wartość w innej zmiennej zmiennoprzecinkowej watt1.
watt1 = atof (wat);
Oblicz kwotę rachunku, mnożąc moc (w Wh) z taryfą energii i podziel ją przez 1000, aby uzyskać moc w kWh.
bill_amount = wat1 * (energyTariff / 1000); // 1unit = 1kwH
Teraz możemy publikować!
Serial.print (F ("\ nSending Power val")); Serial.println (watt1); Serial.print ("…");
Ten fragment kodu publikuje wartości mocy w źródle zasilania
if (! Power.publish (watt1)) { Serial.println (F ("Failed")); } else { Serial.println (F ("OK!")); }
Spowoduje to opublikowanie rachunku za energię elektryczną w kanale rachunku .
if (! bill.publish (kwota_rachunku)) { Serial.println (F ("Niepowodzenie")); } else { Serial.println (F ("OK!")); }
Kwota naszego rachunku może się szybko zmienić, ale IFTTT potrzebuje czasu, aby uruchomić aplet, więc te wiersze dadzą czas na uruchomienie, abyśmy mogli otrzymać progową wiadomość e-mail.
Zmień wartość bill_amount, od której chcesz otrzymywać e-maile. Ponadto zmień konfigurację IFTTT AdaFruit IO.
if (kwota_rachunku == 4) { for (int i = 0; i <= 2; i ++) { bill.publish (kwota_rachunku); opóźnienie (5000); } kwota_rachunku = 6; }
Kompletny kod dla Arduino i NodeMCU ESP12 podano na końcu tego samouczka.
Teraz prześlij kody na obie tablice. Podłącz swój sprzęt, jak pokazano na schemacie połączeń i otwórz io.adafruit.com. Otwórz właśnie utworzony pulpit nawigacyjny. Zobaczysz aktualizację rachunku za zużycie energii i energię elektryczną.
Gdy Bill dotarł do INR 4 następnie otrzymasz e-maila takiego.
Aplikacja na Androida do monitorowania zużycia energii elektrycznej:
Możesz użyć aplikacji na Androida do monitorowania wartości. W tym celu pobierz aplikację MQTT Dashboard na Androida ze sklepu Play lub z tego łącza.
Aby skonfigurować połączenie z io.adafruit.com, wykonaj następujące kroki:
Krok 1: Otwórz aplikację i kliknij znak „+”. Podaj identyfikator klienta, co chcesz. Serwer i port pozostają takie same, jak pokazano na zrzucie ekranu. Nazwę użytkownika i hasło (klucz aktywny) uzyskasz z pulpitu AdaFruit IO, jak pokazano poniżej.
Klucz aktywny to Twoje hasło.
Krok 2: Wybierz Licznik energii elektrycznej i wybierz Subskrybuj. W subskrypcji podaj przyjazną nazwę i temat. Format tematu to „nazwa użytkownika” / feeds / „nazwa kanału” i kliknij przycisk Utwórz .
Krok 3: W ten sam sposób dokonaj subskrypcji na przesyłanie rachunków.
Krok 4: Ponieważ Twoje urządzenia zużywają energię, zaktualizowane wartości będą wyświetlane pod Power and Bill .
W ten sposób możesz stworzyć inteligentny licznik energii elektrycznej, który może być nie tylko monitorowany z dowolnego miejsca na świecie, ale także uruchamiać wiadomość e-mail, gdy masz wysokie zużycie energii elektrycznej.
Sprawdź również nasze wszystkie projekty IoT.