Stație meteo "all-in-one" - Dinu Petruț

Dinu Petruț 334CD

Introducere

Prezentarea pe scurt a proiectului:

  • Ce face: citește temperatura, presiunea atmosferică și umiditatea folosind un modul BME280, le afișează pe un ecran LCD I²C, le salvează într-un fișier CSV pe un card microSD și le transmite live prin Serial Monitor.
  • Scopul: combină 4 interfețe embedded (ADC, I²C, 1-wire, SPI + UART) într-un sistem funcțional, ușor de extins pentru orice aplicație IoT.
  • Ideea de la care am pornit: construirea unui sistem practic care să integreze în mod real conceptele studiate la laborator (măsurători analogice și digitale, comunicații seriale și stocare pe card) într-un singur dispozitiv funcțional.
  • Utilitate: soluție portabilă de monitorizare ambientală și logging.

Descriere Generală

 Schema bloc

Proiectul este o staţie meteo portabilă care:

  • măsoară temperatura, presiunea atmosferică şi umiditatea
  • procesează valorile pe un Arduino Uno R3
  • afișează date pe un ecran LCD şi un LED RGB
  • trimite măsurătorile pe interfaţa serială USB
  • salvează datele pe un card MicroSD

1. Hardware Modules

  • Data Acquisition
    • Termometru – măsoară temperatura ambientă
    • Barometru – măsoară presiunea atmosferică
    • Humidity Sensor – măsoară umiditatea relativă
  • Processing (Arduino Uno R3)
    • Unitate centrală care citeşte semnalele de la senzori şi rulează logica software
  • User Interface
    • LCD Display – afișează valorile măsurate
    • RGB LED – indică starea sistemului (verde = OK, roşu = alertă)
  • Storage
    • MicroSD Card – arhivează periodic datele

2. Software Modules (pe Arduino Uno R3)

  • Sensor Drivers
    • Biblioteci pentru citirea datelor brute (ADC, I²C)
  • Data Processing Algorithm
    • Conversie ADC → unităţi fizice (°C, hPa, %)
    • Verificare praguri şi calcul medii/tendinţe
  • Display Driver
    • Actualizează textul şi layout-ul pe LCD
  • LED Control
    • Configurează pin-ii PWM pentru LED RGB
    • Setează culoarea după starea valorilor
  • SD Logging Module
    • Deschide şi scrie fişiere CSV pe cardul MicroSD
  • Serial Communication Module
    • Transmite date în timp real prin USB-Serial

Hardware Design

Lista componentelor principale

  1. Arduino Uno R3
  2. GY-BME280-3.3 (senzor temperatură, presiune, umiditate)
    • VCC → 3.3 V
    • GND → GND
    • SDA → A4
    • SCL → A5
  3. LCD 16×2 cu interfaţă I²C
    • VCC → 5 V
    • GND → GND
    • SDA → A4
    • SCL → A5
  4. Modul microSD-card (SPI + level-shifter) + card microSD 32 GB
    • VCC → 5 V
    • GND → GND
    • CS → D10
    • MOSI → D11
    • MISO → D12
    • SCK → D13
  5. Conexiune USB-Serial (UART)
    • TX/RX integrate → Serial Monitor 115200 baud
  6. Modul RTC DS3231
    • VCC → 5 V
    • GND → GND
    • SDA → A4
    • SCL → A5
  7. Senzor capacitiv TTP223
    • VCC → 5 V
    • GND → GND
    • OUT → D2
  8. Led RGB
    • R-pin → Rezistor 220 Ω → D4
    • G-pin → Rezistor 220 Ω → D5
    • B-pin → Rezistor 220 Ω → D6
    • Cathode (–) → GND

Schema electrică

 Schema electrică

Pentru că nu am găsit componentele pe Wokwi, am realizat următoarele modificări hardware:

  • Am înlocuit senzorul BME280 (care măsura temperatura, umiditatea și presiunea) cu un senzor DHT22, care măsoară doar temperatura și umiditatea și am folosit un potențiometru pentru a ajusta presiunea.
  • În locul senzorului tactil TTP223, am folosit un buton pushdown simplu pentru a simula interacțiunea utilizatorului.

Software Design

Mediu de dezvoltare: Arduino IDE

Librării folosite:

  • Wire.h - comunicare I2C
  • SPI.h - comunicare SPI
  • SD.h - interfață SD-card
  • Adafruit_Sensor.h - framework comun pentru senzori Adafruit
  • Adafruit_BME280.h - BME280 (temperatură, umiditate, presiune)
  • LiquidCrystal_I2C.h - afișaj LCD I2C 16×2
  • RTClib.h - RTC DS3231

Sistemul are 6 moduri între care se poate comuta la apăsarea butonului tactil. Trecerea de la un mod la altul este liniară (0 → 1 → 2 → 3 → 4 → 5 → 0), iar modurile sunt:

  • mode_0 (Temperatură): Se măsoară temperatura curentă cu BME280. Pe LCD apare „Temperature” și valoarea actuală în °C. Este transmis și în Serial Monitor.
  • mode_1 (Prag): Se citește valoarea pragului de temperatură de la potențiometrul conectat pe A0 (0–50 °C). Pe LCD apare „Threshold” și valoarea. Este transmis și în Serial Monitor.
  • mode_2 (Umiditate): Afișează umiditatea relativă (%) de la BME280 pe LCD („Humidity: xx.x %”) și în Serial Monitor.
  • mode_3 (Presiune): Afișează presiunea atmosferică (hPa) de la BME280 pe LCD („Pressure: xxxx.x hPa”) și în Serial Monitor.
  • mode_4 (Ceas digital): Afișează ora în format HH:MM cu cifre mari pe LCD, folosind caractere speciale (big digits). Ora este preluată de la RTC DS3231.
  • mode_5 (Dată și zi): Afișează ziua curentă a săptămânii și data în format „DD/MM/YYYY”. Informația vine de la RTC DS3231 și apare și în Serial Monitor.

În plus, sistemul oferă:

  • Alertă temperatură: Dacă temperatura depășește pragul setat:
    • LED-ul de pe pinul 7 (roșu) se aprinde, iar cel verde se stinge
    • Pe LCD apare mesajul:

!!! TEMP ALERT !!! T > prag °C

  • Mesajul rămâne afișat 2 secunde, apoi LCD-ul se curăță
  • Avertizarea este transmisă și în Serial Monitor
  • Logare pe SD (log.csv): Se acumulează un eșantion pe secundă pentru:
    • Temperatura
    • Umiditate
    • Presiune
  La fiecare 10 secunde:
  * Se calculează mediile
  * Se scrie în fișierul `log.csv` sub forma:
    YYYY-MM-DD,HH:MM:SS,tAvg,hAvg,pAvg
  * Dacă fișierul este gol, se adaugă antetul:
    Date,Time,Temp,Hum,Pres
  * Se resetează acumulările și contorul
  * Se afișează mesajul „Saved to SD !” pe LCD timp de 1 secundă

Rezultate Obţinute

Concluzii

Stația meteo prezentată reușește să integreze concepte esențiale din domeniul sistemelor embedded și să le transforme într-un instrument practic, ușor de extins și aplicabil în scenarii reale de monitorizare IoT.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Resurse Software

Resurse Hardware

Export to PDF

pm/prj2025/fstancu/mihaita_petrut.dinu.txt · Last modified: 2025/05/27 18:55 by mihaita_petrut.dinu
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