Блок с датойБлок с временемБлок с возрастом сайта
Mr.ALB

    Анатолий Беляев (aka Mr.ALB). Персональный сайт

    Да пребудут с вами Силы СВЕТА!

     

    Ардуино (Arduino). #8

    Часы на RTC DS3231 и TM1637

    Продолжаю использовать недорогие и миниатюрные платы Arduino Pro Mini. На этой странице представляю проект часов. Обычные такие часы улыбка.


    Прежде чем делать свой скетч, посмотрел в Интернете, что делают другие. И вот мне попался интересный проект http://arduinolab.pw/index.php/2016/06/23/chasy-na-arduino/, решил взять его за основу.

    Повторив проект, обнаружил, что он имеет ряд недостатков. Существенные недостатки, на мой взгляд, это:

    1. Отсутствие регулировки яркости индикатора.
    2. Отсутствие гашения незначащего нуля.

    Поэтому эти недостатки устранил, и в моём проекте уже присутствует и гашение нуля, и регулировка яркости, значение которой записывается в EEPROM, чтобы при включении часов яркость выставлялась та, которую мы установили.

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

    Ещё хотел реализовать будильник, но потом что-то передумал и выведенная кнопка на переднюю панель для установки будильника так и осталась не подключенной. Может быть при необходимости и доработаю часы под будильник.

     


    Схема часов

    Схема часов не сложная. Благодаря тому, что индикатор управляется по протоколу IIC (I2C), соединений совсем немного. Блок питания используется импульсный, обратноходовый, от какой-то зарядки для телефона. Выдаёт он +6,5 В. Это напряжение подаётся на стабилизатор Arduino Pro Mini – на контакт RAW.

    Схема электрическая принципиальная для скетча #8
    Pic 1. Схема электрическая принципиальная для скетча #8

    Монтажную схему см. ниже.

    Схема монтажная для скетча #8
    Pic 2. Схема монтажная для скетча #8

    В реальности у меня не четыре кнопки, а пять. Пятая задумывалась для управления установкой будильника, но так до него и не дошло. Ещё была мысль этой кнопкой выводить число и месяц... может быть потом допишу программу и реализую эту функцию.



    Конструкция часов

    Корпус традиционно склеен из пластика ABS. Габариты 80 х 60 х 54 мм (Ш х Г х В). Сама конструкция представляет собой блок из модулей: индикатора, реального времени, платы с Ардуино, модуля питания и планки с кнопками. Arduino Pro Mini вставлено в панельку DIP24, которая распаяна на монтажной плате. К этой плате и идут соединения от модулей. Конструктивно модули соединены между собой стойками из нейлона и винтами М3. К этим же стойкам прикручивается и задняя крышка. Блок из модулей вставлен в корпус и фиксируется снизу так же винтом М3.

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

    Кнопки управления вынес на переднюю панель и немного утопил вглубь. Сейчас объясню зачем так. Есть у меня часы ASSISTANT ah-1066, габариты у них чуть-чуть больше, а индикатор такой же, зелёненький. Так у них кнопки управления вынесены на верхнюю крышку, что с моей точки зрения и опыта эксплуатации такой конструкции не совсем удобно, да и пыль на них оседает. Батарейки в тех часах мизинчиковые (ААА) 3 шт. – недолговечно. Нет регулировки яркости индикатора. Поэтому, создавав свою конструкцию старался устранить эти недостатки. К примеру, когда кнопки впереди, то легко подстраивать или устанавливать время, так как одновременно видишь и индикатор, и кнопки.

    Ниже небольшой фотоотчёт по конструкции часов.

    Часы. Внешний вид, разные ракурсы
    Pic 3. Часы. Внешний вид, разные ракурсы
    Часы. Внешний вид, разные ракурсы
    Pic 4. Часы. Внешний вид, разные ракурсы
    Часы. Внешний вид, вид снизу
    Pic 5. Часы. Внешний вид, вид снизу
    Часы. Внешний вид, снята задняя крышка
    Pic 6. Часы. Внешний вид, снята задняя крышка
    Часы. Вынут блок часов из корпуса
    Pic 7. Часы. Вынут блок часов из корпуса
    Часы. Вынут блок-модуль часов из корпуса
    Pic 8. Часы. Вынут блок-модуль часов из корпуса
    Часы. Блок-модуль часов разъединён. Отделена плата RTC DS3231
    Pic 9. Часы. Блок-модуль часов разъединён. Отделена плата RTC DS3231
    Часы. Блок-модуль часов разъединён. Отделена плата RTC DS3231
    Pic 10. Часы. Блок-модуль часов разъединён. Отделена плата RTC DS3231
    Часы. Блок-модуль часов разъединён. Отделена плата индикатора TM1637 и панель кнопок
    Pic 11. Часы. Блок-модуль часов разъединён. Отделена плата индикатора TM1637 и панель кнопок
    Часы. Окончательный вариант
    Pic 12. Часы. Окончательный вариант


    Скетч часов

    Далее представлен скетч. Рассмотрю некоторые его особенности. Так, у автора для мигания точек используется сигнал с модуля реального времени с контакта SQW, который подаётся на контакт 2 Ардуино. На этом контакте установлено внешнее прерывание 0 на изменение (CHANGE). Можно реализовать и по-другому, к примеру, через Таймер1. Оставил так, как у автора, может быть в другом проекте сделаю через Таймер1, для разнообразия.

    Весь код подробно закомментирован, с его пониманием, надеюсь, проблем не будет. Хочу лишь обратить внимание, что когда происходит запись значения в EEPROM, то индикатор гашу на пол секунды, чтобы видеть, что команда записи отработала. В некотором роде – индикация записи.

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

    На данный момент получилось то, что получилось улыбка. Конструкция полностью товарная готовая к использованию в обиходе. Довольно удобно. Рекомендую к повторению.

     

    Вариант мигания точек, если нет SQW

    Несколько раз меня спрашивали что делать, если нет вывода SQW на DS3231, могу предложить использовать прерывания по Таймеру1. Доработка скетча не займёт много времени, а эффект тот же, что и с выводом SQW.

    /*******************************************************************
    * 2021-08-27 MrALB Вариант мигания точек, если нет SQW 
    *   Вопрос:
    *     "Здравствуйте. На моей DS3231-mini нет вывода SQW. Как быть?"
    *   Ответ:
    *     "Используйте Таймер1"
    *   
    *   Ниже небольшой пример как использовать Таймер1
    ********************************************************************/
    #include <TimerOne.h> // Подключение библиотеки Таймер1
    
    // Уберите в скетче строчки 113-123, 149-150
    // Далее...
    void setup(void)
    {
      // Заменить строчки 160-161 на эти:
      Timer1.initialize(500000);    // инициализация 500 мс или сколько нужно
      Timer1.attachInterrupt(blink);// обработка прерывания
    }
    

    Проверено мной и подписчиками – работает. В последующих проектах уже сразу использую этот метод.


    Приложение

    Используемые библиотеки и программы:

    2020-01-02Доработка программы
    2020-05-06Доработка программы
    2021-08-27Доработка программы

    Проект получил логическое продолжение. В обновлённой версии всё сделано по другому. Добавлен будильник. Добавлены вывод температуры и измерение атмосферного давления. Внешний датчик температуры позволяет измерять в диапазоне от -55°С до +125°С.

    Новый проект смотрите по ссылке Часы на RTC DS3231, с расширенными функциями

    2021-12-22

    Спасибо за внимание!
    Анатолий Беляев

    . Mr.ALB
    Предыдущая страница Страница 9 Далее