Автономные часы
Проекты на Arduino Uno и Slot Shield
Arduino Uno неплохо справляется с ролью электронных часов. Но есть один существенный недостаток. Если отключить питание платы, время придётся задавать по-новой. С этой проблемой справятся часы реального времени. У них есть своя батарейка, поэтому время не собьётся.
Для управления гаджетом используется четырёхкнопочная клавиатура. С её помощью можно задать точное время без перепрошивки.
- Язык программирования: Arduino (C++)
Что потребуется
Полный сет компонентов проекта. В сет входят:
- четырёхразряный индикатор Quad Display
Видеоинструкция
Как собрать
Установите Troyka Slot Shield на Arduino Uno
Вставьте Quad Display в разъёмы E
и F
. Пин CS
подключу к 10
пину Arduino.
Установите четырёхкнопочную клавиатуру в слот C
. Сигнал первой кнопки подключите к пину 0
, второй к 1
, третьей к 4
и четвёртой к 5
.
Часы реального времени вставьте в пины I²C
разъёма B
. Вставьте батарейку CR1225 в держатель на лицевой панели модуля.
Скетч
Прошейте контроллер скетчем через Arduino IDE.
- stand-alone-clock.ino
// Подключаем библиотеку для работы с дисплеем #include <QuadDisplay2.h> // создаём объект класса QuadDisplay и передаём номер пина CS QuadDisplay qd(10); // библиотека для работы I²C #include <Wire.h> // библиотека для работы с часами реального времени #include "TroykaRTC.h" // создаём объект для работы с часами реального времени RTC clock; // пины к которым подключены кнопки #define BUTTON_PIN_1 0 #define BUTTON_PIN_2 1 #define BUTTON_PIN_3 4 #define BUTTON_PIN_4 5 // создаем объект класса long для хранения счетчика long lastTimeButton = 0; void setup() { //инициализация кнопок pinMode(BUTTON_PIN_1,INPUT_PULLUP); pinMode(BUTTON_PIN_2,INPUT_PULLUP); pinMode(BUTTON_PIN_3,INPUT_PULLUP); pinMode(BUTTON_PIN_4,INPUT_PULLUP); // инициализация дисплея qd.begin(); // инициализация часов clock.begin(); // метод установки времени и даты в модуль вручную // clock.set(10,25,45,20,05,2019,MONDAY); // метод установки времени и даты автоматически при компиляции clock.set(__TIMESTAMP__); // что бы время менялось при прошивке или сбросе питания // закомментируйте оба метода clock.set(); } void loop() { // запрашиваем данные с часов clock.read(); // считываем показания часов и минут в переменные int hours = clock.getHour(); int minutes = clock.getMinute(); // в зависимости от состояние кнопок увеличиваем / уменьшаем часы и минуты if (millis() - lastTimeButton>500 && !digitalRead(BUTTON_PIN_1)) { clock.setHour(hours + 1); lastTimeButton = millis(); } if (millis() - lastTimeButton>500 && !digitalRead(BUTTON_PIN_2)) { clock.setHour(hours - 1); lastTimeButton = millis(); } if (millis() - lastTimeButton>500 && !digitalRead(BUTTON_PIN_3)) { clock.setMinute(minutes - 1); lastTimeButton = millis(); } if (millis() - lastTimeButton>500 && !digitalRead(BUTTON_PIN_4)) { clock.setMinute(minutes + 1); lastTimeButton = millis(); } // выводим время на дисплей qd.displayScore(hours, minutes, true); }
Часто задаваемые вопросы
Где скачать необходимые библиотеки и как их установить?
У моего модуля QuadDisplay всего три ноги и расположены они слева. Можно ли использовать его в этом проекте?
У вас предыдущая версия модуля. Она снята с производства пару лет назад. С этим скетчем, библиотекой и схемой сборки модуль работать не будет.