This shows you the differences between two versions of the page.
pm:prj2023:dene:smart-green-lamp [2023/05/29 18:38] vlad.zinca [Hardware Design] |
pm:prj2023:dene:smart-green-lamp [2023/05/29 22:43] (current) vlad.zinca [Bibliografie/Resurse] |
||
---|---|---|---|
Line 24: | Line 24: | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | * **Lampa inteligentă** se poate aprinde/stinge atât la nevoie, cât și la răsărit/apus. | + | * **Lampa inteligentă** se aprinde la apus și se stinge la răsărit. |
- | * **Ceasul digital** ce însoțește lampa este conectat la un senzor de distanță, și se activează doar în prezența unei persoane. | + | * **Ceasul digital** arată ora curentă și data la care ne aflăm. |
+ | * De asemenea, el este conectat la un **senzor de distanță**, și se activează doar în prezența unei persoane la mai puțin de 50 cm. | ||
+ | * Suplimentar, //Smart Green Lamp// suportă **comenzi** precum "ON" pentru a aprinde lampa, "OFF" pentru a o stinge, "hh:mm:ss" pentru a seta ora, "dd/mm/yyyy" pentru a seta data sau "dd/mm/yyyy hh:mm:ss" pentru a seta atât ora, cât și data. | ||
{{:pm:prj2023:dene:smart_green_lamp_block_scheme.png?600|}} | {{:pm:prj2023:dene:smart_green_lamp_block_scheme.png?600|}} | ||
Line 38: | Line 40: | ||
* senzor ultrasonic de distanță HC-SR04+ | * senzor ultrasonic de distanță HC-SR04+ | ||
* modul releu cu un canal | * modul releu cu un canal | ||
- | * bec cu LED E27 | + | * bec cu LED E27 / fasung / stecher |
* baterie VARTA 6F22 9V | * baterie VARTA 6F22 9V | ||
* breadboard | * breadboard | ||
* fire | * fire | ||
+ | * stand de montaj | ||
</note> | </note> | ||
Line 50: | Line 53: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Pentru a scrie codul, m-am folosit de **Arduino IDE** și de trei biblioteci: **Wire**, pentru modulul I2C, **LiquidCrystal_I2C**, pentru display-ul LCD, și **RTClib**, pentru modulul RTC. | ||
+ | |||
+ | <note tip> | ||
+ | Implementarea se bazează pe crearea unei **baze de date** cu orele de răsăsit și de apus din București calculate ca număr de minute de la miezul nopții (de exemplu, pentru a ține minte ora 7:51 se va memora 7 * 60 + 51 = 471). Acest fapt s-a realizat folosind keyword-ul **PROGMEM**, iar citirea elementelor din baza de date s-a făcut folosind funcția **pgm_read_word_near()**. | ||
+ | </note> | ||
+ | |||
+ | Pentru a aprinde/stinge becul la apus/răsărit, Arduino verifică **în loop()** dacă ora curentă se află între ora de apus și de răsărit al zilei respective, și trimite un semnal către releu care pornește becul doar dacă acest lucru se întâmplă. | ||
+ | |||
+ | Pentru a arăta ora și data curentă, **display-ul LCD** comunică cu modulul **RTC DS3231** de mare precizie și obține aceste date de la acesta. Acest lucru se facilitează în cod folosind un obiect de tip **RTC_DS3231** și metoda acestuia **now()**. | ||
+ | |||
+ | Și mai important, lumina de fond a afișajului LCD este activată sau dezactivată de aproprierea unei persoane, pentru a elimina consumul energetic inutil atunci când nimeni nu se află în preajmă. | ||
+ | |||
+ | <note tip> | ||
+ | Acest lucru este asigurat de către **senzorul ultrasonic de măsurare a distanței HC-SR04+** care, atunci când cineva se apropie la o distanță mai mică de 50 cm, aprinde lumina de fond a ecranului LCD prin activarea metodei **backlight()**, și o stinge atunci când persoane se îndepărtează la o distanță mai mare de 50 cm, folosind metoda **noBacklight()**. | ||
+ | </note> | ||
+ | |||
+ | În plus, Arduino ascultă pe interfața serială **comenzi** pentru aprinderea/stingerea lămpii inteligente, precum și pentru setarea orei și datei calendaristice. | ||
+ | |||
+ | <note tip> | ||
+ | **Știați că?** În momentul conectării codulul la Arduino, acesta preia data și timpul din calculatorul de pe care se încarcă codul și le transmite modulului RTC, folosind funcția **rtc.adjust(DateTime(F(__DATE__), F(__TIME__)))**. | ||
+ | </note> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | {{:pm:prj2023:dene:1.jpeg?700|}} | ||
+ | {{:pm:prj2023:dene:2.jpeg?700|}} | ||
+ | {{:pm:prj2023:dene:3.jpeg?700|}} | ||
+ | {{:pm:prj2023:dene:4.jpeg?700|}} | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | <note important>"The true measure of a person's character lies not in the promises they make, but in the unwavering pursuit of facts they undertake to fulfill those promises." - Socrates</note> | ||
+ | |||
+ | No, really, e foarte ușor să spui că faci x sau y ca proiect la PM, e foarte greu să cumperi piesele, să te documentezi, să le pui cap la cap până când iese ceea ce trebuie. | ||
+ | |||
+ | Însă a fost o experiență foarte plăcută. Mult mai plăcută decât mă așteptam, recunosc. E ceva foarte satisfăcător în a face ceva complex din bucăți ceva mai simple cu propriile mâini. I like it. | ||
+ | |||
+ | Acum, mă uit la el când scriu rândurile astea, și sincer, chiar dacă sunt doar niște bucăți de plastic, pentru mine proiectul ăsta e mai mult decât atât. <3 | ||
+ | |||
+ | {{:pm:prj2023:dene:meme_pm.png?400|}} | ||
===== Download ===== | ===== Download ===== | ||
+ | {{:pm:prj2023:dene:smart_green_lamp.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
<note tip> | <note tip> | ||
- | 7 mai 2023: S-a creat pagina proiectului Smart Green Lamp, precum și documentația sa inițială, schema bloc și lista de piese necesare. | + | //7 mai 2023//: S-a creat pagina proiectului Smart Green Lamp, precum și documentația sa inițială, schema bloc și lista de piese necesare. |
- | 21 mai 2023: Am adăugat schema electrică și am conectat piesele conform acesteia. | + | //21 mai 2023//: Am adăugat schema electrică și am conectat piesele conform acesteia. |
+ | |||
+ | //27 mai 2023//: S-a terminat implementarea codului proiectului folosind Arduino IDE. | ||
+ | |||
+ | //29 mai 2023//: S-au adăugat detaliile implementării software, poze cu rezultatul proiectului, precum și concluziile personale. | ||
</note> | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
+ | |||
+ | <note important>În implementarea soluției, am plecat de la **acest video** [1] care descrie cum un bec poate fi controlat folosind Arduino și un releu. Proiectul a evoluat considerabil, însă videoclipul a reprezentat un punct de plecare important. | ||
+ | </note> | ||
+ | |||
+ | [1] - https://www.youtube.com/watch?v=s9dsR_X92io | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||