Arduino - Optocoupleur PC817 : Surveiller un Signal d'Entrée 12V/24V DC
Une broche d'entrée Arduino est conçue pour 5V et rien de plus, donc câbler directement une ligne 12V ou 24V dessus détruira la broche. L'optocoupleur PC817 résout ce problème de manière sûre : il transmet le signal sous forme de lumière à travers un espace isolant, de sorte que l'Arduino peut savoir si la tension externe est présente sans jamais la toucher électriquement.
La manière la plus simple de l'utiliser est un module d'isolation à optocoupleur PC817 prêt à l'emploi : la résistance et une LED d'état sont déjà sur la carte, et les fils externes vont dans des borniers à vis. Ce tutoriel utilise le module comme solution principale.
Dans ce tutoriel, nous allons apprendre :
- Comment fonctionne l'optocoupleur PC817
- Comment choisir le bon module pour un signal 3,3V, 5V, 12V ou 24V
- Comment câbler le module à l'Arduino
- Comment se brancher en parallèle sur un appareil pour savoir s'il fonctionne
- Comment savoir si votre module est actif à l'état BAS ou actif à l'état HAUT
- Comment programmer l'Arduino pour lire l'entrée isolée

C'est la méthode standard pour détecter en toute sécurité un signal 12V DC ou surveiller une sortie d'automate 24V avec une carte basse tension. C'est aussi la réponse la plus simple à une question qui revient sans cesse dans un atelier ou une salle des machines : cette pompe, ce chauffage, cette lampe ou ce moteur fonctionne-t-il vraiment en ce moment ? L'Arduino doit seulement voir si l'alimentation arrive jusqu'à l'appareil, et le PC817 lui permet de le voir à distance de sécurité.
Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Démarrage DIYables STEM V3 (Arduino inclus) | |
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
Vous n'avez besoin que d'UN seul module : celui qui correspond à la tension du signal que vous voulez surveiller.
À Propos de l'Optocoupleur PC817
Le PC817 est un optocoupleur à 4 broches, aussi appelé photocoupleur ou opto-isolateur. À l'intérieur, une LED infrarouge fait face à un phototransistor de l'autre côté d'un espace isolant : lorsque le courant traverse la LED, sa lumière active le transistor, de sorte que le signal passe sous forme de lumière et non d'électricité, ce qui explique pourquoi les deux côtés restent électriquement séparés.
Cet espace est prévu pour une isolation de 5000 Vrms pendant une minute, donc un défaut côté 12V ou 24V ne peut pas atteindre l'Arduino.
Un module d'isolation à optocoupleur PC817 est cette puce montée sur un petit circuit imprimé avec la résistance série déjà installée, une LED d'état, des borniers à vis pour le signal externe et des connecteurs à broches pour l'Arduino. Les modules existent en versions 1, 2, 4 et 8 canaux.
Les valeurs utiles de la fiche technique du PC817 :
- Tension directe de la LED (Vf) : environ 1,2V typique, 1,4V max
- Courant direct de la LED (If) : 20mA max en continu, 5mA à 20mA est la plage normale, 10mA est une bonne cible
- Tension collecteur-émetteur de sortie (VCEO) : 35V max
- Courant de collecteur de sortie (IC) : 50mA max
- Dissipation de puissance du collecteur : 150mW
- Tension d'isolation : 5000 Vrms pendant 1 minute
- Rapport de transfert de courant (CTR) : 50% à 600% selon le rang (rang A 80-160%, B 130-260%, C 200-400%, D 300-600%)
- Vitesse de commutation : temps de montée environ 4us, temps de descente environ 3us
- Température de fonctionnement : -30 à +100 degrés Celsius
De Quel Module Optocoupleur Ai-je Besoin ?
C'est la seule décision que vous devez prendre correctement avant d'acheter. La résistance du module est déjà installée et elle est dimensionnée pour une seule tension d'entrée, donc le module est vendu en trois variantes distinctes. Regardez le signal que vous voulez surveiller, puis achetez celle qui correspond :
| Signal à surveiller | Module à acheter |
|---|---|
| Logique 3,3V ou 5V | Module 3-5V |
| 12V DC | Module 12V |
| 24V DC | Module 24V |
Avec un module, vous ne calculez jamais de résistance. Choisir la variante, C'EST la décision de résistance, déjà prise pour vous.
WARNING
N'utilisez pas un module avec la mauvaise tension. Un module 12V alimenté par une ligne 24V reçoit environ le double du courant prévu dans sa LED interne et sera endommagé. Un module 24V alimenté par une ligne 12V est sous-alimenté, donc la sortie peut commuter en retard, commuter de façon peu fiable, ou ne jamais commuter. Aucune de ces erreurs ne se signale d'elle-même : vous vous retrouvez simplement avec un module mort ou une lecture à laquelle vous ne pouvez pas vous fier.
※ Note:
Un signal 5V ou 3,3V vaut aussi la peine d'être isolé. L'isolation consiste à couper le chemin de masse, pas seulement à gérer une haute tension, elle est donc utile dès que les deux circuits sont alimentés par des alimentations séparées, se trouvent aux extrémités opposées d'un long câble, ou que l'un d'eux est électriquement bruyant, comme un driver de moteur ou la carte de commande basse tension à l'intérieur d'un appareil alimenté sur le secteur. C'est le rôle du module 3-5V.
Comment Ça Fonctionne
- Lorsque le signal externe est présent sur les bornes d'entrée, le courant traverse la résistance du module et la LED interne. La LED s'allume et active le phototransistor, et la broche OUT du module change d'état.
- Lorsque le signal externe est absent, la LED est éteinte, le phototransistor est bloqué, et OUT revient à son état de repos.
La LED d'état du module s'allume en même temps que la LED interne, vous pouvez donc voir de vos propres yeux que le côté entrée fonctionne.
Le PC817 ne mesure pas la tension. Il indique seulement à l'Arduino si le signal externe est présent ou non. Si vous avez besoin de la valeur réelle plutôt que d'une réponse oui/non, consultez Arduino - mesurer la tension..
Schéma de Câblage
Câbler le Module Optocoupleur PC817 à l'Arduino
Le module a deux côtés, et c'est tout l'intérêt : les borniers à vis appartiennent au circuit externe, le connecteur à broches appartient à l'Arduino, et rien ne passe de l'un à l'autre.
- Le signal externe 12V/24V doit être connecté au bornier à vis IN+
- La masse du circuit externe doit être connectée au bornier à vis IN-
- La broche VCC du module doit être connectée à la broche 5V de l'Arduino
- La broche GND du module doit être connectée à la broche GND de l'Arduino
- La broche OUT du module doit être connectée à la broche D2 de l'Arduino

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Il n'y a aucune résistance série à ajouter dans ce câblage. Le module l'intègre déjà.
※ Note:
Ne connectez PAS la masse du circuit 12V/24V à la GND de l'Arduino. Le bornier IN- et la broche GND du module doivent rester séparés, et c'est précisément cette séparation qui protège l'Arduino. Si vous les reliez, le module commute toujours, mais l'isolation disparaît et il n'y a plus aucun intérêt à utiliser un optocoupleur.
Connecter le PC817 en Parallèle avec l'Appareil à Surveiller
La plupart du temps, personne ne vous fournit un fil de signal disponible. Vous avez un appareil déjà câblé et qui fonctionne déjà, et vous voulez que l'Arduino sache quand il est allumé. Dans ce cas, l'entrée du module se place aux bornes de l'appareil, en parallèle avec lui, de la même manière qu'un voltmètre. Rien dans le circuit existant n'est coupé, déplacé ou redirigé.
Prenons comme exemple une bobine de relais 12V, ce qui en fait un travail pour le module 12V. La bobine a déjà une borne positive qui devient sous tension lorsque le relais est excité, et une borne négative qui retourne à la masse de l'alimentation 12V. Le branchement consiste simplement en deux fils supplémentaires :
- De la borne positive (commutée) de la bobine vers le bornier IN+ du module.
- De la borne négative (retour) de la bobine vers le bornier IN- du module.
- VCC, GND et OUT vont toujours vers le 5V, la GND et la broche D2 de l'Arduino, exactement comme dans le câblage ci-dessus.
Ce branchement consomme environ 10mA. Une bobine de relais 12V consomme à elle seule environ 30 à 80mA, donc les 10mA supplémentaires ne changent rien et le relais continue de fonctionner exactement comme avant. C'est une mesure en lecture seule : le PC817 surveille la bobine, il ne la commute pas.
WARNING
Ne placez jamais le module en série avec l'appareil. En série, tout le courant de charge de la bobine de relais, de la lampe ou du moteur devrait traverser la minuscule LED à l'intérieur du PC817, prévue pour 20mA, et l'optocoupleur serait détruit dès que vous allumez l'appareil. L'entrée se place toujours aux bornes de l'appareil, jamais en ligne avec lui.
Comme le branchement se trouve aux bornes de la bobine et non sur un fil de sortie de l'Arduino, la lecture suit ce que l'appareil fait réellement. Si un thermostat, une minuterie, un automate ou une personne active le relais, l'Arduino le voit. Si le relais est commandé mais ne s'excite jamais parce qu'un fusible a sauté ou qu'un fil s'est desserré, l'Arduino le voit aussi. C'est ce qui rend ce montage intéressant pour des compteurs d'heures de fonctionnement, des journaux de temps d'inactivité et des alertes « a-t-il vraiment démarré ? ». Soyez cependant honnête sur ce qu'il mesure : il vous indique que l'appareil est alimenté, pas qu'il fait son travail, donc un moteur grippé ou une résistance chauffante grillée consomme toujours de l'énergie et apparaît toujours comme ON.
Trois choses à vérifier avant de mettre le branchement sous tension :
- La polarité. Le côté entrée est une LED, elle ne conduit donc que dans un sens. Si IN+ et IN- sont inversés, le module ne s'allume tout simplement jamais. Déterminez quel côté du branchement est le positif avant de le câbler.
- Les sorties avec fuite. Certaines sorties transistor d'automate, sorties triac et drivers de lampes LED laissent passer un petit courant même lorsqu'elles sont désactivées. Cette fuite peut allumer partiellement la LED du PC817, et l'Arduino signale alors l'appareil comme ON alors qu'il est en réalité OFF. Le symptôme est facile à reconnaître : la lecture ne revient jamais à ABSENT. La solution est une résistance de décharge d'environ 4,7 kohm à 10 kohm entre les bornes IN+ et IN-, afin que la fuite passe par la résistance plutôt que par la LED.
- Les lignes AC. L'entrée du PC817 est une seule LED, elle ne répond donc qu'à une seule polarité et ce n'est pas le bon composant pour détecter une ligne AC, qui nécessite un optocoupleur dont l'étage d'entrée comporte deux LED tête-bêche.
WARNING
Une bobine de relais est une charge inductive. Lorsqu'elle se désactive, l'effondrement de son champ magnétique produit une pointe de tension inverse aux bornes de la bobine bien plus élevée que les 12V qui l'alimentaient, et la LED d'entrée du PC817 n'est prévue que pour 6V en inverse. Placez une diode ordinaire en antiparallèle directement entre les bornes IN+ et IN- : la cathode de la diode sur IN+, l'anode de la diode sur IN-. En fonctionnement normal, cette diode est polarisée en inverse et ne fait rien du tout, mais lorsque la pointe arrive, elle conduit et limite la tension inverse à bien moins d'un volt. Une 1N4148 suffit pour un petit branchement comme celui-ci, une 1N4007 pour des charges plus lourdes. Il en va de même pour les solénoïdes, contacteurs, vannes et moteurs.
Votre Module Optocoupleur est-il Actif à l'État HAUT ou Actif à l'État BAS ?
Sur la puce seule, c'est une question de physique établie. Avec la résistance de pull-up interne activée, le phototransistor tire la broche vers le bas lorsque la LED est allumée, donc :
- Signal externe PRÉSENT : la broche de l'Arduino lit LOW
- Signal externe ABSENT : la broche de l'Arduino lit HIGH
Les modules ne sont pas aussi prévisibles. La plupart se comportent exactement comme la puce seule, mais certains fabricants inversent la sortie sur la carte pour que OUT suive l'entrée. Les deux types sont en vente et vous ne pouvez pas les distinguer à l'œil, alors vérifiez le vôtre. Cela prend moins d'une minute :
- Câblez le module comme ci-dessus et téléversez le sketch ci-dessous sans rien modifier.
- Sans rien connecter aux bornes d'entrée, regardez le Moniteur Série et notez ce qu'il affiche.
- Appliquez maintenant le signal externe et notez ce qu'il affiche.
- La valeur lue par la broche lorsque le signal est présent est le niveau actif de votre module.
- Vérifiez avec la LED d'état du module : elle s'allume lorsque le côté entrée est alimenté. Si cette LED est allumée mais que le Moniteur Série indique toujours ABSENT, votre module est de l'autre type.
Si les lectures sont inversées, ne réécrivez rien. Changez la seule ligne const bool MODULE_ACTIVE_LOW = true; en haut du code en false et téléversez à nouveau.
Le cas actif à l'état BAS est le même principe que celui d'un Arduino - Bouton. ou d'un Arduino - Interrupteur de fin de course. câblé avec un pull-up.
Optionnel : Réaliser le Montage avec la Puce PC817 Seule
Si vous préférez construire l'entrée vous-même, la puce seule à 4 broches fait le même travail pour quelques centimes, mais c'est maintenant à vous de dimensionner la résistance série. La broche 1 est repérée par un point ou une encoche sur la puce.
- Broche 1 - Anode (A) : le signal externe doit être connecté ici via la résistance série
- Broche 2 - Cathode (K) : elle doit être connectée à la masse du circuit externe, PAS à la GND de l'Arduino
- Broche 3 - Émetteur (E) : elle doit être connectée à la GND de l'Arduino
- Broche 4 - Collecteur (C) : elle doit être connectée à la broche D2 de l'Arduino

