asd99

На Пикабу
Дата рождения: 1 января
28К рейтинг 17 подписчиков 11 подписок 3 поста 1 в горячем
Награды:
В 2026 год с Пикабу!5 лет на Пикабу
330

Wi-Fi энергомонитор на PZEM-004t и ESP-12F

Доброго времени суток!

Давно хотел сделать измерение потребления электричества в квартире. Подумывал о разных приспособах, но все они как-то не вызывали доверия.

Датчики вроде ACS712 как-то не вызывали доверия (уж слишком хлипкими выглядели),  SCT-013-000 казались громоздкими.

И совершенно случайно мне попалась на глаза замечательная вещь - PZEM-004T:

(Кстати, есть версия с индикацией, подробнее обо всём на буржуйском сайте ).

Возможности модуля (подробнее можно посмотреть в даташите ):

Измеряемое напряжение: 60 - 280 В переменки;

Ток: до 100 А / 22 кВт;

Частота: 45-65 Гц;

По запросу может выдавать значение напряжения (В), тока (А), активную мощность (Вт), потребленную энергию (Вт*час). Еще можно выставлять сигнализацию на определенную мощность (в кВт), но, похоже, это касается только разновидности с экраном.

Киловатт-часы хранятся до 99 999 Вт*ч, потом идёт сброс в 0.

Есть кнопка сброса значения Вт*ч, ее нужно подержать 5 сек. В этот момент модуль не отвечает по TTL.

Схема подключения проста:

А вот с управлением всё несколько печальнее.

Для получения данных нужно выставить адрес командой в порт "B4 C0 A8 01 01 00 1E", где B4 - собственно команда, C0 A8 01 01 это адрес 192.168.1.1, 00 просто плейсхолдер (используется только при задании значения мощности сигнализации), Е1 - контрольная сумма.

Для получения значения напряжения нужно отправить команду "B0 C0 A8 01 01 00 1A", где В1 - команда, потом опять адрес и контрольная сумма.

Нам придет ответ вида R = A0 00 E6 02 00 00 88, где А0 - метка ответа, Е6 - старший разряд (230 Вольт), 02 - младший (2 Вольта), 88 - контрольная сумма. Напряжение тут R[2]  + R[3] = 232 В.

Подробнее в даташите.

Использовал вот эту  библиотеку.

Добавляем энергомер в скетч:

#include "pzem-004t.h"

PZEM_004T pzem(10,11); // для общения используется SoftwareSerial, т.е. в случае ESP-12F можно использовать пины 0-5 и 12-15


void setup()

{

while(!pzem.setAddress(192,168,1,1)); // инициализируем. С любым адресом, лишь бы они отличались, если PZEM-ок несколько.

}

void loop()

{

float V = pzem.getVoltage(); //меряем напряжение

if (V > 0) Serial.println("V = " + (String)V + " Volts"); // значение "-1" это ошибка получения данных

delay(1000);

}

TTL-логика у PZEM-004T 5 В, вполне можно спалить порт ESP-шки, поэтому я, не выпендриваясь, сделал делитель напряжений на резисторах (рассчитать можно здесь):

Кстати, у меня PZEM  +5В не давал, пришлось использовать отдельный БП на 5 В (для PZEM) и понижать до 3.3 В (для ESP) с помощью AMS -1117-3.3 и пары кондёров.

Для удобства решил еще добавить OLED-дисплей SSD1306 разрешением 128 х 64 с I2C:

Библиотеку брал отсюда.

Если ESP его не видит, попробуйте поменять местами SDA и SCL или прогнать I2C device scanner, иногда заявленный адрес не соответствует фактическому.

Умеет даже в скролл и прогрессбар.

Команды, в принципе, в комментариях не нуждаются

display.init();

display.setTextAlignment(TEXT_ALIGN_LEFT);

display.setFont(ArialMT_Plain_16);

Шрифт любого размера можно сделать тут и добавить в "...\Arduino\libraries\esp8266-oled-ssd1306-master\src\OLEDDisplayFonts.h"

