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 14:40]
razvan.degeratu created
pm:prj2026:victor.stoica0203:degeratu_razvan [2026/05/19 12:10] (current)
razvan.degeratu
Line 1: Line 1:
-====== ​Stație ​Meteo "​Smart" ​cu Interfață Duală (CLI și OLED) ======+====== ​Statie ​Meteo cu Navigatie prin Intreruperi ​======
  
 ===== 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 stație meteorologică capabilă să citească temperatura,​ umiditatea și presiunea atmosferică din mediul ambiant. Datele sunt afișate local pe un ecran OLED, dar sunt și trimise simultan către un PC prin intermediul interfeței UARTMai multstația dispune ​de o interfață de tip Command Line (CLI) prin care utilizatorul poate trimite comenzi de la PC pentru a interoga istoricul măsurătorilor, 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 recordurile climatice chiar si dupa intreruperea alimentarii.
-Scopul este de a construi ​un sistem ​complet ​de telemetrie ​și achiziție de datedemonstrând interconectarea mai multor periferice (I2C pentru senzori/​displayTimer pentru scheduling, USART pentru comunicație PC). Codul va fi scris "​bare-metal"​ în C pe arhitectura ATmega328Pfără 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 să depășesc stadiul unei simple stații care doar afișează numere pe un ecran, adăugând componenta de conectivitate cu PC-ul pentru posibilitatea de data logging. Astfel, am îmbinat necesitatea măsurării fizice (I2C) cu interacțiunea software avansată (UART + Întreruperi). +
- +
-**Utilitate:​** ​ +
-Proiectul este util pentru monitorizarea ​microclimatului ​dintr-o cameră, iar datele trimise prin UART pot fi preluate ușor de scripturi externe ​pe PC pentru a genera grafice în timp real. +
- +
-===== Descriere generală ===== +
- +
-Arhitectura proiectului este de tip Master-Slave pe I2C pentru componentele fizice și Client-Server simplu ​prin UART pentru interfața ​cu PC-ul. +
-  * **Microcontrolerul (Master):** Un Arduino cu ATmega328P folosește un Timer hardware pentru a da ritmul aplicației,​ trezind sistemul periodic pentru a face citiri. +
-  * **Modul BME280 (I2C Slave 1):** Preia datele fizice brute și le transmite microcontrolerului. +
-  * **Display OLED (I2C Slave 2):** Primește datele formatate de la microcontroler și le afișează. +
-  * **PC (Interfață UART):** Acționează ca un terminal de unde se pot da comenzi (via întreruperi de recepție RX) și unde se primesc log-urile de la stație (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" ]+
  
 +===== Descriere generala =====
 +Sistemul este organizat in jurul microcontrolerului ATmega328P, care gestioneaza perifericele in mod concurent:
 +  * **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 a bloca procesarea grafica.
 +  * **Modul BME280 (I2C Slave 1):** Preia schimbarile fizice de temperatura,​ presiune si umiditate si le transmite digital prin protocolul I2C.
 +  * **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.
 +  * **Interfata de Control (Potentiometru):​** Genereaza o tensiune variabila (0-5V) citita de modulul ADC intern al microcontrolerului,​ mapata direct pe indexul ecranului selectat.
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
 **BOM (Bill Of Materials):​** **BOM (Bill Of Materials):​**
-  * Placă ​de dezvoltare Arduino Uno sau Nano (ATmega328P) - 1 buc. +  * Placa de dezvoltare Arduino Uno (microcontroler ​ATmega328P) - 1 buc. 
-  * Senzor de mediu BME280 (Temperatură, 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. 
-  * Breadboard (Placă ​de teste) - 1 buc.+  * Potentiometru liniar (10k Ω) pentru navigare ​- 1 buc. 
 +  * Breadboard (Placa de teste) - 1 buc.
   * Fire de conexiune (Jumper wires) - 1 set.   * Fire de conexiune (Jumper wires) - 1 set.
  
-**Schema ​Electrică ​(Conexiuni principale):​** +**Schema ​Electrica ​(Conexiuni principale):​** 
-Deoarece ​magistrala I2C împarte aceleași firecomponentele se leagă în paralel la pinii dedicați 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 (în funcție 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** -> Comunicația serială se realizează direct prin cablul USB via chip-ul convertor USB-Serial integrat pe placa Arduino.+
  
 ===== 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`). Comunicația I2C (TWI) va fi scrisă din registre (`TWCR`, `TWSR`, `TWDR`).  +  * **Abordare "​Bare-Metal":​** ​Nu se folosesc biblioteci externe ​(ex: Wire.h ​sau Adafruit_SSD1306). Toate protocoalele si driverele de periferic sunt scrise prin manipulare de registri
-  * **Concepte ​și algoritmi:​** +  * **Concepte ​si algoritmi ​din laboratoare:** 
-    * **I2C (Lab 6):** Setarea magistralei ca Masteradresarea corectă ​BME280 ​(ex0x76și OLED (ex0x3C). +    * **Laboratorul 2 (Intreruperi):** Implementarea unei rutine de serviciu a intreruperii (ISR) atasata Timer-ului 1. Navigatia sistemului nu ruleaza secventialci este asincrona, intrerupand executia buclei principale pentru ​asigura fluiditatea tranzitiei ecranelor. 
-    * **Timere ​(Lab 2):** Folosirea Timer1/Timer2 în mod CTC pentru a genera întreruperi hardware la intervale fixeevitând delay-urile blocante ​(`_delay_ms`). +    * **Laboratorul 3 (Timere):** Configurarea Timer1 in modul CTC (Clear Timer on Compare Matchcu un prescaler de 1024 si prag setat in OCR1A. Acesta asigura ticaitul hardware precis la fiecare 100ms pentru esantionarea interfetei. 
-    * **UART (Lab 1):** Configurarea interfeței pentru debugging și interfață CLI; folosirea întreruperilor `RXCIE0` pentru preluarea comenzilor ​de pe PC.+    * **Laboratorul 4 (ADC):** Configurarea registrului ADMUX (referinta AVCCsi ADCSRA (prescaler 128 pentru rezolutie maxima de 10 biți). Conversia este declansata in interiorul ISR-ului pentru a citi pozitia potentiometrului
 +    * **Laboratorul 6 (I2C):** Initializarea modulului TWI din registrele TWBR si TWSR la o frecventa de 100kHz, gestionand secventele de START, STOP, Write si Read cu ACK/NACK pentru ecran si senzor. 
 +    * **Stocare Persistenta (EEPROM):** Utilizarea registrelor EEAR, EEDR si EECR pentru a salva si citi persistent recordurile istorice absolute de Max/Min ale statieiimplementand un algoritm de auto-recalibrare la prima pornire dintr-o stare virgina ​(0xFF). 
 +    * **Algoritmul de Grafica:** Shiftarea in timp real a array-urilor ​de istoric (scrolling efect) si utilizarea operatiilor ​pe biti (bitwise shifting) pentru a randa barele verticale ale graficului peste un grid punctat pre-calculat.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
- +S-a obtinut un sistem embedded complet si stabil. Potentiometrul permite selectarea a 5 ecrane distincte ​(Intro, Date Live, Grafic Temp, Grafic Presiune, Grafic Umiditate). Ecranele de grafica randeaza corect evolutia pe 128 de puncte, iar pe randul secundar afiseaza din EEPROM extremele inregistrate (Max si Min) cu o precizie stabila de doua zecimale, fara artefacte vizuale sau pâlpâiri (flicker), datorita managementului corect al functiei de clear selectiv.
-*(Se va completa la Etapa 3)*+
  
 ===== Concluzii ===== ===== 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 este robust, retine datele critic-istorice in mod nevolatil si reprezinta o aplicatie practica completa a conceptelor de interactiune hardware-software studiate.
-*(Se va completa ​la finalul proiectului)*+
  
 ===== Download ===== ===== Download =====
  
-*(Se va completa la final cu arhiva codului și schemele pdf)* 
  
 ===== Jurnal ===== ===== Jurnal =====
  
-  * **07 Mai 2026:** Stabilirea temei și a perifericelor (BME280, OLED). S-a clarificat funcționalitatea interfeței UART ca CLI (Command Line Interface) pentru a atinge multiple concepte de curs (Timere, I2C, USART cu întreruperi). Crearea structurii wiki și a BOM-ului.+
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
Line 75: Line 61:
   * 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, 2 și 6 de la cursul ​PM.+  * Suport ​de Laborator ​PM 2026: Lab 2 (Intreruperi),​ Lab 3 (Timere), Lab 4 (ADC), Lab 6 (I2C).
pm/prj2026/victor.stoica0203/degeratu_razvan.1778154008.txt.gz · Last modified: 2026/05/07 14:40 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