This shows you the differences between two versions of the page.
|
pm:prj2021:avaduva:ceasalarma [2021/06/01 02:17] roxana.scurtu |
pm:prj2021:avaduva:ceasalarma [2021/06/02 18:03] (current) roxana.scurtu |
||
|---|---|---|---|
| Line 23: | Line 23: | ||
| | 3.16X2 LCD Display | 1| | | | 3.16X2 LCD Display | 1| | | ||
| | Buzzer pasiv | 1 | 5V | | | Buzzer pasiv | 1 | 5V | | ||
| - | | Rezistente | 4 | 1K | | + | | Rezistente | 4 | 1K | |
| | Fire mama-tata | 10 | | | | Fire mama-tata | 10 | | | ||
| | Fire tata-tata | 10 | | | | Fire tata-tata | 10 | | | ||
| + | |||
| + | |||
| Line 31: | Line 33: | ||
| 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 | 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: | + | ==SCHEMA BLOC:== |
| + | |||
| + | {{: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. | ||
| - | {{:pm:prj2021:avaduva:blank_diagram.png?200|}} | + | ==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/ | ||