sabato 20 aprile 2013

CO-Scienza Ambientale

A proposito del monitoraggio ambientale per tutti, di cui ad un mio post di dicembre, ho scritto questo titolo e questi concetti che spiegano meglio le motivazioni.



Co-Scienza Ambientale
Monitoraggio ambientale per tutti

“Co” sta per condivisione e cooperazione: quello che oggi è indispensabile per vivere in un mondo sempre più stretto.
“Scienza” è la forma di cultura più sana, più lontana dai pregiudizi, dalle fobie e dalle fissazioni che troppo spesso prendono il sopravvento nella società moderna.
“Ambientale” è un aggettivo, spesso abusato, ma che fa pensare alle conseguenze della nostra  presenza sulla Terra, ormai impossibili da nascondere. 
“Coscienza” è qualcosa che dobbiamo costruire nel corso della nostra vita, è una condizione di pace interiore indispensabile per vivere.
Smettiamola di pensare alla Scienza come qualcosa riservata a pochi, è solo un alibi per non riflettere, informarsi, pensare al mondo con raziocinio e senza preconcetti. La Scienza deve essere soprattutto vissuta, attraverso un’esperienza sensoriale completa. Non solo leggere e ascoltare quindi, ma anche fare, sperimentare, osservare ed interpretare. Galileo, quando si rivolgeva alla gente comune, la invitava proprio all’osservazione e alla riflessione su quanto osservato.



giovedì 18 aprile 2013

Trasmettere dati via radio a più di 1 km!!

Banda larga?  Cos'è??
Quando si ha una casa in campagna, anzi nel bosco, dove non c'è assolutamente campo GSM, figuriamoci WiFi o cavi ADSL, come si possono trasmettere dati? Immaginate che l'acqua arrivi alla casa da un serbatoio posto 1 km lontano e che ogni tanto d'estate l'acquedotto interrompe l'erogazione dell'acqua o i consumi siamo superiori al previsto. Diventa vitale sapere con anticipo il livello dell'acqua nel serbatoio in modo da regolarsi nei consumi e non rimanere all'improvviso con lo shampoo nei capelli.
Bene ho sperimentato con successo un telecomando, venduto da Futura Elettronica, che usando la banda degli 869 MHz e una buona antenna direzionale riesce tirare per alcuni chilometri. Il trasmettitore (TX) ha due pulsanti, uno per accendere il relè del ricevitore (RX), l'altro per spegnerlo. L'idea è quella di comandare i due pulsanti nella stessa sequenza di 1 o 0 di un numero binario. Sappiamo che il codice ASCII permette con 8 bit di codificare caratteri e numeri da 0 a 255. Un byte è più che sufficiente quindi per trasmettere il livello dell'acqua in un serbatoio.
Al fine quindi di pilotare il telecomando per trasmettere una sequenza di bit, ho programmato un Arduino che, tramite due dei suoi output digitali, aziona i "pulsanti" acceso e spento.

In realtà i pin di Arduino provvedono a collegare a massa i due ingressi del telecomando, come se si trattasse del contatto dei pulsanti.
Un problema non banale è trovare il tempo ottimale tra i bit da trasmettere. Infatti per ogni bit il TX in realtà invia un treno di impulsi costituito da "preambolo" codice del canale, etc. Non solo, poi occorre aspettare un certo tempo dopo aver trasmesso un bit, perché il canale non può essere occupato al 100% del tempo per problemi di normativa sulle frequenze.

 Morale, alla fine un buon compromesso è la trasmissione di un byte in 72 secondi. Una bella velocità!! Altro che banda larga!! I segnali di fumo degli indiani erano più veloci.  Però è più che sufficiente per trasmettere i dati che servono e che variano con molta lentezza.
L'altra "trovata" è stata quella della ricezione del byte. Infatti RX non ha nessun modo per sincronizzarsi con TX, sta quindi in attesa del primo bit di start e poi si mette in ascolto usando un ritardo tra i bit uguale a quello di TX. Tutto qui. Non solo, ma tra un byte e l'altro è necessario aspettare un po' di tempo in modo da permettere a RX di rimettersi in ascolto senza senza rischiare di mischiare i pezzi di due byte.
Insomma, un bel tam-tam, ma molto utile.

lunedì 8 aprile 2013

Ovunque e comunque

Continuano i lavori del sistema di misura e controllo del pannello solare. Si lavora anche sul posto, con qualsiasi tempo!!
La scatola che contiene le due schede Arduino con i due shield: datalogger e Ethernet.

giovedì 28 marzo 2013

Monitoraggio ambientale: Le polveri


