Differences

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

Link to this comparison view

pm:prj2026:victor.stoica0203:degeratu_razvan [2026/05/07 15:00]
razvan.degeratu
pm:prj2026:victor.stoica0203:degeratu_razvan [2026/05/24 22:55] (current)
razvan.degeratu [Download]
Line 1: Line 1:
-====== Statie Meteo Smart cu Interfata Duala (CLI si OLED) ======+====== Statie Meteo cu Navigatie - Degeratu Razvan-Andrei ​======
  
 ===== Introducere ===== ===== Introducere =====
 +Proiectul reprezinta o statie meteorologica autonoma, capabila sa monitorizeze in timp real temperatura,​ umiditatea si presiunea atmosferica din mediul ambiant. Datele sunt prelucrate si afisate local pe un ecran OLED de 0.96' sub doua forme: un ecran de date text si trei ecrane dedicate pentru istoricul grafic al fiecarui parametru, completate de statistici de minim si maxim stocate persistent.
  
-**Ce face proiectul:​**  +Sistemul utilizeaza un potentiometru analogic pentru navigarea fluida intre ecrane. Schimbarea paginilor ​este gestionata in fundal ​prin intreruperi hardwareCodul este scris integral in C pentru microcontrolerul ATmega328Plucrand direct la nivel de registri hardwarefara apela la biblioteci high-level din ecosistemul Arduino.
-Proiectul ​este o statie meteorologica capabila sa citeasca temperatura,​ umiditatea si presiunea atmosferica din mediul ambiant. Datele sunt afisate local pe un ecran OLED, dar sunt si trimise simultan catre un PC prin intermediul interfetei UARTMai multstatia dispune ​de o interfata de tip Command Line (CLI) prin care utilizatorul poate trimite comenzi de la PC pentru a interoga istoricul masuratorilor, a opri/porni ecranul sau a cere statistici.+
  
-**Scopul lui:**  +**Ideea de pornire:** Dorinta ​de a dezvolta ​un sistem de telemetrie ​compact ​si independentcare nu doar afiseaza valori instantaneeci construiește un istoric vizual direct ​pe un ecran de rezolutie mica. Prin eliminarea comunicatiei UARTstatia devine un dispozitiv portabil prin conectarea ​la o baterie de 9V, capabil sa retina istoricul climatic chiar si dupa intreruperea alimentarii.
-Scopul este de a construi ​un sistem ​complet ​de telemetrie si achizitie de datedemonstrand interconectarea mai multor periferice (I2C pentru senzori/​displayTimer pentru scheduling, USART pentru comunicatie PC). Codul va fi scris "​bare-metal"​ in C pe arhitectura ATmega328Pfara a apela la bibliotecile high-level specifice mediului Arduino.+
  
-**Ideea de pornire:**  +**Utilitate:** Monitorizarea microclimatului ambiental cu un grad ridicat ​de precizie si analizarea tendintelor meteorologice pe termen scurt prin intermediul graficelor ​cu axe si grid renderizate bitwise.
-Am dorit sa depasesc stadiul unei simple statii care doar afiseaza numere pe un ecran, adaugand componenta ​de conectivitate cu PC-ul pentru posibilitatea de data logging. Astfel, am imbinat necesitatea masurarii fizice (I2C) cu interactiunea software avansata (UART + Intreruperi).+
  
-**Utilitate:​** ​ +===== Ipoteza ===== 
-Proiectul este util pentru monitorizarea microclimatului dintr-o cameraiar datele trimise prin UART pot fi preluate usor de scripturi externe ​pe PC pentru ​genera grafice in timp real.+Cred că scrierea codului exclusiv la nivel de regiștrifără utilizarea bibliotecilor ​de nivel înalt, va îmbunătăți semnificativ performanța,​ va reduce dramatic amprenta de memorie SRAM și va asigura fluiditatea afișării ​pe ecranul OLED (refresh rate stabil), deoarece elimină overhead-ul funcțiilor din biblioteci și permite actualizarea asincronă ​ecranului și citirea senzorilor direct în bucla principală,​ cu temporizare hardware.
  
 ===== Descriere generala ===== ===== Descriere generala =====
