Blog migrato su nuova piattaforma

Disclaimer

Prestare sempre attenzione a seguire le indicazioni fornite in questo blog, soprattutto se si tratta di apparecchiature elettriche collegate alla tensione di 220V. Non mi ritengo responsabile di danni causati dall'aver seguito i consigli qui pubblicati.
Grazie

sabato 29 agosto 2015

Acquisizione dati - Sensore gas remoto




Dopo aver connesso e configurato il ricevitore dati, non rimane altro che predisporre uno o più sensori remoti e iniziare a trasmettere qualche dato.

Niente di meglio che sfruttare il prototipo di rilevatore di gas che avevo a suo tempo già "costruito" e fatto funzionare con una scheda Arduino UNO

Questo è il link al posto in cui avevo descritto qualche esperimento:

Primo esperimento: un semplice rilevatore di gas

Ne faccio una versione semplificata per la semplice rilevazione di gas metano, utilizzando il sensore MQ-4 [Datasheet]



e il trasmettitore wireless RF-433 per inviare i dati al ricevitore.


Il tutto condito da un pò di collegamenti elettrici, led per indicare lo stato del sistema e pulsantino per annullare le segnalazioni.

HARDWARE

Questo è lo schema disegnato su Fritzing:


Oltre al trasmettitore Wireless RF-433 e al sensore del gas MQ-4, abbiamo anche un led rosso, uno verde e uno RGB; inoltre è presente anche un push-button nella parte sinistra dello schema. Chiaramente il tutto condito dalle resistenze necessarie per non bruciare i led, alimentati dalla linea 5V di Arduino, che, a sua volta, è alimentato, tramite trasformatore, a 12V, per garantire un maggior raggio d'azione del trasmettitore wireless, collegato alla tensione di alimentazione di Arduino e non alla linea dei 5V.

PIN 11: push-button

PIN A1: pin analogico del sensore del GAS

PIN 9: trasmissione dati wireless

PIN 12: led rosso per indicazione di attività di trasmissione wireless
PIN 8: led verde per indicazione di attività di campionamento dati dal sensore
PIN 3, 5 e 6: led RGB per indicazione sullo stato del sistema secondo la seguente legenda:

 - spento: valori all'interno della soglia normale;
 - giallo: è stato rilevato almeno un valore sopra la soglia normale ma sotto la soglia di pericolo;
 - rossoè stato rilevato almeno un valore sopra la soglia di pericolo;


Eccolo fisicamente montato e collegato:



FUNZIONAMENTO e MESSAGGISTICA

All'accensione del rilevatore, il sistema avvia una fase di riscaldamento del sensore MQ-4, prima di procedere alla campionatura dei dati; questa fase è necessaria per stabilizzare la precisione del sensore...In questa fase il led RGB lampeggia.

Successivamente alla fase di riscaldamento, inizia la raccolta dei dati.

Il campionamento del segnale del sensore avviene ogni secondo (quindi il led verde, a funzionamento normale, dovrebbe lampeggiare ogni secondo); in questo secondo vengono letti 10 campioni e calcolata la media; ogni 5 secondi viene inviato al ricevitore un segnale calcolato come la media dei 5 segnali campionati (quindi il led rosso, a funzionamento normale, dovrebbe lampeggiare ogni 5 secondi).

In caso di segnale fuori soglia, viene acceso il led RGB con il colore che indica il tipo di gravità (vedi sopra).

Il pulsante presente nel circuito serve semplicemente ad azzerare lo stato del sistema...questo perchè una volta che il sensore rileva dei segnali fuori soglia, accende il led e anche se il sistema torna con valori sotto soglia, il led rimane acceso. Il pulsante serve quindi a spegnere il led. In questo modo se avviene una rilevazione fuori soglia, è possibile accorgersene anche se non si è presenti in quel preciso momento.

Il segnale che ogni 5 secondi viene inviato al ricevitore è una stringa di testo composta nel seguente modo

GAS;VALORE;STATO|

VALORE è la media dei 5 dati campionati, STATO è un valore numerico ed indica eventuali dati fuori soglia con la seguente codifica:

 - 1: ok;
 - 2: warning
 - 3: danger

SOFTWARE

Lo sketch software di Arduino è scaricabile da questo link

DOWNLOAD

