News:

Da oggi il forum di Meteo Trentino Alto Adige rinnova la sua veste grafica e diventa responsive!

Menu principale

Nivometro automatico ad ultrasuoni

Aperto da AltoGardameteo, Dom 31 Dicembre, 2017, 13:20:09

Discussione precedente - Discussione successiva

0 Utenti e 2 Visitatori stanno visualizzando questa discussione.

AltoGardameteo

Apro questo topic per discutere del tema che da un paio di annetti mi attira, ma che finora non avevo mai approfondito.

Ora, parlando con Meteoballino l'altro ieri, ho saputo che con il micro-computer Arduino ed uno dei suoi innumerevoli sensori opzionali, si può realizzare un nivometro automatico ad ultrasuoni con davvero pochi euro.

http://www.san-basilio.it/index.php?option=com_content&view=article&id=67:sensore-per-cm-neve-caduta&catid=81&Itemid=579

http://www.giuseppecaccavale.it/arduino/sensore-ad-ultrasuoni-hc-sr04-arduino/

Sarebbe una figata poterlo realizzare e magari mettere online !

Chiedo dunque a Luca se c'è qualcuno che ci sta già smanettando ed a che punto sono  ;)

Meteo Ballino

Ciao! Appena ho un attimo di tempo posto volentieri qualcosina sul progetto che ho iniziato! Purtroppo ho avuto alcuni problemi con la wifi shield quindi a breve ne ordinerò un'altra (questo per mettere i dati online). Nel frattempo con Arduino senza connessione ad internet funziona tutto egregiamente! La cosa positiva di tutto ciò è sicuramente il prezzo, visto che l'HC-SR04 (il sensore ad ultrasuoni) costa 5€ scarsi, poi ovvio c'è anche Arduino da acquistare ma si parla veramente di prezzi irrisori. Stasera se riesco vi spiego un po'! :ciao:
Studente di Ingegneria per l'Ambiente e il Territorio - UniTN


AltoGardameteo

Ah cavolo, non avevo capito che fossi già all'opera e addirittura in fase di test  :o ;)

Ottimo  :cincin:

Meteo Ballino

Eccomi qua  :D

Schema del collegamento che ho eseguito:


Come noterete nulla di complicato, ci sono solo 4 "cavetti", 1 dei quali è l'alimentazione 5 volt, l'altro la massa, e gli altri 2 sono i pin digitali del sensore. Un pin che serve per inviare gli impulsi di ultrasuoni ad una frequenza di 40 Hz (TRIG), mentre l'altro (ECHO) riceve gli ultrasuoni precedentemente inviati. Il lavoro di Arduino è proprio quello di gestire questo sensore e calcolare il lasso di tempo compreso tra il momento in cui vengono inviati e ricevuti gli ultrasuoni. Questo permetterà poi con una semplice formula di calcolare lo spazio. Per ottenere valori più precisi esistono delle apposite librerie che permettono di effettuare 2 o più misurazioni in modo consecutivo e facendone la media si ricava una misurazione più attendibile.

Veniamo alla formula.
s (spazio) = t (tempo) * v (velocità)

Noi il tempo lo conosciamo, perché abbiamo effettuato la misurazione con il sensore. Dobbiamo tenere conto però che il sensore ci restituisce (tempo*2) perché gli ultrasuoni devono partire, riflettere contro l'oggetto e ritornare, quindi effettuano "andata e ritorno". Basta un bel /2 e la questione t è risolta.

La velocità la conosciamo? Si, perché sappiamo che un suono si propaga in aria alla velocità 343,8 m/s a 20°C, ma anche a 331 m/s se la temperatura corrisponde a 0°C. Quindi per rilevare lo spazio ancora più preciso servirebbe un termometro all'altezza del nivometro e un altro termometro sulla superficie del manto nevoso, così facendo una media delle due temperature si riuscirebbe a conoscere la temperatura media abbastanza precisa di tutto lo strato d'aria che viene attraversato dalle onde. C'è da dire che la neve a 20°C non resisterebbe, quindi approssimando potremmo considerando la temperatura dell'aria pari a -1°C circa oppure prendere la temperatura misurata dalla propria stazione meteo e togliere 1-2°C visto che tendenzialmente in inverno al suolo è più freddo.

