Сейчас все больше и больше людей интересуются темой мониторинга потребляемого электричества.
В некоторых случаях эти знания имеют очень большое значение (например, для вашего загородного дома выделили 8кВт мощности и вам необходимо понять, насколько близко вы находитесь к разрешенному пределу и т.п.).
Есть уже готовые изделия, одно из них уже было героем обзора на Хабре.
Но мы не из тех, кто ищет легких путей и сделаем вот такое устройство:
В руки попал вот такой датчик:
Остальные компоненты будем использовать наиболее доступные и приоритет будем отдавать тем, что уже имеются в наличии.
Замечание: поскольку схема не слишком сложная, я ее целиком приводить не буду, а расскажу только о некоторых особенностях.
Ссылки на все полезные материалы и библиотеки, которые использовались при создании этого приборчика расположены в конце статьи.
Датчик, фото которого приведено выше — неинвазивный датчик тока (до 100А). Выход датчика — токовый.
Напрямую к аналоговому входу ардуинки этот датчик подключать нельзя (точнее можно, но пользы это не принесет никакой).
Чтобы получать адекватые значения измеряемой величины нам необходимо добавить несколько элементов и подключить датчик по следующей схеме:
Обоснование схемы и расчет номиналов элементов приводится по следующей ссылке.
Таким образом, значение тока сможем измерить, но наша цель — измерить потребляемую мощность.
Воспользуемся известной формулой: P=U*I .
И вроде бы как все значения в правой части известны. Но значение напряжения, к сожалению, может колебаться в достаточно больших пределах и по-хорошему следует еще и его измерять для получения более точных результатов.
Учитывая это замечание, сразу можно сказать, что прибор не будет отличаться большой точностью и скорее будет являться некоторым индикатором с возможностью оценки измеряемых значений, но с погрешностью, зависящей еще и от величины напряжения. В случае, если у вас установлен стабилизатор питания — эта погрешность уменьшается.
С подключением датчика разобрались, теперь нужно разобраться с остальными комплектующими.
От моих первых шагов по освоению ардуинки остались микросхема ATmega168 и ЖК-дисплей 12х2 с поддержкой кириллицы — их и будем использовать.
На этапе прототипирования выяснилось, что ATmega168 есть, а вот кварца с парой конденсаторов к нему — нет. Но, как все знают, атмега может спокойно работать на частоте 8МГц с внутренним осциллятором.
Этот режим работы совершенно нормальный, но точность внутреннего осциллятора невысока. Для создаваемого устройства это не критично.
Чтобы включить этот режим работы МК, необходимо поправить фьюзы. Фьюзы можно изменить с помощью среды Arduino, но делается это только в момент прошивки бутлоадера.
Составляющие успешной прошивки:
Ардуинка с прошитым скетчем Arduino ISP
Описание варианта в boards.txt
Внимание, если у вас МК уже с ардуиновским бутлоадером, то обновлять бутлоадер нужно с использованием кварцевого резонатора.
Прошивка прошла успешно, МК заработал на внутреннем осцилляторе.
Теперь надо было подумать, как подключить дисплей и кнопки.
Задачка совсем несложная и можно подключить так, как делается во всех примерах (см.ссылки ниже).
Дисплей подключаем в 4-х битном режиме (для экономии используемых цифровых пинов).
Один из выводов дисплея отвечает за контрастность. Захотелось иметь возможность регулировать контрастность из скетча. Сказано-сделано: подключаем этот вывод к свободному пину с ШИМ (дополнительно ставим электролитический конденсатор на 10мкФ — для сглаживания).
Поскольку планировалось использовать две кнопки, то самым простым решением было бы повесить каждую кнопку на свой цифровой пин и мониторить их состояние, но это как-то тривиально.
Решил задействовать для кнопок всего один пин (аналоговый).
Схема очень простая — кнопки включаются последовательно друг за другом, параллельно каждой кнопке — свой резистор. Последовательно этой конструкции — еще один резистор. Вся эта цепь включена между «землей» и «питанием». Таким образом получается делитель напряжения.
Нарисовал, как смог, извините.
Особенность схемы (и подобранных резисторов) такова, что позволяет отслеживать нажатие любой из кнопок и «бонусом» — факт нажатия двух кнопок сразу, чем мы и воспользуемся при написании скетча.
Сначала собрал прототип на беспаечной макетной плате:
Написал небольшой скетч, который опрашивал датчик, производил необходимые вычисления и выводил данные на дисплей — все заработало так, как ожидалось.
Единственной неожиданностью оказалось то, что датчик, который не подключен к проводу, ток в котором хотим измерить, дает ненулевые значения — имеется небольшая «постоянная составляющая» (обусловлена неидеальностью элементов между датчиком и аналоговым входом МК). Поэтому решено в скетч добавить простенький механизм «автокалибровки» для ее устранения.
Теперь можно переходить к реализации «в железе».
Печатную плату ради одного устройства делать, имхо, нецелесообразно — решил все сделать на печатной макетной плате навесным монтажом.
Для прибора был приобретен корпус. Выбор был сделан «на глазок» (определяющим был размер дисплея и то, что рядом с ним должно быть две кнопки).
Фото некоторых комплектующих, которые использовались в последующих итерациях:
Для собственного удобства решил сделать устройство из двух плат.
На верхней расположил дисплей, кнопки, разъемы и большую часть «рассыпухи», отсносящуюся к дисплею и датчику.
На нижней плате — микросхема atmega168 в панельке, конденсаторы (по питанию) и разъем для подключения программатора. Эта плата получилась почти пустая.
Для соединения плат решил использовать штыревые разъемы:
Безусловно, все составляющие можно было разместить и на одной плате (микроконтроллер разместить под дисплеем), но не хотелось делать более плотный монтаж, да и оставить «резерв на развитие» — не лишнее (даже если и не понадобится).
«Бутерброд» в сборе:
Видно, что платы имеют «хитрую» конфигурацию — это для того, чтобы не нарушать внутреннее «убранство» приобретенного корпуса. Выступы в корпусе хорошо фиксируют «бутерброд» внутри и не дают свободно болтаться в корпусе.
На этом этапе проекта пришлось сильно думать, как же теперь разметить отверстия под дисплей, кнопки и разъемы, причем сделать это так, чтобы не пришлось делать фальш-панель?
Помогли направляющие и то, что платы были сделаны с минимальным зазором — люфт почти нулевой.
Разметку необходимых отверстий производил изнутри и использовал подручные средства.
Начал с кнопок: взял зубную пасту и намазал «верхушки» толкателей — после этого аккуратно вставил «бутерброд» в корпус по направляющим и добился отпечатка на внутренней стороне корпуса.
Дальше просверлил по полученным меткам отверстия сверлом нужного диаметра. И снова примерил плату — бинго! Кнопки оказались на своих местах.
Аналогично «измазал» рамку дисплея (он еще под упаковочной пленкой был) и повторил манипуляции. Результат можно видеть ниже.
Последняя «примерка», все выглядит сносно:
Слабонервным не смотреть (обратная сторона платы)
Сначала не планировал делать разъем для подключения программатора: думал, что сделаю аппаратную часть, напишу всю программную начинку, прошью и все соберу в корпусе, но оказалось, что вывести разъем достаточно просто и это удобнее, чем разбирать устройство для каждой корректировки ПО.
Программирование устройства с помощью программатора на FT232RL:
Прибор в сборе (правда, софт еще не дописан):
Демонстрация работы прибора и его основных возможностей (тут уже «финальная» версия софта):
Прошу прощения за качество — очень неудобно одной рукой держать «камеру», а другой — подключать, нажимать, включать кондиционер и т.п.
Архив со скетчем и необходимой библиотекой доступен по ссылке .
Привожу ссылки, где приобретал комплектующие. Безусловно, можно найти дешевле.
Получается больше 2.5 тыс.руб.
Немало, но если брать только нужные элементы (а не наборы) и приобретать в «правильных» местах — можно будет существенно сэкономить (правда, ждать придется дольше).
Дополнительно была использована макетная плата, набор соединительных проводов, программатор, ардуинка (в роли ISP-программатора) и т.п. Поскольку эти вещи были ранее и используются в этом «проекте» только временно — не включил их в стоимость созданного устройства.
Еще нужен блок питания на 5В (стабилизированный) — его тоже не включил в стоимость, поскольку нашел у себя в залежах и даже не представляю, от какого устройства он остался.
В результате : создан еще один девайс, который позволяет вполне адекватно оценить текущее потребление электроэнергии.
Точность прибора невысока, но при включении электропотребителей с известными характеристиками (чайник, духовой шкаф, кондиционер, светильники и т.п.) — значения, выводимые на дисплей, достаточно точно соответствуют заявленным производителем (погрешность примерно на уровне 5-10%).
Устройство отслеживает как максимальные, так и минимальные значения электропотребления (ожидаемо, что самое низкое потребление зафиксированно в ночные часы и у меня составило 0.58кВт — компьютеры, сетевое хранилище, холодильник, всяческие зарядки и несколько устройств в режиме ожидания).
Когда видишь цифры текущего потребления — это заставляет задуматься об эффективности использования электроэнергии и сразу хочется выяснить, за счет чего можно их уменьшить.
Полезные ссылки
P.S. уже придумалось, что на «нижнюю» плату с МК следует добавить модуль беспроводной связи nrf24l01+ (и стабилизатор питания на 3.3В для него) и преобразовать созданное устройство в «беспроводной датчик с дисплеем».
P.P.S. об обнаруженных ошибках в тексте прошу сообщить с помощью личных сообщений.
Комментарий проверяется
Текст комментария будет виден после проверки администратором.
Комментарий проверяется
Текст комментария будет виден после проверки администратором.
Комментарий проверяется
Текст комментария будет виден после проверки администратором.
Комментарий проверяется
Текст комментария будет виден после проверки администратором.
Комментарий проверяется
Текст комментария будет виден после проверки администратором.
Комментарий проверяется
Текст комментария будет виден после проверки администратором.