Modbus годинник із секундоміром IN-PROCESS

Хотілося у ванній розмістити пристрій, який: відображатиме час, температуру і вологість ззовні, матиме таймер зворотньго відліку. Це можна зробити на ESP8266, і потрібно всерівно тянути живлення, тому вирішено зробити на AVR і інтегрувати у RS485 шину, яка вже є у будинку.

 

На Aliexpress було куплено 7 сегментний індикатор на 4 символи із десятковими крапками і двоточчям.

Було обрано білий колір, в наявності є ще червоні, зелені, жовті і синій колір. Динамічною індикацією займається мікросхема TM1637, яка може керувати 6 цифрами, а також обробляти натиск 16 кнопок.

Працює нормально із напругою живлення 3,3 вольти. Використання готових бібліотек із записом 0xFF у регістри не дав засвітити десяткові крапки. Тому шукаємо даташит на LED дисплей 5463BW.

Як ми бачимо крапка на першій цифрі точно не має світитися, а от чого на решті не засвідчується невіломо. Оскільки немає PDF з якого можна витянути контур цифр, доводитсья малювати самому. Скануємо екран, і у векторному редакторі малюємо контур цифр.

Контролером було використано при прототипуванні клон 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.

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

Головним пристроєм є програма на OpenWRT роутері.

СТАТТЯ в процесі написання!!!

Відставання на китайському кварці 8 Mhz у ATmega328 становить 2 хвилини на добу…

Коментарі