Recentemente ho voluto provare il misuratore di polvere che avevo comprato tempo fa. E' il GP2Y1010AU0F della Sharp, con un costo equivalente ad una pizza + birra. Di questo sensore, oltre al suo datasheet, si parla in alcuni siti/blog di persone, anche esperte che lo hanno usato. Ho trovato anche altri sensori economici di polvere. A quanto sembra, questo componente viene usato commercialmente negli impianti di condizionamento dell'aria, probabilmente per monitorare l'efficienza dei filtri.  In uno di questi siti sono riportati confronti tra un misuratore di polvere professionale a laser e questi economici.
Innanzitutto vediamo cosa vuol dire "misurare la polvere in aria". Le particelle di polvere sono composte da vari materiali: carta, pollini, idrocarburi, fibre di tessuti, ecc.  Le dimensioni dei granuli possono essere molto piccole, da qualche decimo di micron fino a qualche decimo di millimetro. Naturalmente le particelle più grosse rimangono per poco tempo sospese nell'aria, mentre quelle più piccole possono percorrere lunghe distanze portate dalle correnti d'aria.  Il nostro sensore, come anche altri, usa un sistema ottico per misurare la polvere. Una sorgente di luce (LED) illumina una piccola camera, dove entra l'aria esterna, e un fotodiodo rileva la luce riflessa dalle particelle (scattering). Il sensore della Sharp sembra che sia sensibile a particelle con dimensioni maggiori di 0.5 micron (da prove effettuate in uno dei siti visitati) e la sua uscita è tarata per dare i milligrammi di polvere per metro cubo (mg/m3). Nelle foto è riportato il misuratore completo, costruito da me.  Ho inserito il sensore, Arduino, una  ventolina e un display LCD,  in una scatoletta. Poi ho sviluppato lo sketch che prevede anche la conversione dell’ uscita analogica  del sensore in mg/m3 e numero di particelle per cm3.  La prima conversione è data dalla casa produttrice del sensore, riportata nel suo datasheet,  mentre la seconda è stata ricavata da Chris Nafis per confronto con un altro misuratore, più preciso ma, ovviamente più costoso.  Il numero di particelle per cm3 s’intende per particelle con diametro superiore a 0.5 micron.

La foto mostra la scatola con il display, i buchi per il passaggio dell’aria, dietro i quali è sistemata la ventolina. A lato c’è la presa jack per i +9 V fornita dall’alimentatore wall plug.

La seconda foto mostra l’interno della scatola. E’ ben visibile la board Arduino con sopra una protoboard che accoglie i pochi componenti aggiuntivi necessari. Il sensore di polvere è stato posto in fondo alla scatola e in corrispondenza del buco dove viene campionata l’aria, è stato aperto un buco anche sul fondo della scatola. In questo modo la ventolina, esercitando un’aspirazione dell’aria dal fondo della scatola verso l’esterno, garantisce il passaggio dell’aria da dietro alla scatola nel sensore.



Per ulteriori approfondimenti visitate i siti:

http://aqe.wickeddevice.com/
http://www.aliexpress.com/compare/compare-dust-sensor.html




lunedì 18 marzo 2013

Misura e controllo di un pannello solare termico

Sto lavorando ad un progetto di pannello solare di nuova concezione, occupandomi del sistema di misura e controllo. Sulle caratteristiche di questo pannello lascio all'autore il compito di divulgarle, mentre penso che possa essere interessante descrivere come ho affrontato il problema della misura e registrazione dei dati di funzionamento e quello del controllo di alcuni dispositivi ausiliari.
Il sistema è descritto nello schema qui sotto riportato.  
I sensori di temperatura, distribuiti in vari punti del pannello, sono  i DS18B20 della  Maxim e funzionano con il protocollo 1-Wire.
Sono collegati ad un unico cavetto a tre poli (2 + schermo) al quale sono collegati l'alimentazione a +5V, il Ground e la linea dati che fa capo ad un pin digitale di Arduino. Esiste una libreria per gestire questo tipo di componente e ricavare direttamente la temperatura in °C. La precisione dichiarata di questo tipo di sensore è di circa 0.5 gradi.
Un altro sensore è costituito da un contatore volumetrico dell'acqua che scorre nel pannello. Questo contatore, oltre alla parte meccanica che fa muovere i tamburi con le cifre, è dotato di un reed relè che si chiude ogni 10 litri.  Il relè è collegato ad un altro ingresso digitale di Arduino, tramite una resistenza di pull-up di 10 K.
Il sistema deve poi controllare la velocità di un ventilatore e accendere o spegnere una pompa, oltre naturalmente a registrare tutti i dati.
La foto mostra un chip DS18B20 montato sul cavetto e il connettore a 3 pin con il quale viene collegato al bus 1-Wire.

