This shows you the differences between two versions of the page.
|
pm:prj2026:alexandru.jipa2803:miruna.brindusescu [2026/05/23 15:27] miruna.brindusescu [Validarea funcționalităților] |
pm:prj2026:alexandru.jipa2803:miruna.brindusescu [2026/05/23 18:52] (current) miruna.brindusescu [Demo video] |
||
|---|---|---|---|
| Line 230: | Line 230: | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| - | ** Stadiul actual al implementării software ** | + | ==== Stadiul actual al implementării software ==== |
| - | În stadiul actual, proiectul are implementată partea principală de monitorizare a condițiilor de mediu pentru o plantă. Sistemul folosește mai multe periferice hardware: ADC, GPIO, USART, I2C/TWI și SPI. | + | În stadiul actual, proiectul are implementată partea de monitorizare a condițiilor de mediu pentru o plantă. Sistemul folosește mai multe periferice hardware: ADC, GPIO, USART, I2C/TWI și SPI. |
| Funcționalitățile implementate până în acest moment sunt: | Funcționalitățile implementate până în acest moment sunt: | ||
| Line 311: | Line 311: | ||
| În cod, pinii LED sunt configurați ca ieșiri: | În cod, pinii LED sunt configurați ca ieșiri: | ||
| + | <code> | ||
| DDRD |= (1 << LED_BLUE) | | DDRD |= (1 << LED_BLUE) | | ||
| (1 << LED_GREEN) | | (1 << LED_GREEN) | | ||
| (1 << LED_YELLOW) | | (1 << LED_YELLOW) | | ||
| (1 << LED_RED); | (1 << LED_RED); | ||
| + | </code> | ||
| Butonul este configurat ca intrare cu pull-up intern: | Butonul este configurat ca intrare cu pull-up intern: | ||
| + | <code> | ||
| DDRD &= ~(1 << BUTTON_PIN); | DDRD &= ~(1 << BUTTON_PIN); | ||
| PORTD |= (1 << BUTTON_PIN); | PORTD |= (1 << BUTTON_PIN); | ||
| + | </code> | ||
| Acest lucru permite conectarea butonului direct între PD7 și GND, fără rezistență externă. | Acest lucru permite conectarea butonului direct între PD7 și GND, fără rezistență externă. | ||
| Line 363: | Line 364: | ||
| Structura software este: | Structura software este: | ||
| + | <code> | ||
| │ | │ | ||
| ├── src | ├── src | ||
| Line 385: | Line 387: | ||
| │ ├── usart.c | │ ├── usart.c | ||
| │ └── usart.h | │ └── usart.h | ||
| + | </code> | ||
| Rolul fișierului `main.c` este de a coordona toate modulele. Acesta: | Rolul fișierului `main.c` este de a coordona toate modulele. Acesta: | ||
| - | 1. inițializează USART; | + | - inițializează USART; |
| - | 2. configurează GPIO; | + | - configurează GPIO; |
| - | 3. inițializează ADC; | + | - inițializează ADC; |
| - | 4. pornește magistrala I2C; | + | - pornește magistrala I2C; |
| - | 5. inițializează SPI; | + | - inițializează SPI; |
| - | 6. montează cardul SD; | + | - montează cardul SD; |
| - | 7. inițializează OLED-ul; | + | - inițializează OLED-ul; |
| - | 8. inițializează senzorul BH1750; | + | - inițializează senzorul BH1750; |
| - | 9. citește periodic senzorii; | + | - citește periodic senzorii; |
| - | 10. actualizează LED-urile; | + | - actualizează LED-urile; |
| - | 11. verifică butonul; | + | - verifică butonul; |
| - | 12. afișează pagina curentă pe OLED; | + | - afișează pagina curentă pe OLED; |
| - | 13. trimite date prin Serial Monitor; | + | - trimite date prin Serial Monitor; |
| - | 14. salvează periodic date în log.csv. | + | - salvează periodic date în log.csv. |
| Fluxul principal din `while(1)` este: | Fluxul principal din `while(1)` este: | ||
| - | citire sol -> citire ploaie -> citire lumină -> citire RTC | + | citire sol -> citire ploaie -> citire lumină -> citire RTC -> actualizare LED-uri -> verificare buton -> afișare OLED -> afișare în Serial Monitor -> logare periodică pe MicroSD |
| - | -> actualizare LED-uri | + | |
| - | -> verificare buton | + | |
| - | -> afișare OLED | + | |
| - | -> afișare în Serial Monitor | + | |
| - | -> logare periodică pe MicroSD | + | |
| Interacțiunea dintre module este: | Interacțiunea dintre module este: | ||
| - | Senzor sol -> ADC -> procent umiditate -> OLED + LED-uri + CSV | + | * Senzor sol -> ADC -> procent umiditate -> OLED + LED-uri + CSV |
| - | Senzor ploaie -> ADC/GPIO -> status ploaie -> OLED + LED albastru + CSV | + | * Senzor ploaie -> ADC/GPIO -> status ploaie -> OLED + LED albastru + CSV |
| - | BH1750 -> I2C -> lux -> OLED + CSV | + | * BH1750 -> I2C -> lux -> OLED + CSV |
| - | DS3231 -> I2C -> dată/oră -> OLED + timestamp CSV | + | * DS3231 -> I2C -> dată/oră -> OLED + timestamp CSV |
| - | Buton -> GPIO -> schimbare pagină OLED | + | * Buton -> GPIO -> schimbare pagină OLED |
| - | MicroSD -> SPI + Petit FatFs -> salvare log.csv | + | * MicroSD -> SPI + Petit FatFs -> salvare log.csv |
| - | USART -> debug | + | * USART -> debug |
| Line 428: | Line 426: | ||
| Prima etapă a fost testarea display-ului OLED prin afișarea unor mesaje simple: | Prima etapă a fost testarea display-ului OLED prin afișarea unor mesaje simple: | ||
| - | ─────────── | + | <code> |
| - | │ HELLO │ | + | HELLO |
| - | │ OLED OK │ | + | OLED OK |
| - | │ ATMEGA328P│ | + | ATMEGA328P |
| - | └─────────── | + | |
| + | </code> | ||
| {{https://i.imgur.com/1OoZ8oE.mp4|Video validare}} | {{https://i.imgur.com/1OoZ8oE.mp4|Video validare}} | ||
| Line 457: | Line 456: | ||
| === Validarea RTC === | === Validarea RTC === | ||
| - | RTC-ul DS3231 a fost validat prin citirea și afișarea orei pe OLED și în Serial Monitor. Inițial, modulul pornea de la data `01/01/2000`, ceea ce a indicat că ora nu era setată sau că modulul nu avea baterie de backup. Pentru rezolvare, am adăugat o funcție `rtc_set_time()`, folosită o singură dată pentru setarea datei și orei. | + | RTC-ul DS3231 a fost validat prin citirea și afișarea orei pe OLED și în Serial Monitor. Inițial, modulul pornea de la data 01/01/2000, ceea ce a indicat că ora nu era setată sau că modulul nu avea baterie de backup. Pentru rezolvare, am adăugat o funcție rtc_set_time(), folosită o singură dată pentru setarea datei și orei. |
| - | ==== Validarea MicroSD ==== | + | === Validarea MicroSD === |
| Pentru MicroSD, validarea se face în două etape: | Pentru MicroSD, validarea se face în două etape: | ||
| Line 472: | Line 471: | ||
| ==== Demo video ==== | ==== Demo video ==== | ||
| + | |||
| + | {{https://i.imgur.com/uMzC3Eh.mp4|Partea 1}} | ||
| + | {{https://i.imgur.com/8KbcF3C.mp4|Partea 2}} | ||
| Demo-ul include următoarele etape: | Demo-ul include următoarele etape: | ||
| - | 1. pornirea sistemului; | + | - pornirea sistemului; (1) |
| - | 2. afișarea mesajelor de inițializare în Serial Monitor; | + | - afișarea mesajelor de inițializare în Serial Monitor; (1) |
| - | 3. afișarea primei pagini pe OLED cu umiditatea solului; | + | - afișarea primei pagini pe OLED cu umiditatea solului; (1) |
| - | 4. apăsarea butonului și schimbarea paginilor OLED; | + | - apăsarea butonului și schimbarea paginilor OLED; (1) |
| - | 5. demonstrarea LED-urilor pentru starea solului; | + | - afișarea datei și orei de la RTC; |
| - | 6. acoperirea sau iluminarea senzorului BH1750 pentru modificarea valorii lux; | + | - demonstrarea LED-urilor pentru starea solului; (1)(2) |
| - | 7. umezirea senzorului de ploaie pentru aprinderea LED-ului albastru; | + | - acoperirea sau iluminarea senzorului BH1750 pentru modificarea valorii lux; (2) |
| - | 8. afișarea datei și orei de la RTC; | + | - umezirea senzorului de ploaie pentru aprinderea LED-ului albastru; (2) |
| Line 497: | Line 499: | ||
| Pe baza acestor valori am ales două praguri: | Pe baza acestor valori am ales două praguri: | ||
| + | <code> | ||
| const uint16_t wet = 300; | const uint16_t wet = 300; | ||
| - | |||
| const uint16_t dry = 800; | const uint16_t dry = 800; | ||
| + | </code> | ||
| Apoi valoarea ADC este transformată într-un procent: | Apoi valoarea ADC este transformată într-un procent: | ||
| Line 562: | Line 564: | ||
| În loc să folosesc doar delay-uri pentru măsurarea timpului, logarea este asociată cu ora reală primită de la RTC. Astfel, fiecare linie din CSV are context temporal clar. | În loc să folosesc doar delay-uri pentru măsurarea timpului, logarea este asociată cu ora reală primită de la RTC. Astfel, fiecare linie din CSV are context temporal clar. | ||
| - | ==== Rezultate obținute ==== | + | ===== Rezultate obținute ===== |
| În urma implementării, sistemul poate citi valorile de la senzorii principali, poate afișa datele pe OLED, poate semnaliza starea plantei prin LED-uri și poate transmite informații prin USART pentru debug. | În urma implementării, sistemul poate citi valorile de la senzorii principali, poate afișa datele pe OLED, poate semnaliza starea plantei prin LED-uri și poate transmite informații prin USART pentru debug. | ||
| Datele citite au format de tipul: | Datele citite au format de tipul: | ||
| + | <code> | ||
| SOIL=48% RAW=560 LUX=34 RAIN=0 RAIN_RAW=967 TIME=14:30:00 DATE=23/05/2026 | SOIL=48% RAW=560 LUX=34 RAIN=0 RAIN_RAW=967 TIME=14:30:00 DATE=23/05/2026 | ||
| + | </code> | ||
| În fișierul CSV, datele sunt salvate sub forma: | În fișierul CSV, datele sunt salvate sub forma: | ||
| Line 577: | Line 580: | ||
| - | ===Concluzii == | + | ===== Concluzii ===== |
| Proiectul **AgriSmart Mini** demonstrează integrarea mai multor periferice hardware ale microcontrollerului ATmega328P într-un sistem de monitorizare agricolă inteligentă. Sistemul combină senzori analogici, senzori digitali, afișare locală, feedback vizual și stocare pe MicroSD. | Proiectul **AgriSmart Mini** demonstrează integrarea mai multor periferice hardware ale microcontrollerului ATmega328P într-un sistem de monitorizare agricolă inteligentă. Sistemul combină senzori analogici, senzori digitali, afișare locală, feedback vizual și stocare pe MicroSD. | ||
| Line 583: | Line 586: | ||
| Prin folosirea ADC, I2C, SPI, GPIO și USART, proiectul acoperă o parte importantă din funcționalitățile studiate în laborator. Implementarea modulară permite extinderea ulterioară a sistemului. | Prin folosirea ADC, I2C, SPI, GPIO și USART, proiectul acoperă o parte importantă din funcționalitățile studiate în laborator. Implementarea modulară permite extinderea ulterioară a sistemului. | ||
| - | ==== Jurnal de dezvoltare ==== | + | ===== Jurnal de dezvoltare ===== |
| - | 1 Mai - Stabilirea ideii proiectului și alegerea componentelor. | + | * 1 Mai - Stabilirea ideii proiectului și alegerea componentelor. |
| - | 10 Mai - Realizarea schemei hardware și a conexiunilor principale. | + | * 10 Mai - Realizarea schemei hardware și a conexiunilor principale. |
| - | 15 Mai - Testarea OLED-ului și a comunicației I2C. | + | * 15 Mai - Testarea OLED-ului și a comunicației I2C. |
| - | 18 Mai - Testarea senzorului de umiditate și a senzorului de ploaie. | + | * 18 Mai - Testarea senzorului de umiditate și a senzorului de ploaie. |
| - | 20 Mai - Integrarea BH1750 și RTC DS3231. | + | * 19 Mai - Integrarea BH1750 și RTC DS3231. |
| - | 22 Mai - Implementarea paginilor OLED, LED-urilor și butonului. | + | * 20 Mai - Implementarea paginilor OLED, LED-urilor și butonului. |
| - | 23 Mai - Integrarea SPI și a logicii MicroSD pentru salvare CSV. | + | * 22 Mai - Integrarea SPI și a logicii MicroSD pentru salvare CSV. |
| - | 24 Mai - Finalizarea documentației software și pregătirea demo-ului. | + | * 23 Mai - Finalizarea documentației software și pregătirea demo-ului. |
| - | ==== Bibliografie ==== | + | ===== Bibliografie ===== |
| - Documentația oficială ATmega328P / registre AVR. | - Documentația oficială ATmega328P / registre AVR. | ||
| Line 607: | Line 610: | ||
| <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> | ||
| + | ===== GitHub Repository ===== | ||
| + | |||
| + | https://github.com/Miruna-Brindusesc/hw-agrismart-mini | ||