In questa terza puntata realizzeremo da zero una vera e propria applicazione IoT. Sebbene la sua finalità pratica sia abbastanza specifica, il suo utilizzo può essere adattato a qualsiasi altro settore e, con opportune modifiche del software e dell'hardware, il suo funzionamento può essere, addirittura, stravolto. Questa volta, ad interagire tra loro, saranno due o più diversi "oggetti", non necessariamente presenti nella stessa ubicazione.
Introduzione
Per la corretta comprensione di questa puntata del corso è opportuno avere seguito, preliminarmente, anche la prima e la seconda parte. Le applicazioni viste fino a questo punto non fanno uso di ambienti di sviluppo, kit, add-on e altre utility per realizzare, facilmente, applicazioni IoT. Al contrario esse sono create da zero, utilizzando svariati linguaggi di programmazione che il progettista usa e mette in simbiosi tra loro. Anche dal punto di vista hardware non viene usata alcuna scheda di sviluppo che, sicuramente, faciliterebbe enormemente tutte le operazioni ma che lascerebbe lo sperimentatore un po' al di fuori da ciò che realmente accade.
La finalità in breve
Si tratta di un sistema informativo, gestito dalla azienda appaltante di erogatori d'acqua potabile, che comunica automaticamente, con segnalazioni luminose, l'imminente svuotamento dei boccioni dislocati in diversi siti commerciali o uffici.
Il progetto
Parliamo un po' del progetto che stiamo andando a realizzare, descrivendone il funzionamento e, soprattutto, lo scopo. Si supponga che una azienda di distribuzione di acqua potabile consegni, nell'ambito di una stessa città, molti erogatori (come quello mostrato in figura 1), dislocati in uffici, scuole, aziende, enti pubblici, centri commerciali e quant'altro.
Gli esercizi che usufruiscono di tali erogatori non possono, in maniera assoluta, restare senza servizio, per l'esaurimento del prezioso liquido. Pertanto ogni colonnina, dotata di un sistema IoT e di un indirizzo IP, in caso di necessità, comunicherà con la centrale, via Internet, che provvederà immediatamente alla sostituzione del pesante boccione d'acqua tramite il suo personale specializzato. La stessa ditta fornitrice avrà, a sua volta, un pannello luminoso composto da molte lampade e anch'esso sarà dotato di un proprio indirizzo IP. In caso di richiesta si illuminerà la lampada corrispondente all'erogatore richiedente. E' possibile, opzionalmente, abilitare anche la visualizzazione su una pagina web ed implementare statistiche più disparate sul consumo d'acqua da parte degli utenti, per meglio monitorare le richieste, anche al fine di ottimizzare la distribuzione. Ovviamente è possibile monitorare tanti erogatori. Basta solo configurare correttamente il software centralizzato, come vedremo più avanti.
Diagramma di funzionamento
La figura 2 mostra il diagramma di funzionamento dell'intero sistema. Risulta un po' complesso ma, in sostanza, mette in atto il collegamento tra due punti IP per lo scambio di informazioni.
Lato utente: come rilevare la carenza d'acqua?
Come può il sistema comprendere che il boccione d'acqua sta per svuotarsi e che deve inviare un messaggio alla azienda per l'immediato approvvigionamento? Esistono svariati metodi, a riguardo. Alcuni sono i seguenti:
- Rilevare il peso totale dell'erogatore, a pieno carico e poi con il boccione vuoto (o quasi vuoto). Una bilancia pesa persone modificata saprà comunicare tale differenza di peso, combinando un po' la meccanica e l'elettronica;
- Utilizzare le celle di carico (load cell) come sensori di peso;
- Adottare un contatto reed all'interno della bilancia;
- Fare attraversare l'acqua da un raggio laser e poi verificare il segnale tramite un sensore di luce.
Per la natura dell'articolo, e per esigenze di costo, optiamo per la prima soluzione. Vedremo come modificare facilmente una bilancia pesa persone per realizzare un sensore di peso tarato ai valori desiderati di allarme. Mediamente le masse, in diverse condizioni di lavoro, sono le seguenti:
- Erogatore senza boccione d'acqua: 20 Kg;
- Boccione grande pieno: 20 Kg;
- Peso complessivo a pieno carico: 40 Kg.
Si tratta, dunque, di realizzare una sorta di sensore di peso che, partendo da una massa iniziale, a pieno carico, di 40 Kg, possa fornire un segnale attivo quando scenda, ad esempio, al di sotto di 25 Kg, segno evidente che il liquido sta per finire.
Principio della modifica di una bilancia pesa persone
In teoria si potrebbe utilizzare una bilancia digitale ma occorrerebbe, in questo caso, intercettare la logica di controllo e quella elettronica. Una bilancia meccanica (vedi figura 3), invece, dà più sfogo alla fantasia e, soprattutto, non si pone mai in stato di stand-by.
L'idea è la seguente: occorre creare una sorta di feritoia sul disco graduato, in una determinata posizione, come mostrato in figura 4. Un raggio di luce prodotto da un diodo Led, attraversando la feritoia, comunicherebbe ad un sensore e, quindi, al sistema, che il peso è sceso sotto una soglia minima. Ovviamente, per installazioni professionali, sarebbe meglio utilizzare le più precise ed eleganti, ma costose, celle di carico.
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2601 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
The “Things” IoT stanno aumentando a dismisura nel mondo. Tutto sarà IoT, anche i più piccoli e miniaturizzati oggetti. Guardando una scrivania, ad esempio, penne, matite, lampade, monitor, pc, tutto sarà connesso ad Internet. Questa nuova ed attuale visione mette l’uomo in una grande posizione di comando e di controllo di tutto ma, come ogni cosa, occorre sempre un minimo di prudenza e di moderazione nell’uso degli oggetti dell’Internet delle Cose.
Complimenti per l’articolo Giovanni! Il mondo dell’IoT che ci aspetta e’ spettacolare
Problema installazione su Raspberry Pi 3 B. Ho installato con Etcher, da terminale Mac, e da terminale Linux sia NOOBS che Rasbian in entrambi le versioni (standard e lite) su 4 diffrenti microSD da 32GB classe 6, da 32GB classe 10 da 16 GB HCI. Lo schermo HDMI collegato funziona perfettamente (collegato ad un altro computer). Continua a caricarsi una videata di linee orizzontali e il led verde continua a lampeggiare. Grazie per l’attenzione.
Luca Richelli
Non vorrei RPi3 sia difettoso…..
sicuramente hai provato a formattare la SD a basso livello…..
Hai possobilita’ di provare una SD da 8 Gb o 4 Gb?
Ho risolto. Era un problema di alimentazione. Cambiando alimentatore funziona tutto. Grazie.
Complimenti il mondo dell’IoT , che non conoscevo,,i sta appassionando moltissimo .
Ho provato a realizzare l’applicazione esposta nella seconda puntata del corso sull’IoT ,
ho un problema :le istruzione:
system(“/home/iot/accendi”);
system(“/home/iot/spegni”);
non vengono eseguite.
I programmi :
/home/iot/accendi
/home/iot/spegni
funzionano correttamente.
Ho cercato qualche suggerimento ma non l’ho trovato.
Grazie per l’attenzione
Luigi Barenghi
Salve, grazie dei complimenti.
L’IoT sarà il futuro della nostra vita.
Per l’errore mi sapere servirebbe la tipologia del problema.
Comunque, puo’ provare ad eseguire i programma con permessi di root, tipo:
system(“sudo /home/iot/accendi”);
oppure dia i permessi in esecuzione agli eseguibili con il comando chmod.
Penso sia un problema di permessi.
Magari mi fa vedere il listato oppure mi da’ il messaggio di errore.
Saluti
Giovanni
Buongiorno,
grazie per l’interesse immediato!
Ho provato ad eseguire il seguente programma:
<!– –>
Controllo di un
carico
<?php
if (isset($_POST['on'])) {
system("sudo /home/iot/accendi");
echo "Led is on";
}
if(isset($_POST['off'])) {
system("sudo /home/iot/spegni");
echo "Led is Off";
}
I messaggi "Led is On" e "Led is Off" vengono visualizzati mentre il led non viene acceso.
Se eseguo :
/home/iot/accendi
il led viene acceso
se sostituisco :
system("sudo /home/iot/accendi");
con :
system("ls /home/iot/");
il comando viene eseguito correttamente.
La funzione system non ha alcun effetto sull'eseguibile accendi?
Ancora grazie per l'interessamento.
Luigi Barenghi
Salve.
Ho provato proprio adesso, funziona BENISSIMO.
Ho provato ad accedere nel S.O sia come utente che come root.
Tutto OK. ANche con permessi, senza permessi, funziona sempre.
Magari scriva un “prova.php” con il solo comando
Poi:
– Il server apache sta girando?
– Ha messo il sorgente PHP nella cartella /var/www/html ?
Saluti
GIovanni
Salve,
vorrei sapere qualcosa di più sul comando
handle=popen(“curl http://221.172.183.111/boccione.txt“,”r”);
mi può dare qualche riferimento su internet dove posso approfondire cosa fa di preciso questo comando? in particolare come si usa POPEN e cosa è CURL.
Inoltre, se ho capito bene, all’interno del file “BOCCIONE” ci sono molti valori, con il comando
fscanf(handle,”%d”,&valore);
si legge l’ultimo valore scritto nel file?
grazie
Giovanni
Salve.
Il file “boccione.txt” contiene SOLO un valore, ossia lo stato logico del boccione (0=pieno, 1=vuoto). Tutti i successivi controlli si riferiscono, pertanto, a tale informazione.
La funzione popen() è molto potente, inizializza un “pipe streams” da un processo/file o a un proicesso/file. In questo programma esso è usato per aprire una comunicazione con il file sulla Rete.
Per la documentazione è sufficiente “googlare” per ottenere milioni di esempi e informazioni.
Infine, CURL è un semplice programma che ci permette di operare e comunicare con il Web. Con esso si può ricevere una pagina singola o “ramificata” da Internet, mandare informazioni via protocollo HTTP (con GET e PUT) (di questo vedrà molto su ESPertino, spedire e ricevere files e altro ancora.
Saluti.