Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:alexandru.jipa2803:miruna.brindusescu [2026/05/23 15:25]
miruna.brindusescu [Software Design]
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 252: Line 252:
 Datele sunt formatate sub formă de linie CSV: Datele sunt formatate sub formă de linie CSV:
  
-^ date      ^ time    ^ soil_percent ^ soil_raw ^ lux ^ rain ^ rain_raw ^ +^ date        ^ time      ^ soil_percent ​ ^ soil_raw ^ lux ^ rain ^ rain_raw ^ 
-|23/05/2026 |14:30:00 | 48           ​| 560      | 34  | 0    | 967      |+|23/​05/​2026 ​  ​|14:​30:​00 ​  ​| 48            | 560      | 34  | 0    | 967      |
  
 Pentru a nu bloca funcționarea butonului și a display-ului,​ salvarea pe card nu se face la fiecare iterație a buclei principale, ci periodic. În varianta actuală, Serial Monitor afișează datele mai rar, iar logarea în `log.csv` este gândită să se realizeze o dată pe oră, folosind timpul real citit de la RTC. Pentru a nu bloca funcționarea butonului și a display-ului,​ salvarea pe card nu se face la fiecare iterație a buclei principale, ci periodic. În varianta actuală, Serial Monitor afișează datele mai rar, iar logarea în `log.csv` este gândită să se realizeze o dată pe oră, folosind timpul real citit de la RTC.
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 ===
Line 471: Line 470:
  
  
-=== Demo video ===+==== Demo video ====
  
-Demo-ul video pentru proiect va include următoarele etape:+{{https://​i.imgur.com/​uMzC3Eh.mp4|Partea 1}} 
 +{{https://​i.imgur.com/​8KbcF3C.mp4|Partea 2}}
  
-1. pornirea sistemului;​ +Demo-ul include următoarele etape:
-2. afișarea mesajelor de inițializare în Serial Monitor; +
-3. afișarea primei pagini pe OLED cu umiditatea solului; +
-4. apăsarea butonului și schimbarea paginilor OLED; +
-5. demonstrarea LED-urilor pentru starea solului; +
-6. acoperirea sau iluminarea senzorului BH1750 pentru modificarea valorii lux; +
-7. umezirea senzorului de ploaie pentru aprinderea LED-ului albastru; +
-8. afișarea datei și orei de la RTC;+
  
 +  - pornirea sistemului; (1)
 +  - afișarea mesajelor de inițializare în Serial Monitor; (1)
 +  - afișarea primei pagini pe OLED cu umiditatea solului; (1)
 +  - apăsarea butonului și schimbarea paginilor OLED; (1)
 +  - afișarea datei și orei de la RTC;
 +  - demonstrarea LED-urilor pentru starea solului; (1)(2)
 +  - acoperirea sau iluminarea senzorului BH1750 pentru modificarea valorii lux; (2)
 +  - umezirea senzorului de ploaie pentru aprinderea LED-ului albastru; (2)
  
-Text pentru explicația video: 
  
 În acest demo este prezentat sistemul AgriSmart Mini. La pornire, microcontrollerul inițializează comunicațiile USART, I2C și SPI. Display-ul OLED afișează valorile citite de la senzori, iar butonul permite schimbarea paginilor. LED-urile oferă feedback vizual pentru starea solului și pentru detectarea ploii. Senzorul BH1750 măsoară intensitatea luminii, iar RTC-ul DS3231 oferă data și ora curentă. Periodic, datele sunt formatate ca linie CSV și salvate pe cardul MicroSD pentru analiză ulterioară. În acest demo este prezentat sistemul AgriSmart Mini. La pornire, microcontrollerul inițializează comunicațiile USART, I2C și SPI. Display-ul OLED afișează valorile citite de la senzori, iar butonul permite schimbarea paginilor. LED-urile oferă feedback vizual pentru starea solului și pentru detectarea ploii. Senzorul BH1750 măsoară intensitatea luminii, iar RTC-ul DS3231 oferă data și ora curentă. Periodic, datele sunt formatate ca linie CSV și salvate pe cardul MicroSD pentru analiză ulterioară.
  
  
-=== Calibrarea senzorilor ===+==== Calibrarea senzorilor ​====
  
 ** Calibrarea senzorului de umiditate a solului *** ** Calibrarea senzorului de umiditate a solului ***
Line 499: 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 535: Line 535:
  
  
-=== Optimizări realizate === +==== Optimizări realizate ====
- +
-În proiect am realizat mai multe optimizări pentru a îmbunătăți funcționarea sistemului.+
  
   - Evitarea bibliotecilor mari   - Evitarea bibliotecilor mari
Line 566: 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:
 +^ date        ^ time      ^ soil_percent ​ ^ soil_raw ^ lux ^ rain ^ rain_raw ^
 +|23/​05/​2026 ​  ​|14:​30:​00 ​  | 48            | 560      | 34  | 0    | 967      |
  
-^ date     ^ time    ^ soil_percent ^ soil_raw ^ lux ^ rain ^ rain_raw ^ 
-23/05/2026 |14:30:00 | 48           | 560      | 34  | 0    | 967      | 
 Acest format permite analiza ulterioară a valorilor pe laptop. Acest format permite analiza ulterioară a valorilor pe laptop.
  
  
-===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 587: 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 611: 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
pm/prj2026/alexandru.jipa2803/miruna.brindusescu.1779539126.txt.gz · Last modified: 2026/05/23 15:25 by miruna.brindusescu
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