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).
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:
În loop(), funcționalitățile interacționează în următorul mod:
Se citesc datele locale;
Se preiau date externe de pe Internet, exemplu OpenWeather;
Se afișează toate datele, locale și externe pe ecranul TFT;
Se trimit datele către serverele cloud;
Se așteaptă 20 de secunde pentru un nou ciclu de actualizare.
Validarea funcționării
Validare prin consola serială, sunt afișate în consolă datele citite și URL-urile trimise către servere;
Validare vizuală prin ecranul TFT, unde datele locale și cele externe sunt afișate distinct pe ecran;
Validare prin platformele externe, accesând contul ThingSpeak sau Weather Underground, utilizatorul poate vizualiza graficele actualizate în timp real, ceea ce confirmă că datele au fost transmise cu succes.
Rezultate obținute
În urma implementării și testării proiectului, au fost obținute următoarele rezultate:
Citirea corectă a datelor locale de la senzorii DHT22 (temperatură și umiditate), BMP280 (presiune atmosferică) și senzorul UV analogic;
Afișarea pe ecranul TFT a datelor colectate local, alături de datele meteorologice preluate de la serviciul OpenWeather, în format lizibil și structurat;
Obținerea datelor externe prin conexiune WiFi și API-uri HTTP de la OpenWeatherMap;
Transmiterea cu succes a datelor către ThingSpeak și Weather Underground;
Valorile UV pot varia brusc din cauza fluctuațiilor de lumină ambientală, ceea ce poate necesita un algoritm de stabilizare.
Concluzii
În concluzie, proiectul propus demonstrează un sistem funcțional, robust și capabil să furnizeze utilizatorului date meteo complete, combinând surse proprii de măsurare cu informații din surse externe. Interacțiunea dintre componente: ESP8266, senzori, ecran TFT, conexiune WiFi și API-uri externe este bine sincronizată și validată prin teste practice. Acest lucru arată că proiectul este complex din punct de vedere tehnic și poate fi utilizat ca bază pentru proiecte mai avansate sau implementări reale.