Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:avaduva:ceasalarma [2021/06/01 02:18]
roxana.scurtu
pm:prj2021:avaduva:ceasalarma [2021/06/02 18:03] (current)
roxana.scurtu
Line 35: Line 35:
 ==SCHEMA BLOC:== ==SCHEMA BLOC:==
  
-{{:​pm:​prj2021:​avaduva:​blank_diagram.png?​200|}}+{{:​pm:​prj2021:​avaduva:​blank_diagram.png?​550|}}
  
 +**Update:
 +N-am mai foosit baterie, cum am decis initial si am conectat prin usb placuta la pc-ul meu 
 +
 + 
 +==SCHEMA ELECTRICA:​==
 +*
 +*
 +*
 +{{:​pm:​prj2021:​avaduva:​schema_ro.png?​550|}}
 +*
 +*
 +*
 +==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.
 +
 +
 +
 +
 +{{:​pm:​prj2021:​avaduva:​20210601_155151.jpg?​550|}}
 +
 +
 +
 +
 +
 +==SOFTWARE DESIGN:==
 +
 +<​code>​
 +
 +
 +//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);
 +}
 +
 +</​code>​
 +
 +==REZULTATE==
 +[[https://​www.youtube.com/​watch?​v=0oWU8FnWFjw|rezultat clip]]
 +
 +==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|lpdfproiect]]
 +
 +https://​github.com/​fdebrabander/​Arduino-LiquidCrystal-I2C-library
 +https://​www.arduino.cc/​reference/​en/​libraries/​ds3231/​
 +https://​howtomechatronics.com/​tutorials/​arduino/​arduino-ds3231-real-time-clock-tutorial/​
  
pm/prj2021/avaduva/ceasalarma.1622503095.txt.gz · Last modified: 2021/06/01 02:18 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