This small tutorial will explain how to build a circuit for optocoupling Arduino input PINs…
Optocoupler
An optocoupler is an electronic component that transfers a signal between two circuits with a galvanic isolation, i.e. without current flow between them.
The optocoupler usually consists of a LED and a photoresistor/phototransistor: the input signal “powers on” the LED and the photoelement detects incoming light and generates electric energy:
With Arduino sometimes you need to “read” input signals with a voltage higher than the value Arduino’s PINs can tolerate or you want – for safety – to isolate high voltage (for example mains) from the microcontroller.
In this example I chose a widely-used optocoupler, named 6N137 (datasheet).
Schematics
The schematics is very simple:
The input signal is sent to the PINs of the internal LED (2-3) through the R1 resistor that limits the current. The datasheet says that the recommended maximum input current is 15mA: a resistor of 1Kohm is therefore perfect if the input voltage is 15V.
A pull-up resistor is connected to the output PIN (6) and the IC is powered using PIN 5 (ground) and 8 (VCC).
Building
The circuit above is so simple that I built it on a perfboard:
At the and, a photo with my circuit connected to Arduino:
Ciao vorrei sapere come faccio a collegare un sensore pir con questo circuito. Il sensore ha tre pin vcc gnd e di segnale
Ciao Andrea, in linea generale colleghi massa e segnale ai due ingressi dell’optoisolatore (il segnale in X1-1) mentre l’alimentazione al sensore è diretta. Come mai pensi ad un optoisolamento x il sensore?
ciao mi hanno consigliato di usare questo optoisolatore per comandare il volume di un amplificatore con arduino. Quest’amplificatore ha 2 pulsanti per alzare o abbassare il volume (quindi penso che ce qualche potenziometro digitale) se collego 4 fili sui 2 pulsanti (2 per ogni pulsante) e a loro volta li collego a 2 optoisolatori come questo pensi che vada bene? attualmente ho collegato 2 relè ai 2 pulsanti e funziona bene solo che da fastidio quel rumore che emette il relè ogni volta che alzo o abbasso il volume col telecomando
ciao Antonio, se ho capito bene vuoi comandare la chiusura dei due pulsanti con arduino… dipende molto da quello che “succede” quando chiudi il pulsante, non è così semplice come sostituire il pulsante con un relay.
quando si chiude il pulsante si abbassa o alza il volume (a seconda del pulsante che si schiaccia), allora cosa mi consigli di fare?
Ciao Luca, io avrei una domanda da farti. Praticamente io ho la necessità di collegare una gettoniera ad arduino. Dalla gettoniera ho 3 cavi. di cui due di alimentazione a 12v e uno che invia gli impulsi in base alla moneta inserita. Mi hanno detto di collegare ad arduino, oltre al cavo degli impulsi, anche quello della massa perchè facendo ciò riescono a comunicare (arduino e gettoniera). Il punto è che le due masse hanno due voltaggi diversi, uno a 5v (arduino) e uno a 12 volt (gettoniera). Per questo motivo mi hanno consigliato un optoisolatore ma io non ho la più pallida idea di quale acquistare e di come collegarlo. Mi potresti aiutare per favore? grazie mille in anticipo e scusa per il tema.
Ciao Nicola, usa lo schema di questo articolo, collegando ad X1-1 il segnale della gettoniera e ad X1-2 la massa. Collega poi OUT ad Arduino: su questo PIN avrai il segnale (gli impulsi) “scalati” a 5V e quindi non rischierai di bruciare il PIN di Arduino a cui lo colleghi.
Ciao, complimenti per l’articolo.
Ho una domanda, forse un po’ banale, questo circuito può essere utilizzato (o adattato) per isolare un motore stepper da arduino? Il fatto è che i motori stepper hanno 4 fili e non capisco come fare i colegamenti. Grazie.
Ciao Pier, normalmente tra lo stepper e arduino c’è un driver o un ponte ad H che di fatto realizza un certo isolamento… che tipo di collegamento vuoi optoisolare?
Volevo separare il motore da arduino, per stare tranquillo, mi chiedevo se questo tuo optoisolatore fosse adatto allo scopo.
Ciao Luca,
io avrei un’esigenza un pò diversa ma probabilmente la soluzione è simile a quanto tu hai realizzato.
Dovrei portare all’ingresso I/O di Arduino una tensione che mi esce da un pin di un Micro avente una variazione di tensione da 15mV a 70mV. In pratica devo far leggere questa tensione ad Arduino e per evitare problemi al micro prevederne acne un opto-isolamento. Da tensione disponibile sul PIN del micro e dell’ordine come dicevo di poche decine di mV e quindi Arduino non la può leggere ed interpretare. Esiste un optoisolatore che ha al suo interno un operazionale in grado di accettare tensioni in ingresso dell’ordine dei mV ? magari con regolazione della soglia tramite trimmer ?
Grazie per l’eventuale consiglio.
Ernesto
Ciao Ernesto… una tensione così bassa va gestita con un operazionale per portarla nel range 0-5V che un ADC di Arduino può leggere… non ti serve un optoisolatore.
ciao luca.
Il circuito puo’ soppotare i 220v AC in ingresso?
si, regolando opportunamente la resistenza
Ciao Luca, l’optoisolatore e il fotoaccoppiatore sono lo stesso componente? Ovvero le due parole sono sinonimi? Grazie.
Ciao Flavio. Sì, uso i due termini in maniera analoga…
Ciao! Se volessi regolare una pompa da 12 V con questo dispositivo connesso ai 5 V di arduino, riuscirei?
ciao, per la tua esigenza basta un rele comandato da arduino