This is an old revision of the document!
Acest proiect constă în dezvoltarea unui ceas de birou, însă nu orice fel de ceas, ci unul smart. Scopul acestuia este atât de a arăta ora curentă și temperatura din cameră, cât şi de a lumina suficient de tare în jurul său cât să nu mai trebuiască altă lumină pe birou.
Ideea pentru acest proiect a venit din dorința de a realiza ceva ce nu am mai vazut până acum, combinată cu lipsa de lumină de pe biroul meu în timp ce mă gândeam la ce aș putea realiza.
Cum sunt sigură de faptul că nu sunt singura persoană care nu are o lumină pe birou care să mă ajute, în special noaptea, când nu mai există lumină naturală, consider că acest proiect poate fi util şi altor persoane care au acestă problemă.
Ceasul de birou smart are următoarele caracteristici:
De asemenea, LED-urile RGB au aici catodul comun, însă în realitate folosesc LED-uri cu anod comun.
Urmează să adaug acest hardware într-o carcasă de ceas și, de asemenea, să adaug mai multe LED-uri pe aceasta.
Dupa ce am adaugat aceste librarii, urmeaza partea de implementare, care este realizata in 3 etape:
Mai intai initializez componentele, mai exact specific pinii pe care ii va folosi fiecare componenta, alaturi de alte initializari acolo unde este cazul.
// LED-uri RGB int ledRGB_R = 6; // pinul 6 (pwm) int ledRGB_G = 5; // pinul 7 (pwm) int ledRGB_B = 3; // pinul 3 (pwm) // LED-uri albe int led_white = 10; // pinul 10 (pwm) int is_on = 1; // Variabila pentru a porni/opri ledurile // LCD I2C LiquidCrystal_I2C lcd(0x27, 16, 2); // (adresa I2C, nr coloane, nr linii) // Modul RTC DS1307 rtc; // Senzor IR const int RECV_PIN = 7; // pinul 7 String code = ""; // // Variabila pentru a stoca codul citit de senzor // Senzor de temperatura DS18B20 int temp = 2; // pinul 2 OneWire oneWire(temp); // Instanta OneWire pentru a comunica cu device-uri OneWire DallasTemperature temp_sensor(&oneWire); // Pasez adresa instantei
Mai intai specific faptul ca atat pinii de la LED-urile RBG, cat si cei de la LED-urile albe sunt output.
pinMode(ledRGB_R, OUTPUT); pinMode(ledRGB_G, OUTPUT); pinMode(ledRGB_B, OUTPUT); pinMode(led_white, OUTPUT);
Dupa ce am specificat acest lucru, setez ca LED-urile RGB sa fie stinse la pornirea ceasului, iar LED-urile albe sa fie aprinse.
digitalWrite(ledRGB_R, 1); digitalWrite(ledRGB_G, 1); digitalWrite(ledRGB_B, 1); digitalWrite(led_white, 0);
Pentru a afisa pe ecranul LCD ora curenta si temperatura din camera in care se afla ceasul, fac un mic setup pe acesta in care afisez cuvintele specifice: pe primul rand “Ora” si pe al doilea rand “Temperatura […] C”.
lcd.init(); lcd.backlight(); lcd.print("Ora:"); lcd.setCursor(0, 1); lcd.print("Temperatura:"); lcd.setCursor(15, 1); lcd.print("C");
Pentru a putea afisa ora curenta, trebuie sa pornesc modulul RTC si sa ii introduc prima oara manual ora si data curenta, dupa care el va retine automat aceste date.
rtc.begin(); rtc.set(50, 59, 9, 23, 05, 2024); //sec, min, hour, day, month, year rtc.start();
Mai ramane doar sa pornesc senzorul IR si senzorul de temperatura.
IrReceiver.begin(RECV_PIN, DISABLE_LED_FEEDBACK); temp_sensor.begin();
loop
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.