Например TDA7294

РадиоКот > Схемы > Цифровые устройства > Бытовая техника

Часы на двухцветной матрице с функцией информирования

Автор: axillent
Опубликовано 11.02.2014.
Создано при помощи КотоРед.

Вводная

Данная статья является естественным продолжением статей "О концепте устройств для умного дома" и "О простых часах". С момента публикации тех статей утекло какое-то количество воды и кое-что существенно поменялось в используемых подходах. Изменения коснулись используемой платформы для интеграции, но логика простых (простых в использовании, не требующих особой заботы) устройств сохранилась. Если в концепте я рассматривал некое не завершенное решение, то сегодня вашему вниманию представляю полноценную конструкцию с 100% исходными кодами.

В новом подходе основу интеграции моих устройств составляет плагин описанный в проекте ArduinoVera здесь http://code.mios.com/trac/mios_arduino-sensor/wiki. Сердцем описанной в проекте платформы является контроллер умного дома от Micasaverde - vera light или vera3 (буду называть ее просто - Вера). Сами по себе контроллеры ориентированы на построение конечного решения с применением готовых устройств z-wave. Но в то же время внутренняя логика расширения и управления внутри Вера потрясает своей гибкостью и универсальностью. В добавок мы получаем готовые, качественные решения для удаленного информирования/управления в том числе используя смартфоны и планшеты.

Достаточно приставить (точнее подключить через USB) к Вера Arduino Nano с несложной программой и мы получаем возможность создания своих устройств для умного дома и без серьезных усилий применять эти устройства так же просто как готовые устройства z-vawe. Версия автора проекта ориентирована на ардуино, но я специально для вас сделал клон на AVR - это открывает возможности из простых и не дорогих компонентов делать весьма серьезные устройства, как сенсоры так и исполнительные (реле/диммеры и т.д.). В основе любой МК с радиомодулем NRF24L01+, остальные компоненты уже на усмотрение конкретного устройства - всякого рода датчики, реле электромагнитные, твердотельные и т.д. и т.п.

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

Собственно часы

Уже достаточно давно соблазнился на вот такую большую и не очень дорогую двухцветную матрицу 32х16 светодиодов со встроенными контроллерами. Ее размер почти с лист А4. Ходил я как кот вокруг миски облизывался, но не знал когда и с какой стороны к ней подойти пока не довелось мне разобраться с тем, как работать с таким широко известным датчиком давления и температуры как BMP085. Получив работающий код пришел к идее сделать большие часы, которые будут показывать время, атмосферное давление, температуру в квартире и температуру на улице. Собственно "что такого нового?" спросите вы и будете правы, если не дослушаете не дочитаете статью до конца.

Новым будет то как мои часы будут получать информацию для отображения. Нет, ну собственно датчик давления будет просто впаян на плату часов - его "уносить" куда либо нет смысла. А вот то, что еще будут показывать часы будет определяться Верой. В опубликованной в этой статье версии Вера сможет:

  • передать уличную температуру для отображения. Где Вера будет ее брать - вопрос третий. Собственно в этом и прелесть. Сегодня у меня это Weather plugin, который из интернета берет погоду сам в зависимости от GPS координат указанных в настройках Вера. В будущем я планирую поставить свой датчик уличной температуры и возможно буду показывать температуру с него. Вернемся к прелести - часам не нужно знать откуда взялась температура для отображения. Прислали - показывай;
  • передать среднюю температуру в квартире. Прелесть такая же как для уличной температуры - часам все равно откуда ее взяли и как ее посчитали. Сегодня эту температуру считает плагин средней температуры для которого в качестве источников указаны основные жилые помещения. Изменить список помещений для усреднения или то как часто делать усреднение - вопрос настройки плагина усреднения, а не программирования часов.
  • текстовое сообщение. Да! Любой текст можно отправить с Вера и он будет показан бегущей строкой (в текущей версии только латиница до 20 символов, но расширить и добавить русский не сверхсложная задача)

В будущем (на момент публикации эта часть еще не готова) так же будет возможность озвучивать голосовые сообщения. Это будет делаться голосовым модулем который будет управляться по UART.

Вроде с техническим заданием определились. Перейдем к реализации.

Схема

За основу был взят atmega128a. Решил не экономить на спичках и заложить с запасом. Тем более что запас позволяет не экономить ни на шрифтах для текста (их понадобиться несколько, нескольких размеров) ни на расширении функциональности. Выводов нам много не понадобится, поэтому отладка и программирование будут делаться через JTAG. Не забываем отключить во фьюзах совместимость с atmega103 и переключаем на внешний кварц с Full swing.

Собственно с чего начал - датчик BMP085. Датчик станет для Веры датчиком температуры и датчиком давления в миллиметрах ртутного столба. Его мы установим на нижнюю часть платы. Производитель рекомендует его беречь от внешнего освещения, а у нас конструкция часов будет предполагать некоторое попадание внешнего света на плату, потому как еще у нас установлен...

