В некоторых случаях эти знания имеют очень большое значение (например, для вашего загородного дома выделили 8кВт мощности и вам необходимо понять, насколько близко вы находитесь к разрешенному пределу и т.п.).
Есть уже готовые изделия, одно из них уже было героем обзора на Хабре.
Но мы не из тех, кто ищет легких путей и сделаем вот такое устройство:
В руки попал вот такой датчик:
Остальные компоненты будем использовать наиболее доступные и приоритет будем отдавать тем, что уже имеются в наличии.
Замечание: поскольку схема не слишком сложная, я ее целиком приводить не буду, а расскажу только о некоторых особенностях.
Ссылки на все полезные материалы и библиотеки, которые использовались при создании этого приборчика расположены в конце статьи.
Датчик, фото которого приведено выше — неинвазивный датчик тока (до 100А). Выход датчика — токовый.
Напрямую к аналоговому входу ардуинки этот датчик подключать нельзя (точнее можно, но пользы это не принесет никакой).
Чтобы получать адекватые значения измеряемой величины нам необходимо добавить несколько элементов и подключить датчик по следующей схеме:
Обоснование схемы и расчет номиналов элементов приводится по следующей ссылке.
Таким образом, значение тока сможем измерить, но наша цель — измерить потребляемую мощность.
Воспользуемся известной формулой: P=U*I.
И вроде бы как все значения в правой части известны. Но значение напряжения, к сожалению, может колебаться в достаточно больших пределах и по-хорошему следует еще и его измерять для получения более точных результатов.
Учитывая это замечание, сразу можно сказать, что прибор не будет отличаться большой точностью и скорее будет являться некоторым индикатором с возможностью оценки измеряемых значений, но с погрешностью, зависящей еще и от величины напряжения. В случае, если у вас установлен стабилизатор питания — эта погрешность уменьшается.
С подключением датчика разобрались, теперь нужно разобраться с остальными комплектующими.
От моих первых шагов по освоению ардуинки остались микросхема ATmega168 и ЖК-дисплей 12х2 с поддержкой кириллицы — их и будем использовать.
На этапе прототипирования выяснилось, что ATmega168 есть, а вот кварца с парой конденсаторов к нему — нет. Но, как все знают, атмега может спокойно работать на частоте 8МГц с внутренним осциллятором.
Этот режим работы совершенно нормальный, но точность внутреннего осциллятора невысока. Для создаваемого устройства это не критично.
Чтобы включить этот режим работы МК, необходимо поправить фьюзы. Фьюзы можно изменить с помощью среды Arduino, но делается это только в момент прошивки бутлоадера.
Составляющие успешной прошивки:
- Ардуинка с прошитым скетчем Arduino ISP
- Ардуинка с DIP-панелькой для «подопытного» МК (или беспаечная макетка, где собрана ардуинка с минимальным «обвесом»)
- Несколько проводков для соединения ардуинок (или ардуинки и макетки)
- Правильная запись для «новой платы» в файле boards.txt
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:
Прибор в сборе (правда, софт еще не дописан):
Демонстрация работы прибора и его основных возможностей (тут уже «финальная» версия софта):
Прошу прощения за качество — очень неудобно одной рукой держать «камеру», а другой — подключать, нажимать, включать кондиционер и т.п.
Архив со скетчем и необходимой библиотекой доступен по ссылке.
Список покупок
Привожу ссылки, где приобретал комплектующие. Безусловно, можно найти дешевле.
- ATmega 168 — 145 руб.
- Датчик тока — 529 руб.
- Разъем jack 3.5мм — 79 руб. (в наборе три, нужен только один)
- Резисторы и конденсаторы — 189 руб. (из набора нужно далеко не все)
- Штыревые разъемы — 319 руб. (опять же из набора нужно далеко не все)
- Гнездо питания — 20 руб.
- ЖК-дисплей 16х2 (англо-русский) — 650 руб.
- Кнопка тактовая (h=13мм) — 19 руб. (2 шт.)
- Корпус — 88 руб.
- Макетная плата — 870 руб. (нужна не вся)
Получается больше 2.5 тыс.руб.
Немало, но если брать только нужные элементы (а не наборы) и приобретать в «правильных» местах — можно будет существенно сэкономить (правда, ждать придется дольше).
Дополнительно была использована макетная плата, набор соединительных проводов, программатор, ардуинка (в роли ISP-программатора) и т.п. Поскольку эти вещи были ранее и используются в этом «проекте» только временно — не включил их в стоимость созданного устройства.
Еще нужен блок питания на 5В (стабилизированный) — его тоже не включил в стоимость, поскольку нашел у себя в залежах и даже не представляю, от какого устройства он остался.
В результате: создан еще один девайс, который позволяет вполне адекватно оценить текущее потребление электроэнергии.
Точность прибора невысока, но при включении электропотребителей с известными характеристиками (чайник, духовой шкаф, кондиционер, светильники и т.п.) — значения, выводимые на дисплей, достаточно точно соответствуют заявленным производителем (погрешность примерно на уровне 5-10%).
Устройство отслеживает как максимальные, так и минимальные значения электропотребления (ожидаемо, что самое низкое потребление зафиксированно в ночные часы и у меня составило 0.58кВт — компьютеры, сетевое хранилище, холодильник, всяческие зарядки и несколько устройств в режиме ожидания).
Когда видишь цифры текущего потребления — это заставляет задуматься об эффективности использования электроэнергии и сразу хочется выяснить, за счет чего можно их уменьшить.
Полезные ссылки
- Измерительные цепи
- Подключение датчика тока к Ардуино (выбор элементов, основные формулы)
- Скетч для измерения среднеквадратичного значения тока и мощности
- Калькулятор фьюзов AVR
- Arduino в роли ISP-программатора
- Подключение LCD-дисплея к Ардуино
- Спецификация на дисплей и кодовая таблица
- Как сделать прямоугольное отверстие в корпусе
P.S. уже придумалось, что на «нижнюю» плату с МК следует добавить модуль беспроводной связи nrf24l01+ (и стабилизатор питания на 3.3В для него) и преобразовать созданное устройство в «беспроводной датчик с дисплеем».
P.P.S. об обнаруженных ошибках в тексте прошу сообщить с помощью личных сообщений.
ссылка на оригинал статьи http://habrahabr.ru/post/168783/
Добавить комментарий