Gli opto-interruttori: due impieghi con Arduino

Gli opto-interruttori – o foto-accoppiatori a fessura – sono sensori molto utili, spesso inclusi nei progetti Arduino per rilevare la posizione di oggetti in movimento, misurare la velocità di rotazione o il movimento lineare, la frequenza degli eventi e molte altre cose. Sono facili da usare, ma è importante capire come funzionano, in modo da ottenere buoni risultati. In questo articolo vedremo, in particolare, come usarli in due progetti: la misurazione della velocità di un proiettile (ad es. di un fucile elettromagnetico) e la rivelazione delle gocce di liquido (ad es. di pioggia, per poter intervenire).

Un opto-interruttore – noto anche come foto-interruttore – è un fotosensore in trasmissione che integra gli elementi ottici di ricezione e trasmissione in un unico pacchetto. In pratica, questo dispositivo attiva e disattiva un circuito in modo ottico. È costituito da un alloggiamento in plastica con un LED infrarosso rivolto verso un fototransistor, con in mezzo uno spazio vuoto. Qualsiasi oggetto che passa in tale spazio interromperà il raggio IR e, di conseguenza, accenderà e spegnerà il fototransistor.

L’opto-interruttore è un piccolo contenitore di plastica nera a forma di U che ha quattro gambe: 2 per alimentare il LED a infrarossi su un lato dell’U e 2 per alimentare il transistor sensibile alla luce sull’altro lato della U. Con la sorgente di luce a infrarossi e il transistor in un unico pacchetto, il foto-interruttore impiega la tecnologia trasmissiva per rilevare l’esistenza degli ostacoli, funge da interruttore on/off e può anche rilevare rotazioni a bassa risoluzione o movimenti lineari.

L’esterno, l’interno e il circuito tipico di utilizzo di un opto-interruttore (a sinistra) ed un tipico esempio di opto-interruttore interfacciabile ad Arduino, il MOC7811 (a destra).

Gli oggetti opachi agli infrarossi interromperanno la trasmissione della luce tra il diodo emettitore infrarosso e il fotosensore, il che commuta l’uscita da uno stato “ON” (basso) a uno stato “OFF” (alto). Quando viene posizionato qualcosa tra il diodo IR e il fotosensore, la luce viene interrotta e il flusso di corrente attraverso il fototransistor viene ridotto o interrotto. Ciò può essere facilmente sfruttato per innescare molte cose se la luce viene interrotta, come ad es. un conteggio di tempo.

Pertanto, l’opto-interruttore è ampiamente utilizzato negli interruttori ottici, nei bancomat, nei distributori automatici, nel rilevamento della posizione, nelle attrezzature per l’automazione d’ufficio, etc. L’opto-interruttore MOC7811, ad esempio, è molto veloce e ideale per il conteggio, la sincronizzazione o il rilevamento. Esso può anche venire usato per far scattare un allarme sonoro o una luce che si attiva quando qualcosa viene inserito tra il diodo IR e il fotosensore.

La misura della velocità di un proiettile

Se dobbiamo rilevare, invece, la velocità di un proiettile o di un altro oggetto che può essere fatto passare tramite due opto-interruttori allineati e posti a breve distanza fra loro, il modo più semplice è quello di usare un oscilloscopio. In pratica, basterà alimentare due dei piedini dell’opto-interruttore in questione con una tensione di 5 V, collegare gli altri due a massa e aggiungere due opportune resistenze. Al passaggio dell’oggetto, sull’oscilloscopio si vedranno due “buche” corrispondenti ad altrettante cadute di tensione.

Il circuito di collegamento di un opto-interruttore (LTH-301-32) all’oscilloscopio.

Basta a questo punto determinare il tempo tra le due “buche” prodotte da ciascun opto-interruttore, che è il tempo (t) necessario a un proiettile per percorrere lo spazio (s) tra i due opto-interruttori, il quale viene utilizzato per calcolare la velocità v tramite la nota formula v = s/t. In pratica, basta misurare la distanza in tacchette fra le due “buche” sullo schermo dell’oscilloscopio e tenere conto della base dei tempi utilizzata per sapere a quanto tempo corrisponde ogni tacchetta dello schermo.

Le due “buche” prodotte su uno oscilloscopio dal passaggio di un proiettile nel mezzo di due opto-interruttori posti uno dopo l’altro a pochi cm di distanza. (cortesia M. Thomson)

