Все началось с того что в комнате становилось жарко если работает компьютер, за моим отсутствием или ленью не часто проветривалась комната (хотя казалось бы надо просто открыть окно). Короче решил я делать это «устройство». По сути требовался датчик температуры механизм открывающий и закрывающий окно и автоматику которая всем этим управляет.
Баловством с контроллерами на тот момент уже слегка занимался, поэтому решил что мне нужен контроллер ну и самый простой датчик температуры (он же терморезистор) — замечательно, сказано сделано, приобрел в местном магазине эти вещи спаял на макетке, опробовал самую простую автоматику типа греешь датчик дыханием — загорается светодиод, датчик остывает — светодиод гаснет. Получилось примерно вот такое:
Замечательно, работает! встал следующий вопрос — дыхание это все понятно но хотелось бы конкретные значения температуры, после долгого высчитывания значений напряжений и перевода их в температуру у меня вышло более менее точные значения температуры которую я наблюдал на мониторе компьютера принимая значения с COM порта. Тоже порадовался этому достижению (казалось бы что надо человеку для радости). Тут пришла мысль, а вот бы без компа смотреть значения температуры, да и вообще отдельное устройство работающее само по себе и если надо общающееся с компом — это вроде как будет интересно. Вариант с семисегментными индикаторами отмелся как-то очень быстро — не интересно типа. решил делать вывод на ЖКИ.
Использовал такой индикатор, начал разбираться что там и как какие бывают что им там требуется, тестировал на макетной плате и пришел к такому выводу — требуется им инициализация начальная причем зависит от конкретно используемого индикатора, и при работе соблюдения всяких задержек, подумал что если у меня аналоговый датчик температуры с преобразованием по времени индикатор тоже всякие задержки, а еще надо механизм открывания окна скорее всего на двигателе делать там тоже по времени рассчитывать придется.
В общем решил я делать отдельный модуль который будет заниматься выводом информации (в дальнейшем прозвал его модуль вывода текстовой информации МВТИ), а основной контроллер задумываться о том что там какие-то задержки даже не будет, к тому же память экономит. Решил использовать стандартный интерфейс COM порта (RS-232). Задача стояла такая: модулем принимаю символы по RS-232 вывожу на ЖКИ, перед началом производится вся полагающаяся инициализация, соблюдаются все нужные задержки, делаются всевозможные проверки типа количества выводить 40 символов, переходы на новую строку, и таблица соответствия символов кодировки данных приходящих с COM порта и ЖКИ, очень хотелось чтобы вывод был на русском языке.
Занялся этим вопросом — создал схему, развел плату и нужно было заняться ее изготовлением, что-то у меня плохо шла технология ЛУТ, и решил я попробовать сделать это в Китае, прочитал целую статью про это на хабре, и решил заказать там же где и у них в статье было написано, сайт производителя плат. Минимальный заказ у них 5 штук и 1 в довесок бесплатно добавляют (в общем по любому в цене выгоднее чем у нас заказывать). Заказал у них эти 5 штук, подумал пригодится если еще такие модули делать буду, они получаются универсальные можно просто к компу на нуль модемный кабель посадить и выводить что-нибудь (питание еще от блока подать). Прислали через месяц мне платы, напаял туда элементы написал прогу для контроллера который на в модуле, затестировал, и в первом приближении мне понравилось, потом потихонечку доводил по мере того как что-то находил. Конечный вариант вышел такой.
Теперь у меня выводилась температура на ЖКИ в виде: Температура 23 градуса, встала новая проблема она прыгала при малейшем дунавении ветерка типа открытии двери окна, сам мимо прошел — сделал усреднение, получилось вроде нормально. Температура это конечно хорошо но захотелось мне еще туда и время выводить. Попробовал сделать и это, добавил коду, обнаружил что есть недочеты при выключении питания — оно сбивается и его надо каждый раз выставлять. Опыта работы с контроллерами не хватало и со временем выходило не очень, секунды были разные и быстро набегали ошибки. Попробовав то се, начал думать как быть, развивался ардуино и появились дешевые модули реального времени, на том и порешил.
Взял себе ардуино Леонардо с 2-мя UART портами (один под модуль вывода текста, второй штатный для соединения с компом), модуль реального времени. С библиотеками проблем не было, кода в инете и примерах достаточно, быстро написал код, оттестил его и радовался жизни — время пошло и дата тоже была и при выключении время не сбивалось, сплошь замечательная жизнь. Но и тут мне не сиделось не понравилось что на маленьком экранчике ЖКИ очень уж мелко время показывает, надо бы что-нибудь придумать, и решил я сделать модуль вывода времени на семисегментных индикаторах. Семисегментного индикатора с двумя точками хорошего размера себе не нашел. использовал 2 сдвоенных плюс 2 светодиода под точки, решил плату также как и предыдущую делать, но не делать ее частотной, а с микросхемами памяти которые хранят состояние часов и минут т.е. время записывается туда 1 раз в минуту, дальше пины свободны для других задач. получился вот такой вот модуль:
Дальше нашел подходящий корпус, приобрел блок питания на Ali, собрал работает — глаз радует:
Следующий шаг механизм открывающий окно. У меня окно деревянное открывается на бок узкая и длинная форточка до верха. Тут было потеряно не мало времени пока не подобрал боле-менее подходящий вариант для системы которая занимается открытием и закрытием окна. На последний момент механизм выглядит таким образом:
Все собиралось из подручных средств, тяги были взяты от механизма дверцы шкафа бара (еще советской конструкции), шаговый двигатель от принтера (драйвер на микросхеме L293), белая пластиковая деталь — напечатана на 3D принтере. Несколько раз конструкция, облегчалась и переделывалась, на текущий момент свою функцию выполняет, не совсем ей доволен — так что планирую ее модернизацию. Для примера записана программа так что при температуре более 27 открывает окно, менее 24 градусов закрывает окно, но запланировано проветривать по времени с ориентированием на температуру: если температура во время проветривания понижается быстро то проветривание небольшое по времени, при этом чаще происходит само проветривание и наоборот.
Ссылка на видео открытия и закрытия окна
На последок: Получилось достаточно своеобразное устройство с возможностью дальнейшего впихивания в него какого нибудь функционала, типа включения по времени датчиков освещенности — этакий нано умный дом.
P.S.: Выслушаю мнения, идеи, комментарии и пр.
Автор: Vasilii_B2