Misuratore di livello acqua GPRS/GSM

Eccomi qui da buon novello a chiedere i primi chiarimenti,spero di essere nella sezione giusta
Mi sono letto un bel po di tutorial ma ho un "minestrone" in testa...se non comincio a programmare un po temo che non metterò le idee in ordine e per questo ho bisogno anche del vostro aiuto se vorrete.
Lo so,forse il mio progetto è un po troppo ambito per uno alle prime armi ma è quello che mi servirebbe e prima di iniziare a comprare materiale che poi finirebbe negli scaffali inutilizzato volevo chiedere alcuni chiarimenti.
Vorrei monitorare i livelli di un fiume da un ponte alto circa 5 metri,ho notato che ci sono delle shield che fanno in modo da adattare le tensioni fra di loro e semplificano il lavoro limitando l'uso del saldatore .Mi basta che il sistemi mi invii una mail,un sms ad esempio in formato csv o txt ogni giorno sulle altezze idrometriche rilevate ad esempio ogni ora.Ho dato uno sguardo in giro e ho trovato solo progetti di misuratori di livelli che parlano con un pc invece a me serve un sistema remoto che faccia tutto da solo.
Per realizzare il progetto dovrei acquistare:(se ho capito bene)

  1. Va bè,una scheda arduino (ho pensato alla 1)
  2. Una Shield GSM/GPRS
  3. una Shield SD card (memorizzare anche i dati sul posto se non è difficile)
  4. un sensore maxbotix ad esempio MB7092 XL,ce ne sono diversi modelli non so quale potrebbe essere meglio.

Qualsiasi parere/consiglio mi può essere di aiuto.
Grazie

io farei che ti fa uno screen ogni tot e lo salva su SD, poi ogni giorno si collega qualche secondo su intenet e ti mandi una mail con tutti i dati della giornata, dopo di che cancella la sd.

come sensore vedi te, anche un galleggiante potrebbe bastare, oppure se ti basta poca precisione dei contatti esposti, che quando "annegati" dall'acqua chiudono il circuito.. e quindi rilevi il livello dell'acqua esattamente come se essa cliccasse d ei pulsanti :slight_smile:

Innanzitutto grazie per aver risposto.
Bé si come idea va benissimo,ho la necessità di usare un sensore ad ultrasuoni perché mi è più facile installarlo e non rischio che con le piene mi venga divelto tutto,mi costa qualcosa in più ma sono quasi costretto.
Che dite è difficile? Qualche dritta?

Controlla il range di funzionamento del sensore e l'escursione dell'acqua del fiume; alcuni sensori ad ultrasuoni arrivano fino a 5-6 metri altri fino a 10, verificalo sul datasheet.
Inoltre non li puoi avvicinare molto alle pareti laterali altrimenti rilevano quelle e non l'acqua che scorre: l'ideale sarebbe fissarli sotto ad un ponte. :wink:

ci sono vari sensori ad ultrasuoni pre-impermeabilizzati, vedi su robotItaly. poi metti tutto (tranne il sensore) in un contenitore ip66 o ip68 (tenuta stagna, vedi Codice IP - Wikipedia), vedi bticino o simili.

Si c'è la possibilità di installarlo sotto un ponte,comunque i sensori sono stagni ce ne sono di tutti i tipi:

Quasi tutti coprono il mio range ma ce ne sono diversi tipi e non so qual'è più facile da utilizzare,programmare,affidabile o che va meglio con arduino,ad esempio ci sono quelli con uscite analogica,rs232,larghezza di impulso,ttl,I2C ecc. insomma ce n'è per tutti i gusti,sono tutte parole che ho letto sui tutorial ed ho una vaga idea di cosa significhi.
Che ne pensate?

l'analogica è semplice da lggere (analogRead) ma l'adc arduno è a 10bit (non è poco, ma nemmeno tanto) e devi calibrare da te, la rs232(occhio che ragiona a circa 12v) è buona perchè usi l'eletronica nel chip per fare tutti i conti (compresa la calibrazione di fabbrica), ed è a prova di errore.

per la larghezza di impulso vale lo stesso dell'analogica, il timer arduino è preciso a 4microsecondi, vedi te se ti basta.

ttl non vuol dire niete, sarà rs232-ttl, che vuol dire come la RS232 ma 5V ovvero che può parlare direttamente con arduino, quindi direi la migliore (usi SoftSerial, che è libreriaa ufficiale)

