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.
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:
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:
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 |
Totusi, va asigur ca azi chiar a fost soare afara! :)
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.