Dimensionnez la résistance pour environ 10mA avec R = (Vin - 1.2) / 0.01, ce qui donne 220 ohm pour 3,3V, 390 ohm pour 5V, 1 kohm pour 12V et 2,2 kohm pour 24V. Une résistance de 1/4W convient jusqu'à 12V, utilisez 1/2W à 24V.
Tout le reste de cette page - le branchement en parallèle, la diode de protection, le code - fonctionne de la même manière.
Comment Programmer pour le PC817
- Configure une broche de l'Arduino en mode entrée numérique avec le pull-up interne à l'aide de la fonction pinMode(). Par exemple, la broche 2 :
- Lit l'état de cette broche à l'aide de la fonction digitalRead() :
- Transforme cette lecture en une réponse oui/non. Une seule constante détermine le sens, vous pouvez donc l'adapter à votre propre module sans toucher à rien d'autre :
Aucune bibliothèque n'est nécessaire pour ce projet.
Code Arduino - Optocoupleur PC817
Étapes Rapides
- Connectez l'Arduino au PC via un câble USB
- Effectuez le câblage selon le schéma de câblage du module ci-dessus
- Ouvrez Arduino IDE, sélectionnez la bonne carte et le bon port
- Copiez le code ci-dessus et ouvrez-le avec Arduino IDE
- Cliquez sur le bouton Téléverser dans Arduino IDE pour téléverser le code vers l'Arduino
- Activez et désactivez le signal externe 12V/24V
- Consultez le résultat dans le Moniteur Série.
Si PRESENT et ABSENT sont inversés, votre module est du type actif à l'état HAUT : réglez MODULE_ACTIVE_LOW sur false et téléversez à nouveau.
À partir de là, le même circuit couvre de nombreux usages : surveiller la ligne de lampe de marche ou de défaut d'une machine 24V, vérifier si un circuit de véhicule 12V comme l'allumage ou les phares est sous tension, ou voir quand une bobine de solénoïde 24V est excitée. Une fois que l'Arduino connaît l'état, vous pouvez agir avec un Arduino - Relais., un buzzer ou une entrée de journal : compter les heures de fonctionnement d'une pompe, déclencher une alerte lorsqu'une machine a reçu l'ordre de démarrer mais ne l'a pas fait, ou enregistrer combien de temps une ligne de production est restée à l'arrêt.