- +Sistemul ​este organizat in jurul microcontrolerului ATmega328P, care gestioneaza perifericele in mod concurent: 
-Arhitectura proiectului ​este de tip Master-Slave pe I2C pentru componentele fizice si Client-Server simplu prin UART pentru interfata cu PC-ul. +  * **Microcontrolerul (Master):​** ​Gestioneaza citirea senzorilor, logica de stocare si generarea semnalelor video. Foloseste ​un Timer hardware ​pe post de ceas de sistem ​pentru a esantiona datele de control fara bloca procesarea grafica
-  * **Microcontrolerul (Master):​** ​Un Arduino cu ATmega328P foloseste ​un Timer hardware pentru a da ritmul aplicatiei, trezind sistemul periodic pentru ​face citiri+  * **Modul BME280 (I2C Slave 1):** Preia schimbarile ​fizice ​de temperatura,​ presiune si umiditate ​si le transmite ​digital prin protocolul I2C
-  * **Modul BME280 (I2C Slave 1):** Preia datele ​fizice ​brute si le transmite ​microcontrolerului+  * **Display OLED SSD1306 ​(I2C Slave 2):** Afiseaza ecranele ​de text, structura grid-ului ​si graficele de evolutie pe baza comenzilor si datelor transmise de Master
-  * **Display OLED (I2C Slave 2):** Primeste datele formatate ​de la microcontroler ​si le afiseaza+  * **Interfata de Control ​(Potentiometru):** Genereaza o tensiune variabila ​(0-5Vcitita de modulul ADC intern al microcontrolerului,​ mapata direct ​pe indexul ecranului selectat.
-  * **PC (Interfata ​UART):** Actioneaza ca un terminal ​de unde se pot da comenzi ​(via intreruperi de receptie RXsi unde se primesc log-urile de la statie (TX). +
- +
-**Schema Bloc:** +
-[ PC / Terminal ​(PuTTY] <== UART (TX/RX via cablu USB) ==> [ Microcontroler (ATmega328P ​pe Arduino) ] +
-                                                                       | +
-                                                           I2C Bus (A4-SDA, A5-SCL) +
-                                                                /              \ +
-                                               [ Senzor BME280 ]             [ Display OLED 0.96" ] +
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
 **BOM (Bill Of Materials):​** **BOM (Bill Of Materials):​**
-  * Placa de dezvoltare Arduino Uno sau Nano (ATmega328P) - 1 buc.+  * Placa de dezvoltare Arduino Uno (microcontroler ​ATmega328P) - 1 buc.
   * Senzor de mediu BME280 (Temperatura,​ Umiditate, Presiune) - 1 buc.   * Senzor de mediu BME280 (Temperatura,​ Umiditate, Presiune) - 1 buc.
-  * Display OLED 0.96" I2C (driver ​SSD1306) - 1 buc.+  * Display OLED 0.96" I2C (SSD1306) ​- 1 buc. 
 +  * Potentiometru liniar (10k Ω) pentru navigare ​- 1 buc.
   * Breadboard (Placa de teste) - 1 buc.   * Breadboard (Placa de teste) - 1 buc.
   * Fire de conexiune (Jumper wires) - 1 set.   * Fire de conexiune (Jumper wires) - 1 set.
  
 **Schema Electrica (Conexiuni principale):​** **Schema Electrica (Conexiuni principale):​**
-Deoarece ​magistrala I2C imparte aceleasi firecomponentele se leaga in paralel la pinii dedicati ​de pe Arduino (SDA = Analog 4, SCL = Analog 5)+Toate perifericele digitale impart aceeasi ​magistrala I2C, conectate ​in paralel la pinii hardware ​dedicati ​ai portului C
-  * **BME280** ​-> VCC la 3.3V sau 5V (in functie de modul), GND la GND, SDA la pinul A4 (PC4), SCL la pinul A5 (PC5). +  * **BME280 ​& OLED:** Pinii VCC se alimenteaza corespunzator, GND merge la masa comuna, SDA se conecteaza ​la pinul A4 (PC4 / TWI Data), iar SCL la pinul A5 (PC5 / TWI Clock). 
-  * **OLED** -> VCC la 3.3V sau 5V, GND la GND, SDA la pinul A4 (PC4), SCL la pinul A5 (PC5). +  * **Potentiometru (Navigatie):​** Pinii de margine sunt conectati ​la 5V si GND pentru a crea divizorul de tensiuneiar pinul central ​(Wipereste conectat ​la intrarea analogica A0 (PC0 / ADC Channel 0). 
-  * **PC/UART** -> Comunicatia seriala se realizeaza direct prin cablul USB via chip-ul convertor USB-Serial integrat pe placa Arduino.+ 
 +//Schema electrica 
 +{{ :​pm:​prj2026:​victor.stoica0203:​degeraturazvanproiectpm.png | }} 
 + 
 +// Videoclip demonstrativ  
 +https://www.youtube.com/​watch?​v=PE-LNIbtaL8
  
 ===== Software Design ===== ===== Software Design =====
  
   * **Mediu de dezvoltare:​** VS Code cu extensia PlatformIO (compilator avr-gcc).   * **Mediu de dezvoltare:​** VS Code cu extensia PlatformIO (compilator avr-gcc).
-  * **Abordare "​Bare-Metal":​** ​Se va evita folosirea bibliotecilor standard Arduino (precum `Wire.h`). Comunicatia I2C (TWI) va fi scrisa din registre (`TWCR`, `TWSR`, `TWDR`).  +  * **Abordare "​Bare-Metal":​** ​Nu se folosesc biblioteci externeToate protocoalele si driverele de periferic sunt scrise prin manipulare de registri
-  * **Concepte si algoritmi:​** +  * **Concepte si algoritmi ​din laboratoare:** 
-    * **I2C (Lab 6):** Setarea magistralei ca Master, adresarea corecta ​BME280 ​(ex: 0x76) si OLED (ex: 0x3C). +    * **Laboratorul 2 (Intreruperi):** Implementarea unei rutine de serviciu ​intreruperii ​(ISRatasata Timer-ului 1. Navigatia sistemului nu ruleaza secvential, ci asincron, asigurand fluiditatea tranzitiei ecranelor
-    * **Timere ​(Lab 2):** Folosirea ​Timer1/​Timer2 ​in mod CTC pentru a genera intreruperi ​hardware la intervale fixeevitand delay-urile blocante ​(`_delay_ms`). +    * **Laboratorul 3 (Timere):** Configurarea ​Timer1 in modul CTC cu un prescaler de 1024 si prag setat in OCR1A. Asigura ticaitul ​hardware ​precis ​la fiecare 100ms pentru esantionarea interfeteidecuplat de restul codului. 
-    * **UART (Lab 1):** Configurarea interfetei ​pentru ​debugging ​si interfata CLI; folosirea intreruperilor `RXCIE0` ​pentru ​preluarea comenzilor ​de pe PC.+    * **Laboratorul 4 (ADC):** Configurarea registrului ADMUX (referinta AVCC) si ADCSRA. Conversia este declansata regulat pentru a citi pozitia potentiometrului de navigare
 +    * **Laboratorul 6 (I2C):** Initializarea modulului TWI la o frecventa de 100kHz, gestionand secventele de START, STOP, Write si Read cu ACK/​NACK ​pentru ​display ​si senzorul BME280. 
 +    * **Memoria EEPROM:** Utilizarea registrelor EEAR, EEDR si EECR pentru ​a salva persistent istoricele absolute ​de Max/Min ale statiei.
  
-===== Rezultate Obţinute ​=====+===== Elemente de Noutate ​===== 
 +  * **Randare Grafica fara Framebuffer:​** In mod normal, ecranele OLED folosesc un buffer de 1024 bytes in RAM (jumatate din SRAM-ul ATmega328P). Proiectul implementeaza calcularea si afisarea grid-ului grafic strict matematic, trimitand octetii direct pe I2C fara stocare intermediara,​ optimizand memoria RAM. 
 +  * **Resetare Hardware din Software (EEPROM Wipe):** Am implementat o functie ascunsa de curatare a istoricului vechi. Daca utilizatorul tine potentiometrul rotit complet la dreapta (valoare ADC > 1010) continuu timp de 10 secunde, se declanseaza automat o rutina ce suprascrie zona de memorie EEPROM alocata cu valoarea `0xFF` si reseteaza statisticile,​ cu un mesaj de feedback vizual ("​RECORDS RESET!"​).
  
 +===== Metrici si Evaluare =====
 +**Metrici de performanță stabilite și îndeplinite:​**
 +  1. **Amprenta de memorie:** Obiectiv: sub 20% ocupare RAM. Prin scrierea la nivel de registre și renunțarea la framebuffer,​ utilizarea SRAM a scăzut drastic, lăsând spațiu liber pentru array-urile istorice.
 +  2. **Timpul de răspuns al interfeței:​** Obiectiv: <100ms lag. Măsurat prin setarea Timer1 să eșantioneze potențiometrul la 10Hz. Sistemul reacționează instant la rotirea potențiometrului.
 +  3. **Refresh Rate Stabil:** Menținerea unei bucle principale care redesenează ecranele grafice la ~20 FPS (asigurat prin `_delay_ms(50)`).
  
 +**Profilarea Codului:​** ​
 +Evaluarea codului s-a realizat prin testare unitară. Inițial, am validat transmisia I2C izolată către OLED trimițând octeți individuali din datasheet-ul SSD1306. Apoi am integrat rutinele complexe (formulele de calibrare Bosch pentru BME280 pe int32_t). Corectitudinea memoriei a fost validată prin întreruperea repetată a alimentării și verificarea citirii corecte din registrele EEPROM la repornire. Siguranța execuției a fost testată rulând stația non-stop timp de >12h.
  
-===== Concluzii ​=====+===== Planificare si Jurnal ​===== 
 +Munca a fost planificată modular, de la hardware spre software. ​
  
 +  * **Săptămâna 1:** Documentare documentații (Datasheets BME280, SSD1306), achiziție piese, realizarea schemei electrice de bază.
 +  * **Săptămâna 2:** Implementarea rutinei I2C pe baza laboratorului 6 și testarea conexiunii (ACK) cu ambele slave-uri de pe magistrală.
 +  * **Săptămâna 3:** Extragerea parametrilor de calibrare BME280 din ROM-ul senzorului. Setarea Timer-ului 1 și a ADC-ului pentru potențiometru.
 +  * **Săptămâna 4:** Dezvoltarea algoritmului de randare grafică fără framebuffer și logică de stocare Max/Min în registrele EEPROM.
 +  * **Săptămâna 5:** Implementarea secvenței de Reset EEPROM, asamblarea finală a componentelor și redactarea documentației Wiki.
  
 +===== Rezultate Obţinute =====
 +Am obtinut un sistem embedded complet, portabil si stabil. Potentiometrul permite selectarea a 5 ecrane distincte. Ecranele de grafica randeaza corect evolutia climatului, iar sistemul afiseaza permanent extremele inregistrate,​ fara artefacte vizuale, cu un consum minim de memorie si o implementare hardware curată, fără fire expuse haotic.
 +
 +===== Concluzii =====
 +Scrierea codului la nivel de registru a evidentiat avantajele optimizarii de spatiu si viteza specifice programarii low-level. Integrarea timerelor si a intreruperilor a permis decuplarea logicii de afisare de cea de achizitie. Sistemul rezultat confirma pe deplin ipoteza initiala, este robust, retine datele critic-istorice in mod nevolatil si reprezinta o aplicatie practica excelenta a conceptelor studiate.
  
 ===== Download ===== ===== Download =====
- +  ​Codul sursă complet al proiectului[[https://​github.com/​razvandegeratu/​StatieMeteo|Repository GitHub]]
- +
- +
-===== Jurnal ===== +
- +
-  ​**07 Mai 2026:** Stabilirea temei si a perifericelor (BME280, OLED). S-a clarificat functionalitatea interfetei UART ca CLI (Command Line Interface) pentru a atinge multiple concepte de laborator (Timere, I2C, USART cu intreruperi). Crearea structurii wiki si a BOM-ului.+
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
- 
   * Datasheet ATmega328P (Microchip).   * Datasheet ATmega328P (Microchip).
   * Datasheet Senzor BME280 (Bosch Sensortec).   * Datasheet Senzor BME280 (Bosch Sensortec).
-  * Datasheet Display OLED SSD1306. +  * Datasheet Display OLED SSD1306 ​(Solomon Systech)
-  * Laboratorul 1, si 6+  * Suport de Laborator PM 2026: Lab (Intreruperi),​ Lab 3 (Timere), Lab 4 (ADC), Lab (I2C).
pm/prj2026/victor.stoica0203/degeratu_razvan.1778155218.txt.gz · Last modified: 2026/05/07 15:00 by razvan.degeratu
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