Одним из первых проектов, которые новички собирают на основе платы Arduino, являются простые часы, ведущие отсчет времени. В основном такие часы основаны на подключаемом к Arduino модуле RTC (Real Time Clock или Часы реального времени). Сегодня на рынке электронных компонентов доступны разные модели RTC, различающиеся точностью и ценой. Среди распространенных моделей можно назвать DS1302, DS1307, DS3231.

Но часы на Arduino можно сделать и без использования RTC, особенно если не получается достать такие модули. Конечно, точность в данном случае будет невелика, поэтому проект скорее должен рассматриваться как учебный.
Принцип работы таких часов довольно прост. Каждый раз, когда вы включаете эти часы на Arduino, вы должны будете установить для них текущее значение времени, также как и любые аналоговые часы. Такие часы, безусловно, лучше не использовать в своей повседневной жизни при долгой их активности без перезагрузки и дальнейшей настройки, поскольку рассинхронизация с текущим временем в процессе длительной эксплуатации может быть существенной.
Данные часы можно собрать на обычной макетной плате, поскольку здесь не потребуется много компонентов. Основным нашим звеном здесь будет плата Arduino Uno. Для отображения времени можно взять ЖК-дисплей 16x2. Для изменения настроек времени следует подключить две кнопки (для часов и минут). Кнопки подключаются к Aduino через резисторы 10 КОм. Чтобы изменять яркость дисплея потребуется потенциометр на 10 КОм. Схема подключения всех этих компонентов к плате Arduino Uno представлена ниже.

Теперь следует запрограммировать Arduino. Простой код (скетч), позволяющий выводить время на экран LCD-дисплея приведен ниже.
#include <LiquidCrystal.h>
LiquidCrystal
lcd(12,11,5,4,3,2);
int h=12;
int m;
int s;
int flag;
int TIME;
const int hs=8;
const int ms=9;
int state1;
int state2;
void setup()
{
lcd.begin(16,2);
}
void loop()
{
lcd.setCursor(0,0);
s=s+1;
lcd.print("TIME:");
lcd.print(h);
lcd.print(":");
lcd.print(m);
lcd.print(":");
lcd.print(s);
if(flag<12)lcd.print("AM");
if(flag==12)lcd.print("PM");
if(flag>12)lcd.print("PM");
if(flag==24)flag=0;
delay(1000);
lcd.clear();
if(s==60){
s=0;
m=m+1;
}
if(m==60)
{
m=0;
h=h+1;
flag=flag+1;
}
if(h==13)
{
h=1;
}
lcd.setCursor(0,1);
lcd.print("HAVE A NICE DAY");
//-------Time
// setting-------//
state1=digitalRead(hs);
if(state1==1)
{
h=h+1;
flag=flag+1;
if(flag<12)lcd.print("AM");
if(flag==12)lcd.print("PM");
if(flag>12)lcd.print("PM");
if(flag==24)flag=0;
if(h==13)h=1;
}
state2=digitalRead(ms);
if(state2==1){
s=0;
m=m+1;
}
}