This is an old revision of the document!
https://ocw.cs.pub.ro/courses/pm/prj2021/avaduva/ceasalarma
Am ales sa fac un ceas cu alarma bazat pe arduino, folosind si un buzzer(pt alarma -sunet), un display care afiseaza ora, si o baterie (optional). Alarma se poate seta prin intermediul unor butoane, iar pe lcd va fi afisata data si ora aleasa pentru alarma.
Atasat la placuta arduino avem un display pe care ni se va afisa ora/data preluate prin intermediul rtc-ului, iar alarma(in cate ore va porni) se va seta prin intermediul celor 4 butoane atasate breadboard-ului.
| Nume componenta | Cantitate | Valori |
|---|---|---|
| Arduino UNO | 1 | |
| DS 1307 RTC Module | 1 | |
| Buton | 4 | |
| 3.16×2 LCD Display | 1 | |
| Buzzer pasiv | 1 | 5V |
| Rezistente | 4 | 1K |
| Fire mama-tata | 10 | |
| Fire tata-tata | 10 |
Majoritate componentelor au fost achizitionate de pe site-ul : https://cleste.ro/ Componentele care nu au fost disponibile sau de care nu mi-am dat seama ca am nevoie in momentul plasarii comenzii au fost achizitionate dintr-un magazin fizicde electronice: ELWEST Magazin - sector2
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
#include <DS1302.h>
int Hour;
int Min;
int pset = 8; // pushbutton for setting alarm
int phour = 9; // pushbutton for hour
int pmin = 10; // pushbutton for minutes
int pexit = 11; // pushbutton for exit of set alarm
int buzzer = 6;
int h;
int m;
int buttonforset = 0; // pushbutton state for setting alarm
int buttonforhour = 0; // pushbutton state for hour
int buttonformin = 0;// pushbutton state for minutes
int buttonforexit = 0; // pushbutton state for exit of set alarm
int activate=0;
Time t;
// Init the DS1302
DS1302 rtc(2, 3, 4);
void setup()
{
pinMode(pset, INPUT);
pinMode(phour, INPUT);
pinMode(pmin, INPUT);
pinMode(pexit, INPUT);
// Set the clock to run-mode, and disable the write protection
rtc.halt(false);
rtc.writeProtect(false);
// Setup LCD to 16x2 characters
lcd.begin();
// The following lines can be commented out to use the values already stored in the DS1302
//rtc.setDOW(SATURDAY); // Set Day-of-Week to FRIDAY
//rtc.setTime(10, 0, 0); // Set the time to 12:00:00 (24hr format)
//rtc.setDate(11, 11, 2017); // Set the date to August 6th, 2010
}
void loop()
{
if (activate == 0) {
// Display time on the right conrner upper line
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.setCursor(6, 0);
lcd.print(rtc.getTimeStr());
// Display abbreviated Day-of-Week in the lower left corner
//lcd.setCursor(0, 1);
//lcd.print(rtc.getDOWStr(FORMAT_SHORT));
// Display date in the lower right corner
lcd.setCursor(0, 1);
lcd.print("Date: ");
lcd.setCursor(6, 1);
lcd.print(rtc.getDateStr());
t = rtc.getTime();
Hour = t.hour;
Min = t.min;
buttonforset = digitalRead(pset);
} // setting button pressed
if (buttonforset == HIGH) {
activate =1;
lcd.clear(); }
while(activate== 1){
lcd.setCursor(0,0);
lcd.print("Set Alarm");
lcd.setCursor(0,1);
lcd.print("Hour= ");
lcd.setCursor(9,1);
lcd.print("Min= ");
buttonforhour = digitalRead(phour); // set hour for alarm
if (buttonforhour == HIGH){
h++;
lcd.setCursor(5,1);
lcd.print(h);
if (h>23){
h=0;
lcd.clear(); }
delay(100);
}
buttonformin = digitalRead(pmin); // set minutes for alarm
if (buttonformin == HIGH){
m++;
lcd.setCursor(13,1);
lcd.print(m);
if (m>59){
m=0;
lcd.clear();}
delay(100);
}
lcd.setCursor(5,1);
lcd.print(h);
lcd.setCursor(13,1);
lcd.print(m);
buttonforexit = digitalRead(pexit); // exit from set alarm mode
if (buttonforexit == HIGH){
activate = 0;
lcd.clear();
}
}
if (Hour== h && Min== m) {
tone(6,400,300);}
delay (500);
}