La foto mostra il contatore di acqua con il cavetto collegato al reed relè.

giovedì 7 marzo 2013

Trasmettere i dati su Internet 2

Dicevo nel precedente post, che il Server è quello che risponde alla chiamata del Client inviando una pagina WEB. Noi vogliamo che questa pagina comprenda alcune scritte fisse, esplicative, e alcune variabili dipendenti dallo stato degli input nelle varie porte di Arduino. Questo si realizza facilmente con le istruzioni pc_client.print(....)  contenute nel programma di Marco Lai Controllo Remoto. Istruzioni che permettono di inviare al Browser del Client i tag HTML per formattare i testi fissi ma anche i testi variabili.
Infatti l'istruzione pc_client.print(var) inserisce il valore della variabile var ricavata per esempio dalla lettura di uno degli ingressi, come ad esempio analogRead(0) .  E' la funzione print che si occupa della trasformazione dei valori numerici in caratteri.
Ecco quindi la pagina che ho ottenuto:


Arduino analog input

Ingresso: A0: 412
Ingresso: A1: 403
Ingresso: A2: 364
Ingresso: A3: 320
Ingresso: A4: 309
Ingresso: A5: 270

Una cosa importante è ricordarsi di inserire nel programma citato sopra, il mac address, cioè il numero scritto su una label attaccata alla scheda Ethernet. Poi va inserito nel programma l'indirizzo IP del server. Questo viene assegnato dal access point e di solito ha queste cifre: 192.168.0.1.xxx. Gli xxx possono variare nel mio caso da 100 a 150.  Per avere un indirizzo valido si può usare il programma DhcpAddressPrinter contenuto negli esempi della Libreria Ethernet.

Trasmettere i dati su Internet

Un obiettivo che mi ero sempre posto d'avanti ma non osavo mai tentare di raggiungere, e' stato quello di usare Internet per trasmettere i dati rilevati dalle mie applicazioni con Arduino. Molte persone più esperte di me l'hanno già fatto e sulla rete c'è molto materiale sull'argomento. Però il mio timore è sempre stato quello di dover affrontare problemi difficili senza il necessario background culturale, non sapendo anche da dove partire per farmelo.  Grazie pero' a numerosi esempi postati da persone che hanno affrontato questi problemi, e soprattutto hanno fatto lo sforzo di spiegarli, sono riuscito nel mio intento e senza troppo sforzo.
Per prima cosa mi sono procurato una Ethernet Shield, scheda essenziale da accoppiare ad Arduino, se si vuole comunicare su Internet. Questo Shield è dotato di una presa RJ45 e di uno slot per introdurre una micro card SD, utile per la memorizzazione dei dati. Una volta inserito lo Shield su Arduino, si collega, con un cavo Ethernet (RJ45) alla porta di un access point. Io l'ho collegato allo "scatolotto" WiFi della mia rete domestica.  Fondamentale è la libreria EthernetLibrary che, assieme alle altre di Arduino, permette di far funzionare la scheda.
Per i primi programmi, consiglio vivamente il sito "www.logicaprogrammabile.it" di Marco Lai. Questo sito raccoglie moltissimi progetti ed esperimenti con Arduino, spiegati ed illustrati veramente bene. Infatti devo ringraziare lui se sono riuscito in poco tempo a fare qualcosa e soprattutto a capirla!!

In parole povere, la prima cosa da fare è scegliere se far funzionare la coppia Arduino/Ethernet Shield come Server o come Client. Per chi non sa queste cose, il Server è quel dispositivo che risponde alle chiamate di un Browser, come Explorer o Google Crome, inviando una pagina WEB. Il Client è invece il dispositivo che chiama il server inviando un URL (quella stringa di caratteri che inizia con http://...). Mi scusino gli esperti per questa spiegazione grossolana e incompleta, ma è esattamente quello che ho capito.  Quando parlo di dispositivo Server o Client, intendo un hardware (PC o scheda che sia) con un software sopra.  Quindi la coppia Arduino e Shield se funziona da Server, rimane in ascolto di un URL proveniente da un Client e risponde con una serie di stringhe che contengono caratteri e tag HTML. L'insieme di queste stringhe forma la pagina WEB che il Client si vedrà arrivare e presenterà sul Browser.  Nel prossimo post spiegherò come può il Server inserire i dati letti dalle porte di Arduino nella sua risposta al Client.