Gruppo Meteo/HowToOld
Analisi per l'implementazione:
Proveremo a misurare la temperatura.
Per questo esempio utilizzeremo un raspberry e un arduino Uno La sensoristica prevede sue sensori di temperatura i2c della serie tmp della TEXAS INSTRUMENTS nello specifico tmp102 o tmp275.
Sensoristica Utilizzeremo sensori I2C. Oltre alla versatitilità e ampia diffusione di questo bus su Raspberry la gestione di i2c e' fatta a livello hardware e non comporta carichi rilevanti per la cpu.
- Dato che il sensore tmp102 e' di tipo smd si puo' acqusitare anche gia' saldato su basetta lo vende ad esempio sparkfun
- questi i dati del tmp27 http://www.ti.com/lit/ds/symlink/tmp275.pdf
Procederemo a sperimentare anche:
- ADT7420 un sensore di precisione anche questo smd e prodotto da Analog; anche questo disponibile su basetta, ma un po' costosa: http://au.element14.com/digilent/pmodtmp2/adt7420-temp-sensor-16bit-pmod/dp/2290114
Esistono anche:
- MCP9808 prodotto da Microchip (l'accuratezza di questo sensore è al limite della accettabilità)
- LM75A by NXP (questo sensore è inaccurato e dovrebbe essere evitato in condizioni operative)
il broker mqtt e il data base con web service a applicazione javascript
Il tutto è implementato su raspberry con pidora 18. Per il momento basta sapere che è disponibile su http:pat1.bisognodipace.org
Predisposizione software
Il software in fase di sviluppo è disponibile qui: http://sourceforge.net/projects/r-map/
Su Raspberry Pi:
Ci sono una serie di dipendenze tra cui il software arduino e una serie di moduli python tra cui pyserial ... Bisogna anche installare Mosquitto tramite pacchetto e ancor meglio aggiungendo un repository facendo riferimento alla pagina: http://mosquitto.org/download/
In alternativa si può usare:
sudo apt-get install python-pip sudo pip install mosquitto
per scaricare il software r.map:
mkdir ~/svn cd ~/svn svn checkout svn://svn.code.sf.net/p/r-map/code/ r-map-code
Installare su arduino Aprire l'ambiente di sviluppo arduino
* modificare la posizione della cartella degli sketch da File-> preferenze e impostarlo a {tua home dir}/svn/r-map-code/trunk/sketchbook
oppure copiare le cartelle sketchbook e libraries sotto {tua home dir}/sketchbook
compilare e caricare su arduino
installazione hardware
installazione su raspberry
- Un esempio di misura della temperatura con sensore TMP102 sul sito element14, in questo esempio viene anche interfacciato un chip DS1307 real time clock utile se c'e' la possibilita' perdita di connettvita' verso un server ntp.
- questo un altro how to http://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c
- questo un esempio di collegamento http://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi/wiring-the-rtc
installazione su arduino
se avete la breakout board per tmp102 seguite le conessioni mostrate in: http://bildr.org/2011/01/tmp102-arduino/ (l'esempio software è pero' un po' approssimativo) c'è anche questo https://github.com/tz1/sparkfun/blob/master/i2cperiph/tmp102.c
Al termite collegate raspberry a arduino tramite il cavo USB
semplice esempio di software di campionamento
su raspberry:
cd ~/svn/r-map-code/trunk/python
Modificare latitudine e longitude nello script station.py inserendo quelle della propria stazione :
lon=11.86992 lat=44.98906
Modificare anche gli indirizzi i2c dei vostri sensori
rpcaddress=0x4f i2caddress=0x4c
il primo è quello collegato ad arduino il secondo è quello collegato a raspberry
eseguire il programma:
python station.py
si puo' interrompere con ctrl-c
troverete i file logrpc.txt logmqtt.txt che riportano il trace delle relative comunicazioni.
I risultati, sempre che il serverino sia acceso, http://pat1.bisognodipace.org:8000/
news
Direi che il firmware r-map per arduino si stia avvicinando alla
versione 1.0.
Abbiamo testato il firmaware su arduino mega2560 e abbiamo goduto dell'ampia disponibilità di memoria. Stiamo riportando bug e facendo test con gli sviluppatori di arduino_uip e siamo riusciti ad avere i primi instabili funzionamenti con enc28j60 https://github.com/ntruchsess/arduino_uip/issues/47
- superati i problemi relativi al buffer sulla seriale e la gestione
dell'rtc.
Quindi cosa funziona ora: due firmware per arduino uno:
a) configurazione e dati con jsonrpc su seriale b) mqtt su ethernet
un unico firmaware per arduino mega2560
Sensoristica:
* per ora sono funzionanti i driver per due sensori di temperatura i2c * sono gestibili sensori con misurazioni di più parametri
protocollo invio dati:
* interrogazione dei sensori su seriale con jsonrpc * comandi modalità attuatore su seriale con jsonrpc * mqtt su ethernet con ethernet shield e alpha version su enc28j60
gestione time:
* gestione time con rtc su i2c * ntp su ethernet
configurazione: sono configurabili runtime:
* i sensori installati, il loro indirizzo i2c e i loro metadati * il root path mqtt * il server mqtt * il server ntp * la frequenza di campionamento per mqtt * la data e l'ora per rtc se assente ntp
i parametri sono salvati permanentemente su eeprom
Funzionamento generale: all'accesione viene verificata la presenza di una configurazione di versione corrispondente al firmware, si configura la rete con dhcp, si interroga ntp server e si sincronizza l'orologio; se presente rtc viene impostato il time su rtc. Ci si connette al broker mqtt e tramite una temporizzazione di Alarm vengono inviati ogni sampletime i dati al broker. Contemporaneamente è possibile colloquiare su porta seriale tramite jsonrpc configurando, interrogando i sensori o attivando attuatori. Il sistema dovrebbe essere fault tollerant a: fault del ntp server (con caduta su rtc) fault del brocker mqtt (con riconnessione) rinnovo periodico dei dati del dhcp
todo list relativa al firmware r-map
* verifica mqtt con arduino_uip per enc28j60; i problemi paiono dovuti a incompatibilità con versioni più nuove di gcc; utilizziamo gcc 4.8 mentre gli sviluppatori il 4.3; qualcuno potrebbe prendere il semplice esempio mqtt e testarlo con aurduino_uip utilizzando gcc 4.3 (credo sia la versione su windows o su mac) * sensoristica: per ora abbiamo solo la gestione di sue sesori di temperatura; Paol ha un sensore di pressione uno di umidità, Mario quelli di umidità e luminosità. Si potrebbero inserire nella lib SensorDriver * comucazione radio: abbiamo selezionato 3 chip rx/tx; 2 li abbiamo disponibili, il terzo è da procurare. Bisognerebbe iniziare a fare dei test di trasmissio/ricezionecon le relative librerie. * protocollo mqtt-sn; questo è il protocollo mqtt per trasmissione radio; ci sono già alcune lib da cui partire: https://bitbucket.org/MerseyViking/mqtt-sn-arduino https://github.com/TomoakiYAMAGUCHI ; un forum di riferimento:https://groups.google.com/forum/#!forum/mqtt * gestione batterie e eventuale pannellino solare per la versione via radio; firmware a bassissimo consumo con l'utilizzo delle apposite librerie * prototipizzazione: si potrebbe provare ad utilizzare questa board:https://www.sparkfun.com/products/10743 scatole e scatoline stampate 3D ?
abbiamo poi da integrare il nostro arduino col resto del sistema; con Giacomo dobbiamo terminare l'interfacciamento con emon-cms; dovremmo anche avere a disposizione tra poco un server dove installare tutti gli specifici software che avevamo già parzialmente testato e per quanto riguarda raspberry in questi giorni sta per essere rilasciata pidora 2014 (fedora 20).
Dai avanti ... fatevi sotto!