This is an old revision of the document!


Weather Station

Introducere

Prezentare Weather Station Acest proiect este o stație meteo care măsoară o serie de parametri de mediu, precum temperatura, umiditatea, presiunea atmosferică și indicele UV. Sistemul are un panou LCD care afișează aceste informații și le compară cu datele în timp real de pe site-ul OpenWeather. De asemenea, stația trimite informațiile colectate în timp real către două platforme online: WeatherUnderground — unde am creat propria mea stație — și ThingSpeak, unde compar informațiile stației mele cu cele de pe OpenWeather. Scopul acestui proiect este de a crea o stație meteo funcțională, care să monitorizeze condițiile atmosferice locale în timp real și să permită comparația acestora cu datele furnizate de servicii externe. Ideea a pornit din dorința de a crea o stație meteo personalizată, care să funcționeze independent și să trimită date online.

Descriere generală

Proiectul conține următoarele module necesare pentru funcționarea acestuia:
  • senzori care colectează informații din mediul înconjurător și trimit valorile către unitatea de control (ESP8266): de temperatură, presiune, umiditate si UV;
  • Unitatea de control – NodeMCU ESP8266, care primește datele de la senzori, le procesează și le afișează pe ecranul LCD, le trimite prin Wi-Fi către platformele WeatherUnderground și ThingSpeak și obține date meteo externe de la OpenWeather pentru comparație;
  • Panou de afișare – TFT LCD, care afișează valorile măsurate;
  • Surse de alimentare - trei baterii AA de 1.5V (în total 4.5V) alimentează placa NodeMCU și senzorii;
  • Platformele online: WeatherUnderground, ThingSpeak și OpenWeather de unde se preiau și se prelucrează valorile măsurate.

Senzorii trimit date către ESP8266 → ESP le afișează pe LCD și le trimite prin Wi-Fi către platformele web → În paralel, ESP primește date de la OpenWeather → Compară valorile locale cu cele externe → Totul este alimentat de baterii, iar rezultatul este vizibil atât local (pe ecran), cât și online (în cloud).

diagrama_pm.jpg

Hardware Design

Lista de componente:

schema_electrica_pm.jpg

Schema electrica:

Descrierea funcționalității hardware:

Proiectul conține doi senzori analogi (DHT22 + Senzor UV) care se leagă la microcontroller-ul utilizat prin intermediul ADC. De asemenea, senzorul de presiune comunică prin intermediul interfeței I2C, iar microcontroller-ul transmite informații către ecranul LCD prin SPI.

Detalierea pinilor folosiți:

Pentru DHT22, am utilizat:

  • Pinul VCC pentru alimentare;
  • Pinul GND pentru masă;
  • Pinul OUT pentru transmiterea datelor către microcontroller.

Pentru Senzorul UV:

  • Pinul VCC pentru alimentare;
  • Pinul GND pentru masă;
  • Pinul OUT pentru transmiterea datelor către microcontroller.

Pentru senzorul BME280 de presiune:

  • Pinul VCC pentru alimentare;
  • Pinul GND pentru masă;
  • Pinul SDA (Serial Data) pentru a transmite datele de la senzor către microcontroller;
  • Pinul SCL (Serial Clock) pentru a transmite semnalul de ceas care sincronizează datele;
  • Ultimii doi pini sunt esențiali pentru conectarea prin intermediul interfeței I2C.

Pentru ecranul TFT LCD:

  • Pinul VCC pentru alimentare;
  • Pinul GND pentru masă;
  • Pinul CS (Chip Select) pentru a configura ecranul pe magistrala SPI;
  • Pinul RESET care resetează ecranul la pornire, aspect esențial pentru inițializare;
  • Pinul DC (Data/Command) care comută intre modul de comandă și date;
  • Pinul SDI sau MOSI (Master Out Slave In) care trimite date de la microcontroller la ecran;
  • Pinul SCK (Serial Clock) care reprezintă semnalul de ceas SPI, folosit pentru sincronizarea datelor;
  • Pinul LED care activează iluminarea ecranului și este alimentat la 3V;
  • Pinul SDO sau MISO (Master in Slave Out) care trimite date de la ecran către microcontroller;

Pentru microcontroller-ul ESP8266:

  • Pinul VIN este folosit pentru alimentarea microcontroller-ului;
  • Pinul G este folosit pentru conectarea la masă;
  • Pinul 3V este folosit pentru alimentarea celorlalte componente;
  • Pinul A0 (ADC0) este folosit pentru citirea intrărilor analogice;
  • Pinul D1 (GPIO5) este folosit pentru conectarea prin SCL cu senzorii I2C;
  • Pinul D2 (GPIO4) este folosit pentru conectarea prin SDA cu senzorii I2C;
  • Pinul D3 (GPIO0) are o folosire generală;
  • Pinul D4 (GPIO2) are o folosire generală;
  • Pinul D5 (GPIO14) este folosit pentru conectarea la SPI Clock (SCK);
  • Pinul D6 (GPIO12) este folosit pentru conectarea la SPI MISO, dar și în mod general pentru că poate să nu fie conectat la ecrane;
  • Pinul D7 (GPIO13) este folosit pentru conectarea la SPI MOSI;
  • Pinul D8 (GPIO15) este folosit pentru conectarea pinul CS al ecranului;

Software Design

Descrierea codului aplicaţiei (firmware):
  • din punctul de vedere al bibliotecilor folosite, cea pe care am folosit-o pentru a realiza acest proiect este ESP8266WiFi, pentru a realiza legatura microcontroller-ului prin WiFi cu aplicatiile de unde extrage informatii;
  • elementul de noutate al proiectului consta in faptul ca aceasta statie meteo poate fi considerata una flexibila, intrucat este usor de folosit in orice mediu, fiind un dispozitiv de dimensiuni mici. De asemenea, in cazul in care unul dintre senzorii statiei masoara datele eronat sau ajunge sa fie defectuat, statia afiseaza si informatii despre vreme preluate de pe OpenWeather, astfel incat utilizatorul primeste mereu datele corecte;
  • functionalitatile pe care le-am folosit in proiect, din cadrul laboratorului, sunt legate de utilizarea senzorului de temperatura prin intermediul ADC-ului, al celui de presiune prin I2C, iar al ecranului LCD prin SPI;
Scheletul proiectului, care este organizat în patru componente principale:
  • Inițializare hardware și conexiuni (WiFi, senzori, ecran TFT) – setup(), unde se configurează:
    • conexiunea la rețeaua WiFi - WiFi.begin(…);
    • inițializarea senzorilor, precum DHT22 - dht.begin();
    • inițializarea ecranului TFT - tft.begin().
  • Achiziția datelor locale de la senzori – loop(), unde se colectează datele prin următoarele linii:
    • float tempDHT = dht.readTemperature();
    • float humDHT = dht.readHumidity();
    • float pressureBMP = bmp.readPressure();
  • Preluarea datelor externe de la OpenWeather – getWeatherData() și getUVIndexFromOpenWeather();
  • Transmiterea datelor către platforme externe:
    • pentru ThingSpeak am utilizat urmatorul cod
pm/prj2025/ajipa/mihnea_stefan.voicu.1748164772.txt.gz · Last modified: 2025/05/25 12:19 by mihnea_stefan.voicu
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