Лично у меня шрифт 50 размера для удобства чтения издалека.

На экран выводится потребление в Вт (999) или в кВт (1.8к), в зависимости от текущей нагрузки.

Чтобы не "гуляли" ноги, заодно приделал термометр Dallas DS18B20.

Ну и куда же, естественно, без IoT?)

Данные с энергомера будем выгружать в https://thingspeak.com/. Как с ним работать, я уже как-то  писал.

Все устройство поместилось в корпус на DIN-рейку на две позиции (или как оно называется?).

В тестовом варианте выглядело всё вот так:

ТТ висит на фазе удлинителя где-то за границами фото.

Полная съема выглядит так (да, мне всё еще лень рисовать нормальные схемы. Надеюсь, ничего не забыл)

Традиционным методом ЛУТ сделана (не без косяков) плата (размеры примерно 30*58 мм, с вырезами под болты корпуса)

Слишком тонкая дорожка слева-снизу почти сразу оторвалась.

Полностью собранный, но еще не отмытый счетчик (на том этапе еще показывал напряжения и ток. Что информативней показывать активную мощность, я решил позже):

Готовое устройство на рейке выглядит так (включен комп + свет)

Тут еще добавился чайник (на котором написано 2 кВт).

Засёк также:

Комп (i3, 1060, 2 HDD, 20" TFT-моник) - 89 Вт в без нагрузки, 130 Вт в WoT / Dota 2

Комп в спящем режиме - 10 Вт;

Четыре 5 Вт LED лампы Е14 - 22 Вт;

Пылесос в холостую - 1,37 кВт (мощность 350 Вт / 1800 МАХ);

Комп на ночь выключается из розетки, ночью в темноте потребление около 12 - 15 Вт (не морозящий холодильник, роутер, может, зарядное).


В течении дня напряжение меняется примерно так (данные отсылаются каждые 5 минут). Можно заодно отслеживать качество напряжения в доме.

Скетч, фотки и библиотеки в гугл-диске

Вроде бы ничего не забыл.

Если что, спрашивайте ;)

Спасибо за внимание!

Показать полностью 10

Как на нас зарабатывают интернет-магазины

Итак, очередной пост справедливого гнева на современную торговлю.

История кратка: выбирал я сегодня комплектующие для компа.

В общем, выбрал.

Залогинился под своей учеткой и начал было оформлять покупку, но цена оказалась, мягко говоря, другой!

Если у меня на листке цена была одна, то в форме магазина КАЖДАЯ позиция внезапно подоржала на 200 - 600 гривен!

Подумав уж грешным делом, что за время оформления цены изменились, я огорчился, и закрыл сайт.

А потом до меня дошло скинуть ссылки на эти же товары другу.

И вот тут я , мягко говоря, прихуел.


Скрин моей страницы с процом (стоимость 4 287 гривен)

И скрин друга (3 828 гривен!)

Причем чистки куков, заходы с других браузеров цену никак не меняли. Зато с другого компа - сами видите.


Итого, просто зайдя под своей учеткой, я повысил себе цену только на проце на 459 гривен! 459 ГРИВЕН ЗА ЛОГИН, КАРЛ!!!

Все же выбранные комплектующие "подорожали" суммарно на 2 327 гривен.

Никаких скидок, как вы видите, нету.

Обыкновенное такое на*балово на пустом месте.


Скрины всех товаров будут в комментах.


Прощай, "Розетка", я был твоим клиентом более 6 лет!

Показать полностью 2
98

Метеостанция на arduino с выгрузкой статистики в IoT

Добрых суток!

Сегодня мы соберем метеостанцию с выгрузкой статистики в инет.

Для этого нам понадобятся:

- стабилизатор напряжения АМS1117-3.3 ($0.85/10шт);

- датчик температуры и влажности DHT11 ($0.80);

- датчик температуры и давления GY68 ($4);

- Arduino Pro Mini ($1.24);