I2C è ottima, è in pratica una seriale più veloce, peccato che la libreria ufficiale arduino in caso di errore di comunicazione (in ricezione) si impalla..

Ho visto che quei sensori li vende robot-italy. Costano un botto. :fearful:

Questa tabella è molto chiara --> http://www.maxbotix.com/articles/054.htm

lesto,cominci a farmi un po di chiarezza :slight_smile:
Da quello che ho letto (e capito)10 bit significa che il numero associato alla lettura analogica potrà andare da un minimo di zero fino ad un massimo di 1.023,quindi associo ad una tensione un'altezza idrica calcolando che il livello dell'acqua salirà al massimo di 1 metro (a dirla grossa) e che la risoluzione del sensore è 1 cm mi basta.
Questo a chiacchiere,poi se trovo librerie pronte,programmi fatti sono ancora più contento,poi con il tempo magari imparo qualcosa di più e posso sempre modificare. Ad esempio io pensavo all'IC2 che con due fili mi liberavo,invece tu mi hai detto che c'è "l'inghippo" e per il momento è meglio non percorrere strade a rischio.

Si costano,però un'idrometro che fa quello che vorrei fare io costa 2000 €. Per questo vorrei imparare,altrimenti l'idrometro non potrò mai permettermelo.

esatto per il fatto che hai precisione da 1023 step.

Ogni step è una variazione dettata da vari settaggi. nomralmente si usa a 5V, quindi ogni step è una differenza di 5V/1024=0.004V