Датчик освещенности в виде фото-резистора. Датчик напрямую часами не востребован, но становится датчиком освещенности для Вера. Может применяться в сценах управления освещением.

RTC - часы реального времени. Они были установлены просто потому, что эти часики (DS3231 с встроенным калиброванным кварцевым резонатором) я только освоил и они мне понравились. Учитывая то, что у нас ежедневно будет происходить синхронизация времени с Вера (а у Вера постоянная синхронизация с часами реального времени на NTP серверах в сети Интернет), установка микросхемы RTC не обязательна. Если их не ставить - нужно будет несколько исправить логику программы. При использовании для отмывки платы ультразвуковой ванны по даташитам DS3231 и BMP085 рекомендуется паять после отмывки (последняя к тому же по даташиту боится любых жидкостей).

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

Схема думаю говорит сама за себя, сложного в ней ничего нет. Основным является питание 5В на 1А. Дополнительно на плате установлен стабилизатор 3.3В для питания BMP085 и радиомодуля. Одна вещь сделана не совсем правильно, но она работает. Я не делал согласование уровней для BMP085. Шина I2C подтянута к 3.3В. На ней висит BMP085 питающийся от 3.3В, DS3231 и atmega128a обе питающиеся от 5В. Отлажено на макете и потом на готовой плате - все работает.

Часы в моем случае смонтированы в близости к источнику питания 12В, поэтому для питания от внешних 12В на второй плате установлен понижающий преобразователь на ST1S10 и там же установлены разъёмы JTAG, DC и аудио 3.5мм. Последний для UART0 для целей отладки. Все это стоит на торце корпуса и доступно для подключения снаружи. UART1 выведен на разъем на основной плате для подключения голосового модуля в будущем.

Схемы основная и дополнительная:

Для обеих схем предусмотрены двухсторонние печатные платы с допусками для легкого изготовления ЛУТом (минимальная толщина дорожек 0.3мм). Пятно (vias) для переходных отверстий диаметром 1мм, я их сверлю сверлом 0.3мм и пропаиваю проводом 0.25мм в диаметре, но можно легко увеличить отверстие до 0.6мм. Картинки плат (в архиве приложения есть PDF в высоком разрешении):

  Верхняя часть (зеркало) Нижняя часть
Основная плата
Дополнительная

Фото основной платы:

Программа

Программа написана на Си в среде Atmel Studio 6.1. Применены следующие библиотеки:

  • nrf24 - про нее я уже писал, это AVR версия библиотеки RF24 от maniacbug для ардуино
  • VeraSensor - мое AVR прочтение библиотеки для проекта Arduino-Vera
  • bmp085 - болванку мне предоставили на одном из форумов, допилил напильником. Судя по тексту первоисточником скорее всего является библиотека Adafruit для arduino
  • DS3231 - скомпилировано мной из каких-то кусков кода для DS1307
  • ht1632c - полностью моя оранжировка текста библиотеки для ардуино. Собственно это то, с чем застучало сердечко моей двухцветной матрицы.

Кухня самой программы достаточно проста, но инградиенты все свежие и качественные. Запущены два таймера, TIMER3 с прерываниями раз в секунду (все настроено под мой кварц 12МГц, но можно перестроить под любой кварц, максимально 16Мгц - ограничения atmega128a) и TIMER1 20 раз в секунду. Второй таймер использован исключительно для бибикалки. А первый интенсивно использован для полутора десятков програмных секундных и минутных таймеров. Эти таймеры применены для временных отсчетов по самым разным поводам - как часто слать информацию со своих датчиков на Вера, как долго отображать тот или иной вид, как долго должны остаются "свежими" данные полученные от Вера и т.д. по коду и описанию в коде не сложно понять какой их них для чего нужен. Основные найтроки задержек вынесены в начало кода программы.

Если к UART0 подключить любой преобразователь UART<->USB или UART<->RS232 то при подключении к компьютеру в терминале можно видеть подробный лог того, что происходит по ходу жизни программы. Однако если отладочная информация не нужна, то ее можно "вырезать" перекомпилировав с закомментированной строкой #define UART_PRINTF_DEBUG.

Шрифт в родительской библиотеке ht1632c с русскими буквами был только один и только в кодировке KOI8R. Поэтому несколько русских строк текста сохранены в "исковерканном" формате и для удосбства правки вынесены в начало программы в виде определений начинающихся на #define rus_str. Редактировать их можно не выходя из студии, но перед каждым сохранением через File->Advanced save options..->KOI8R все строки придется сначала перенабрать с клавиатуры. Пока этот текст не трогаете, программу можно сохранять обычным порядком, все будет работать.