- модуль Wi-Fi на ESP-8266 (ESP-01) ($1.9);

- сопротивления 4,7к и 10к;

- электролиты 100 и 1000 мФ на 10+В;

Итого: около $9 (225грн);

Все легко находится на алиэкспрессе, так что ссылок не будет.


Начнем мы с нашего WiFi модуля ESP-01:

Питание: 3.0 - 3.6 В;

Ток: 60-220 мА (в зависимости от режима 802.11 и настроек энергосбережения);

Для работы нужно подтянуть вывод CH_PD к питанию через резистор 10 кОм.

Как подключить модуль, подробно написано здесь.

Конкретно про обновлении прошивки - здесь.


Я использовал прошивку с АТ-командами версии 0.25. Между версиями существуют небольшие различия, так что решайте сами, что вам проще: изменить код скетча или прошить модуль.

Распиновка такая:

ESP-01  >  Arduino

Tx > 10

Rx >  11

CH_PD > через 10 кОм на +3.3В

Vcc > +3.3

Gnd >  Gnd

Для проверки заливаем в ардуину скетч из примеров SoftwareSerial.ino, проверив чтобы строка

SoftwareSerial mySerial(10, 11); // RX, TX

соответствовала наши ногам ардуины. Напомню, что выводы данных подключаются крест-накрест, Rx->Tx и Tx->Rx

Теперь нам понадобится программа ESP8266 Config. Подключаемся к порту с модулем на скорости 115200. Если вместо картинки

в порт идет мусор, отключаемся, меняем скорость на меньшую, подключаемся снова и ребутим модуль, до получения строк

Firmware builder: esp8266.ru

ready

Вводим в том же окне команду тестовую АТ. Нам должен придти ответ ОК. Если ответ приходит, читаем дальше, нет - отписываемся в комментах, помогу чем смогу.


Далее, нам нужно установить нужные нам скорость порта по-умолчанию и параметры сети.

1. Параметры порта, команда вида AT+UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>. Параметры можно посмотреть в диспетчере устройств->свойства порта

т.е. наша команда будет такой AT+UART_DEF=9600,8,1,0,0

вводим, получаем ОК, перегружаем модуль и переподключаемся со скоростью 9600.

2. В окне ESP8266 Config нажимаем List AP, получаем список всех доступных сетей. Выбираем нужную, вводим пароль, жмем Join AP. В консоли должно появиться

AT+CWJAP="SSID","PASSWD"

WIFI CONNECTED

WIFI GOT IP

OK

Для получения адреса у меня в роутере включен DHCP с раздачей IP по МАС.

Формат всех команд можно посмотреть в файле "ESP8266 AT Instruction Set_v0.25"

DHT11: Довольно хреновый датчик, иногда выдающий данные с сильным разбросом (лучше возьмите DHT22, он еще и от 3.3+В питается (об этом ниже) - я брал просто самый дешевый с измерением влажности).

Питание: 3.5 - 5.5 В;

Ток до 0.3 мА;


Диапазон измерений:

- влажность 20-95% (+-5%). Если влажность больше (96-100%), модуль все равно покажет 95%:

- температура 0-50 гр. (+-2 гр.). По факту ниже +3-4 гр. не покажет даже при сильном морозе.

- время между считываниями показаний не меньше 10 сек (иначе будет выдавать практически рандом).


При длине провода больше 20 м или напряжении питания меньше 5 В нужен подтягивающий резистор в 4,7 кОм на сигнальную линию. Я решил поставить, на всякий случай.

GY69: датчик давления и температуры на основе чипа BMP-180.

Питание: 1.68 - 3.6 В;

Ток около 5 мкА (мало верится, но сам не мерял);

Диапазон измерений:

- давление: 300-1100 гПа (-500 - 9000 м над ур.моря);

- температура: -40 ... +85 гр. (при температуре меньше ноля падает точность);

- время замера 4,5 ... 25 мкс;

По даташиту нужно сигнальные линии (SDA/SCL) нужно подтянуть к питанию резисторами по 4,7 кОм, но я не заморачивался.