però puoi leggere "solo" voltaggi da 0 a 5v. Se vuoi leggere voltaggi più bassi puoi mettere su aref un voltaggio di riferimento più basso (e impostare l'alanogread su external); per esempio se la setti a 3,3v, avrai 3.3/1024=0.003V per ogni passo.

però il sendore deve essere in grado di darti questa precisione, altrimenti leggi solo rumore!!

per esempio il MB7060, il datasheet dice:

The low power 3.0V to 5.5V operation detects objects from 0-cm
to 765-cm (25.1 feet) and provides sonar range information from 20-cm out to765-cm with 1-cm
resolution

quindi precisione di 1cm, indipendentemente dal tuo ADC più di così non leggi niente.

poi dice:

Pin 2 - MB7060 (PW) This pin outputs a pulse width representation of
range. To calculate distance, use the scale factor of 58uS per cm.
MB7070 (AE) This pin outputs the analog voltage envelope of the
acoustic wave form

58uS per cm, mentre noi abbiamo una precisione di 4uS (il timer di arduino aumenta di 4uS in 4uS, senza contare la lentezza del codice), ciò vuol dire che il tuo codice se un pò lento rischia di farti perdere precisione.

Pin 3 - (AN) This pin outputs analog voltage with a scaling factor of
(Vcc/1024) per cm. A supply of 5V yields ~4.9mV/cm., and 3.3V yields
~3.2mV/cm. Hardware limits the maximum reported range on this output
to ~700 cm at 5V and ~600 cm at 3.3V. The output is buffered and
corresponds to the most recent range data

ecco l'uscita analogica: per caso ha la stessa precisione dell'arduino, ovvero 10bit! peccato che il cavo che collega il pin arduino e del sensore è (come tutti i cavi) un'antenna, e quindi se l'ambiente è "rumoroso" (ponte che fa da antenna gigante?) avrai un errroe.. senza contare che le letture sono sempre un poco oscillanti. Quindi direi di evitare

Pin 5 - (TX) When Pin 1 is open or held high, the Pin 5 output delivers
asynchronous serial with an RS232 format, except voltages are 0-Vcc.
The output is an ASCII capital “R”, followed by three ASCII character
digits representing the range in centimeters up to a maximum of 765,
followed by a carriage return (ASCII 13). The baud rate is 9600, 8 bits,
no parity, with one stop bit. Although the voltage of 0-Vcc is outside the
RS232 standard, most RS232 devices have sufficient margin to read 0-
Vcc serial data. If standard voltage level RS232 is desired, invert, and
connect an RS232 converter such as a MAX232.
When Pin 1 is held low, the Pin 5 output sends a single pulse, suitable for
low noise chaining (no serial data).

eccoci! ci dice che la RS232 parla da 0Va vcc (quindi se alimntiamo il sensore a 5v, avremmo una seriale che parla come l'arduino!) che ci scriverà 'R' e tre numeri che sono la distanza già in centimetri! (esempio: R015 (15cm) o R125 (125cm) )

baud rate is 9600, 8 bits,no parity, with one stop bit

esattamente lo stesso standard che usa arduino di base! perfetto direi

Quindi per collegarlo ci vogliono 2 o 3 fili?
Io direi 3:un uscita analogica (A0,....A5) di arduino al pin 5 di questo sensore, e poi GND-GND e V+ con il piedino 5V di arduino. Scusate la banalità ma è meglio procedere per certezze :slight_smile:
Poi carico un software ad esempio questo: Arduino Playground - MaxSonar (anche se a me sembra un codice per farlo parlare con la seriale del pc)
Ed a questo punto arduino ed il sensore si "parlano".
Vado bene?

sì, quel codice va bene per la lettura analogica ma fai attenzione che usa un divrso valore di Volt per Cm

no, il pin analogico del sensore è il 2, il 5 è il TX della seriale, quindi prendi l'esempio di softSerial (che è già nell'ide arduino) e al pin RX(il 10 sull'esempio SoftwareSerialExample) usato dallo sketch colleghi il pin 5 del sensore. E cambi il baudarate da 4800 a 5600. (scrievere non serve a nulla essendo il pin TX di arduino non collegato.

GND è da collegare sempre, VCC può arrivare da una fonte esterna (ma eviterei, salvo che il regolatore di arduino non regga tutti quegli shield).

Bene,abbiamo fatto "parlare" il sensore con la scheda arduino,per me è già tanto. Userò Vcc/1024 invece che Vcc/512.
Sei stato molto chiaro,altri dubbi è bene chiarirli dopo aver cominciato a smanettare.

Rimane da scrivere questi dati su una sd card e poi inviarli su internet.
Con il comando S viene acquisito il valore dal pin analogico e salvato sulla SD-Card,ho letto questa cosa su un tutorial ed ho già un codice con cui provare,poi se non va magari chiedo.
Come faccio a leggere questi dati ed inviare un sms o un email con le altezze idrometriche di una giornata x ? Ci sono dei moduli gsm/GPRS e nei siti dei vari rivenditori parlano sempre di librerie,ma fanno tutto loro o c'è sempre da programmare qualcosa?
Grazie ancora

pelton:
Userò Vcc/1024 invece che Vcc/512.

non solko, devi cambiare anche il fattore di coversione volt->cm (tra laltro lui passa puredagli inch, pasaggio inutile)

Ci sono dei moduli gsm/GPRS e nei siti dei vari rivenditori parlano sempre di librerie,ma fanno tutto loro o c'è sempre da programmare qualcosa?

c'è sempre da fare qualcosa. quello che consiglio io una get ad un sito gratuito come ilbello.com o altervista.org che prende i dati e li mette in un DB, che poi ti guardi con calma. oppure una mail (cerca "telnet smtp" per vedere come si fa, lo puoi fare anche dal tuo pc così ci fai la mano!!)

Ok.
Se posso vi chiedo un ultima cosa.
Dove posso trovare le shield per la sd card e la shield gsm/gprs?
Cerco quelle in grado di adattara i livelli di tensione,senza stare li a smanettare con il saldatore (o comunque limitarne l'uso).
Grazie

Ho trovato qualcuno che forse ha gia risolto il mio problema:

Qualcuno gentilmente mi può aiutare a fare "la lista della spesa"?:slight_smile:

Spero ti possa tornare utile:

Water Tank level display with Arduino

GSM shield for Arduino

E' utile,mi sto cimentando da poco con arduino quindi non si butta via niente!

Quindi:

  1. Arduino 1

  2. Shield arduino http://www.open-electronics.org/gsm-gps-shield-for-arduino/

  3. sim 900 ITEAD SIM900 GPRS/GSM minimum system module - Microcontroller Shield/Breakout Wireless Shields - Boxtec Onlineshop

  4. sd shield http://www.ebay.it/itm/ARDUINO-SHIELD-SLOT-SD-CARD-/121078125509?pt=Apparecchiature_professionali_elettroniche&hash=item1c30d193c5&_uhb=1#ht_500wt_924

  5. sensore di livello maxbotix

Dico bene?