Простой таймер на Arduino

Этот проект представляет собой простой таймер с малым количеством компонентов, позволяющий отсчитывать 60 секунд.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/133-prostoy-taymer-na-arduino/images/prostoy-taymer-na-arduino-1.jpg

Устройство может быть запитано как от батарейки 9 В, так и от подходящего сетевого адаптера для Arduino. Работа схемы очень проста!

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/133-prostoy-taymer-na-arduino/images/prostoy-taymer-na-arduino-2.png

При нажатии кнопки RESET на плате Arduino таймер начнет обратный отсчет 60 секунд. При достижении нулевой секунды пьезозуммер (BZ1) начнет издавать звук, и на дисплее высветится сообщение «TIMER ALERT!». По желанию к четвертому выводу платы можно подключить реле. Например, если вы хотите установить электромагнитное реле для включения/выключения любой внешней электрической нагрузки, просто используйте этот выход для управления электромагнитной реле с помощью подходящей для этих целей схемы драйвера на транзисторной основе.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/133-prostoy-taymer-na-arduino/images/prostoy-taymer-na-arduino-3.jpg

Код:

//Arduino Self-Timer
//T.K.Hareendran
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,8,9,10,11,12);
int runTimer = 1;
int runFor = 60; // time in seconds
int buzzerPin = 13;
int relayPin=4;
int data = 0;

void setup() {
pinMode(buzzerPin, OUTPUT);
pinMode(relayPin,OUTPUT);
lcd.begin(16, 2);
}

void loop() {
if(runTimer == 1){
digitalWrite(relayPin,LOW); // реле отключено при счете таймера от 60 до 0
/* *измените на HIGH, если хотите, чтобы оно было включено во время счета */
lcd.clear();
lcd.print("TIMER=");
//Start timer
timer();
} else {
digitalWrite(relayPin,HIGH); // реле включается по срабатыванию таймера
/* *измените на LOW, если хотите, чтобы оно выключалось по срабатыванию таймера */
}
runTimer = 0;
lcd.noDisplay();
delay(250);
for(int duration = 0; duration < 100; duration ++){
digitalWrite(buzzerPin, HIGH);
delayMicroseconds(500);
digitalWrite(buzzerPin, LOW);
delayMicroseconds(500);
}
lcd.display();
delay(250);
}

void timer() {
for(int timer = runFor;timer > 0; --timer){
if(timer >= 10) {
lcd.setCursor(6,0);
} else {
lcd.setCursor(6,0);
lcd.print("0");
lcd.setCursor(7,0);
}
lcd.print(timer);
lcd.print(" SECOND!");
delay(1000);
}
lcd.setCursor(0,0);
lcd.clear();
lcd.print(" TIMER ALERT!");
}