Этот проект является продолжением раннего проекта часов Часы на RTC DS3231 и TM1637. По просьбе моего знакомого Константина К. добавил вывод на экран дисплея температуру. А потом вспомнил, что читатели сайта просили добавить будильник, что и сделал. Потом дошла очередь и до барометра. Получились не обычные такие часы, а часы с расширенными функциями .
При модернизировании предыдущего проекта #8 Часы на RTC DS3231 и TM1637 вышло, что проще написать всё по новому, поэтому программа была написана заново. Схема тоже усложнилась добавлением разными компонентами.
Схема часов
Схема часов немного сложнее, чем в предыдущем проекте. Добавлен активный Buzzer для сигнала будильника. Добавлен светодиод для индикации активности будильника. Добавлена ещё одна кнопка для установки будильника. Добавлен датчик температуры DS1820. Добавлен модуль абсолютного давления BMP280. Замечу, что для него требуется напряжение питания +3,3В. Если использовать Arduino Uno R3 или Arduino Nano, то у них на платах уже имеется стабилизатор на +3,3В. Если же использовать Arduino Pro Mini, то придётся добавить такой стабилизатор дополнительно или, как вариант, запитать датчик от +5В через два последовательно соединённых диода 1N4148.
Блок питания используется импульсный, обратноходовый. Выдаёт +6.5 В. Это напряжение подаётся на стабилизатор Arduino Pro Mini – на контакт RAW. Можно использовать БП на +5В, но тогда подавать питание нужно на контакт VCC.
Выключатель SA2 можно не ставить. Работающий будильник можно отключить нажав на кнопку ALARM.
Pic 1. Схема электрическая принципиальная для скетча #21
Монтажную схему см. ниже. Резистор R2 можно ставить от 4.7кОм до 12кОм. Чем больше сопротивление, тем тусклее будет светить светодиод HL2. Вполне нормально светит при R2 = 10кОм.
Pic 2. Схема монтажная для скетча #21
Скетч часов
Далее представлен скетч. Рассмотрю некоторые его особенности. В предыдущем проекте у автора для мигания точек используется сигнал с модуля реального времени с контакта SQW, который подаётся на контакт 2 Ардуино. Но оказывается не все модули имеют такой сигнал и чтобы сделать программу более универсальную – отказался от этого и мигание точек делаю за счёт Timer1.
Так как в модуле реального времени имеется встроенный датчик температуры, то используем его, если не подключен внешний датчик семейства DS1820. При включении часов идёт тестирование подключения датчика температуры DS1820. При его наличии температура выводится с него.
Во время начального теста, если датчик DS1820 не подключен, то на индикаторе выводится 2 секунды тип 3231 встроенного датчика температуры DS3231. Если датчик температуры DS1820 подключен, то выводится его тип 1820 2 секунды. После чего выводится разрешение датчика в 3-м и 4-м разрядах 2 секунды. Максимальное разрешение датчика DS1820 равно 12 бит. Далее, если подключен датчик абсолютного давления BMP280, то на индикаторе на 2 секунды выводится сообщение 280P. Если в схеме нет датчика абсолютного давления BMP280, то программа переходит к выводу времени.
Весь код подробно закомментирован, с его пониманием, надеюсь, проблем не будет. Хочу лишь обратить внимание, что когда происходит запись значения в EEPROM, то индикатор гашу на 300 мс, чтобы видеть, что команда записи отработала – индикация записи.
Для вывода отрицательных температур с датчика DS1820 была сделана доработка. Теперь если использовать внешний подключаемый датчик, то можно измерять температуру и за пределами жилища. Эта доработка в опубликованном скетче.
2021-12-22
Сам скетч, его варианты и библиотеки можно скачать ниже в подразделе Приложение.
Законченной конструкции на данный момент у меня нет. Всё собиралось на макетных панельках с использованием Arduino Uno R3. Возможно, что впоследствии, как будет сделана законченная конструкция, то тут добавлю фото реализации.
Далее несколько фото макетного варианта.
Pic 3. Мой макетный вариант. Вывод времени Pic 4. Мой макетный вариант. Вывод температуры Pic 5. Мой макетный вариант. Вывод атмосферного давления
Константин К. сделал свой вариант этих часов с использованием mp3 проигрывателя, который озвучивает заданные часы. Вместо обычного семисегментного индикатора сделан самодельный на красных 5 мм светодиодах. Ниже на ряде фото реализация конструкции.
Pic 6. Часы с mp3 проигрывателем. Вывод времени Pic 7. Часы с mp3 проигрывателем. Вывод температуры с датчика DS18B20 Pic 8. Часы с mp3 проигрывателем. Вывод атмосферного давления
Далее фото конструкции. Как всё устроено внутри.
Pic 9. Часы с mp3 проигрывателем. Платы часов Pic 10. Часы с mp3 проигрывателем. Платы часов Pic 11. Часы с mp3 проигрывателем. Задняя крышка снята Pic 12. Часы с mp3 проигрывателем. Задняя крышка и панель с платами Pic 13. Часы с mp3 проигрывателем. Самодельный индикатор
Сзади на крышке установлены кнопки управления и отверстия под звуковой излучатель.
Pic 14. Часы с mp3 проигрывателем. Вид сзади Pic 15. Часы с mp3 проигрывателем. Вид индикатора в темноте
Часы с mp3 проигрывателем
Продолжительность фильма 0:39 [мм:сс]
В этом видео демонстрация работы звукового сигнала в конструкции Константина К.
Доработка
Переделка на вариант без bmp280. Тогда скетч использует всего 10066 байт и его можно записать в AVR ATMega168P. Этот скетч можно скачать по ссылке ниже.
Доработка скетча для вывода на индикатор отрицательных температур. Если датчик DS1820 сделать внешним, то можно измерять внешние температуры в диапазоне от -55°С до +125°С. Чтобы этот скетч работал, скачайте изменённую библиотеку <TM1637_mralb.h>, которая находится в архиве: my_Clock_Lib.rar
Константик К. выявил ошибку: При настройке яркости возникает отставание времени из-за обнуления секунд. Ошибка устранена.
Использование новой библиотеки <TM1637new.h>. Улучшение включения будильника. Оптимизация кода.
Доработка скетча для Константина К. – часы с mp3 и пультом, см. в Приложении konst_clock_pult_mp3_4.rar.
Создание на основе новой библиотеки <TM1637new.h> вариантов часов: с датчиком давления BMP280, с датчиком температуры DS1820. Все скетчи опробованы на Arduino UNO, Arduino Nano, LGT8F328P.
В новой библиотеке выявлен глюк – не выводится 0. При использовании функции void TM1637::displayInt(int value).
Вывод значений: времени, температуры, давления привязан к секундам, что уменьшило объём программы: Скетч использует 15342 байт (51%) памяти устройства.
Проверка звука при установке будильника.
Изменил программу под единичный вывод температуры и давления. Смотрите архивы с этой же меткой времени.
После этой тучи доработок пришёл к мнению, что всю программу часов следует переделать и в итоге получилась гораздо более совершенная программа, смотрите на странице проект #28 Часы на RTC DS3231, с расширенными функциями v3.