Chiaramente, come per il ricevitore, anche qui ho utilizzato le librerie RADIOHEAD per la gestione della scheda Wireless.

Routine di inizializzazione:

- viene inizializzato il ricevitore wireless RF433

- vengono inizializzati i led di stato;

- viene effettuata la fase di riscaldamento del sensore MQ-4

corpo principale del programma:

- la prima cosa che viene fatta nel loop principale e controllare se il pulsante di reset dell'avviso è stato premuto andando a controllare il relativo ingresso digitale (PIN 11); nel caso sia premuto viene messa ad OFF la variabile che gestisce lo stato del rilevatore;

- viene quindi effettuata la lettura del sensore campionando dieci valori e facendone la media; in questo frangente viene acceso il led di lettura (PIN 8);

- ogni 5 letture, effettuate ogni secondo, viene calcolato il dato media da utilizzare per il controllo dello stato e da inviare al ricevitore tramite la rete Wireless RF-433;

- il led di stato (PIN 3, 5 e 6) si aggiorna di conseguenza ed in caso di valore fuori soglia si accende del colore relativo;

- il dato calcolato viene inviato al ricevitore tramite Wireless RF-433; in questo frangente viene acceso il led di invio dati (PIN 12);

Ecco un video del funzionamento:



sabato 8 agosto 2015

Acquisizione dati - Il ricevitore




Iniziamo la descrizione dei componenti del sistema: Il Ricevitore.

Eccolo ancora in versione "prototipo"


E' composto da una scheda Arduino Uno, a cui è collegato lo shield ethernet per l'accesso alla rete locale e il ricevitore wireless RF433.

FUNZIONAMENTO e PROTOCOLLO

Il ricevitore wireless riceve i messaggi inviati dai diversi sensori e li rigira al server WEP/APP tramite chiamata HTTP; in sostanza agisce da semplice router.

I protocolli di comunicazione sono molto semplici e attualmente non sicuri, quindi per adesso il sistema non può girare su rete pubblica.

Il messaggio che il sensore invia al ricevitore è una stringa composta nel seguente modo:

SENSORE;VALORE;STATO|

dove SENSORE è il nome del sensore, VALORE è il valore corrente rilevato dal sensore e STATO e una particolare condizione del sensore (ALLARME, WARNING etc etc)

Il ricevitore prende questa stringa e la invia al server WEB/APP tramite la seguente chiamata HTTP GET:

http://NOMESERVER/data.php?u=PASSWORD&d=STRINGA

dove NOMESERVER è il dominio dove gira l'applicazione WEB di acquisizione dati, PASSWORD è una parola segreta conosciuta anche dal server WEB/APP e STRINGA è il dato del sensore.

Come già detto prima, il protocollo di comunicazione è molto banale e non esiste meccanismo di ACK...per adesso è solo un prototipo per verificarne il funzionamento logico...

HARDWARE

Schema Fritzling (approssimato)


PIN 2 in OUTPUT per il led di stato RF (ROSSO), indicante attività su ricevitore Wireless;
PIN 3 in OUTPUT per il led di stato ETH (VERDE), indicante attività su scheda di rete;
PIN 5V per alimentare il ricevitore Wireless e i led;
PIN GND per dare la massa al ricevitore Wireless;
PIN 7 in INPUT per i dati del ricevitore;

L'ethernet shield è collegato all'Arduino UNO, il tutto alimentato con 5V esterni.

SOFTWARE

Routine di inizializzazione:

- viene inizializzato il ricevitore wireless RF433 utilizzando la libreria RadioHead;

- viene configurata la scheda di rete utilizzando la libreria standard Ethernet; in questo particolare caso viene assegnato un indirizzo IP statico (ma nulla vieta di usare il DHCP se la rete locale lo prevede);

- vengono inizializzati i led di stato;

corpo principale del programma:

- il processo si mette in attesa di ricevere un segnale sul ricevitore wireless RF433;

- non appena viene ricevuto un messaggio viene acceso il led di stato RF e viene inviato il messaggio al server tramite chiamata HTTP;

- durante l'invio viene acceso il led di stato ETH che si spegne al termine della chiamata HTTP;

Qui potete trovare il codice sorgente dello sketch del ricevitore: DOWNLOAD

Ecco un video del ricevitore in azione...



sabato 1 agosto 2015

