С 2006 года я по совместительству работаю в своем доме электриком.
Причины тому у меня были следующие:
1. Дом новый, все электрооборудование новое. Я не мог допустить, и это было в моих силах, что бы вся эта "красота" пришла в упадок, как это у нас обычно бывает.
2. Меня всегда волновал вопрос качественном обслуживания собственников жилья (не только по электрической части), то есть, на сто процентов освещенные места общего пользования и исправность электрооборудования. Ну, и раз уж я смог устроиться электриком - мне и карты в руки. И тем более у меня был один значительный козырь: ранее работая по договору со строительной компанией, строящей наш дом, я осуществлял монтаж электропроводки и электрооборудования дома, и, следовательно, очень хорошо знаю всю схему электроснабжения.
3. Ну, и на последок, не кривя душой - не на первом для меня месте, это дополнительный заработок, который покрывает квартплату на сто процентов.
Свои обязанности я выполнял добросовестно но, в конце концов, мне надоело бегать попусту по этажам со стремянкой, лампочки не всегда перегорают, а обход делать нужно регулярно.
Вот тут меня и осенило!!! придумать устройство, которое бы показывало мне, в каком подъезде перегорела лампочка.
Это собственно было вступлением, теперь позвольте перейти непосредственно к сути вопроса и рассказать Вам, как это было:
И так есть объект, в моем случае - это пять подъездов по пять этажей, и есть задача - ИНДИКАТОР КОЛИЧЕСТВА ЛАМП. Естественно, было несколько схемных решений, первые из которых ушли в историю, но было бы не справедливо хотя бы вкратце не упомянуть о них.
Принцип измерения во всех версиях контроллеров основан на измерении тока в цепи.
В каждом подъезде по пять ламп одинаковой мощности, ток изменяется линейно по количеству ламп. Контроллер я разместил в подвале, в электрощитовой.
Схемы могут незначительно отличаться от реальных, поскольку всякие доработки происходили на рабочем образце. Далее по тексту схемы 2, 3, 4 не приведены из-за не состоятельности.
Схема первая. Сигнал снимается с сопротивления R1 0,1 Ом зашунтированного двумя диодами D1 и D2, включенными встречно направленно - выполняют защитную функцию. Дальше сигнал усиливается ОУ U1A, выпрямляется и поступает на компаратор U1B. Компаратор настраивается переменным резистором RV1 на порог срабатывания, когда количество ламп меньше пяти. Светодиод зажигается, когда есть нагрузка и количество ламп меньше пяти, если нагрузки нет, считается, что свет выключен. Пять ламп зараз, за мою практику никогда не перегорало. Данное решение имеет существенный недостаток - о том, что перегорела лампа, я мог знать, только когда свет включен.
Схема вторая. Индикация осуществлялась путем передачи СМС. Узел измерения остался прежним, а на выходе был подключен микроконтроллер AT89C51 с подключенным к нему сотовым телефоном. Микроконтроллер отслеживал состояния выходов схем измерения. Программу мне написал мой коллега на основной работе (в то время сам я еще не писал и имел только общие представления о микроконтроллерах). Идея, по моему мнению, была хорошей, но не прижилась по двум причинам: первая - в один прекрасный момент схема "глюкнула" и завалила меня ложными СМСками. У меня тогда не было своего ключа от подвала, а времени было два часа ночи, я просто выключил звук на своем телефоне. Утром взял ключ у председателя, сходил в подвал и отключил контроллер до выяснения причины "глюка"; причина вторая - пока я выяснял причину "глюка", решил, что мне в своем доме не актуально оповещение через СМС потому как, практически каждый день я прихожу домой и могу совершенно бесплатно смотреть на индикатор дома.
Схема третья. Было принято решение о цифровой обработке сигнала. Опущу подробности изысканий, но, в конце концов, выбор мой пал на микроконтроллеры Atmel семейства AVR. Не знаю, почему на AVR, а не на PIC от Microchip, наверное, по алфавиту :. На тот момент я еще не знал ни цен, ни архитектуры микроконтроллеров. Меня устраивало наличие восьми десятибитных каналов АЦП на борту у ATmega16(самый популярный). Сигнал также снимал с резистора, усиливал на ОУ, выпрямлял и подавал на вход АЦП микроконтроллера. В качестве индикатора использовал LCD-индикатор 16х2 строчки. И один сигнальный светодиод. Надо сказать, что на тот момент мои знания языков программирования высокого уровня были практически на нуле. Были остаточные знания со времен ZX-Spectrum с его Бэйсиком. Поэтому первые прошивки писались на mikroBasic_for_AVR. Синтаксис знакомый, встроенные функции для работы с индикатором. Компактность кода и быстродействие меня не волновало, памяти для моих задач у выбранного микроконтроллера было предостаточно, и быстродействие было ни к чему. Поскольку я не программист, то придумывание алгоритма программы мне давалось с большим трудом, поверх этого приходилось вспоминать синтаксис. Кстати именно тогда у меня появилось второе, так сказать уменьшительно ласкательное название моего прибора - "Лампочкометр". Итак, функции моей первой прошивки для контроллера освещения были следующие:
1. Вывод на дисплей текущей информации о количестве горящих ламп по каждому подъезду (естественно при включенном свете).
2. Просмотр количества ламп при выключенном освещении. При включении прибора, в массив количества ламп, по каждому подъезду, записывается полное количество ламп в подъезде, в моем случае - 5шт.
3. При перегорании одной или более ламп, из полного количества ламп в подъезде вычитается количество сгоревших ламп. Включается сигнальный светодиод для привлечения внимания. Светодиод выключается только после замены лампы, так и будет маячить, хочешь, не хочешь, а менять придется идти.
4. Калибровка прибора. Даем прибору "понюхать" полную нагрузку, считываем значение АЦП и делим на 5, то есть на полное количество ламп, полученную константу запоминаем в EEPROM. Далее в нормальном режиме работы полученное значение АЦП делим на константу - получаем количество ламп в подъезде.
Схема четвертая. Недостатком предыдущей схемы было то обстоятельство, что устанавливалась она непосредственно в электрощитовой, было не очень удобно ходить каждый раз в подвал. То есть, как и следовало ожидать, следующим шагом был выносной дисплей. Тянуть девять жил для дисплея на пятый этаж, где я живу, было бы глупо и дорого, и вряд ли заработало - никто так не делает. Небольшое отступление про финансовую часть: на тот момент и с самой первой схемы я еще расплачивался за свою квартиру, а это была вся моя зарплата. Жили на зарплату жены, она работает воспитателем в детском саду. Так, что покупка любых радиодеталей била по истощенному семейному бюджету как ножом по сердцу. Ну, не будем о грустном. На самом деле кабель у меня уже был, протянут со времен первой схемы, когда дома стоял индикатор из пяти светодиодов. Кабель шестижильный не экранированный 6 х 0,22. Очевидное решение поставить два микроконтроллера, один измеряет и передает данные по последовательному интерфейсу, второй принимает данные и обрабатывает и выводит на дисплей. Итак, была заложена следующая идеология - контроллер нижнего уровня(измерительный) и контроллер верхнего уровня. Измерительный контроллер только считывал значения с пяти каналов АЦП и передавал контроллеру верхнего уровня на скорости 2400 бод. Есть две причины столь низкой скорости: это неэкранированный кабель протянутый вдоль силовых линий электроснабжения дома, и передавалось в пакете всего шесть байт, идентификатор начала пакета (0хFF, ) и пять байт данных АЦП пяти каналов. Данные обрабатывались по алгоритму, как и в предыдущей схеме.
Итак, схема последняя, действующая и по сей день.
В новой схеме была изменена измерительная часть, которая не давала мне покоя с самого начала. Нет, работала она нормально, что может быть проще резистора. У схемы был один существенный недостаток: она не была гальванически развязана с микроконтроллером. С трансформаторами тока у меня как то сразу не пошло, хотелось побыстрее сделать что-то рабочее, поэтому в качестве измерительного узла был выбран резистор. Но оставалось ощущение не правильности. Ну, а поскольку у меня к тому времени уже стоял и работал контроллер, можно было спокойно заниматься теоретическими и техническими изысканиями. Едем дальше. В предыдущей версии калибровка происходила по одному каналу. Тут проблема состояла в том, что при одинаковой нагрузке могут быть разные показания, сказывается погрешность деталей (в основном резисторов в усилителях). Отсюда ошибки при вычислениях. Можно было бы поставить подстроичники, но во первых мне в принципе не хотелось что либо там настраивать, ну, а во вторых, я все равно собирался все переделывать. В новой программе нужно реализовать калибровку по каждому каналу. Ну и последняя доработка это подключение тамбуров, оказывается, лампочки, там тоже перегорают:.
Разберем аппаратную часть. Идеология та же - контроллер нижнего уровня (измерительный) и контроллер верхнего уровня (обработка, индикация). Только измерительных котроллеров теперь два, для лестниц и тамбуров. Контроллеры соединяются между собой по RS-485 интерфейсу. Схема измерительного контроллера, по моему мнению, теперь представляет собой идеологически правильную, в качестве измерительного элемента - трансформатор тока на ферритовом кольце. Первичной обмоткой, является фазный провод освещения подъезда, проходящий внутри кольца, вторичная обмотка сто витков провода ПЭВ 0,1. Вторичная обмотка подключается к схеме преобразователя ток в напряжение собранного на ОУ. Выход ОУ через резистор 100 кОм подключен на микроконтроллер ATmega8.
Для передачи данных используется UART приемо-передатчик микроконтроллера, для реализации интерфейса RS-485 используется микросхема MAX493. Контроллер меряет переменное напряжение, это избавляет меня от лишних деталей, всяких там нелинейностях и падениях на диодах. Способ следующий: микроконтроллер отслеживает переход через ноль, отсчитывает 5мс, что бы попасть на пик синусоиды, и запускает АЦП микроконтроллера. Для детектирования нуля заводим переменное напряжение с обмотки питающего трансформатора на вход INT0. У меня для питания обоих контроллеров (тамбурного и лестничного) используется один трансформатор, а питание лестниц и тамбуров осуществляется с разных фаз, поэтому предусмотрена возможность сдвига фаз, то есть установка разных задержек, 18 и 19 ножка МК
| |
Контроллер нижнего уровня. Общий вид, под крышкой. |
В измерительном контроллере предусмотрено два светодиода, первый отображает, то что идет процесс измерения, второй зажигается когда контроллер получает свой адрес и соответственно отправляет данные АЦП.
Контроллер верхнего уровня. Микроконтроллер ATmega16, дисплей 16х2, MAX493, четыре кнопки и два светодиода. Все собрано на макетной плате, не видел смысла что-то разводить для единственного экземпляра. 99% контроллера верхнего уровня это программа. Это мой первый опыт написания программы на СИ, не шедевр и не все писал сам. Со мной в кабинете на работе сидят два очень хороших программиста, мои коллеги и друзья Валера и Сергей, вот они мне и помогали.
Слева фотография контроллера в сборе, установлен у меня дома, справа от входной двери.
Корпус BOX-G100, на лицевой панели полимерная наклейка. Справа фотография без "одежки".
Итак, программа. Программа писалась в CodeVisionAVR.
Как я уже и говорил контроллер верхнего уровня, принимает данные от измерительного контроллера для последующей обработки и отображения. При включении микроконтроллер читает из EEPROM параметры калибровки и прочие установки. Для управления контроллером используется четыре кнопки "Esc", "-", "+" и "Enter". В исходном состоянии контроллер отображает информацию о количестве ламп по каждому подъезду по лестницам и тамбурам.
Всего имеется четыре вида отображения, то был вид первый.
Следующие два вида отображают в верхней строке количество ламп по лестницам и тамбурам соответственно, а в нижней данные АЦП в шестнадцатиричном виде (не очень удобно, но зато на дисплей красиво помещается). Данные АЦП предназначены для диагностических целей, применялось на стадии отладки.
Четвертый вид - для отображения текущего времени в верхней строке, и при перегорании лампочки, в нижней строке выводится сообщение "Лестница" или "Тамбур" или оба вместе, начинает мигать подсветка дисплея.
Светодиоды являются диагностическими, зеленый и красный. Зеленый светодиод мигает с частотой опроса контроллеров нижнего уровня, а красный когда превышен таймаут ожидания ответа от контроллера нижнего уровня.
Меню настроек.
Меню настроек состоит из следующих пунктов:
Данные датчиков. Этот пункт меню для диагностических целей, в двух строчках в шеснтнадцатиричном виде отображаются данные АЦП обоих контроллеров нижнего уровня.
Сгоревшие лампы. Просмотр количества исправных ламп.
Сброс. Выключение отображения аварийного состояния и мигания дисплея, сброс количества перегоревших ламп, контроллеру сообщается полное количество ламп по всем каналам.
Количество сгоревших ламп. Отображение информации о количестве сгоревших лампах за весь период эксплуатации контроллера.
Полная калибровка. Производится полная калибровка всех каналов. Если на каком либо канале нагрузка отсутствует, то калибровка этого канала не производится.
Выборочная калибровка. Позволяет произвести выборочную калибровку, какого либо канала.
Установка дисплея. Установка яркости, контрастности и времени смены дисплеев в исходном состоянии, если время смены установлено "0", то дисплеи можно поменять вручную.
Установка времени опроса. Меняется время опроса датчиков 70-260мс. Пункт был введен на стадии экспериментов со связью, в этом же пункте отображается количество ошибок (превышение таймаута) по каждому контроллеру нижнего уровня, можно определить какой контроллер барахлит.
Перезагрузка. Перезагрузка контроллера. В программе есть маленький глюк, после калибровки неправильно вычисляет количество ламп. При включении контроллера и чтении параметров из EEPROM все нормально работает. Так и не смог найти причину, ввел пункт "Перезагрузка", а позже дописал, что бы после каждой калибровки контроллер перегружался.
Кстати, выключатель питания на контроллере отсутствует по причине случайного выключения и для самодисциплинирования. Не выключен - значит, работает. Работает - значит "симофорит" мне, когда перегорают лампы, иду и меняю! Если неисправен сам прибор, было и такое, я так же все это вижу и как правило не нахожу себе места, стараюсь по быстрее все починить.
Я не вижу большого смысла описывать настройку и работу с самим прибором, по тому, как в первую очередь я делюсь с вами самой идеей.
В приложении содержатся схемы из статьи, файл смоделированной схемы в Proteus 6.9, где можно все потыкать и пощупать, файлы прошивок МК и исходников под CodeVisionAVR.
Прибор, несомненно, облегчил мне жизнь, я уже не трачу бесценное время на обходы, прихожу домой, бросаю взгляд на контроллер, ну а дальше по обстоятельствам, или иду менять лампу в конкретный подъезд, или на диван. Плюс для жильцов: замена ламп происходит весьма оперативно, то есть, не приходиться ждать моего обхода или звонить мне.
Вторая польза. Научился программировать. Нет, ассом я не стал, но всякие мигалки, термостаты на МК, это можно. Отсюда вывод - если есть настоящая задача, то вы наизнанку вывернитесь, но добьетесь своего.
Файлы:
Прошивки с исходниками, плюс файлы для Proteus.
Вопросы, как обычно, складываем тут.