This shows you the differences between two versions of the page.
pm:prj2021:avaduva:ceasalarma [2021/06/01 16:04] roxana.scurtu |
pm:prj2021:avaduva:ceasalarma [2021/06/02 18:03] (current) roxana.scurtu |
||
---|---|---|---|
Line 37: | Line 37: | ||
{{:pm:prj2021:avaduva:blank_diagram.png?550|}} | {{: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:== | ==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|}} | {{:pm:prj2021:avaduva:20210601_155151.jpg?550|}} | ||
+ | |||
Line 47: | Line 69: | ||
==SOFTWARE DESIGN:== | ==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/ | ||
+ |