- Необходимые материалы:
- Работа датчика тока ACS712:
- Принципиальная электрическая схема
- Код и объяснение:
- Android-приложение для мониторинга потребления электроэнергии:
Все мы знаем о счетчиках электроэнергии, которые устанавливаются в каждом доме или офисе для измерения потребления электроэнергии. В конце каждого месяца многие из нас беспокоятся о высоких счетах за электроэнергию, и нам время от времени приходится смотреть на счетчик энергии. Но что, если мы сможем отслеживать потребление электроэнергии из любой точки мира и получать SMS / E-mail, когда потребление энергии достигает порогового значения. Здесь мы создаем проект измерителя энергии на основе Интернета вещей.
Ранее мы построили схему счетчика энергии, которая отправляет вам SMS о счете с помощью модуля GSM. В этом проекте мы создаем интеллектуальный счетчик электроэнергии с использованием модуля Wi-Fi Arduino и ESP8266, который может не только отправлять вам SMS / электронную почту с вашим счетом за электричество, но также вы можете отслеживать потребление энергии в любое время и из любой точки мира. Здесь мы использовали датчик тока ACS712 для измерения потребления энергии, мы обсудим это в ближайшее время.
Мы воспользуемся помощью платформы IFTTT, чтобы связать наш Wi-Fi с уведомлениями по SMS / электронной почте. Мы также будем использовать приложение MQTT Dashboard для Android, чтобы отслеживать потребление энергии. Итак, давайте начнем….
Необходимые материалы:
- Ардуино Уно
- 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 (мВ) -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.
char ватт;
Создайте экземпляр для использования ACS712-30Amp с PIN-кодом A0. Измените первый аргумент, если вы используете вариант на 20 или 5 ампер.
Датчик 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;
Эти линии преобразуют мощность в Втч.
last_time = текущее_время; current_time = миллис (); Wh = Wh + P * ((текущее_время -последнее_время) /3600000.0);
Теперь нам нужно преобразовать этот Wh в символьную форму, чтобы отправить его в NodeMCU, для этого dtostrf (); преобразует float в массив char, чтобы его можно было легко распечатать:
dtostrf (Вт · ч, 4, 2, ватт);
Формат:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
Запишите этот массив символов в последовательный буфер, используя Serial.write () ; функция. Это отправит значение Wh в NodeMCU.
Serial.write (ватт); задержка (10000); }
Код для узла приемника MCU ESP12:
Для этого нам понадобится библиотека AdaFruit MQTT, которую можно скачать по этой ссылке.
Теперь откройте Arduino IDE. Перейдите к примерам -> Библиотека MQTT AdaFruit -> mqtt_esp8266
Мы отредактируем этот код в соответствии с нашими ключами AIO и учетными данными Wi-Fi, а также поступающими последовательными данными от Arduino.
Во-первых, мы включили все библиотеки для модуля ESP12 Wi-Fi и 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 "/ feeds / bill");
В функции настройки подключаем модуль 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 я = 0; float watt1;
Эта функция выполняет проверку поступающих данных из Arduino и хранить эти данные в ватт массив с помощью serial.read () функцию.
если (Serial.available ()> 0) { задержка (100); // позволяет принимать все отправленные серийные номера одновременно while (Serial.available () && i <5) { watt = Serial.read (); } ватт = '\ 0'; }
Функция atof () преобразует символы в значения с плавающей запятой, и мы сохраним это значение с плавающей запятой в другой переменной с плавающей запятой watt1.
watt1 = atof (ватт);
Рассчитайте сумму счета, умножив мощность (в Втч) на тариф на электроэнергию и разделив ее на 1000, чтобы получить мощность в кВтч.
bill_amount = ватт1 * (energyTariff / 1000); // 1 единица = 1 кВт · ч
Теперь мы можем публиковать материалы!
Serial.print (F ("\ nSending Power val")); Serial.println (ватт1); Serial.print ("…");
Этот фрагмент кода публикует значения мощности в ленте Power.
если (! Power.publish (watt1)) { Serial.println (F ("Ошибка")); } else { Serial.println (F ("ОК!")); }
Это опубликует счет за электроэнергию в поток счетов .
если (! bill.publish (bill_amount)) { Serial.println (F ("Неудачный")); } else { Serial.println (F ("ОК!")); }
Сумма нашего счета может быстро меняться, но IFTTT требуется время для запуска апплета, поэтому эти строки дадут время для запуска, чтобы мы могли получать пороговое электронное письмо.
Измените значение bill_amount, на которое вы хотите получать электронную почту. Кроме того, измените настройку IFTTT AdaFruit IO.
если (bill_amount == 4) { для (int я = 0; я <= 2; я ++) { bill.publish (bill_amount); задержка (5000); } bill_amount = 6; }
Полный код для Arduino и NodeMCU ESP12 приведен в конце этого руководства.
Теперь загрузите коды на обе платы. Подключите оборудование, как показано на принципиальной схеме, и откройте io.adafruit.com. Откройте только что созданную панель управления. Вы увидите, что счет за потребление энергии и электричество обновляется.
Когда ваш счет достиг к INR 4 , то вы получите по электронной почте, как это.
Android-приложение для мониторинга потребления электроэнергии:
Вы можете использовать приложение для Android для отслеживания значений. Для этого загрузите приложение для Android MQTT Dashboard из магазина Play или по этой ссылке.
Чтобы установить соединение с io.adafruit.com, выполните следующие действия:
Шаг 1: Откройте приложение и щелкните значок «+». Заполните Client Id чем хотите. Сервер и порт остаются такими же, как показано на скриншоте. Вы получите имя пользователя и пароль (активный ключ) из панели управления AdaFruit IO, как показано ниже.
Активный ключ - это ваш пароль.
Шаг 2: Выберите «Счетчик электроэнергии» и нажмите « Подписаться». В подписке укажите понятное имя и тему. Формат темы: « yourusername» / feeds / «feedname» и нажмите «Создать».
Шаг 3: Таким же образом сделайте подписку на подачу счетов.
Шаг 4. По мере того, как ваши устройства потребляют энергию, обновленные значения будут отображаться в разделе « Мощность и счет» .
Вот как вы можете создать интеллектуальный счетчик электроэнергии, который можно не только контролировать из любой точки мира, но и запускать электронную почту при высоком потреблении электроэнергии.
Также проверьте все наши проекты IoT.