Comunque sia questa è la formula per calcolare la velocità del suono in base alla temperatura:
v = (331,45 + (0,62 * T (temperatura espressa in °C)) m/s

A questo punto basta applicare la formula precedente. Basta stare attenti alle unità di misura. Per ottenere il risultato in cm questa è la formula:
spazio = (((331.45 + (0.62 * temperatura)) * (durataMedia(ossia la media delle 5 misurazioni effettuate dal sensore) / 2))/10000)

Non è ancora finita però, infatti con questo procedimento otteniamo lo spazio tra il sensore e la neve, non tra il punto più alto del manto nevoso ed il terreno. Basta una semplice differenza!
altezza neve = altezza dal suolo del nivometro - spazio ottenuto con la formula

Poi per mettere i dati online dipende da situazione a situazione, secondo me la soluzione migliore è acquistare una wifi schield che si connette al wifi e mediante una richiesta http fa eseguire al server a cui l'ha fatta una paginetta php che prende il dato e poi lo elabora a piacimento, magari creando un file txt o in altro formato, comodo da utilizzare possibilmente.

Spero di esser stato sufficientemente chiaro  ;D

Un po' di foto ...




Questo è il codice che caricato su Arduino restituisce la distanza in cm tra il nivometro e l'oggetto colpito. Quando metterò online farò qualche modifica perché voglio che la temperatura dalla mia stazione sia il php a prendersela e quindi Arduino non invierà la distanza calcolata ma il tempo medio delle misurazioni effettuate del sensore ad ultrasuoni.

#include <NewPing.h>

#define TRIGGER_PIN  9 // Pin di arduino collegato al pin "TRIGGER" del sensore a ultrasuoni
#define ECHO_PIN     8  // Pin di arduino collegato al pin "ECHO" del sensore a ultrasuoni
#define MAX_DISTANCE 500 // Massima distanza del ping (in centimetri) - La massima distanza supportata è circa 400-500 cm

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Setup del sensore (pin e massima distanza=NewPing setup of pins and maximum distance.
double temperatura = 20.0;


void setup()
{
Serial.begin(9600);
}

void loop()
{
Serial.print(calcolaAltezzaNeve());
Serial.println("cm");
int distanza = calcolaAltezzaNeve();

delay(1500);
}

int calcolaAltezzaNeve()
{
  delay(500);                      // Aspetto 50ms tra 2 ping (effettuo 20 ping al secondo). 29ms è il ritardo minimo ammesso tra 2 ping.
  unsigned int durataMedia = sonar.ping_median(5); // Invia un ping multiplo e restituisce il tempo medio di echo in microsecondi (uS).
 

float altezza = (((331.45 + (0.62 * temperatura)) * (durataMedia / 2))/10000);
altezza = round((altezza*10));
altezza = round((altezza/10));

return (int) altezza;
}
Studente di Ingegneria per l'Ambiente e il Territorio - UniTN


AltoGardameteo

Spettacolo !!!

Voglio mettermici dietro anchio [emoji6]

Inviato dal mio SM-G930F utilizzando Tapatalk


lorenzo_TN

Citazione di: Meteo Ballino il Dom 31 Dicembre, 2017, 15:45:22
Eccomi qua  :D

Schema del collegamento che ho eseguito:


Come noterete nulla di complicato, ci sono solo 4 "cavetti", 1 dei quali è l'alimentazione 5 volt, l'altro la massa, e gli altri 2 sono i pin digitali del sensore. Un pin che serve per inviare gli impulsi di ultrasuoni ad una frequenza di 40 Hz (TRIG), mentre l'altro (ECHO) riceve gli ultrasuoni precedentemente inviati. Il lavoro di Arduino è proprio quello di gestire questo sensore e calcolare il lasso di tempo compreso tra il momento in cui vengono inviati e ricevuti gli ultrasuoni. Questo permetterà poi con una semplice formula di calcolare lo spazio. Per ottenere valori più precisi esistono delle apposite librerie che permettono di effettuare 2 o più misurazioni in modo consecutivo e facendone la media si ricava una misurazione più attendibile.

Veniamo alla formula.
s (spazio) = t (tempo) * v (velocità)

Noi il tempo lo conosciamo, perché abbiamo effettuato la misurazione con il sensore. Dobbiamo tenere conto però che il sensore ci restituisce (tempo*2) perché gli ultrasuoni devono partire, riflettere contro l'oggetto e ritornare, quindi effettuano "andata e ritorno". Basta un bel /2 e la questione t è risolta.

La velocità la conosciamo? Si, perché sappiamo che un suono si propaga in aria alla velocità 343,8 m/s a 20°C, ma anche a 331 m/s se la temperatura corrisponde a 0°C. Quindi per rilevare lo spazio ancora più preciso servirebbe un termometro all'altezza del nivometro e un altro termometro sulla superficie del manto nevoso, così facendo una media delle due temperature si riuscirebbe a conoscere la temperatura media abbastanza precisa di tutto lo strato d'aria che viene attraversato dalle onde. C'è da dire che la neve a 20°C non resisterebbe, quindi approssimando potremmo considerando la temperatura dell'aria pari a -1°C circa oppure prendere la temperatura misurata dalla propria stazione meteo e togliere 1-2°C visto che tendenzialmente in inverno al suolo è più freddo.

Comunque sia questa è la formula per calcolare la velocità del suono in base alla temperatura:
v = (331,45 + (0,62 * T (temperatura espressa in °C)) m/s

A questo punto basta applicare la formula precedente. Basta stare attenti alle unità di misura. Per ottenere il risultato in cm questa è la formula:
spazio = (((331.45 + (0.62 * temperatura)) * (durataMedia(ossia la media delle 5 misurazioni effettuate dal sensore) / 2))/10000)

Non è ancora finita però, infatti con questo procedimento otteniamo lo spazio tra il sensore e la neve, non tra il punto più alto del manto nevoso ed il terreno. Basta una semplice differenza!
altezza neve = altezza dal suolo del nivometro - spazio ottenuto con la formula

Poi per mettere i dati online dipende da situazione a situazione, secondo me la soluzione migliore è acquistare una wifi schield che si connette al wifi e mediante una richiesta http fa eseguire al server a cui l'ha fatta una paginetta php che prende il dato e poi lo elabora a piacimento, magari creando un file txt o in altro formato, comodo da utilizzare possibilmente.

Spero di esser stato sufficientemente chiaro  ;D

Un po' di foto ...




Questo è il codice che caricato su Arduino restituisce la distanza in cm tra il nivometro e l'oggetto colpito. Quando metterò online farò qualche modifica perché voglio che la temperatura dalla mia stazione sia il php a prendersela e quindi Arduino non invierà la distanza calcolata ma il tempo medio delle misurazioni effettuate del sensore ad ultrasuoni.

#include <NewPing.h>

#define TRIGGER_PIN  9 // Pin di arduino collegato al pin "TRIGGER" del sensore a ultrasuoni
#define ECHO_PIN     8  // Pin di arduino collegato al pin "ECHO" del sensore a ultrasuoni
#define MAX_DISTANCE 500 // Massima distanza del ping (in centimetri) - La massima distanza supportata è circa 400-500 cm

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Setup del sensore (pin e massima distanza=NewPing setup of pins and maximum distance.
double temperatura = 20.0;


void setup()
{
Serial.begin(9600);
}

void loop()
{
Serial.print(calcolaAltezzaNeve());
Serial.println("cm");
int distanza = calcolaAltezzaNeve();

delay(1500);
}

int calcolaAltezzaNeve()
{
  delay(500);                      // Aspetto 50ms tra 2 ping (effettuo 20 ping al secondo). 29ms è il ritardo minimo ammesso tra 2 ping.
  unsigned int durataMedia = sonar.ping_median(5); // Invia un ping multiplo e restituisce il tempo medio di echo in microsecondi (uS).
 

float altezza = (((331.45 + (0.62 * temperatura)) * (durataMedia / 2))/10000);
altezza = round((altezza*10));
altezza = round((altezza/10));

return (int) altezza;
}


Interessante Luca! Complimenti!

ross

Citazione

Interessante Luca! Complimenti!

già, bravo!
BAROMETER, n.
An ingenious instrument which indicates what kind of weather we are having. - A. Bierce, The Devil's Dictionary

preda

Grande Luca!
se riesci a metterlo in funzione te ne compro uno! ;D

Lorenz1982



MeteoBorgo www.meteoborgo.it

Dati MeteoBorgo in tempo reale: www.meteoborgo.it/dati.html

Twitter: www.twitter.com/MeteoBorgo

stefanocucco83

Complimenti! bello strumentino...sei un MacGyver ;D
Ma i nivometrici automatici e i dati che si trovano su Meteo Trentino funzionano con lo stesso principio?

Meteo Ballino

#10
Citazione di: stefanocucco83 il Mar 02 Gennaio, 2018, 14:01:50
Complimenti! bello strumentino...sei un MacGyver ;D
Ma i nivometrici automatici e i dati che si trovano su Meteo Trentino funzionano con lo stesso principio?

Certo, solo che costano tipo 100 volte di più  ;D (ovviamente sono professionali e quindi mooooolto più precisi)
Anche gli idrometri automatici sui torrenti/fiumi sfruttano le onde ad ultrasuoni.
Studente di Ingegneria per l'Ambiente e il Territorio - UniTN


Meteo Ballino

Buon pomeriggio a tutti!

Finalmente dopo un duro lavoro arrivano i primi risultati...

Vi presento il sito dedicato ai nivometri automatici basati su ESP, una scheda Wi-Fi in grado di gestire il sensore ad ultrasuoni e di inviare i dati al server di Meteo Ballino che si occupa della parte gestionale dei dati e dell'archiviazione, nonché della realizzazione grafici e quant'altro.

Purtroppo non sono ancora riuscito a trovare un modo per averlo "mobile" (ossia con batteria), per questo il primo che ho installato con l'amico dell'Acetaia di Cologna è collegato alla rete elettrica. Il nivometro si alimenta con un semplice alimentatore per telefoni ed uno spinotto micro usb sul termine del cavo (con un buon cavo si coprono oltre 20 m di distanza, quindi sufficienti per non avere disturbi di edifici o quant'altro). Il progetto è molto stabile, l'ho tenuto sotto osservazione per parecchio tempo e non mi ha mai dato problemi di interruzioni, se non ovviamente in assenza di internet o di corrente elettrica.
Se interessa, realizzerò anche una specie di "manuale" dove spiegherò in modo più dettagliato l'installazione e il funzionamento per capire come svolgere i vari passaggi (è molto semplice e soprattutto una volta installato non necessita di nessuna manutenzione, a meno che non decidiate di cambiare rete Wi-Fi a cui collegarvi).

Il sito è ancora in fase di costruzione/ultimazione, quindi non fateci troppo caso. Anzi, sarò lieto di ascoltare i vostri suggerimenti e cercherò di realizzarli nel limite delle mie competenze tecnico-informatiche.

Nel prossimo week-end spero di arrivare ad installare un nivometro su a Malga Nardis a 1800 m!  ;)


Se volete darci un'occhiata  :) : http://www.meteoballino.it/nivo/
Stazione nivometrica di Cologna: http://www.meteoballino.it/nivo/dati.php?id=5436675


Ballino:











Acetaia di Cologna, Tenno:

Studente di Ingegneria per l'Ambiente e il Territorio - UniTN


MrPippoTN

Spettacolo, Luca. Sei l'orgoglio della nostra associazione.

Dany79snow

Top!! è da qualche anno che volevo realizzarlo...pultroppo il tempo è poco,bel lavoro...anche le staffe in acciaio.... 8-)
Stazione meteo Davis Vp2 http://www.meteogardolo.it
Webcam 3mpx Mobotix http://www.meteogardolo.it/index.php/webcam
Da ottobre 2011 stazione di Villa Warth (Gardolo-TN)a 375 metrie Calisio a 710mt.
Da dicembre 2011 Vason 1740mt!!!
26Giugno12 fotovoltaico power!

AltoGardameteo

Già, Luca mi ha tenuto aggiornato sugli sviluppi.

Davvero ottimo e poco costoso, sto valutando anchio il posto migliore dove installarlo; intanto speriamo quanto prima di testare quello di Cologna  ;)