9. Protégeons l'Arduino du monde extérieur


Dans ce chapitre au titre étrange, je vais vous présenter un composant incontournable lorsque vient le temps d'interfacer l'Arduino avec d'autres circuits et qu'il est nécessaire de le protéger de tensions qui sont différentes: l'opto-coupleur ou opto-isolateur.




9.1. L'opto-coupleur

Si nous pouvions ouvrir un tel composant et examiner les éléments qui le composent, nous aurions:
  • l'équivalent d'une led,
  • l'équivalent d'un photo-transistor (qui s'apparente à une cellule photo-électrique),
représentés sur ce schéma:

www.ermicro.com/blog

Le fonctionnement est simple: lorsque la led émet (en appliquant un courant entre les bornes 1 et 2), le photo-transistor est activé et autorise le passage d'un courant entre ses deux pôles (4 et 5). On remarque immédiatement l'intérêt de ce composant: il n'y a aucun lien physique entre le circuit qui alimente la led et celui qui sert d'interrupteur. Les deux circuits sont isolés l'un de l'autre! et les tensions qui les traversent peuvent être différentes: 5V et 12V par exemple.

Dans la pratique, il existe de nombreux types d'opto-coupleurs, acceptant différents courants et réagissant plus ou moins vites aux changements d'état... Ici, j'utilise le classique 4n35. Il est très polyvalent lorsqu'on désire simplement protéger deux circuits et que la vitesse de basculement n'est pas primordiale.

Les branchements sont simples: on alimente la led avec un courant de 20 à 60mA, orienté comme s'il s'agissait d'une led habituelle. Les ports 4 et 5 servent d'interrupteur. Dans l'exemple du 4n35, le voltage maximum est de 30V et le courant de 100mA (environ) dans le sens "5 vers 4" soit "collecteur vers émetteur". On fera bien attention aux caractéristiques des opto-coupleurs utilisés. La tension acceptée peut être très différente d'un modèle à l'autre...

On remarquera que les ports utilisés sont les 1, 2, 4 et 5.



9.2. Premier exemple concret: le contrôle d'une sortie

Si nous désirons simuler un interrupteur contrôlé par une sortie de l'Arduino, alors nous construirons le montage suivant:


Dans cet exemple, l'Arduino contrôle un opto-coupleur 4n35 à l'aide du port de sortie 10. Un signal HIGH envoyé sur cette sortie aura pour effet de laisser passer le courant entre les ports 5 et 4 de l'opto-coupleur, illuminant ainsi la led de visualisation. Nous avons ainsi pu contrôler un circuit 12V alors que l'Arduino fonctionne en 5V...

Quelques mots sur ce montage:
  • la résistance 470ohm sur le port 1 du 4n35 protège la led interne
  • le port 5 est connecté à une led de visualisation avec sa résistance de protection
  • les ports 2 et 4 sont reliés au GND
  • les deux GND sont reliés afin d'avoir le même point de référence
  • on prendra soin de bien faire attention au sens des courants qui traversent les ports 1 et 2 ainsi que 5 et 4.

Quelques lignes de programmation permettent d'activer l'interrupteur:

int sortie_opto = 10;

void setup()
{
  pinMode( sortie_opto, OUTPUT );
}

void loop()
{
  // La led de contrôle s'allume pendant 1 seconde
  digitalWrite( sortie_opto, HIGH );
  delay( 1000 );
  // ...et s'éteint pendant une seconde.
  digitalWrite( sortie_opto, LOW );
  delay( 1000 );
}

Remarque: le fonctionnement de ce montage s'apparente à celui utilisant un transistor TIP122 (vu précédemment) dans le sens où il est possible de contrôler un circuit de voltage différent. On peut faire l'essai avec un signal PWM et faire varier l'intensité lumineuse d'une led... Cependant, il faut vérifier les caractéristiques de l'opto-coupleur afin de s'assurer que la vitesse de basculement est suffisemment rapide... Dans le cas du 4n35, j'ai pu faire le test et reproduire l'exemple du fader comme suit:

int sortie_opto = 10;

void setup()
{
  pinMode( sortie_opto, OUTPUT );
}

void loop()
{
  for ( int i = 0; i < 256; i += 10 )
  {
    analogWrite( sortie_opto, i );
    delay( 30 );
  }
  for ( int i = 256; i > 0; i -= 10 )
  {
    analogWrite( sortie_opto, i );
    delay( 30 );
  }
}




9.3. Second exemple: la protection d'une entrée

A l'inverse, il peut être nécessaire de "lire" un signal entrant alors qu'il n'est pas possible de se brancher directement sur le circuit externe. L'opto-coupleur agira exactement comme dans l'exemple suivant, mais en inversant les connections...

Ainsi, le circuit externe contrôlera la led alors qu'une entrée de l'Arduino sera connectée à la partie interrupteur de l'opto-coupleur. Il en résulte le montage suivant (on remarquera l'orientation "tête en bas" de l'opto-coupleur)



Le circuit externe alimenté en 12V est contrôlé par un bouton poussoir... Lorsque le circuit est fermé, la led du 4n35 est alimentée, créant ainsi un jonction entre les ports 5 et 4 de l'opto-coupleur.

Remarque: ici, la logique du signal est différente: lorsque la jonction 5 vers 4 est fermée, le signal produit est LOW.

En effet, si on examine le montage: le port 5 de l'opto-coupleur est connecté d'une part à l'entrée 2 de l'Arduino et d'autre part au +5V par l'intermédiaire d'une résistance de pull-up de 10K. Ainsi, lorsque l'interrupteur est ouvert, le seul circuit possible est du +5V vers l'input 2, créant ainsi un signal HIGH. A l'inverse, lorsque la jonction 5 vers 4 est fermée, l'input 2 de l'Arduino est directement connecté au GND, créant ainsi un signal LOW...

On pourrait tout à fait effectuer le branchement inverse, mais nous avons vu précédemment qu'il était plus facile de détecter un état LOW qu'un état HIGH... ce que nous avons fait ici.

Enfin, pour vérifier le bon fonctionnement, nous connectons une led de contrôle sur le port 6 de l'Arduino. Voyons les lignes de programmation qui sont nécessaires:

int entree_opto = 2;
int sortie_led = 6;

void setup()
{
  pinMode( entree_opto, INPUT );
  pinMode( sortie_led, OUTPUT );
}

void loop()
{
  if ( digitalRead( entree_opto ) == LOW )
  {
    digitalWrite( sortie_led, HIGH );
  }
  else
  {
    digitalWrite( sortie_led, LOW );
  }
}

Encore une fois, nous avons pu utiliser un signal externe 12V sans risque pour l'Arduino.




Aucun commentaire:

Publier un commentaire