Il primo progetto di acquisizione dati




Ho iniziato la progettazione del mio primo sistema di acquisizione dati con Raspberry PI e Arduino. L'idea è quella di avere una rete di sensori di acquisizione che trasmettono i dati ad una centrale che tramite rete ethernet comunica con un server per la memorizzazione.

I principali componenti sono:

- uno o più rilevatori
- un ricevitore
- un server DB per la memorizzazione
- un server WEB/APP per l'acquisizione e il monitoraggio in remoto

Ecco lo schema:



Un pò più in dettaglio...

RILEVATORI

Possono comunicare i dati con diverse modalità:

- wireless RF-433 verso il ricevitore
- ethernet verso il ricevitore
- USB verso il server

Possono essere delle schede Arduino, Raspberry o altro..
In funzione del tipo di comunicazione utilizzano ulteriori schedine di interfaccia e/o led di controllo.

RICEVITORE

Riceve i dati via wireless RF-433 o via ethernet.
Tramite ethernet trasmette i dati per la memorizzazione al server WEB/APP

E' costruito con una scheda Arduino, sulla quale è montato lo Shield Ethernet e il ricevitore wireless RF-433.
Sono presenti dei led di controllo.

SERVER WEB/APP

Riceve i dati dal ricevitore tramite ethernet o da eventuali sensori collegati direttamente all'USB.
Memorizza i dati sul server DB
Esegue il software WEB per monitoraggio remoto

Il server WEB/APP scelto è il famoso e comune Apache HTTPD, installato su Raspberry, sul quale gira la distribuzione linux Fedora.

Il software di monitoraggio è scritto in linguaggio PHP con interfaccia Bootstrap / HTML5, fruibile anche da dispositivi mobile.

SERVER DB

Memorizza fisicamente i dati ricevuti dal server WEB/APP.

Il software scelto come motore DB è Mysql Community Edition e verrà installato sullo stesso Raspberry dove risiede il server WEB/APP

venerdì 31 luglio 2015

Comunicazione Wireless Low Cost con Arduino




E' passato un pò di tempo dal mio ultimo post, ma purtroppo impegni di lavoro e altro mi hanno tenuto un pò lontano dai miei "esperimenti" con Arduino e Raspberry.

Finalmente nell'ultimo periodo ho trovato un pò di tempo a disposizione ed ho continuato la mia sperimentazione.

Se vi ricordate, qualche mese fa mi era arrivato, insieme allo Starter Kit Arduino, anche una coppia di moduli (ricevitore e trasmettitore) per la comunicazione Wireless low cost RF 433 Mhz.


Ho quindi fatto qualche prova di comunicazione tra due Arduino, utilizzando le librerie RadioHead.

Sia al ricevitore che al trasmettitore ho montato una piccola antenna fatta in casa...e per aumentare il raggio d'azione, il trasmettitore è stato alimentato a 12V. I due dispositivi riuscivano a comunicare anche tra due piani diversi della casa...

Ecco il ricevitore:



...e il trasmettitore:



Il test è stato un semplice invio di stringhe di testo tra i due arduino...il ricevitore era collegato al PC in modo tale da poter verificare, stampando su porta seriale le stringhe ricevute, l'effettivo funzionamento della comunicazione.

Esito positivo dei test...è arrivato il momento di mettere in campo tutte le esperienza fatte fin'ora e costruire qualcosa di utile...

sabato 14 marzo 2015

Music Server su Raspberry PI




Visto che ormai ho un computer con un consumo di corrente irrisorio che mi permette di tenerlo perennemente acceso e connesso alla rete locale, perchè non sfruttarlo anche per altre cose utili e meno utili???

Ho letto in giro su internet che esistono degli ottimi software per trasformare un pc/server linux in un media center...io ne cerco uno che possa funzionare in modalità "terminale" perchè per non occupare risorse inutilmente non voglio caricare in memoria l'ambiente grafico del sistema operativo...

