- Gerekli malzemeler:
- ACS712 Akım Sensörünün Çalışması:
- Devre şeması
- Kod ve Açıklama:
- Elektrik Tüketimini İzlemek için Android Uygulaması:
Elektrik tüketimini ölçmek için herkesin evine veya işyerine takılan Elektrik enerji sayaçlarını hepimiz biliyoruz. Her ayın sonunda, çoğumuz yüksek elektrik faturası konusunda endişeleniriz ve arada bir enerji sayacına bakmamız gerekir. Ama ya dünyanın her yerinden elektrik kullanımımızı izleyebilsek ve enerji tüketiminiz bir eşik değere ulaştığında bir SMS / E-posta alabilsek? Burada IoT tabanlı bir Energy Meter Projesi inşa ediyoruz.
Daha önce, GSM modülünü kullanarak size fatura hakkında SMS gönderen bir Enerji Ölçer devresi oluşturmuştuk. Bu projede Arduino ve ESP8266 Wi-Fi modülünü kullanarak size sadece elektrik faturanızın SMS / E -postasını göndermekle kalmayan, aynı zamanda enerji kullanımlarını istediğiniz zaman ve dünyanın her yerinden izleyebileceğiniz bir Akıllı Elektrik Enerjisi sayacı yapıyoruz. Burada enerji tüketimini ölçmek için bir Akım Sensörü ACS712 kullandık, bunu kısaca tartışacağız.
Wi- Fi'mızı SMS / E-posta bildirimlerine bağlamak için IFTTT platformundan yardım alacağız. Enerji kullanımlarımızı izlemek için MQTT Dashboard Android Uygulamasını da kullanacağız. Öyleyse Başlayalım….
Gerekli malzemeler:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp Akım sensörü
- Herhangi bir AC Cihazı
- Erkek-Dişi Teller
ACS712 Akım Sensörünün Çalışması:
Projeyi oluşturmaya başlamadan önce, projenin ana bileşeni olduğu için ACS712 Akım sensörünün çalışmasını anlamak bizim için çok önemlidir. Akımı, özellikle de AC akımını ölçmek, uygun olmayan izolasyon sorunu vb. İle birleşen gürültü nedeniyle her zaman zor bir iştir. Ancak Allegro tarafından tasarlanan bu ACS712 modülünün yardımıyla iş çok daha kolay hale geldi.
Bu modül, Dr. Edwin Hall tarafından keşfedilen Hall etkisi prensibine göre çalışır. Prensibine göre, akım taşıyan bir iletken manyetik bir alana yerleştirildiğinde, hem akımın hem de manyetik alanın yönlerine dik olan kenarları boyunca bir voltaj üretilir. Konsepte çok derinlemesine girmeyelim, sadece bir akım taşıyan iletken etrafındaki manyetik alanı ölçmek için bir salon sensörü kullandığımızı söyleyin. Bu ölçüm, salon voltajı dediğimiz milivolt cinsinden olacaktır. Ölçülen bu salon voltajı, iletkenden akan akımla orantılıdır.
ACS712 Akım Sensörünü kullanmanın en büyük avantajı, hem AC hem de DC akımı ölçebilmesi ve ayrıca Yük (AC / DC yükü) ve Ölçüm Birimi (Mikrodenetleyici parçası) arasında izolasyon sağlamasıdır. Resimde gösterildiği gibi modül üzerinde sırasıyla Vcc, Vout ve Ground olmak üzere üç pimimiz var.
2 pimli terminal bloğu, akım taşıyan telin içinden geçirilmesi gereken yerdir. Modül + 5V üzerinde çalışır, bu nedenle Vcc'ye 5V güç sağlanmalı ve toprak, sistemin Zeminine bağlanmalıdır. Vout pini, 2500mV'luk bir ofset voltajına sahiptir, yani telden geçen akım olmadığında çıkış voltajı 2500mV olacaktır ve akım pozitif olduğunda voltaj 2500mV'den büyük olacaktır ve akan akım negatif olduğunda, voltaj 2500mV'den az olacaktır.
Telden akım geçmediğinde 512 (2500mV) olacak olan modülün çıkış voltajını (Vout) okumak için Arduino'nun Analog pinini kullanacağız. Akım negatif yönde akarken bu değer azalacak ve akım pozitif yönde aktıkça artacaktır. Aşağıdaki tablo, çıkış voltajının ve ADC değerinin telden geçen akıma göre nasıl değiştiğini anlamanıza yardımcı olacaktır.
Bu değerler, ACS712 Veri Sayfasında verilen bilgilere dayanılarak hesaplanmıştır. Bunları aşağıdaki formülleri kullanarak da hesaplayabilirsiniz:
Vout Gerilimi (mV) = (ADC Değeri / 1023) * 5000 Kablodan Geçen Akım (A) = (Vout (mv) -2500) / 185
Şimdi, ACS712 Sensörünün nasıl çalıştığını ve ondan ne bekleyebileceğimizi biliyoruz. Devre şemasına geçelim.
Bu sensörü PIC Mikrodenetleyici ve ACS712 kullanarak Dijital Ampermetre Devresi yapmak için kullandık.
Devre şeması
Adım 1: Kimlik bilgilerinizle IFTTT'ye giriş yapın.
Adım 2: Uygulamalarım'da Yeni Uygulamaya tıklayın
3. Adım: + buna tıklayın
Adım 4: Ara AdaFruit ve üzerinde tıklama.
Adım 5: AdaFruit IO'da bir beslemeyi izle'ye tıklayın.
Adım 6: seç Yem tasarı olarak, İlişki 'olarak için eşit' ve eşik değeri hangi noktada bir E-mail istiyorum. Eylem oluştur'a tıklayın. Eşik tetik değerim olarak 4 kullandım.
Adım 7: + buna tıklayın . G-postayı arayın ve üzerine tıklayın ve g-posta kimlik bilgilerinizle Giriş yapın.
Adım 8: Kendinize bir e-posta gönder'e tıklayın.
Adım 9: Konunuzu ve vücudunuzu gösterildiği gibi yazın ve oluşturmak için tıklayın.
Adım 10: ' Tarifiniz ' hazır. İnceleyin ve bitir'e tıklayın.
Artık web entegrasyonunu bitirdik. Kodlama kısmına geçelim..
Kod ve Açıklama:
ESP12 ile Arduino arasında seri haberleşme kullanıyoruz. Dolayısıyla, iletmek ve almak için hem Arduino hem de NodeMCU için kod yazmalıyız.
Verici Kısmı için Kod yani Arduino Uno için:
Tam Arduino kodu bu eğitimin sonunda verilmiştir. Bu Bağlantıdan indirilebilen Akım sensörü için kitaplığı kullanacağız.
Bu kütüphane, akımı hesaplamak için dahili bir işleve sahiptir. Akımı hesaplamak için kodunuzu yazabilirsiniz, ancak bu kütüphane, doğru akım ölçüm algoritmalarına sahiptir.
İlk olarak, mevcut sensör için kitaplığı şu şekilde ekleyin:
#include "ACS712.h"
NodeMCU'ya göndermek için gücü depolayacak bir dizi oluşturun.
char watt;
PIN A0'da ACS712-30Amp kullanmak için bir örnek oluşturun. 20Amp veya 5 Amp değişken kullanıyorsanız İlk bağımsız değişkeni değiştirin.
ACS712 sensörü (ACS712_30A, A0);
Olarak ayar işlevi, NodeMCU ile iletişim kurmak için 115200 baud hızı belirlenir. Doğru okumalar elde etmek için akım sensörünü kalibre etmek için sensor.calibrate () işlevini çağırın.
geçersiz kurulum () { Serial.begin (115200); sensor.calibrate (); }
In döngü fonksiyonu, biz arayacak sensor.getCurrentAC (); fonksiyon mevcut değeri almak ve float değişkeni I'de saklamak için kullanılır. Akımı aldıktan sonra, P = V * I formülünü kullanarak gücü hesaplayın. Avrupa ülkelerinde ortak standart olduğu için 230V kullanıyoruz, Gerekirse yerelinize değiştirin
boşluk döngüsü () { float V = 230; float I = sensor.getCurrentAC (); şamandıra P = V * I;
Bu çizgiler gücü Wh'ye çevirir.
last_time = geçerli_saat; geçerli_zaman = milis (); Wh = Wh + P * ((geçerli_zaman -son_saat) /3600000.0);
Şimdi, bu dönüştürmek zorunda Wh bunun için, NodeMCU göndermek için karakter forma ) (dtostrf; bir float'ı char dizisine dönüştürür, böylece daha sonra kolayca yazdırılabilir:
dtostrf (Wh, 4, 2, watt);
Biçim şu şekildedir:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Bu karakter dizisini Serial.write () kullanarak seri arabelleğe yazın ; işlevi. Bu Wh değerini NodeMCU'ya gönderecektir.
Serial.write (watt); gecikme (10000); }
Alıcı Parçası NodeMCU ESP12 Kodu:
Bunun için bu bağlantıdan indirebileceğiniz AdaFruit MQTT kütüphanesine ihtiyacımız var.
Şimdi Arduino IDE'yi açın. Örneklere gidin -> AdaFruit MQTT kitaplığı -> mqtt_esp8266
Bu kodu AIO anahtarlarımıza ve Wi-Fi kimlik bilgilerimize ve Arduino'dan gelen seri verilere göre düzenleyeceğiz.
Öncelikle, ESP12 Wi-Fi Modülü ve AdaFruit MQTT için tüm kütüphaneleri dahil ettik.
#Dahil etmek
ESp-12e'nizi bağlamak istediğiniz Wi-Fi'niz için SSID ve Parola tanımlarız.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Bu bölüm AdaFruit sunucusunu ve sırasıyla “io.adafruit.com” ve “1883” olarak sabitlenen sunucu portunu tanımlar.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Bu alanları, Feed'i oluştururken AdaFruit sitesinden kopyaladığınız kullanıcı adı ve AIO anahtarlarınızla değiştirin.
#define AIO_USERNAME "********" #define AIO_KEY "******************************"
Daha sonra MQTT sunucusuna bağlanmak için bir ESP12 WiFiClient sınıfı oluşturduk.
WiFiClient istemcisi;
WiFi istemcisini ve MQTT sunucusunu ve oturum açma ayrıntılarını ileterek MQTT istemci sınıfını ayarlayın.
Adafruit_MQTT_Client mqtt (& müşteri, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Değişiklikleri yayınlamak için 'Güç' ve 'fatura' adlı bir besleme ayarlayın.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
In kurulum fonksiyonu, biz Wi-fi, erişim noktasına Kablosuz modülünü bağlayın.
geçersiz kurulum () { Serial.begin (115200); gecikme (10); Serial.println (F ("Adafruit MQTT demosu")); // WiFi erişim noktasına bağlanın. Serial.println (); Serial.println (); Serial.print ("Bağlanılıyor"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); …. …. … }
In döngü fonksiyonu, biz Arduino gelen verileri kontrol edip AdaFruit IO bu verileri yayınlayacak.
void loop () { // MQTT sunucusuna bağlantının canlı olduğundan emin olun (bu, ilk bağlantıyı // kuracak ve bağlantı kesildiğinde otomatik olarak yeniden bağlanacaktır). Aşağıdaki MQTT_connect // işlev tanımına bakın. MQTT_connect (); int i = 0; şamandıra watt1;
Bu işlev, Arduino'dan gelen verileri kontrol eder ve bu verileri serial.read () işlevini kullanarak watt dizisine saklar.
eğer (Seri mevcut ()> 0) { gecikme (100); // (Serial.available () && i <5) { watt = Serial.read (); iken gönderilen tüm serilerin birlikte alınmasına izin verir ; } watt = '\ 0'; }
atof () işlevi karakterleri float değerlerine dönüştürür ve bu float değerini başka bir float değişkeninde watt1 saklayacağız.
watt1 = atof (watt);
Gücü (Wh cinsinden) enerji tarifesiyle çarparak fatura tutarını hesaplayın ve KWh cinsinden güç elde etmek için 1000'e bölün.
bill_amount = watt1 * (energyTariff / 1000); // 1 birim = 1kwH
Şimdi bir şeyler yayınlayabiliriz!
Serial.print (F ("\ nSending Power val")); Serial.println (watt1); Seri.baskı ("…");
Bu kod parçası, Güç beslemesinde güç değerlerini yayınlıyor
eğer (! Power.publish (watt1)) { Serial.println (F ("Başarısız")); } else { Serial.println (F ("Tamam!")); }
Bu, elektrik faturasını fatura beslemesinde yayınlayacaktır.
eğer (! bill.publish (bill_amount)) { Serial.println (F ("Başarısız")); } else { Serial.println (F ("Tamam!")); }
Fatura tutarımız hızlı değişebilir ancak IFTTT'nin uygulamayı tetiklemesi zaman alır, bu nedenle bu satırlar tetikleme için zaman verir, böylece eşik e-postası alabilmemiz için.
E-posta almak istediğiniz bill_amount değerini değiştirin. Ayrıca, IFTTT AdaFruit IO kurulumundaki değişiklik.
eğer (bill_amount == 4) { for (int i = 0; i <= 2; i ++) { bill.publish (bill_amount); gecikme (5000); } bill_amount = 6; }
Arduino ve NodeMCU ESP12 için Tam Kod bu eğitimin sonunda verilmiştir.
Şimdi, kodları her iki panoya da yükleyin. Donanımınızı Devre şemasında gösterildiği gibi bağlayın ve io.adafruit.com'u açın . Yeni oluşturduğunuz kontrol panelini açın. Güç tüketimi ve elektrik faturasının güncellendiğini göreceksiniz.
Fatura etmek ulaştığında INR 4 sonra böyle bir e-posta alacaksınız.
Elektrik Tüketimini İzlemek için Android Uygulaması:
Değerleri izlemek için Android Uygulamasını kullanabilirsiniz. Bunun için Play mağazasından veya bu Bağlantıdan MQTT Dashboard android uygulamasını indirin.
İo.adafruit.com ile bağlantı kurmak için şu adımları izleyin:
Adım 1: Uygulamayı açın ve "+" işaretine tıklayın. İstemci Kimliğini istediğiniz herhangi bir şeyi doldurun. Sunucu ve bağlantı noktası, ekran görüntüsünde gösterildiği gibi kalır. Aşağıda gösterildiği gibi AdaFruit IO panosundan Kullanıcı Adı ve şifre (Aktif anahtar) alacaksınız.
Aktif Anahtar şifrenizdir.
Adım 2: Elektrik Sayacını seçin ve Abone Ol'u seçin . Abonelikte kolay isim ve konu verin. Konu biçimi ' kullanıcı adınız' / beslemeler / 'besleme adı'dır ve oluştur'a tıklayın.
Adım 3: Aynı şekilde fatura beslemesi için abonelik yapın.
Adım 4: Cihazlarınız enerji tüketirken, güncellenen değerler Güç ve Fatura altında görüntülenecektir.
Bu, yalnızca dünyanın herhangi bir yerinden izlenebilen değil, aynı zamanda yüksek Elektrik tüketiminiz olduğunda E-postayı tetikleyebilen bir Akıllı Elektrik Enerji Ölçerini nasıl oluşturabileceğinizi gösterir.
Ayrıca tüm IoT Projelerimizi kontrol edin.