Хотілося у ванній розмістити пристрій, який: відображатиме час, температуру і вологість ззовні, матиме таймер зворотного відліку. Це можна зробити на 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.
Контролер розумного будинку на ESPHome періодично опитує годинник, якщо було перезавантаження оновлює час, записує вологість і температуру у пристрій.
Відставання на китайському кварці 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 годинник із секундоміром, термометр. Блог UA ID. Взято з: https://blog.uaid.net.ua/modbus-clock