Ho trovato un fantastico software che fa al caso mio...MPD - Music Player Daemon (http://www.musicpd.org/)


E' un software per linux che gira come Daemon (quindi come servizio) e permette di mandare in esecuzione musica di diversi formati, grazie al supporto di plugin e librerie. La cosa interessante è che può essere controllato via rete e può trasmettere anche la musica in streaming HTTP. Permette inoltre di gestire una libreria audio organizzata per cartelle con la possibilità di creare diverse playlist.

E' stato scritto e pensato per utilizzare pochissime risorse e quindi gira bene anche sul Raspberry PI senza appesantire il sistema.

Esistono numerose applicazioni client che ne permettono la completa gestione...applicazioni che girano anche su smartphone Android e iOS...

L'installazione è semplice in quanto per la distro Fedora Remix 21 (il sistema operativo che attualmente ho installato sul mio Raspberry PI) esiste direttamente il package da installare tramite YUM nel modo standard.

Una volta installato con il semplice comando yum install mpd è necessaria una piccola configurazione per poter essere utilizzato.

Il file di configurazione si trova in /etc/mpd.conf.

Le cose importanti da configurare sono l'impostazione del percorso dove si trovano i file audio che saranno aggiunti alla libreria, l'indirizzo di rete e la relativa porta su cui il servizio deve rimanere in ascolto per eventuali connessioni client ed infine le periferiche audio che si dovranno gestire...

Nel mio caso ho utilizzato un'unica periferica audio che attiva l'uscita jack del Raspberry PI; uscita che ho collegato con un cavetto RCA all'impianto Stereo.



Eventualmente si possono attivare altre periferiche di uscita e/o gli stream http.

Una volta effettuata la configurazione nel modo opportuno è sufficiente mandare in esecuzione il servizio. Da questo momento tutti i client connessi nella stessa rete del Raspberry saranno in grado di connettersi all'indirizzo ip e alla porta specificati nel file di configurazione.

Naturalmente è opportuno impostare l'esecuzione del servizio all'avvio del sistema, così nel caso raspberry si riavvii, il servizio parta in automatico senza nessuna necessità di intervento manuale. A tale scopo è possibile impostare un avvio silente che non manda in esecuzione direttamente il servizio MPD ma solo un demone che attiva il servizio all'arrivo della prima connessione...questo per non sprecare risorse inutili in caso di non utilizzo. Per fare ciò è sufficiente impostare all'avvio il servizio mpd.socket al posto di mpd.service.

Chiaramente, nel caso sia attivo il firewall sul Raspberry (ad esempio iptables), è necessario lasciare passare i pacchetti sulla porta di comunicazione del servizio.

Ad esempio, nel mio caso il raspberry ha indirizzo ip 192.168.1.3 e il servizio MPD è in ascolto sulla porta 6600 (quella di default). Quindi sul firewall iptables ho configurato la porta 6600 in modo tale che lasci passare i pacchetti in ingresso.

Ultima cosa che rimane da fare è quella di utilizzare un client da remoto...quindi installo sia sul mio smartphone che sul tablet (entrambi Android) il software MPDroid, che si trova facilmente su Google Play ed è totalmente gratuito.


Qualche screen...

Smartphone



Tablet


Alternativa per sistemi operativi iOS è MPoD, su Apple Store, anche'esso gratuito.


Non rimane nient'altro che accendere lo stereo e alzare il volume :)

venerdì 6 marzo 2015

Raspberry PI 2 - E' arrivato...




Dopo qualche giorno di attesa è finalmente arrivato il corriere con la sorpresa tanto aspettata...il nuovo Raspberry PI 2...

Eccolo in tutto il suo splendore...



Le caratteristiche tecniche sono di tutto rispetto e questo aggeggino è assimilabile del tutto ad un vero e proprio PC...con i vantaggi di avere un consumo bassissimo e un'occupazione di spazio del tutto ridotta...

Ecco le caratteristiche:

- Processore quad-core ARM Cortex-A7 900MHz
- 1GB RAM
- 4 porte USB
- 40 pin GPIO
- Porta HDMI
- Porta Ethernet
- jack 3.5mm per audio / video composito
- Lettore Micro SD

Non ha memoria interna ed è quindi necessario utilizzare una scheda micro SD come "Hard Disk"...io ho optato per una Sandisk da 16GB, che dovrebbe essere più che sufficiente per il sistema operativo + varie ed eventuali...

Come sistema operativo, andrò ad installare Fedora 21 Remix, versione ottimizzata per Raspberry della famosa distro linux Fedora...

Bando alle ciance, iniziamo a far lavorare il nuovo giocattolino...

venerdì 23 gennaio 2015

Test dello shield Ethernet




Eccoci arrivati al secondo test.
La prova dello shield ethernet con Arduino Uno Rev 3.


L'idea è quella di collegare lo shield in rete locale e creare un piccolo web server che risponda a delle richieste http fatte via browser per eseguire dei comandi sui dispositivi fisici collegati.

Arduino mette a disposizione la libreria Ethernet, che permette facilmente la gestione dello shield. Infatti con un paio di righe di codice il dispositivo entra in rete utilizzando il protocollo dhcp (se la rete locale lo gestisce) oppure tramite l'impostazione manuale dei parametri di rete (ip, dns, gateway, etc etc).

Il collegamento è fatto direttamente sulla scheda Arduino, come la maggior parte degli shield...I pin 10, 11, 12 e 13 vengono usati dallo shield e quindi non possono essere usati per altri scopi.

Per il nostro test, colleghiamo due led alle uscite digitali 2 e 8. Faremo in modo che Arduino, a fronte di opportune chiamate http, accenda e spenga i due led. Per raggiungere il nostro scopo utilizziamo un tablet che, connesso in rete, effettui le chiamate http per controllare i led.

Il nostro Arduino quindi si metterà in ascolto sulla porta 80 in attesa di ricevere chiamate dai client...Non appena arriverà una chiamata, in base ai parametri ricevuti, deciderà di attivare / disattivare le uscite che pilotano i led.

Ecco il video dimostrativo:



domenica 18 gennaio 2015

Primo esperimento: un semplice rilevatore di gas




Iniziamo a mettere insieme un pò di pezzi del nostro starter kit più qualche altro dispositivo acquistato e partiamo con la prototipazione di un rilevatore di gas "casalingo" utilizzando il sensore MQ-4.

A chi interessa, questo è il datasheet


Il sensore, già montato su scheda, fornisce 4 pin per i collegamenti:

- Vcc: tensione di alimentazione 5V, perfettamente compatibile con Arduino;
- GND: connessione a massa;
- AD: uscita analogica, proporzionale al valore di gas rilevato nell'aria;
- D0: uscita digitale triggerata; fornisce un valore di uscita ALTO quando il valore di gas rilevato supera una certa soglia; soglia impostabile tramite apposito trigger;


Noi useremo solo il pin di uscita analogico, che collegheremo ad un ingresso analogico di Arduino.

Il sensore ha bisogno di una fase di preriscaldamento prima di fornire rilevazioni attendibili.

Nel nostro prototipo, a scopo prettamente didattico e per prendere un pò di confidenza, inseriamo anche:

- un rilevatore di temperatura LM 35
- un display LCD 16X2 retroilluminato con driver Hitachi HD44780
- un Buzzer
- un led
- un potenziometro

Nel display, il cui contrasto è controllato dal potenziometro, visualizziamo i dati acquisiti dal sensore di gas e di temperatura; il led lo utilizziamo per indicazione dello stato del gas presente nell'aria e il Buzzer è utilizzato per segnalare una rilevazione alta di gas.

Video dimostrativo



venerdì 16 gennaio 2015

Arduino Uno Rev 3 Starter Kit




Dopo qualche giorno di ricerca e indagine di mercato abbiamo acquistato su ebay lo starter kit con la scheda Arduino Uno...

...arrivato velocissimo qualche giorno dopo...


Ecco il contenuto

  • 1pz Arduino UNO R3 sigillato, ORIGINALE made in Italy
  • 1pz Cavo USB 50cm
  • 1pz Breadboard 830 punti di contatto
  • 1pz Display LCD 16X2 retroilluminato blu con caratteri bianchi, driver Hitachi HD44780, con connettori già saldati
  • 2pz Potenziometro lineare 10Kohm
  • 2pz Manopole per potenziometro
  • 1pz Connettore batteria 9V jack 2,1mm
  • 65pz Jumpers (ponticelli flessibili)
  • 10pz Pulsanti
  • 1pz Buzzer
  • 1pz relè 5V 10A 250VA
  • 1pz Sensore di temperatura LM35
  • 2pz Transistor BC547
  • 1pz Sensore di luminosità, fotoresistenza LDR
  • 10pz LED rossi
  • 10pz LED gialli
  • 10pz LED blu
  • 10pz LED verdi
  • 10pz LED bianchi
  • 1pz LED RGB anodo comune
  • 2pz condensatore 4,7uF 100V
  • 5pz Diodi 1N4007
  • 10pz Resistenze 1Kohm
  • 10pz Resistenze 10Kohm
  • 10pz Resistenze 4,7Kohm
  • 20pz Resistenze 470ohm
Diciamo che c'è di tutto e di più per fare già un pò di cose...alla modica cifra di circa 40 euro

Nello stesso ordine abbiamo acquistato anche:

una coppia di moduli (ricevitore e trasmettitore) per la comunicazione low cost RF 433 Mhz


lo shield ethernet basato sul chip W5100 con lettore sd card


un sensore per il gas metano MQ-4


alcuni led RGB catodo comune


Bando alle ciance, è arrivato il momento di fare qualche esperimento concreto...

domenica 11 gennaio 2015

Una nuova avventura...




Benvenuti a tutti in questa nuova avventura nel mondo dell'elettrotecnica e informatica...

Finalmente dopo diverse pensate e ricerche su internet, ho deciso anch'io, come tanti altri, di immergermi nel mondo di Arduino e dintorni...

Elettronica ed informatica insieme mi hanno sempre appassionato e, grazie alle dritte di Piero, sono riuscito a colmare le lacune lato elettrico ed elettronico e quindi avere le basi per poter fare qualcosa di utile e completo...

...chi mi conosce sa già che sto portando avanti, sempre insieme a Piero, un progetto tanto ambizioso quanto stimolante...la costruzione di un simulatore di volo (vedi www.mylearjet45.net)

In questo blog invece voglio raccontare i miei sforzi nella prototipazione di circuiti inerenti la domotica...utilizzando principalmente le schede Arduino e Raspberry PI...con relative espansioni

Per chi non le conoscesse:

Arduino



E' una piattaforma elettronica opensource basata su hardware e software facili da usare. Ne esistono diversi modelli che variano in funzione di caratteristiche tecniche e dimensioni; la scelta, quindi, viene effettuata in funzione degli obiettivi.

Molto utile per chi vuole iniziare è l'acquisto dello Starter Kit che contiene la scheda Arduino più tutta una serie di accessori utili a realizzare piccoli progetti.

Attraverso ingressi e uscite digitali e la programmazione software si possono realizzare dei veri e propri circuiti per interfacciarsi a sensori e pilotare attuatori.

Sono presenti numerose schede di espansione (chiamate shield) per aggiungere funzionalità, come ad esempio la connettività wifi / ethernet oppure la ricezione di segnali infrarossi o bluetooth oppure la gestione delle schede sd, etc etc

Il linguaggio di programmazione utilizzato si basa sul c, e anche chi non è molto competente sotto quest punto di vista, trova a disposizione tantissimi esempi da cui partire facilmente adattabili ai propri scopi.

Trovate tutte le info sul sito ufficiale www.arduino.cc

Raspberry PI



A differenza di Arduino, è un vero e proprio computer in miniatura in grado di far girare distribuzioni linux. È equipaggiato con diverse porte usb, uscita hdmi, jack per audio/video, processore e ram..insomma un vero e proprio pc ma con dimensioni pari ad una carta di credito..e consumi bassissimi...
...come Arduino ha diversi ingressi e uscite digitali e analogiche GPIO (General Purpouse Input Output)

È presente in diverse configurazioni tecniche...l'ultimo modello di Febbraio 2015, il Raspberry Pi 2 Model B, è equipaggiato con

  • Un processore ARM Cortex-A7 quad-core da 900MHz
  • 1 GB RAM
  • 4 porte USB
  • 40 pin GPIO
  • Porta HDMI A/V
  • Porta Ethernet
  • Jack da 3.5mm per audio e video composito
  • Interfaccia per modulo Camera (CSI)
  • Interfaccia per modulo Display (DSI)
  • Slot per Micro SD
  • VideoCore IV per grafica 3D

Per ulteriori info www.raspberrypi.org

Entrambe le schedine, combinate insieme, possono essere usate per infiniti progetti..il limite è solo la fantasia...

È arrivato il momento di iniziare...e lo facciamo con Arduino...attendiamo l'arrivo dello Starter Kit Arduno Uno Rev 3...