This shows you the differences between two versions of the page.
pm:prj2021:abirlica:environmental_monitoring_system [2021/05/25 15:38] lucian_ioan.popescu [Rezultate obtinute] |
pm:prj2021:abirlica:environmental_monitoring_system [2021/05/30 19:17] (current) lucian_ioan.popescu [Software Design] |
||
---|---|---|---|
Line 8: | Line 8: | ||
Ideea proiectului a plecat de la dorinta de a agrega si multiplexa cat mai multi senzori pe Arduino pentru a culege si lucra cu datele din mediul inconjurator. Proiectul e folositor deoarece el poate fi modelat astfel incat sa fie folosit in viata de zi cu zi pentru a colecta date legate de temperatura, umiditate, puritatea aerului intr-o casa sau masina smart. | Ideea proiectului a plecat de la dorinta de a agrega si multiplexa cat mai multi senzori pe Arduino pentru a culege si lucra cu datele din mediul inconjurator. Proiectul e folositor deoarece el poate fi modelat astfel incat sa fie folosit in viata de zi cu zi pentru a colecta date legate de temperatura, umiditate, puritatea aerului intr-o casa sau masina smart. | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | {{:pm:prj2021:abirlica:environmental_monitoring_system_block_diagram.png?|}} | + | {{ :pm:prj2021:abirlica:ems_block_diagram.jpeg?500 |}} |
In loc de 4x7 display voi folosi tot un LED 1602 I2C deoarece pinii de pe placa nu sunt suficienti. | In loc de 4x7 display voi folosi tot un LED 1602 I2C deoarece pinii de pe placa nu sunt suficienti. | ||
Line 23: | Line 23: | ||
* PC | * PC | ||
- | {{ :pm:prj2021:abirlica:ems_circuit_design.png?800 |}} | + | {{ :pm:prj2021:abirlica:ems_circuit_design.jpeg?800 |}} |
===== Software Design ===== | ===== Software Design ===== | ||
Codul sursa se poate gasi in urmatorul repo: | Codul sursa se poate gasi in urmatorul repo: | ||
Line 30: | Line 30: | ||
La fiecare moment de timp, in functia loop, se afiseaza pe LCD-ul 1 meniul utilizatorului. Pe LCD-ul 2 e afiseaza uptime-ul in secunde. Sistemul asteapta de la utilizator o comanda, iar atunci cand o primeste se decide ce meniu va afisa pe ecran. | La fiecare moment de timp, in functia loop, se afiseaza pe LCD-ul 1 meniul utilizatorului. Pe LCD-ul 2 e afiseaza uptime-ul in secunde. Sistemul asteapta de la utilizator o comanda, iar atunci cand o primeste se decide ce meniu va afisa pe ecran. | ||
- | Functiile ajutatoare comunica cu senzorii sistemului pentru a colecta si afisa mai apoi date pe LCD. | + | Functiile statice definite in fisierul .ino comunica cu senzorii sistemului pentru a colecta si afisa mai apoi date pe LCD. |
+ | |||
+ | A fost nevoie sa hardcodez tastele venite de la telecomanda, pentru asta am folosit urmatoarele define-uri: \\ | ||
+ | #define KEYONE 0XF30CFF00 | ||
+ | #define KEYTWO 0XE718FF00 | ||
+ | #define KEYTHREE 0XA15EFF00 | ||
+ | #define KEYFOUR 0XF708FF00 | ||
+ | #define KEYEQ 0XE619FF00 | ||
+ | #define KEYUNDEF 0xFFFFFFF | ||
Pentru implementare am folosit urmatoarele biblioteci: | Pentru implementare am folosit urmatoarele biblioteci: | ||
Line 36: | Line 44: | ||
* [[https://github.com/adafruit/DHT-sensor-library | DHT]], pentru comunicarea cu senzorul de temperatura | * [[https://github.com/adafruit/DHT-sensor-library | DHT]], pentru comunicarea cu senzorul de temperatura | ||
* [[https://www.arduino.cc/reference/en/libraries/liquidcrystal-i2c/ | LiquidCrystal_I2C]], pentru comunicarea cu ecranele LCD | * [[https://www.arduino.cc/reference/en/libraries/liquidcrystal-i2c/ | LiquidCrystal_I2C]], pentru comunicarea cu ecranele LCD | ||
+ | |||
+ | Ca mediu de dezvoltare am folosit Arduino IDE. | ||
+ | |||
+ | Diagrama de activitate: | ||
+ | {{ :pm:prj2021:abirlica:ems_activity_diagram.jpeg?500 |}} | ||
===== Rezultate obtinute ===== | ===== Rezultate obtinute ===== | ||
Meniurile de pe LCD care se afiseaza utilizatorului sunt: | Meniurile de pe LCD care se afiseaza utilizatorului sunt: | ||
Line 45: | Line 58: | ||
Pentru a selecta un meniu se apasa tasta 1, 2, 3, respectiv 4 de pe telecomanda. Pentru a reveni in meniul principal se apasa tasta EQ. | Pentru a selecta un meniu se apasa tasta 1, 2, 3, respectiv 4 de pe telecomanda. Pentru a reveni in meniul principal se apasa tasta EQ. | ||
- | Mai jos se gasesc cateva poze cu sistemul rezultat si un video demo: | + | Mai jos se gasesc cateva poze cu sistemul rezultat si un video demo. |
- | {{ :pm:prj2021:abirlica:lcds.jpeg?800 |}} | + | Cele doua LCD-uri: |
- | {{ :pm:prj2021:abirlica:mini-breadbord.jpeg?800 |}} | + | {{ :pm:prj2021:abirlica:lcds.jpeg?500 |}} |
- | [[https://www.youtube.com/watch?v=A8L2GOVxvNM]] | + | Senzorii de sunet, temperatura si ultrasonic conectati pe breadboard: |
+ | {{ :pm:prj2021:abirlica:mini-breadbord.jpeg?500 |}} | ||
+ | |||
+ | IR receiver-ul folosit pentru comunicarea cu telecomanda: | ||
+ | {{ :pm:prj2021:abirlica:ir_receiver.jpeg?500 |}} | ||
+ | |||
+ | Pentru ca am folosit 2 LCD-uri cu I2C a fost nevoie ca pentru unul dintre ei sa modific adresa. Pentru asta am legat pinii de adresa A0 ca mai jos: | ||
+ | {{ :pm:prj2021:abirlica:i2c_addressed.jpeg?500 |}} | ||
+ | |||
+ | Demo: [[https://www.youtube.com/watch?v=A8L2GOVxvNM]] | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | To do | + | Am reusit sa implementez toata functionalitatea pe care mi-am propus-o. |
+ | Cea mai dificila parte a fost legata de interconectarea componentelor prin intermediul placutei. Initial mi-am propus sa folosesc un 4 digit 7 segment display pentru afisarea uptime-ului, dar mi-am dat seama ca nu-mi ajung pinii de pe placuta. In final am decis sa folosesc doua LCD-uri 16x2 cu I2C pentru ca folosesc doar 4 pini de pe placuta. | ||
+ | |||
+ | Implementarea software a mers foarte bine deoarece am gasit rapid biblioteci pentru componentele mele. Ce mi-a ramas de facut a fost sa creez logica pentru interactiunea cu utilizatorul. | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | To do | + | [[https://www.arduino.cc/reference/en/libraries/]] |
+ | |||
+ | [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf]] | ||
+ | |||
+ | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||