Weather Forecast System

Introducere

Proiectul ales este reprezentat printr-un sistem IoT de predictie a vremii. Sistemul va colecta informatii despre temperatura, presiune, altitudine, pe care le va afisa pe ecranul unui LCD si le va trimite catre platforma Thingspeak, pentru a realiza statistici si grafice. Apoi, cu ajutorul algoritmului de forecasting Zambretti, se va genera o predictie pe termen scurt a starii atmosferice locale.

Sistemul este util pentru ca permite predictia prognozei meteo exact la locatia dorita de utilizator, optiunile existente de vizionare a vremii colectand date pe o arie mult mai mare, ce le poate face imprecise. Sistemul are o utilitate mare in special in domeniul agricol, putand fii folosit pentru a colecta date din sere, plantatii, etc.

Descriere generala

Schema bloc

Hardware Design

Lista de piese

  • Plăcuță de dezvoltare Arduino Uno
  • LCD Keypad Shield (LCD 1602 cu Keypad)
  • Senzor BMP280 – sensor de temperatură, presiune și altitudine
  • Modul Wi-Fi ESP8266 ESP-01
  • Modul Tiny RTC DS1307z

Schema electrica

Am renuntat la modulul RTC pentru ca nu aveam cristal de cuart, ceea ce facea modulul sa nu updateze timpul corect.

Software Design

Flow-ul programului

Din cauza faptului ca modulul Tiny RTC nu a functionat am facut un artificiu in functia loop(), in care am introdus un delay de o secunda si am setat 2 contori care tin cont de index-ul loop-ului curent (simuland astfel calculul secundelor). Acest mod de numarare nu este cel mai precis, insa in cazul de fata nu avem nevoie de precizie foarte mare a ceasului pentru calcularea variatiei presiunii.

Algoritmul Zambretti

Algoritmul Zambretti este singurul algoritm public pentru interpretarea si prognoza starii atmosferice, avand o acuratete de aproximativ 90%.

Parametrii de intrare ai algoritmului sunt: anotimpul, presiunea redusă la nivelul mării, tendința barometrică, emisfera și direcția vântului. Algoritmul este unul empiric, acesta fiind creat pentru emisfera nordică și, în special, Marea Britanie.

În urma unei analize amănunțite asupra algoritmului, am ajuns la concluzia că direcția vântului are un efect aproape insesizabil asupra rezultatului, ceea ce este un lucru bun deoarece senzorul de direcție al vântului în mediul urban este greu de utilizat (și destul de scump).

Cu ajutorul senzorului BMP280, obținem temperatura și presiunea, dar presiunea relativă la nivelul mării trebuie să fie derivată din presiunea de la nivelul stației. Există multe formule pentru acest lucru, însă cea pe care am folosit-o este următoarea:

unde:

  • P0 - presiunea redusă la nivelul mării
  • P - presiunea măsurată la nivelul stației (în hectopascali)
  • h - altitudinea în metrii
  • T - temperatura în grade Celsius

Problema majoră este obținerea exactă a altitudinii. Senzorul pe care îl folosesc returnează altitudinea aproximativă, dar aceasta se bazează pe presiunea barometrică și este afectată de aceasta. Pentru a obține presiunea relativă exactă avem nevoie de presiunea și altitudinea exactă a stației, dar pentru a obține altitudinea avem nevoie de presiunea relativă exactă. După câteva experimente, s-a dovedit că dacă folosim senzorul pentru obținerea altitudinii, presiunea redusă la nivelul mării rămâne aproximativ constantă – acest efect este datorat faptului că dacă presiunea își schimbă valorile și altitudinea urmărește aceleași schimbări. Pentru a rezolva această problemă, avem două opțiuni:

  • colectăm date pentru presiunea barometrică pentru o perioadă prelungită de timp și folosim valoarea medie
  • folosim altitudinea aproximativă introdusă de utilizator

