Простое устройство мониторинга энергопотребления

в 20:29, , рубрики: arduino, ATmega168, diy или сделай сам, мониторинг дома, Программинг микроконтроллеров, метки: ,

Сейчас все больше и больше людей интересуются темой мониторинга потребляемого электричества.
В некоторых случаях эти знания имеют очень большое значение (например, для вашего загородного дома выделили 8кВт мощности и вам необходимо понять, насколько близко вы находитесь к разрешенному пределу и т.п.).
Есть уже готовые изделия, одно из них уже было героем обзора на Хабре.

Но мы не из тех, кто ищет легких путей и сделаем вот такое устройство:
Простое устройство мониторинга энергопотребления

В руки попал вот такой датчик:
Простое устройство мониторинга энергопотребления

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

Замечание: поскольку схема не слишком сложная, я ее целиком приводить не буду, а расскажу только о некоторых особенностях.
Ссылки на все полезные материалы и библиотеки, которые использовались при создании этого приборчика расположены в конце статьи.

Датчик, фото которого приведено выше — неинвазивный датчик тока (до 100А). Выход датчика — токовый.
Напрямую к аналоговому входу ардуинки этот датчик подключать нельзя (точнее можно, но пользы это не принесет никакой).
Чтобы получать адекватые значения измеряемой величины нам необходимо добавить несколько элементов и подключить датчик по следующей схеме:
Простое устройство мониторинга энергопотребления
Обоснование схемы и расчет номиналов элементов приводится по следующей ссылке.

Таким образом, значение тока сможем измерить, но наша цель — измерить потребляемую мощность.
Воспользуемся известной формулой: P=U*I.

И вроде бы как все значения в правой части известны. Но значение напряжения, к сожалению, может колебаться в достаточно больших пределах и по-хорошему следует еще и его измерять для получения более точных результатов.

Учитывая это замечание, сразу можно сказать, что прибор не будет отличаться большой точностью и скорее будет являться некоторым индикатором с возможностью оценки измеряемых значений, но с погрешностью, зависящей еще и от величины напряжения. В случае, если у вас установлен стабилизатор питания — эта погрешность уменьшается.

С подключением датчика разобрались, теперь нужно разобраться с остальными комплектующими.

От моих первых шагов по освоению ардуинки остались микросхема ATmega168 и ЖК-дисплей 12х2 с поддержкой кириллицы — их и будем использовать.

На этапе прототипирования выяснилось, что ATmega168 есть, а вот кварца с парой конденсаторов к нему — нет. Но, как все знают, атмега может спокойно работать на частоте 8МГц с внутренним осциллятором.

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

Чтобы включить этот режим работы МК, необходимо поправить фьюзы. Фьюзы можно изменить с помощью среды Arduino, но делается это только в момент прошивки бутлоадера.

Составляющие успешной прошивки:

  1. Ардуинка с прошитым скетчем Arduino ISP
  2. Ардуинка с DIP-панелькой для «подопытного» МК (или беспаечная макетка, где собрана ардуинка с минимальным «обвесом»)
  3. Несколько проводков для соединения ардуинок (или ардуинки и макетки)
  4. Правильная запись для «новой платы» в файле boards.txt

Описание варианта в boards.txt

atmega168ic8mhz.name=ATmega168 (internal clock 8MHz)

atmega168ic8mhz.upload.protocol=stk500
atmega168ic8mhz.upload.maximum_size=14336
atmega168ic8mhz.upload.speed=19200
atmega168ic8mhz.upload.using=arduino:arduinoisp

atmega168ic8mhz.bootloader.low_fuses=0xe2
atmega168ic8mhz.bootloader.high_fuses=0xdd
atmega168ic8mhz.bootloader.extended_fuses=0x00
atmega168ic8mhz.bootloader.path=arduino:atmega
atmega168ic8mhz.bootloader.file=ATmegaBOOT_168_pro_8MHz.hex
atmega168ic8mhz.bootloader.unlock_bits=0x3F
atmega168ic8mhz.bootloader.lock_bits=0x0F

atmega168ic8mhz.build.mcu=atmega168
atmega168ic8mhz.build.f_cpu=8000000L
atmega168ic8mhz.build.core=arduino:arduino
atmega168ic8mhz.build.variant=arduino:standard

Внимание, если у вас МК уже с ардуиновским бутлоадером, то обновлять бутлоадер нужно с использованием кварцевого резонатора.

Прошивка прошла успешно, МК заработал на внутреннем осцилляторе.

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

Задачка совсем несложная и можно подключить так, как делается во всех примерах (см.ссылки ниже).

Дисплей подключаем в 4-х битном режиме (для экономии используемых цифровых пинов).
Один из выводов дисплея отвечает за контрастность. Захотелось иметь возможность регулировать контрастность из скетча. Сказано-сделано: подключаем этот вывод к свободному пину с ШИМ (дополнительно ставим электролитический конденсатор на 10мкФ — для сглаживания).

Поскольку планировалось использовать две кнопки, то самым простым решением было бы повесить каждую кнопку на свой цифровой пин и мониторить их состояние, но это как-то тривиально.

Решил задействовать для кнопок всего один пин (аналоговый).

Схема очень простая — кнопки включаются последовательно друг за другом, параллельно каждой кнопке — свой резистор. Последовательно этой конструкции — еще один резистор. Вся эта цепь включена между «землей» и «питанием». Таким образом получается делитель напряжения.

Нарисовал, как смог, извините.

Простое устройство мониторинга энергопотребления

Особенность схемы (и подобранных резисторов) такова, что позволяет отслеживать нажатие любой из кнопок и «бонусом» — факт нажатия двух кнопок сразу, чем мы и воспользуемся при написании скетча.

