Optocoupled inputs for Arduino

by luca
18 comments

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).

You’ll probably find on Internet some schematics that add a pull-up resistor to PIN 7 too but the datasheet says (cfr note 3) that the device has an internal pull-up resistor.

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:

Related Posts

18 comments

Andrea Saturday April 11th, 2015 - 09:03 PM

Ciao vorrei sapere come faccio a collegare un sensore pir con questo circuito. Il sensore ha tre pin vcc gnd e di segnale

Reply
luca Sunday April 12th, 2015 - 09:21 AM

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?

Reply
antonio Wednesday September 2nd, 2015 - 06:56 PM

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

Reply
luca Wednesday September 2nd, 2015 - 10:23 PM

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.

Reply
antonio Thursday September 3rd, 2015 - 03:17 PM

quando si chiude il pulsante si abbassa o alza il volume (a seconda del pulsante che si schiaccia), allora cosa mi consigli di fare?

Reply
Nicola Tuesday October 6th, 2015 - 07:20 PM

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.

Reply
luca Wednesday October 7th, 2015 - 07:38 AM

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.

Reply
Pier Wednesday March 23rd, 2016 - 08:18 AM

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.

Reply
luca Thursday March 24th, 2016 - 09:16 AM

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?

Reply
Pier Monday March 28th, 2016 - 10:26 AM

Volevo separare il motore da arduino, per stare tranquillo, mi chiedevo se questo tuo optoisolatore fosse adatto allo scopo.

Reply
Ernesto Thursday April 14th, 2016 - 11:51 AM

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

Reply
luca Tuesday April 19th, 2016 - 02:04 PM

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.

Reply
ROBERTO MARINELLO Thursday September 20th, 2018 - 03:57 PM

ciao luca.
Il circuito puo’ soppotare i 220v AC in ingresso?

Reply
luca Saturday September 22nd, 2018 - 05:36 AM

si, regolando opportunamente la resistenza

Reply
Flavio Toniutti Monday December 24th, 2018 - 12:04 AM

Ciao Luca, l’optoisolatore e il fotoaccoppiatore sono lo stesso componente? Ovvero le due parole sono sinonimi? Grazie.

Reply
luca Friday December 28th, 2018 - 02:23 PM

Ciao Flavio. Sì, uso i due termini in maniera analoga…

Reply
Matteo Thursday July 11th, 2019 - 06:47 PM

Ciao! Se volessi regolare una pompa da 12 V con questo dispositivo connesso ai 5 V di arduino, riuscirei?

Reply
luca Wednesday July 17th, 2019 - 10:00 AM

ciao, per la tua esigenza basta un rele comandato da arduino

Reply

Leave a Comment

twelve + 14 =