L’opto-interruttore MOC7811, comunque, è ottimo anche per la connessione e l’utilizzo con Arduino (ad es. Arduino Uno), in modo da poter acquisire il segnale con un computer ed effettuare in modo istantaneo i calcoli sulla velocità. Il modulo dell’opto-interruttore deve essere collegato con Arduino come segue: il piedino Vcc va collegato al terminale +5V; il piedino Gnd va collegato al terminale Gnd; infine, il piedino D0 va collegato al terminale digitale 8 (ovvero “D8”) di Arduino.

Il seguente listato di programma per il software Arduino IDE (che complementa la scheda Arduino) permetterà di leggere il valore del sensore acquisito tramite il terminale digitale di Arduino, poiché si tratta di un sensore digitale. L’uscita del sensore, in altre parole, sarà 0 o 1. Se esiste un ostacolo tra le due pareti del modulo dell’opto-interruttore, l’uscita sarà 1, altrimenti sarà 0. Per esempio, prendete un foglio di carta e inseritelo tra le due pareti. Noterete che il valore va da “basso” ad “alto”, cioè da 0 a 1.

Scarica (copia e incolla) il listato mostrato nella figura qui sopra cliccando qui.

A questo punto, se vogliamo misurare la velocità di un proiettile con Arduino, non è difficile collegare alla scheda Arduino Uno un secondo opto-interruttore e modificare il listato per acquisire anche questo secondo dato, dopodiché misurare l’intervallo di tempo fra l’“1” al passaggio dell’oggetto rilevato dal primo fotosensore e l’“1” al passaggio rilevato del secondo fotosensore.

Ma come fare, in pratica, a misurare il tempo fra i due eventi? Il modo più semplice per misurare il tempo trascorso tra due determinati punti dell’esecuzione del programma è quello di salvare un “timestamp” in corrispondenza di ciascuno punto, dopodiché sottrarre i due “timestamp” ci darà l’intervallo di tempo. Se la precisione non è un grosso problema, si può usare la funzione “millis ()”, che restituisce il numero di millisecondi che sono trascorsi da quando Arduino è stato acceso. Per esempio:

Scarica (copia e incolla) il listato mostrato nella figura qui sopra cliccando qui.

Altrimenti, se è richiesta una maggiore precisione, si può usare, nel precedente listato, la funzione “micros ()” – anziché “millis ()” – che restituisce, in modo analogo, il numero di microsecondi passati dall’accensione di Arduino (con una precisione di 4 o 8 μsec, a seconda della velocità di clock del proprio Arduino).

Tuttavia gli esempi fatti, sebbene semplici e diretti, funzionano la maggior parte del tempo ma non sempre. Il motivo è che i registri che contano milli- o microsecondi dal momento dell’avvio di Arduino hanno una capacità limitata di 32 bit. Ciò significa che quando raggiungono il loro valore più alto possibile (che è 4294967295), vanno in overflow e ricominciano a contare da zero.

Se l’overflow avviene ovunque al di fuori delle due chiamate a millis () o micros (), il codice sopra funzionerà correttamente, perché ts2 sarà maggiore di ts1 e il risultato della sottrazione sarà corretto. D’altra parte, se l’overflow si verifica tra la prima e la seconda chiamata a millis () o micros (), allora c’è un piccolo problema: ts2 non sarà più grande di ts1 e sottrarre ts2 – ts1 produrrà un risultato sbagliato.

L’overflow dei contatori avviene una volta ogni 49,7 giorni per il contatore dei millisecondi, ma nel caso del contatore dei microsecondi ciò accade molto più spesso: ogni 71,5 minuti! In ogni caso, potrebbe non essere sempre possibile tollerare un calcolo errato, anche se si verifica raramente.  In tal caso, il problema può essere risolto calcolando l’intervallo di tempo tra i due timestamp come somma di due sub-intervalli: dt1, che è l’intervallo tra t1 e il punto di overflow (timestamp = 0), e dt2, che è l’intervallo tra 0 e t1.

La rivelazione delle gocce di liquido

Un altro impiego interessante e divertente di un opto-interruttore – in abbinamento ad Arduino – è come “sensore di goccia”. Gli usi in tal senso sono numerosi. Ad esempio, il sensore può rilevare se un sistema di irrigazione (in particolare, goccia a goccia) funziona correttamente e, in caso contrario, avvertire o intervenire in qualche modo, grazie alle possibilità di programmazione di Arduino.