Часы имеют три режима отображения. Первый это просто часы - максимально использовано все имеющееся пространство, чтобы отобразить часы, минуты и моргающее двоеточие. Второй - отображение в верхней строке часов, в нижней текущей даты. Третий формируется динамически. Если есть "свежая" уличная температура, то отображается сначала она, если есть "свежая" температура по квартире, то второй будет она. Если температуры по квартире нет, отображается температура с BMP085. В завершении отображается атмосферное давление. Для всех вариантов отображение оптимизировано с применением нескольких разных шрифтов и разных цветов (в матрице двухцветные светодиоды, получается 4-ре цвета - красный, зеленый, оранжевый и черный).

Вера

Прежде чем мы сможем состыковаться с Верой нам необходимо запустить в работу ArduinoGateway как описано на странице проекта. После этого перед запуском наших часов на ArduinoGateway необходимо включить режим "Inclusion". Делается это или в вэб консоли Вера нажимая на кнопку Start на устройстве Arduino или нажимая "красную" кнопку на ArduinoGateway:

Красная кнопка на ArduinoGateway Кнопки Start/Stop в web консоли управления Вера

Сразу после этого включаем часы и через пару минут (если дождаться автоматического возврата в обычный режим) или сразу нажав кнопку Stop/красную кнопку снова мы должны увидеть в Вера Следующие устройства:

  • 255: Node - это корневое устройство создаваемое для каждого устровства в сети ArduinoVera. Здесь же будет отображаться статус батарейки часов;
  • 0: термометр - это термометр который будет отобрадать полученную от часов температуру;
  • 1: барометр - это барометр который будет отображать полученное от часов давление;
  • 2: освещенность - это относительная освещенность от 0 до 100, которую будут присылать часы;

Выглядеть это будет так (заголовки уже изменены под то как мне удобно):

Если с этим разобрались дальше нужно настроить отображение уличной температуры и средней температуры по квартире. Для этого нужно иметь установленные и настроенный Weather plugin и TEMPAVG. Оба доступны в магазине приложений Вера (там все бесплатно), как их ставить и настраивать описано в их описании. Далее создаем две сцены и размещаем в одной такой код (для улицы):

    local temp = luup.variable_get("urn:upnp-org:serviceId:TemperatureSensor1","CurrentTemperature", 61)
    temp = temp*10.0
    luup.call_action("urn:upnp-arduino-cc:serviceId:arduino1", "SendCommand", {radioId="4;255", variableId="VAR_5", value=temp}, 372)

в другой такой (для квартиры):

    local temp = luup.variable_get("urn:upnp-org:serviceId:TemperatureSensor1","CurrentTemperature", 384)
    temp = temp*10.0
    luup.call_action("urn:upnp-arduino-cc:serviceId:arduino1", "SendCommand", {radioId="4;255", variableId="VAR_4", value=temp}, 372)

В моих примерах 61 - ID устройства Weather plugin отображающего текущую температуру, 384 - ID устройства плагина TEMPAVG отображающего среднюю температуру по квартире и 372 - ID Node наших часов.

Каждой сцене настраиваем желаемый график срабатываний. В моем случае Weather plugin обновляется каждые 10 минут и каждые 10 минут запускается сцена. Для средней температуры по квартире это 5 минут. Собственно вы вольны брать температуру откуда угодно и преобразовывать ее как угодно. Можно сделать свой датчик и брать с него, но нет необходимости жестко часы привязывать к какому-либо источнику.

Конструкция

Для постоянных читателей не секрет, что корпус сделан на 3D принтере. Сначала делается проектировние. Проектирование начинается с создания моделей отдельных компонентов. Более подробное описание последовательности есть на форуме. Матрица была нарисована по даташиту, модели плат делаются на выгрузках из Altium designer. Все остальное рисуется примерно со штангельциркулем в руках. Благодаря предварительному моделированию мне удалось все разместить очень компактно - корпус по высоте совпадает с высотой матрицы, а по ширине шире только для того, чтобы выдвинуть радиомодуль и фоторезистор из под панели. Толщина сделана исходя из зазора несколько миллиметров. Получилась такая модель часов в сборе:

Состоит она из 3-х основных пластиковых деталей (разбито из-за ограничений на максимальный размер печати):

И лицевой панели из прозрачного оргстекла (матовое подошло бы еще лучше):

В архиве приложения есть STL файлы для печати деталей и DXF для ручного выпиливания или фрезеровки оргстекла.

Корпус не особо хитрый и его можно склеить из любого листового материала. По конструкции важно только, чтобы был доступ света к фоторезистору и чтобы радиомодуль не экранировался матрицей. В процессе сборки и готовые часы на фото ниже (модуль с SD картой и отверстие под динамик заготовлены для голосового модуля):

 Вывод

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

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

Как то так!

Всем приятного просмотра:

 

 


Файлы:
Архив ZIP
Изображение
Изображение


Все вопросы в Форум.


ID: 1885

Как вам эта статья?

 Нравится
 Так себе
 Не нравится

Заработало ли это устройство у вас?

 Заработало сразу
 Заработало после плясок с бубном
 Не заработало совсем

72 3 3