Питание я взял от старой ЮСБ-зарядки, 5В 250мА. Т.к. оказалось, что ESP-01 очень требователен к питанию (предыдущий отладочный вариант питался от аккума на 3.7 В и сгорел через неделю), то отталкиваться будем именно от него - понижать напряжение до 3.3 В. Однако это меньше, чем нужно DHT11, поэтому его придется запитать от 5В.

Для включения ESP-01 необходимо подать через резистор 10 кОм питание на ногу CH_PD. Однако из-за того, что у микрухи самого WiFi распаяны не все ноги (они "висят в воздухе"), она сильно греется даже в отсутствие передачи данных. Ну а т.к. передавать статистику мы будем раз в 10 минут, нам совершенно не нужно держать модуль постоянно включенным (и расходовать заряд аккума, если питание от него).

Поэтому CH_PD мы подключим к 13й ноге контроллера и для включения связи будем подавать на неё высокий уровень.

Схема подключения стабилизатора напряжения AMS1117-3.3 (ток до 1А) особой оригинальностью не отличается и взята из даташита.

Итого, имеем схему (да,я знаю про fritzing, но мне лень в ней разбираться):

Для проверки схему нужно залить скетч test_sensors.ino (ссылка на архив в конце поста). В порт должны полететь данные о температуре/давлении/влажности.


Выгрузка статистики.

Регистрируемся на сайте thingspeak.com.

Создаем новый канал

Тут выставляем по полю на каждый измеряемый параметр.

Кроме этого, можно настроить видимость канала (все/только вы), высоту нашей станции над уровнем моря, координаты и т.д. Создаем.

Далее идем в Channel Settings и переписываем Channel ID, идем в API keys и переписываем Write API Key. По двум этим параметрам мы будем писать данные.

Проверить работоспособность канала можно, перейдя в броузере по адресу 184.106.153.149/update?key=[ВАШ_Write_API_Key]&field1=0

Откроется страница с номером текущей порции данных (для первого раза 0, потом 1, и т.д.).

Открываем скетч WiFiMeteostationIoT.ino и исправляем строки:

14 String remote_key = "KEY";// passkey

на ваш Write API Key.

105 dps.init(MODE_STANDARD, N, true);

N замените на вашу текущую высоту (в МЕТРАХ, несмотря на то, что в даташите написано про сантиметры) - это нужно для точно определения давления. Узнать ее можно либо с помощью GPS, либо на  этой страничке.


Для отправки одной "порции" данных нужно отправить на модуль WiFi команды:

AT+CIPSTART=2,"TCP","184.106.153.149",80 //создать соединение №2, протокол ТСР, адрес, порт

AT+CIPSEND=2,N //через соединение №2 отправить пакет длинной в N байт

GET /update?key=[ВАШ_Write_API_Key]&field1=25 //сам пакет

AT+CIPCLOSE=2 //закрыть соединение

Обратите внимание на переносы строк \r\n в коде. Так надо.


Скетч в архиве.


Сам канал по мере заполнения примет такой вид:

Схема потребляет около 80 мА при передаче данных и 15-20 мА при простое.


Что можно улучшить:

- заменить DHT-11 на что-нибудь получше, тот же DHT-22;

- сделать фильтрацию замеренных значений (по тому же Калману (пост) ).

- отсылать на статистику не сразу после включения, а через 10 минут, предварительно отфильтровав;

- подтянуть GPIO ESP-01 на питание через 10 кОм;

- подтягивать DHT-11 по-хорошему надо было не на +5, а на +3.3 В;

- не заставлять ардуину впустую гонять delay(), а сделать полноценный сон с "разбудкой" по таймеру;

- оба датчика потребляют намного меньше допустимой нагрузки на ногу ардуины (40 мА), можно запитать их через контроллер и включать только по надобности;


GoogleDrive c архивом


P.S. первый, и, скорее всего, крайний пост - не подписывайтесь ;)

Показать полностью 7
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества