Optocoupled inputs for Arduino

luca 14/10/2013 12

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:

12 Comments »

  1. Andrea 11/04/2015 at 21:03 - Reply

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

    • luca 12/04/2015 at 09:21 - Reply

      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?

  2. antonio 02/09/2015 at 18:56 - Reply

    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

    • luca 02/09/2015 at 22:23 - Reply

      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.

      • antonio 03/09/2015 at 15:17 - Reply

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

  3. Nicola 06/10/2015 at 19:20 - Reply

    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.

    • luca 07/10/2015 at 07:38 - Reply

      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.

  4. Pier 23/03/2016 at 08:18 - Reply

    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.

    • luca 24/03/2016 at 09:16 - Reply

      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?

  5. Pier 28/03/2016 at 10:26 - Reply

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

  6. Ernesto 14/04/2016 at 11:51 - Reply

    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

    • luca 19/04/2016 at 14:04 - Reply

      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.

Leave A Response »

This website uses cookies to ensure you get the best experience on our website maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi