- Необхідні матеріали:
- Робота датчика струму ACS712:
- Кругова діаграма
- Код та пояснення:
- Додаток Android для моніторингу споживання електроенергії:
Ми всі знаємо про лічильники електроенергії, які встановлюються у всіх будинках чи офісах для вимірювання споживання електроенергії. Нарешті кожного місяця багатьох з нас турбує високий рахунок за електроенергію, і нам доводиться час від часу переглядати лічильник енергії. Але що, якщо ми можемо контролювати споживання електроенергії з будь-якої точки світу та отримувати SMS / електронне повідомлення, коли споживання енергії досягає порогового значення. Тут ми будуємо проект вимірювача енергії на основі IoT.
Раніше ми побудували схему вимірювача енергії, яка надсилає вам SMS про рахунок за допомогою модуля GSM. У цьому проекті ми робимо розумний лічильник електроенергії з використанням модуля Wi-Fi Arduino та ESP8266, який може не тільки надсилати вам SMS / електронну пошту вашого рахунку за електроенергію, але також ви можете контролювати споживання енергії в будь-який час і з будь-якої точки світу. Тут ми використали датчик струму ACS712 для вимірювання споживання енергії, і ми обговоримо це незабаром.
Ми допоможемо платформі IFTTT, щоб пов’язати наш Wi-Fi із сповіщеннями SMS / електронною поштою. Ми також використовуватимемо додаток MQTT Dashboard Android для відстеження використання енергії. Тож давайте почнемо….
Необхідні матеріали:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp Датчик струму
- Будь-який пристрій змінного струму
- Чоловіче-жіночі дроти
Робота датчика струму ACS712:
Перш ніж ми почнемо будувати проект, для нас дуже важливо зрозуміти роботу датчика струму ACS712, оскільки він є ключовою складовою проекту. Вимірювання струму, особливо змінного струму, завжди є важким завданням через шум у поєднанні з цим неправильну ізоляційну проблему тощо. Але за допомогою цього модуля ACS712, розробленого компанією Allegro, стало набагато простіше.
Цей модуль працює за принципом ефекту Холла, який був відкритий доктором Едвіном Холом. Відповідно до його принципу, коли провідник, що несе струм, розміщений у магнітному полі, по його краях створюється напруга, перпендикулярна напрямкам як струму, так і магнітного поля. Не будемо заглиблюватися в цю концепцію, але, просто кажучи, ми використовуємо датчик Холла для вимірювання магнітного поля навколо провідника струму. Це вимірювання буде виражатися в мілівольтах, які ми називали напругою Холла. Ця виміряна напруга Холла пропорційна струму, який протікав через провідник.
Основною перевагою використання датчика струму ACS712 є те, що він може вимірювати як змінний, так і постійний струм, а також забезпечує ізоляцію між навантаженням (навантаженням змінного / постійного струму) та вимірювальним блоком (частина мікроконтролера). Як показано на малюнку, ми маємо три штифти на модулі, які є Vcc, Vout та Ground відповідно.
2-контактний клемний блок - це місце, через яке слід пропустити провід струму. Модуль працює на + 5 В, тому Vcc повинен живитись від 5 В, а земля повинна бути підключена до Землі системи. Штифт Vout має напругу зміщення 2500 мВ, тобто, коли через провід не протікає струм, вихідна напруга становитиме 2500 мВ, а коли струм буде позитивним, напруга буде більше 2500 мВ, а коли струм буде негативним, напруга буде менше 2500 мВ.
Ми будемо використовувати аналоговий штифт Arduino для зчитування вихідної напруги (Vout) модуля, яка складе 512 (2500 мВ), коли струм не проходить через провід. Це значення буде зменшуватися, коли струм тече в негативному напрямку, і буде збільшуватися, коли струм тече в позитивному напрямку. Наведена нижче таблиця допоможе вам зрозуміти, як змінюється вихідна напруга та значення АЦП залежно від струму, що проходить через провід.
Ці значення були розраховані на основі інформації, наведеної в технічному паспорті ACS712. Ви також можете обчислити їх, використовуючи наведені нижче формули:
Напруга Vout (мВ) = (значення АЦП / 1023) * 5000 струм через провід (A) = (Vout (mv) -2500) / 185
Тепер, коли ми знаємо, як працює датчик ACS712 і що ми можемо від нього очікувати. Перейдемо до принципової схеми.
Ми використовували цей датчик для створення схеми цифрового амперметра за допомогою мікроконтролера PIC та ACS712.
Кругова діаграма
Крок 1: Увійдіть до IFTTT зі своїми обліковими даними.
Крок 2: На моїх аплетах натисніть Новий аплет
Крок 3: Натисніть на + це
Крок 4: Знайдіть AdaFruit і натисніть на нього.
Крок 5: Клацніть на Моніторинг каналу про AdaFruit IO.
Крок 6: Виберіть Подача як рахунок, Зв'язок як " дорівнює" та порогове значення, при якому ви хочете отримати електронне повідомлення. Клацніть на Створити дію . Я використав 4 як своє порогове значення тригера.
Крок 7: Клацніть на + це . Шукайте G-mail, клацніть на ньому та Увійдіть зі своїми обліковими даними g-mail.
Крок 8: Натисніть, надішліть собі електронний лист.
Крок 9: Напишіть предмет і тіло, як показано, і натисніть, щоб створити.
Крок 10: Ваш " рецепт " готовий. Перегляньте його та натисніть на закінчити.
Зараз ми закінчили веб-інтеграцію. Переходимо до частини кодування..
Код та пояснення:
Ми використовуємо послідовний зв’язок між ESP12 та Arduino. Отже, нам потрібно написати код як для Arduino, так і для NodeMCU для передачі та прийому.
Код для частини передавача, тобто для Arduino Uno:
Повний код Arduino наведено в кінці цього посібника. Ми будемо використовувати бібліотеку поточного датчика, яку можна завантажити за цим посиланням.
Ця бібліотека має вбудовану функцію для обчислення струму. Ви можете написати свій код для обчислення струму, але ця бібліотека має точні алгоритми вимірювання струму.
По-перше, включіть бібліотеку поточного датчика як:
#include "ACS712.h"
Створіть масив для зберігання енергії для надсилання його на NodeMCU.
шар ват;
Створіть екземпляр, щоб використовувати ACS712-30Amp за PIN-кодом A0. Змініть перший аргумент, якщо ви використовуєте варіант 20Amp або 5 Amp.
Датчик ACS712 (ACS712_30A, A0);
У функції налаштування визначте швидкість передачі даних 115200 для зв'язку з NodeMCU. Викличте функцію sensor.calibrate () для калібрування датчика струму для отримання точних показань.
void setup () { Serial.begin (115200); sensor.calibrate (); }
У функції циклу ми будемо викликати sensor.getCurrentAC (); функція для отримання поточного значення та збереження у плаваючій змінній I. Після отримання струму обчисліть потужність за формулою P = V * I. Ми використовуємо 230 В, оскільки це загальноприйнятий стандарт у європейських країнах. За потреби змініть на місцевий
void loop () { float V = 230; float I = sensor.getCurrentAC (); поплавок P = V * I;
Ці лінії перетворюють потужність у Wh.
останній_ час = поточний_ час; поточний_ час = міліс (); Wh = Wh + P * ((поточний_час-останній_ час) /3600000.0);
Тепер ми повинні перетворити цей Wh у форму символів, щоб відправити його на NodeMCU, для цього dtostrf (); перетворить поплавок у масив char, щоб потім його можна було легко надрукувати:
dtostrf (Wh, 4, 2, ват);
Формат:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Запишіть цей масив символів у послідовний буфер за допомогою Serial.write () ; функція. Це надішле значення Wh на NodeMCU.
Serial.write (ват); затримка (10000); }
Код для вузла деталі приймача MCU ESP12:
Для цього нам потрібна бібліотека AdaFruit MQTT, яку можна завантажити за цим посиланням.
Тепер відкрийте Arduino IDE. Перейдіть до прикладів -> бібліотека AdaFruit MQTT -> mqtt_esp8266
Ми відредагуємо цей код відповідно до наших ключів AIO та облікових даних Wi-Fi та вхідних послідовних даних від Arduino.
По-перше, ми включили всі бібліотеки для модуля Wi-Fi ESP12 та AdaFruit MQTT.
#включати
Ми визначаємо SSID та пароль для вашого Wi-Fi, від якого ви хочете підключити ваш ESp-12e.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
У цьому розділі визначено сервер AdaFruit та порт сервера, які зафіксовано як „io.adafruit.com” та „1883” відповідно.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
Замініть ці поля на своє ім’я користувача та клавіші AIO, які ви скопіювали з сайту AdaFruit під час створення стрічки.
#define AIO_USERNAME "********" #define AIO_KEY "******************************"
Потім ми створили клас ESP12 WiFiClient для підключення до сервера MQTT.
Клієнт WiFiClient;
Налаштуйте клас клієнта MQTT, передавши клієнт WiFi та сервер MQTT та дані для входу.
Adafruit_MQTT_Client mqtt (& клієнт, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Налаштуйте стрічку під назвою "Живлення" та "рахунок" для публікації змін.
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ канали / рахунок");
У функції налаштування ми підключаємо модуль Wi-Fi до точки доступу Wi-Fi.
void setup () { Serial.begin (115200); затримка (10); Serial.println (F ("Демо-версія Adafruit MQTT")); // Підключення до точки доступу WiFi. Serial.println (); Serial.println (); Serial.print ("Підключення до"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); ... ... … }
У функції циклу ми перевіримо наявність вхідних даних з Arduino та опублікуємо ці дані в AdaFruit IO.
void loop () { // Переконайтеся, що з’єднання з сервером MQTT є активним (це зробить перше // з’єднання і автоматично підключиться при відключенні). Дивіться визначення функції MQTT_connect // далі нижче. MQTT_connect (); int i = 0; поплавковий ват1;
Ця функція перевіряє вхідні дані з Arduino і зберігає ці дані у ват- масиві за допомогою функції serial.read ().
if (Serial.available ()> 0) { затримка (100); // дозволяє отримувати всі послідовно надіслані послідовно, поки (Serial.available () && i <5) { watt = Serial.read (); } Вт = '\ 0'; }
atof () перетворює символи у плаваючі значення, і ми збережемо це плаваюче значення в іншій плаваючій змінній watt1.
ват1 = атоф (ват);
Обчисліть суму рахунку, помноживши потужність (у Вт · год) на тариф на енергію та розділіть її на 1000, щоб зробити потужність в кВт-год.
bill_amount = ват1 * (energyTariff / 1000); // 1одиниця = 1кВт · год
Тепер ми можемо публікувати матеріали!
Serial.print (F ("\ nНадіслати блок живлення")); Serial.println (ватт1); Serial.print ("…");
Цей фрагмент коду публікує значення потужності до потужності подачі
if (! Power.publish (watt1)) { Serial.println (F ("Failed")); } ще { Serial.println (F ("Добре!")); }
Це опублікує рахунок за електроенергію на рахунку .
if (! bill.publish (bill_amount)) { Serial.println (F ("Failed")); } ще { Serial.println (F ("Добре!")); }
Сума нашого рахунку може швидко змінюватися, але IFTTT вимагає часу, щоб запустити аплет, тому ці рядки дадуть час для спрацьовування, щоб ми могли отримати пороговий електронний лист.
Змініть значення bill_amount, на яке ви хочете отримувати електронну пошту. Також змініть налаштування IFTTT AdaFruit IO.
if (bill_amount == 4) { for (int i = 0; i <= 2; i ++) { bill.publish (bill_amount); затримка (5000); } сума рахунка = 6; }
Повний код для Arduino та NodeMCU ESP12 наведено в кінці цього посібника.
Тепер завантажте коди на обидві дошки. Підключіть апаратне забезпечення, як показано на схемі схеми та відкрийте io.adafruit.com. Відкрийте щойно створену панель інструментів. Ви побачите, що рахунок за споживання електроенергії та електроенергію оновлюється.
Коли ваш рахунок досяг до INR 4 , то ви отримаєте по електронній пошті, як це.
Додаток Android для моніторингу споживання електроенергії:
Ви можете використовувати додаток Android для відстеження значень. Для цього завантажте додаток Android MQTT Dashboard з магазину Play або за цим посиланням.
Щоб налаштувати підключення до io.adafruit.com, виконайте такі дії:
Крок 1: Відкрийте програму та натисніть на знак "+". Заповніть ідентифікатор клієнта, що завгодно. Сервер і порт залишаються однаковими, як показано на знімку екрана. Ви отримаєте ім’я користувача та пароль (Активний ключ) з інформаційної панелі AdaFruit IO, як показано нижче.
Активний ключ - це ваш пароль.
Крок 2: Виберіть лічильник електроенергії та виберіть Підписатися. У передплаті дайте дружнє ім’я та тему. Формат теми - " вашекористувацьке ім'я" / канали / "ім'я каналу" та натисніть на "Створити".
Крок 3: Таким же чином зробіть підписку на подачу рахунків.
Крок 4: Оскільки ваші прилади споживають енергію, оновлені значення відображатимуться в розділі Живлення та рахунок .
Ось як ви можете створити розумний лічильник електроенергії, який можна не лише контролювати з будь-якої точки світу, але й запускати електронну пошту, коли у вас велике споживання електроенергії.
Також перевірте всі наші проекти IoT.