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: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
pm/prj2026/alexandru.jipa2803/miruna.brindusescu.1779539278.txt.gz · Last modified: 2026/05/23 15:27 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