Gruppo Meteo/HowToOld
HowTo
Di seguito tutti i passaggi (o quasi) per rendere funzionante un sistema rmap che comprenda uno modulo base, un modulo master ed un modulo satellite.
Sensori
Utilizzeremo per cominciare sensori I2C. Oltre alla versatitilità e ampia diffusione di questo bus, su Raspberry e microcontroller AVR la gestione di i2c e' fatta a livello hardware e non comporta carichi rilevanti per la cpu.
Iniziamo misurando la temperatura
La sensoristica prevede sue sensori di temperatura i2c della serie tmp della TEXAS INSTRUMENTS nello specifico tmp102 o tmp275 e uno Analog Device.
- 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
- 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
Pressione
Per ora il driver per il sensore di pressione è disponibile solo in python per il modulo base.
- Bosch's BMP085 is a rock-solid barometric pressure sensor (DISCONTINUED replaced with the BMP180 which is a drop-in replacement)
Umidità
Per ora il driver per il sensore di umidità è disponibile solo in python per il modulo base.
- Honeywell HumidIcon Digital Humidity/Temperature Sensors HIH6100 Series±4.0 %RH Accuracy Available with hydrophobic filter and
condensation-resistance, allowing for use in many condensing environments, or without hydrophobic filter, non-condensing
Modulo base
Hardware
|
Programmazione
Attualmente è possibile scaricare una immagine già pronta di scheda SD nel sito download. La dimensione minima richiesta è di 8 giga.
Inserite la vostra Card nel lettore, se avete dubbi sul nome di periferica che il sistema ha assegnato, un comando
dmesg
dovrebbe fugarli (guardate nelle ultime righe se l'avete appena inserita), nel mio caso:
[1680280.085043] usb 5-1: new full speed USB device using uhci_hcd and address 61 [1680280.343101] usb 5-1: New USB device found, idVendor=2341, idProduct=0043 [1680280.343109] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=220 [1680280.343115] usb 5-1: Manufacturer: Arduino (www.arduino.cc) [1680280.343119] usb 5-1: SerialNumber: 74132343430351715131 [1680280.343305] usb 5-1: configuration #1 chosen from 1 choice [1680280.346250] cdc_acm 5-1:1.0: ttyACM0: USB ACM device [1680317.456102] usb 5-1: USB disconnect, address 61 [1680328.069023] mmc0: new SD card at address e7c6 [1680328.069220] mmcblk0: mmc0:e7c6 SD256 246 MiB [1680328.069311] mmcblk0: p1 [1680328.326222] FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!
il sistema probabilmente 'montera`' la periferica, smontatela (comando "mount" senza parametri per verificare se e` montata ed il percorso, per smontare: "umount <percorso di mount>"), questo perche` dobbiamo 'copiare' l'immagine, ma ATTENZIONE, Il comando seguente eliminera` tutti i dati della SD Card, inoltre rileggete due volte (anche tre) il comando prima di dare il return. Se mettete per errore il device del vostro disco rigido il comando cancellera' tutti i vostri dati:
#dd if=aaaammgg-production.img of=/dev/DEVICEtrovato #ATTENZIONE QUESTO COMANDO ELIMINA IN #MODO PERMANENTE IL CONTENUTO DI DEVICEtrovato
Connessione in rete
Per il collegamento in rete è consigliabile utilizzare uno switch a cui collegare sia il modulo base, che il modulo master, che eventualmente un portatile per connettersi a Raspberry.
Il modulo base si collega ad internet con una chiavetta wifi o GSM/GPRS o ethernet. Per ognuna di queste è necessario effettuare apposite configurazioni per impostare la rete.
Il raspberry ha attivo anche un dhcp e fa anche da dns.
Al rspberry risponde al nome "base" mentre le board master ai nomi:
- master
- master2
- master3
- master4
Configurazione scheda di rete
La chiavetta permette la sincronizzazione ntp da internet e l'upload dei dati su internet inoltre il raspberry è gia configurato come gateway e permette il collegamento ad internet anche degli altri dispositivi collegati allo switch perciò il primo passo da effettuare è la configurazione della rete.
Da riga di comando:
nmcli device wifi list nmcli device wifi connect <SSID> password <password>
Per configurare altre interfacce di rete consultare la documentazione di nmcli
Prima connessione
Info utili per l'accesso a Raspberry:
- hostname: base
- indirizzo ip: 192.168.0.1
- user: rmap - password: rmap
- user: root - password: cambiami
ssh root@base
Connessione al modulo base via web
Con un browser puntare all'indirizzo:
http://base/
Verificare che tutti i processi salvo stationd siano attivi cliccando "verifica processi".
A questo punto si passa alla fase di configurazione: cliccare "Configurazione". (Per l'accesso: rmap/rmap)
Configurazione
Sono presenti alcune pagine per la configurazione dei dati sia dei sensori che dei dati della stazione vera e propria.
Cliccare:
Station
- Aggiornare i dati di posizione (latitudine, longitudine) (Mantenere slug "home").
Salvare, ed eventualmente procedere con le altre personalizzazioni tramite sempre l'interfaccia web.
- Hardware boards
- attivare/disattivare/modificare la configurazione in base alle board che si vorranno collegare
- sensor
- attivare/disattivare/modificare la configurazione in base ai sensori che si vorranno collegare
Come ultima operaione attivare la station home sempre dal menu Station
Stationd dovrebbe ora partire iniziando ad rilevare i dati del modulo base. Verificare quindi che tutti i processi siano attivi cliccando "verifica processi".
Aggiornamento del software
Da utente root
yum upgrade --skip-broken -y reboot
Modulo master
Il modulo B richiede cavo ethernet con power over ethernet.
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
Hardware
cosa bisogna collegare:
http://hobbycomponents.com/index.php/tiny-rtc-i2c-at24c32-ds1307-real-time-clock-module-with-eeprom-arm-pic.html http://www.hobbyist.co.nz/sites/default/files/docs/RTC/Tiny_RTC_schematic.pdf
|
Breadboard
Connessioni
pin nrf24 | pin arduino mega |
1 | gnd |
2 | 3.3 |
3 | dio9 |
4 | dio10 |
5 | dio52 |
6 | dio51 |
7 | dio50 |
8 | dio18 |
Enc28j60 | Arduino Mega 2560 |
GND | GND |
3.3 | 5V (funziona anche a 3.3, ma assorbe troppo) |
SO | Pin50 |
SI | Pin51 |
SCK | Pin52 |
CS | Pin53 |
rtc connettore P2 | arduino mega |
gnd | gnd |
vcc | vcc 5V (5v non 3.3) |
sda | sda |
scl | scl |
ds | scollegato |
Cicuito stampato
- Qui si trova il progetto del circuito stampato con Kicad.
- Su OSH Park shared project invece puoi trovare i gerber e tutto quanto pronto per la stampa del pcb oppure ordinarli direttamente a OSH Park
Aggiornamento bootloader
E' necessario aggiornare il bootloader di arduino mega in quanto alcuni vecchi bootloader non sono in grado digestire il riavvio dopo l'intervento del watchdog richiedendo un distacco dell'alimentazione forzato.
In questo esempio abbiamo utilizzato una board dragon dell'AVR ma è possibile utilizzare altri metodi: [1]
avrdude -c dragon_isp -P usb -p atmega2560 -e -u -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xD8:m -U efuse:w:0xFF:m avrdude -c dragon_isp -P usb -p atmega2560 -V -U flash:w:/usr/share/arduino/hardware/arduino/bootloaders/stk500v2/stk500boot_v2_mega2560.hex avrdude -c dragon_isp -P usb -p atmega2560 -U lock:w:0x0F:m
The first command unlocks the bootloader section and sets the fuses. The second writes the bootloader to the flash memory. And the third locks the bootloader section again.
Programmazione
Utilizzare il modulo A, accedere con l'utente rmap (pass rmap).
ssh rmap@base
E' presente sulla home una dir svn che contiene tutto il software:
cd /home/rmap/svn/r-map-code/trunk svn up cd arduino/ino/rmap ino clean ln -sf src/rmap_master.h src/rmap_config.h ino build -m mega2560 ino upload -m mega2560 ino serial
un pò di spiegazione: nella home dell'utente rmap è presente tutto l'archivio software
con il comando svn up si aggiorna l'archivio scaricando l'utima versione dal repository
ino clean pulisce l'ambiente per la compilazione
linkiamo nello skecth la configurazione per il modulo master dato, l'unica cosa che cambia tra lo sketch del modulo master e quella del modulo satellite è questa e viene gestita cambiando il puntamento al file di configurazione
ino build compila il software per la piattaforma mega 2560
ino upload carica lo sketch su arduino
ino serial attiva il monitor seriale
Configurazione
aggiornare le info sul file usando l'interfaccia web
http://base
Se non è la prima volta che si configura la board per forzare il caricamento della configurazione avviare arduino con il pin 8 collegato a massa
rmap-configure --help
solitamente il comando da utilizzare è:
rmap-configure --board master
Modulo satellite
Il modulo C richiede batterie con stabilizzatore (e pannellino solare con regolatore di corrente)
Performance and Data Loss: Tuning the Network
Hardware
|
Programmazione
E' simile a quella del modulo master si cambia solo il link al file di configurazione con un link simbolico ed il modello della scheda per compilazione ed upload
cd /home/rmap/svn/r-map-code/trunk svn up cd arduino/ino/rmap ino clean ln -sf src/rmap_satellite.h src/rmap_config.h ino build -m 644pa16m ino upload -m 644pa16m ino serial
Configurazione
Per la configurazione si usa il comando rmap-configure.
rmap-configure --help
Solitamnete si puo' utilizzare questo comando:
rmap-configure --board satellite
E' possibile collegare tutte le board contemporaneamente e dare un unico comando per configurarle tutte:
[rmap@pidora ~]$ rmap-configure django_extensions is not installed; I do not use it STATION: home >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configure board: my master start configuration Serial Transport /dev/ttyACM0 >>>>>>> reset config save {'reset': True} TCP/IP Transport master mqttserver: {'mqttsampletime': 5, 'mqttserver': 'mqttserver'} mqtt user and password: {'mqttpassword': u, 'mqttuser': u} ntpserver: {'ntpserver': 'ntpserver', 'mac': 'OK'} RF24Network Transport 0 thisnode: {'thisnode': 0, 'channel': 93} key: {'key': 'OK'} iv: {'iv': 'OK'} >>>> sensors: remote sensor tmp-True-RF24-TMP-72-254,0,0-105,2000,-,--my-master add driver: {'id': 0} my sensor-True-TMP-TMP-72-254,0,0-105,4000,-,--my-master add driver: {'id': 1} mqttrootpath: {'mqttrootpath': 'rmap/-/1137617,4449221/rmap/'} >>>>>>> save config save {'save': True} ----------------------------- board configured --------------------------------------- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configure board: my microduino start configuration Serial Transport /dev/ttyUSB0 >>>>>>> reset config save {'reset': True} transport tcpip not present RF24Network Transport 1 thisnode: {'thisnode': 1, 'channel': 93} key: {'key': 'OK'} iv: {'iv': 'OK'} >>>> sensors: my sensor-True-TMP-TMP-72-254,0,0-105,10000,-,--my-microduino add driver: {'id': 0} mqttrootpath: {'mqttrootpath': 'rmap/-/1137617,4449221/rmap/'} >>>>>>> save config save {'save': True} ----------------------------- board configured --------------------------------------- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> configure board: my raspberry start configuration transport serial not present
Shutdown del modulo base
Sul modulo base è presente il software [raspdbusgpiopy] sviluppato nei mesi precedenti che monitora li stato del pin18 sul gpio.
Quando il pin 18 viene collegato a massa, il software invia un segnale su dbus e il sistema va in shutdown, questo risulta molto comodo quando il modulo base risulta installato headless cioè senza testiera e video collegati.