This is an old revision of the document!


Ceas de birou smart

Introducere

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ă.

Descriere generală

Ceasul de birou smart are următoarele caracteristici:

  1. Indică pe ecran ora exactă, prin intermediul unui modul RTC (real time clock);
  2. Indică pe ecran temperatura din cameră, prin intermediul unui senzor de temperatură;
  3. In funcție de cât de multă lumină este în jurul său, LED-urile albe din jurul ceasului scad sau cresc în intensitate (dacă este mai puțină lumină în jur, LED-urile luminează mai tare). Nivelul de lumină este măsurat cu ajutorul unui fotorezistor;
  4. LED-urile RGB, tot din jurul ceasului, se vor aprinde în momentul în care senzorul infraroșu detectează o anumită acțiune realizată de către un utilizator asupra unei telecomenzi.

Schema bloc a proiectului:

Schema bloc este realizată în Figma, folosind icon-uri de pe www.flaticon.com.

Hardware Design

Componente utilizate:

  • Breadboard
  • Aduino uno
  • I2C display
  • Senzor de temperatura
  • Senzor infrarosu
  • Telecomanda
  • Fotorezistor
  • LED-uri albe
  • LED-uri RGB
  • Rezistente
  • Fire
  • Modul RTC

Schemă proiect:

Schema proiectului este realizată în www.tinkercad.com.

De pe această schemă lipsește modulul RTC, întrucât acesta nu există in Tinkercad.

De asemenea, LED-urile RGB au aici catodul comun, însă în realitate folosesc LED-uri cu anod comun.

Schematic circuit:

Hardware-ul momentan:

Urmează să adaug acest hardware într-o carcasă de ceas și, de asemenea, să adaug mai multe LED-uri pe aceasta.

Software Design

Mediu de Dezvoltare

  • Arduino IDE

Librării utilizate

  • DS1307.h - folosita pentru a comunica cu modulul de RTC
  • Wire.h - folosita pentru comunicatiile cu I2C
  • LiquidCrystal_I2C.h - folosita pentru facilizarea afisarii datelor pe ecranul LCD
  • OneWire.h - folosita pentru a facilita comunicarea cu senzorul de temperatura
  • DallasTemperature.h - specifica senzorului de temperatura pe care l-am folosit (DS1820)
  • IRremote.hpp - folosita pentru decodarea semnalelor primite de la senzorul de IR

Implementare

Dupa ce am adaugat aceste librarii, urmeaza partea de implementare, care este realizata in 3 etape:

Initializari

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

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

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

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.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2024/sseverin/mihaela.alexe0502.1716668642.txt.gz · Last modified: 2024/05/25 23:24 by mihaela.alexe0502
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