Хотілося у ванній розмістити пристрій, який: відображатиме час, температуру і вологість ззовні, матиме таймер зворотньго відліку. Це можна зробити на ESP, і потрібно всерівно тянути живлення, тому вирішено зробити на AVR і інтегрувати у RS485 шину, яка вже є у будинку.
На Aliexpress було куплено 7 сегментний індикатор на 4 символи із десятковими крапками і двоточчям.
Було обрано білий колір, в наявності є ще червоні, зелені, жовті і синій колір. Динамічною індикацією займається мікросхема TM1637, яка може керувати 6 цифрами, а також обробляти натиск 16 кнопок.
Працює нормально із напругою живлення 3,3 вольти. Використання готових бібліотек із записом 0xFF у регістри не дав засвітити десяткові крапки. Тому шукаємо даташит на LED дисплей 5463BW.
Як ми бачимо крапка на першій цифрі точно не має світитися, а от чого на решті не засвідчується невідомо. Оскільки немає PDF з якого можна витянути контур цифр: cкануємо і у векторному редакторі малюємо контур цифр.
Контролером було використано при прототипуванні клон Arduino Pro Mini, із ATmega328.
Для зв’язку із шиною використано MAX485, підійде і SP485, підключений до апаратного UART, оскільки при малих швидкостях SoftSerial тормозить весь кристал.
Для подачі сигналу викорситано пищалку RDI-DMT-1206-I. Резонансна частота 2200 Гц.
Для тесту можна підключати напряму, в проді через транзистор.
Для безпровідної кнопки було викорстано модуль із IR світлодіодом із компаратором LM393.
Вивід завів на ногу INT0 і по перериванні запускаю таймер зворотнього відліку.
За пару дній світлодіод деградував, тому безпровідний функціонал довіримо мікрокотролеру.
!!! імпульсний режим, задіяти аналоговий вхід
Для оцінки освітленості і автозміни яскравості використаємо фоторезистор LDR. Підключаємо до аналогового входу і робимо підтяжку до нуля для вичитування значення.
!!! i2c clock опціонально, проблема заміни батареї RTC
Для ролі RTC беремо DS1307, часовий кварц на 32.768 kHz, літієву батарею 3В CR1220/CR1620 і тримач під неї. 48 мА/г має вистарчити на 10 років.
Адреса D0h для запису, і D1h для читання. Регістри:
Modbus RTU
Для комунікації і синхронізації часу використано мережу RS485 і протокол обміну Modbus RTU із швидкістю 9600.
Регістри пристрою:
0 - години 1 - хвилини 2 - секунди 3 - рік 4 - місяць 5 - день 6 - яскравість індикаторів 7 - запис температури для відображення 8 - запис вологості для відображення 9 - виставлення адреси слейва (зберігається у EEPROM) 10 - запуск таймера зворотньго відліку з секунд 11 - число секунд таймера від кнопки 12 - відображеня числа на екрані, все решта блокується 13 - включення пищалки на n мілісекунд 14 - резерв 15 - резерв
Для зчитування і запису регістрів варто користуватися програмою QModBus.
Контролер розумного будинку періодично опитує годинник, якщо було перезавантаження оновлює час, записує вологість і температуру у пристрій.
СТАТТЯ в процесі написання!!!
Відставання на китайському кварці 8 Mhz у ATmega328 становить 2 хвилини на добу…
Споживання компонентів:
ATmega328 | 16 mA |
TM1637 + LED | 80 mA |
MAX485 | 0,5 mA |
Проміжний варіант (потрібно вирізати пластик для кращого проходження світла):
Якщо немає потреби у провіжному інтерфейсі, то за 6$ на Алі можна купити із WiFi Led Clock:
Стаття на інших ресурсах:
Юрій Р. ◯ 0009-0005-3702-9223. (2018). Modbus годинник із секундоміром IN-PROCESS. Блог UA ID. Взято з: https://blog.uaid.net.ua/modbus-clock