Сначала собрал прототип на беспаечной макетной плате:
Простое устройство мониторинга энергопотребления

Написал небольшой скетч, который опрашивал датчик, производил необходимые вычисления и выводил данные на дисплей — все заработало так, как ожидалось.

Единственной неожиданностью оказалось то, что датчик, который не подключен к проводу, ток в котором хотим измерить, дает ненулевые значения — имеется небольшая «постоянная составляющая» (обусловлена неидеальностью элементов между датчиком и аналоговым входом МК). Поэтому решено в скетч добавить простенький механизм «автокалибровки» для ее устранения.

Теперь можно переходить к реализации «в железе».

Печатную плату ради одного устройства делать, имхо, нецелесообразно — решил все сделать на печатной макетной плате навесным монтажом.

Для прибора был приобретен корпус. Выбор был сделан «на глазок» (определяющим был размер дисплея и то, что рядом с ним должно быть две кнопки).

Фото некоторых комплектующих, которые использовались в последующих итерациях:
Простое устройство мониторинга энергопотребления

Для собственного удобства решил сделать устройство из двух плат.

На верхней расположил дисплей, кнопки, разъемы и большую часть «рассыпухи», отсносящуюся к дисплею и датчику.
На нижней плате — микросхема atmega168 в панельке, конденсаторы (по питанию) и разъем для подключения программатора. Эта плата получилась почти пустая.

Для соединения плат решил использовать штыревые разъемы:
Простое устройство мониторинга энергопотребления

Безусловно, все составляющие можно было разместить и на одной плате (микроконтроллер разместить под дисплеем), но не хотелось делать более плотный монтаж, да и оставить «резерв на развитие» — не лишнее (даже если и не понадобится).

«Бутерброд» в сборе:
Простое устройство мониторинга энергопотребления

Видно, что платы имеют «хитрую» конфигурацию — это для того, чтобы не нарушать внутреннее «убранство» приобретенного корпуса. Выступы в корпусе хорошо фиксируют «бутерброд» внутри и не дают свободно болтаться в корпусе.

На этом этапе проекта пришлось сильно думать, как же теперь разметить отверстия под дисплей, кнопки и разъемы, причем сделать это так, чтобы не пришлось делать фальш-панель?

Помогли направляющие и то, что платы были сделаны с минимальным зазором — люфт почти нулевой.

Разметку необходимых отверстий производил изнутри и использовал подручные средства.

Начал с кнопок: взял зубную пасту и намазал «верхушки» толкателей — после этого аккуратно вставил «бутерброд» в корпус по направляющим и добился отпечатка на внутренней стороне корпуса.
Дальше просверлил по полученным меткам отверстия сверлом нужного диаметра. И снова примерил плату — бинго! Кнопки оказались на своих местах.

Аналогично «измазал» рамку дисплея (он еще под упаковочной пленкой был) и повторил манипуляции. Результат можно видеть ниже.

Последняя «примерка», все выглядит сносно:
Простое устройство мониторинга энергопотребления

Слабонервным не смотреть (обратная сторона платы)

Простое устройство мониторинга энергопотребления

Сначала не планировал делать разъем для подключения программатора: думал, что сделаю аппаратную часть, напишу всю программную начинку, прошью и все соберу в корпусе, но оказалось, что вывести разъем достаточно просто и это удобнее, чем разбирать устройство для каждой корректировки ПО.

Программирование устройства с помощью программатора на FT232RL:
Простое устройство мониторинга энергопотребления

Прибор в сборе (правда, софт еще не дописан):
Простое устройство мониторинга энергопотребления

Демонстрация работы прибора и его основных возможностей (тут уже «финальная» версия софта):

Прошу прощения за качество — очень неудобно одной рукой держать «камеру», а другой — подключать, нажимать, включать кондиционер и т.п.

Архив со скетчем и необходимой библиотекой доступен по ссылке.

Список покупок

Привожу ссылки, где приобретал комплектующие. Безусловно, можно найти дешевле.

Получается больше 2.5 тыс.руб.

Немало, но если брать только нужные элементы (а не наборы) и приобретать в «правильных» местах — можно будет существенно сэкономить (правда, ждать придется дольше).

Дополнительно была использована макетная плата, набор соединительных проводов, программатор, ардуинка (в роли ISP-программатора) и т.п. Поскольку эти вещи были ранее и используются в этом «проекте» только временно — не включил их в стоимость созданного устройства.

Еще нужен блок питания на 5В (стабилизированный) — его тоже не включил в стоимость, поскольку нашел у себя в залежах и даже не представляю, от какого устройства он остался.

В результате: создан еще один девайс, который позволяет вполне адекватно оценить текущее потребление электроэнергии.
Точность прибора невысока, но при включении электропотребителей с известными характеристиками (чайник, духовой шкаф, кондиционер, светильники и т.п.) — значения, выводимые на дисплей, достаточно точно соответствуют заявленным производителем (погрешность примерно на уровне 5-10%).
Устройство отслеживает как максимальные, так и минимальные значения электропотребления (ожидаемо, что самое низкое потребление зафиксированно в ночные часы и у меня составило 0.58кВт — компьютеры, сетевое хранилище, холодильник, всяческие зарядки и несколько устройств в режиме ожидания).

Когда видишь цифры текущего потребления — это заставляет задуматься об эффективности использования электроэнергии и сразу хочется выяснить, за счет чего можно их уменьшить.

Полезные ссылки

P.S. уже придумалось, что на «нижнюю» плату с МК следует добавить модуль беспроводной связи nrf24l01+ (и стабилизатор питания на 3.3В для него) и преобразовать созданное устройство в «беспроводной датчик с дисплеем».

P.P.S. об обнаруженных ошибках в тексте прошу сообщить с помощью личных сообщений.

Автор: avstepanov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js