https://ocw.cs.pub.ro/courses/pm/prj2021/avaduva/ceasalarma

  • Autor: Roxana Daniela Scurtu
INTRODUCERE:

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.

DESCRIERE GENERALA:

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.

COMPONENTE FOLOSITE:
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

SCHEMA BLOC:

**Update: N-am mai foosit baterie, cum am decis initial si am conectat prin usb placuta la pc-ul meu

SCHEMA ELECTRICA:

* * * * * *

Cum functioneaza?

Am folosit un Breadboard, pentru ca nu aveam pe placuta suficienti pini pentru toate componentele. Prin intermediul modulului RTC- real time clock preiau ora si data exacta, folosindu-ma de libraria DS1302 LCD-ul ales de mine are modulul I2C integrat, l-as fi putut folosi si pe cel fara modul integrat, dar doar pe acesta l-am mai gasit disponibil. Interfata I2C are 4 pini, i am conectat direct la arduiono. By default LCD-ul afiseaza ora si data exacta pe care le ia prin intermediul modulului RTC. In momentul in care doresc sa setez alarma, apas pe primul buton si imi va intra in modul de setare al alarmei, afisandu-mi pe display : hour= ? , min=? pe care le pot seta de pe al 2-lea si al 3-lea buton.Prin intermediul celui de-al 4-lea buton ies din modul de setare al alarmei si voi avea alarma setata. Daca de exemplu am setat alarma in 3h 5m, cand se va scurge timpul, buzzer ul se va activa printr-un feedback sonor.

SOFTWARE DESIGN:

//am inclus biblioteca 12C si cea pt rtc(DS1302.h)

#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;

//am setat pinii - in functie de cum i am pus eu pe placuta
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;

//Am definit starea butoanelor 


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
//pinii de pe placuta

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();

// le putem decomenta daca vrem sa folosim valorile deja existente in 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);
}
REZULTATE
CONCLUZII

A fostun proiect interesant, singurele probleme pe care le-am intampinat au fost cu arduino- programul instalat, avand diferite probleme cu fisierele si cu setarile, dar ciecuitul si codul nu mi-au dat batai de cap.

BIBLIOGRAFIE
pm/prj2021/avaduva/ceasalarma.txt · Last modified: 2021/06/02 18:03 by roxana.scurtu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0