Si noti che esistono in commercio anche dei sensori di acqua o di pioggia, con regolazione della sensibilità e uscita digitale o analogica, interfacciabili altrettanto facilmente ad Arduino (ne trovi alcuni esempi qui). Essi sono adatti per rivelare l’acqua a livelli superiori a quelli rivelabili da un sensore di umidità: ad es. pioggia, allagamento, etc. Tali sensori funzionano come una resistenza variabile che cambia da 100 kOhm se bagnati a 2 MOhm se asciutti. In breve, più bagnata è la scheda del sensore e più corrente sarà condotta.

Un sensore di pioggia o di acqua interfacciabile ad Arduino. Potete trovare degli ottimi sensori di pioggia o di acqua per i vostri progetti con Arduino qui.

Soprattutto quando la quantità di liquido non è superiore a una goccia (10 microlitri), non è possibile utilizzare tali sensori o sensori basati sul peso. Un optointerruttore è l’ideale. Il liquido può essere acqua o un solvente, quindi non è opaco. Il fatto che il liquido sia trasparente non preclude un design ottico: anche il fluido più chiaro rifrange la luce e interrompe un percorso ottico. Inoltre alcuni fluidi, sebbene trasparenti nella luce visibile, sono totalmente opachi, ad esempio, nell’infrarosso.

Una goccia o una corrente di liquido rifrangono il raggio e producono dunque un effetto facilmente rilevabile sull’uscita dell’opto-interruttore. Ora vedremo come usare tale dispositivo per rivelare l’inizio di una pioggia, ad esempio per poter comandare la chiusura elettrica di una tenda o semplicemente per avvisarci di togliere il bucato steso, che altrimenti si bagnerebbe.

Il progetto che ora vedremo per rilevare le gocce d’acqua o di liquido usa un opto-interruttore Liteon LTH-301-32, ottimo a tale scopo perché ha una larghezza della fessura di 15 mm. Esso viene collegato a una scheda Arduino Nano (ma si possono usarne anche altre, ovviamente). Gli altri componenti del circuito sono solo due resistenze, una sul lato led IR (R2) e l’altra sul lato fototransistor (R1).

Lo schema del rivelatore di gocce di liquido realizzato con Arduino.

Si tratta di un dispositivo con il circuito del led IR alimentato a 5V e con corrente massima di 60 mA, mentre il circuito del fototransistor è alimentato anch’esso a 5 V ma la corrente massima di collettore è di 20 mA. Abbiamo quindi tutte le informazioni che ci servono per dimensionare le due resistenze R1 e R2. In generale, il loro valore sarà basato sulla tensione di alimentazione di quel circuito e sulla corrente che vi scorre, e dunque dipende dall’opto-interruttore usato.

La maggior parte dei LED ha una tensione diretta di circa 2 V e utilizza circa 20 mA (o 0,02 A) di corrente, quindi quando si utilizza un’alimentazione a 5 V e un opto-interuttore a 5 V abbiamo: R = V/I = 5 / 0,02 = 250 Ohm, che è il valore minimo da usare per R2 (ma è possibile utilizzare anche resistenze leggermente maggiori, come ad esempio 270 Ohm o la classica resistenza da 330 Ohm).

Per la resistenza R1 (di pull-down, per cui dà una lettura pulita quando non c’è corrente) useremo invece 10 kOhm. Una resistenza di pull-down è collegata a terra (Gnd). Tiene il segnale (logico o non) vicino allo 0 V quando nessun altro dispositivo attivo è collegato al terminale di ingresso della scheda Arduino. Il valore della resistenza di pull-down in generale varia a seconda dei dispositivi specifici coinvolti.

Qui sotto vediamo il semplice sketch che dobbiamo caricare sulla scheda Arduino tramite il software Arduino IDE per poter acquisire i dati dal terminale analogico “2” (A2) della Arduino Nano e, di seguito, un esempio pratico di ciò che – una volta tutto funzionante – mostrerà il serial monitor.

Lo sketch da caricare sulla scheda Arduino con il software Arduino IDE.

 

Il serial monitor con i valori acquisiti dall’opto-interruttore tramite la scheda Arduino.

I numeri in alto nella schermata del serial monitor mostrano il valore prima che il raggio dal Led IR al fototransistor venga interrotto. I numeri in basso si riferiscono, invece, a quando il raggio è interrotto. Per fare uso di questo sistema per comandare qualcosa, tutto ciò che devi fare è impostare un valore di trigger, cioè di riferimento (ad es. 600) al di sopra del quale o al di sotto del quale eseguire un’azione. E qui lascio alla fantasia del lettore la scelta fra le infinite possibili applicazioni.

Leave a Reply