Автономные часы

Проекты на Arduino Uno и Slot Shield

Arduino Uno неплохо справляется с ролью электронных часов. Но есть один существенный недостаток. Если отключить питание платы, время придётся задавать по-новой. С этой проблемой справятся часы реального времени. У них есть своя батарейка, поэтому время не собьётся.

Для управления гаджетом используется четырёхкнопочная клавиатура. С её помощью можно задать точное время без перепрошивки.

Что потребуется

Полный сет компонентов проекта. В сет входят:

Видеоинструкция

Как собрать

Установите 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 всего три ноги и расположены они слева. Можно ли использовать его в этом проекте?

У вас предыдущая версия модуля. Она снята с производства пару лет назад. С этим скетчем, библиотекой и схемой сборки модуль работать не будет.