Ambele abordări au anumite limitări - prima are nevoie de mult timp pentru a strânge datele și memorie alocată în prealabil, iar a doua are nevoie ca utilizatorul să cunoască altitudinea și dispozitivul să aibă o interfață de introducere pentru ea.

Determinarea tendinței de presiune barometrică s-a dovedit a fi o provocare, deoarece sursele spun doar “în creștere”, “cădere” și “stabilă”, dar acești termeni nu sunt definiți. În alte surse ce nu sunt conectate la algoritmul Zambretti, tendința este definită ca schimbarea presiunii cu 1-3 unități în hectopascali pentru o perioadă de una până la trei ore. Utilizând aceste informații, abordăm problema în felul următor: retinem presiunea la nivelul mării la fiecare 10 minute într-un vector. Când vectorul este umplut, calculăm tendința ca fiind diferența dintre media primelor trei elemente și ultimele trei. Vectorul este folosită ca o coadă, unde a unsprezecea valoare se duce la a 10-a poziție, iar prima este suprascrisă și așa mai departe.

Algoritmul Zambretti returnează un număr (Z) ce trebuie comparat cu un tabel ce conține descrierea prognozei. Asocierile coeficientului Zambretti cu textul afișat pe display sunt prezentate în următoarele tabele:

Presiune in scadere
Vreme bună, stabilă Sunny
Vreme bună Sunny
Vreme bună ușor instabilă Overcast
Vreme destul de bună, posibile ploi Overcast
Ploios, cu tendință de instabilitate Cloudy
Instabilă, ploi mai târziu Worsening
Ploi periodice, urmează a se înrăutății Worsening
Ploi periodice, devenind foarte instabilă Rainy
Foarte instabilă, ploi Rainy
Presiune stabila
Vreme bună, stabilă Sunny
Vreme bună Sunny
Vreme bună, posibile ploi Overcast
Vreme destul de bună, posibile ploi Overcast
Ploi scurte Worsening
Schimbabilă, posibile ploi Worsening
Instabilă, ploi Rainy
Foarte instabilă, ploi Rainy
Furtunos, foarte multă ploaie Rainy
Presiune in crestere
Vreme bună, stabilă Sunny
Vreme bună Sunny
Devine stabilă Overcast
Destul de bună, se îmbunătățește Overcast
Destul de bună, posibile ploi Cloudy
Ploi, se îmbunătățește Rainy
Tendințe de schimbare Cloudy
Destul de instabilă, se îmbunătățește Cloudy
Instabilă, posibilă tendință de îmbunătățire Cloudy
Instabilă, intervale scurte de ploi Cloudy
Foarte instabilă, stabilă din când în când Worsening
Furtuni, tendință de îmbunătățire Worsening
Furtuni, foarte multă ploaie Worsening

Rezultate Obţinute

Aici ar fi fost util un tabel cu starea vremii pe parcursul unei saptamani, pentru a determina acuratetea implementarii. Din pacate, pentru ca am terminat proiectul abia in dimineata deadline-ului nu a fost posibil acest lucru.

Totusi, va asigur ca azi chiar a fost soare afara! :)

Design hardware

Thingspeak

Demo

Concluzii

Proiectul nu este cel mai complex din punct de vedere hardware, dar sper ca modulul WiFi (care a fost mai fragil decat stima mea de sine) sa compenseze pentru lipsa de complexitate.

Nu am date concrete care sa determine acuratetea implementarii, dar avand in vedere faptul ca scopul proiectului a fost mai mult cel de proof of concept, consider ca algoritmul isi face treaba.

Posibile imbunatatiri

  • Adaugarea unui RTC functional pentru un calcul precis al timpului
  • Adaugarea unui senzor de altitudine mai precis decat BMP280
  • Adaugarea unui senzor de directie a vantului (desi impactul nu ar fi major)
  • Colectarea datelor de presiune in vector pe un interval mai dispersat (eg. o data la 10 minute)

Download

Bibliografie/Resurse

pm/prj2021/abirlica/weather_forecast.txt · Last modified: 2021/06/04 13:00 by geanina_maria.sandu
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