La nuova frontiera tecnologica ci mostra un numero praticamente infinito di progetti legati all’automazione di processi industriali, alla domotica, alla robotica e così via. Lo sviluppo e la gestione di simili progetti è resa sempre più semplice dalla presenza di schede dotate di microcontrollore elettronico pilotabile via software.
Un controllore è un circuito elettronico programmabile specializzato nella gestione di eventi esterni, come il conteggio di pezzi, l’acquisizione di misure fisiche, il controllo di qualità, la visione elettronica e così via.
Il progetto in questione appartiene alla categoria degli “acquisitori”, utilizzando sonde termiche per digitalizzare misurazioni di temperatura su sezioni diverse di un volume.
Hardware necessario
La realizzazione del progetto richiede un single-board computer rappresentato, nel nostro caso, da un Raspberry PI 3 e da una coppia di sensori di temperatura di tipo DS18B20, o la versione meno avanzata, di tipo DS18S20. Nella prossima sezione se ne discuteranno le differenze.
È inoltre necessario un sistema di riscaldamento da monitorare.
Il Raspberry PI è un single board computer, (SBC, un calcolatore im’lementato su una sola scheda elettronica) sviluppato nel Regno Unito dalla Raspberry PI Foundation. Il suo lancio pubblico è avvenuto il 29 febbraio 2012. Finora ne sono state prodotte sette versioni (Modelli: A, B, A+, B+, 2, Zero, 3) con prezzi variabili tra i 5 ed i 35 euro.
L’idea di base è la realizzazione di un dispositivo economico, concepito per stimolare l’insegnamento di base dell’informatica e della programmazione nelle scuole.
Questo progetto prevede l’utilizzo di un Raspberry PI 3, che incorpora un processore ARM quad-core 64 bit con 1,2 GHz di clock, una GPU (Graphical Processing Unit, o scheda grafica avanzata), 1 GB di RAM, Wi-Fi e Bluetooth 4.1.
Il progetto non prevede alcun hard disk o unità a stato solido per la memorizzazione, affidandosi esclusivamente ad una scheda microSD per il boot e la gestione della memoria no volatile, progettata per ospitare sistem operativi basati sul kernel di Linux.
I sensori DS18B20 e DS18S20 sono, concettualmente, veri e propri termometri digitali con una risoluzione di 0,5°C, che utilizzano il protocollo 1-wire. Entrambi i modelli offrono la medesima accuratezza e sensibilità: l’unica differenza è data nella modalità di presentazione dei dati all’utente:
- Il sensore DS18S20 ha 8 bit di risoluzione (circa 50 gradi) per la temperatura, ed un tempo di conversione di 750 millisecondi.
- Il sensore DS18B20 ha 9-12 bit di risoluzione per la temperatura (sino a 750 gradi), ed un tempo di conversione di 500 millisecondi.
Come appare evidente, entrambe le versioni rientrano senza problemi nelle specifiche richieste dal progetto (spostamenti di una decina di gradi, cattura di una lettura ogni 5-10 minuti).
1-wire è un protocollo che utilizza un solo connettore per la trasmissione dei dati; nel kernel (pronuncia IPA: [ˈkəːnəl], costituisce, in informatica, il nucleo di un sistema operativo) per Raspberry PI è già presente un modulo per la gestione di tale protocollo, utilizzando il pin 7 (GPIO 4) per le comunicazioni (vedi figura).
Tutte le unità che usano 1wire devono essere collegate:
- il filo di massa al PIN 6
- il filo dati al PIN 7
- il filo +3.3v al PIN 1
Occorre una resistenza di pull-up da 4700ohm tra il filo dati e +3.3v.
La linea dati e alimentazione del sensore possono essere raggruppati su un singolo filo, questa modulità si chiama Parasite Powered Mode. Si possono utilizzare fino a 16 sensori sullo stesso segmento bus.
Configurazione Raspberry Pi
Per poter interrogare i sensori occorrono i moduli wire, w1_gpio e w1_therm.
Un modulo del kernel è fondamentalmente un file oggetto, cioè un frammento di codice eseguibile che fa riferimento a funzioni e variabili esterne, oltre a dichiarare le funzione e le variabili che lui stesso definisce. In altre parole, un modulo e’ un “programma” specializzato nell’esecuzione di un dato compito (task), e fortemente integrato nel nucleo di un sistema operativo.
Ricapitolando, una volta collegato il sensore (i sensori) al Raspberry, bisognerà caricare nel kernel i relativi moduli per il loro pilotaggio (driver) come segue:
1 2 3 |
sudo modprobe wire sudo modprobe w1_gpio sudo modprobe w1_therm |
Controllare se i moduli sono stati caricati correttamente dal sistema operativo.
I moduli del kernel sono porzioni del nucleo di sistema operativo che possono essere caricate in memoria quando se ne presenta la necessità e scaricate quando non più necessarie. I moduli del kernel Linux sono quello che in altri sistemi viene definito driver., e nel nostro caso gestiscono l’interfaccia (il protocollo di colloquio / comunicazione dati) tra la periferica (la sonda) ed il sistema operativo stesso.
1 2 3 4 |
pi@raspberrypi ~ $ lsmod Module Size Used by w1_therm 2705 0 w1_gpio 1283 0 |
Se i moduli risultano correttamente caricati, sarà possibile impostare il loro caricamento autonomo alla partenza del sistema operativo:
sudo nano /etc/modules
aggiungendo le seguenti righe al file:
1 2 3 |
#1-wire bus per senosri di temperatura DS18S20 w1-gpio w1-therm |
Configurazione software
Per interrogare il sensore si utilizza un file creato dal kernel come interfaccia. Questo risulta infatti il metodo classico per interfacciarsi con dipositivi esterni sui sistemi di tipo unix.
Occorre inizialmente individuare la cartella creata dal sistema, di cui il nome specifica il Family-Code e il Unique Serial Code del sensore.
Osserviamo il contenuto della directory
/sys/bus/w1/devices
:
In effetti, usando più sensori, cosi diventano disdistinguibili uno dall’altro, avendo ognuno il suo codice univoco. Questa cartella la troviamo in
/sys/devices/w1_bus_master1
Installazione
L’installazione del sistema risulta agile e veloce: sarà infatti sufficiente procedere come segue.
- Collegarsi in rete e procedere con l’update/upgrade dl sistema tramite il comando apt-get
Modificare il file /boot/config.txt aggiungendo la riga dtoverlay=w1-gpio per garantire un corretto funzionamento anche in caso di kernel updates - Creare uno script per il log delle temprature (ad esempio lo shell script temp1.sh), che parta in automatico all’accensione del Raspberry PI.
- Creare uno script che legga i valori dal file di log e si occupi della loro presentazione a video (in futuro lo script show.sh si occuperà anche di contattare un webserver e trasmettere le informazioni ad un database).
Di seguito un esempio del file di script temp1.sh:
1 2 3 4 5 6 7 8 9 |
#!/bin/sh # temp1.sh - Lettura dei device files delle sonde: temperatura in formato gradi.millesimi temper1=$(grep 't=' /sys/bus/w1/devices/w1_bus_master1/28-000802adzzzz/w1_slave | awk -F 't=' '{print $2/1000}') temper2=$(grep 't=' /sys/bus/w1/devices/w1_bus_master1/28-000802adyyyy/w1_slave | awk -F 't=' '{print $2/1000}') temper3=$(grep 't=' /sys/bus/w1/devices/w1_bus_master1/28-000802adxxxx/w1_slave | awk -F 't=' '{print $2/1000}') # Lettura della data e ora correnti timestamp=$(date +"%Y-%m-%d %R") # Scrittura dei dati raccolti nel file di log temp1.txt echo $timestamp";"$temper >> /home/temps/temp1.txt |
Una volta salvato nella directory /home/temps/ occorrerà fornirgli opportuni diritti di esecuzione:
chmod 744 temp1.sh
e salvarlo nella crontab (la tabella dei programmi lancati automaticamente dal sistema) utilizzando il comando
crontab -e
ed inserendo la seguente riga nel file, a significare che il comando di lettura verrà ripetuto ogni minuto:
* * * * * /home/temps/temp1.sh
Le ultime n righe dell’output sarano visibile con il comando
tail -n temp1.txt
Uso e manutenzione
Il sistema è completamente automatizzato.
Alla partenza sarà sufficiente portarsi nella cartella
/home/temps/
e lanciare lo script
./show.sh
che stamperà a video una tabella di valori relativi alle ultime 15 letture di ciascuna sonda.
Ulteriori sviluppi
Il progetto è stato concepito per garantire una estensione modulare di ciascuna sezione.
Nei paragrafi successivi verranno prese in esame alcune possibilità di approfondimento.
Aggiunta di sensori
Il protocollo 1-wire consente di gestire 16 diversi sensori contemporaneamente, grazie all’indirizzamento univoco di ciascuna sonda a livello del kernel. Tale caratteristica permette quindi di tenere sotto controllo le variazioni di gradiente termico a livello di macroambiente, e non solo di microsezioni di esso: sarà possibile visualizzare grafici a 2 o 3 dimensioni di porzioni di spazio, e disegnare le relative isoterme.
Il protocollo 1-wire consente altresì di gestire sensori di tipo diverso dalla temperatura, come ad esempio pressione barometrica, umidità assoluta e relativa dell’aria, altitdine, pressione acustica e via dicendo: il progetto è predisposto per l’installazione di ciascuna d queste sonde, ed al relativo trattamento dei dati raccolti a livello digitale.
Trasmissione delle informazioni
Il computer Raspberry PI 3 è dotato di interfacce Wi-Fi e Bluetooth: in tal modo rende possibile l’accesso a tutti i dati raccolti lavorando come server online su rete pubblica o privata. I dati, inizialmente in formato testo, possono essere facilmente trasformati in formato CSV (Excel), ed inviati su richiesta esterna da un demone in ascolto sul computer (in questo caso il demone non è altro che un processo, vale a dire un programma in perenne ascolto di chiamate dall’esterno).
In alternativa è possibile creare un software basato su tecnologia websocket o webservice, che trasmetta autonomamente i dati ad un server web esterno predisposto all’ascolto, ed in grado di elaborare graficamente o tabularmente i dati inviati dal laboratorio.
Creazione di un webserver locale
Una uleriore possibilità di sviluppo consiste nel configurare un server web locale all’interno del Raspberry PI, in modo da garantire l’elaborazione locale dei dati su rete. Una simile opzione appare di importanza non trascurabile qualora si utilizzino ad esempio dati sensibili da elaborare ed accedere in laboratorio.
Conclusioni
Questo primo progetto risulta piuttosto semplice, ideale per chi voglia inizialmente cimentarsi sulla programmazione di interfacce esterne con il PI, e al contempo offre un numero veramente elevato di possibili variazioni sul tema, sia dal punto di vista hardware (aggiunta di nuove o differenti sonde che utilizzino il protocollo 1-wire), che software (creazione di script per l’elaborazione e la presentazione grafica del dati) che sistemistico (progettazione di web o application server dedicati).
Come valore aggiunto, il costo in hardware del progetto rimane ben al di sotto dei 100 euro, mentre lo sviluppo dell’intero sistema richiede solamente poche ore.
Link utili: