Arduino UNO R4 - Optocoupleur PC817 : Surveiller un Signal d'Entrée DC 12V/24V
Dans ce guide, nous allons apprendre à utiliser l'optocoupleur PC817 avec l'Arduino UNO R4 pour répondre à une question sur un appareil 12V ou 24V — fonctionne-t-il réellement en ce moment ? — sans câbler cette tension à la carte. En détail, nous allons apprendre :
- Comment un module optocoupleur PC817 protège l'Arduino UNO R4
- Comment choisir la bonne variante de module pour un signal 3,3V, 5V, 12V ou 24V
- Comment câbler le module à l'Arduino UNO R4, et comment savoir si sa sortie est active à l'état BAS ou active à l'état HAUT
- Comment brancher le module aux bornes d'un appareil, en parallèle, pour que la lecture suive l'appareil lui-même
- Comment programmer l'Arduino UNO R4 pour lire l'entrée numérique isolée
- Comment réaliser la même entrée à partir de la puce PC817 nue, si vous préférez souder plutôt qu'acheter

Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Démarrage DIYables STEM V4 IoT (Arduino inclus) | |
| 1 | × | Kit de Démarrage DIYables STEM V4B IoT (Arduino inclus) | |
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
Achetez une seule variante de module - celle qui correspond au signal que vous comptez surveiller. Le tableau plus bas indique laquelle.
À propos de l'Optocoupleur PC817
Le PC817 est un optocoupleur à 4 broches, également vendu sous les noms de photocoupleur et d'opto-isolateur. À l'intérieur de son boîtier en plastique, 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 plutôt que d'électricité — c'est pourquoi les deux côtés restent électriquement séparés.
C'est cet espace qui rend le PC817 utile pour un utilisateur d'Arduino UNO R4. Une ligne 12V ou 24V câblée directement sur une broche numérique détruit la carte. À travers un PC817, l'Arduino UNO R4 ne voit jamais que son propre 5V, tandis que le côté haute tension reste de l'autre côté de l'espace. Les usages typiques, du loisir à l'atelier, ressemblent à ceci :
- Surveiller la sortie 12V d'un contrôleur de porte de garage ou de portail pour qu'un sketch sache quand le portail est actionné
- Vérifier si une ligne d'accessoire automobile 12V est sous tension avant qu'un projet n'y prélève du courant
- Surveiller la ligne d'activation 24V d'une alimentation de laboratoire
Dans chacun de ces cas, la question utile n'est pas vraiment de savoir si un fil est sous tension, mais si l'appareil au bout de ce fil est allumé ou éteint à cet instant, et c'est ce que le PC817 transmet au sketch.
L'Arduino UNO R4 mérite une remarque particulière ici. Contrairement à la plupart des cartes 3,3V modernes, l'UNO R4 fait fonctionner ses E/S en 5V, donc le côté sortie de l'optocoupleur est tiré à 5V sur cette carte, et une broche lit soit 5V soit 0V.
Caractéristiques
| Paramètre | Valeur |
|---|---|
| Boîtier | DIP 4 broches |
| Tension directe de la LED d'entrée (Vf) | environ 1,2V typique, 1,4V max |
| Courant direct de la LED d'entrée (If) | plage normale 5-20 mA, 20 mA continu max |
| Tension collecteur-émetteur de sortie (VCEO) | 35V max |
| Courant de collecteur de sortie (IC) | 50 mA max |
| Dissipation de puissance du collecteur | 150 mW |
| Tension d'isolation | 5000 Vrms pendant 1 minute |
| Rapport de transfert de courant (CTR) | 50% à 600% selon le rang (A 80-160%, B 130-260%, C 200-400%, D 300-600%) |
| Vitesse de commutation | temps de montée environ 4 us, temps de descente environ 3 us |
| Température de fonctionnement | -30 C à +100 C |
Le Module Optocoupleur PC817
La façon pratique d'utiliser un PC817 avec l'Arduino UNO R4 est le module d'isolation prêt à l'emploi, et c'est ce que le reste de ce guide câble. Les modules sont vendus en versions 1, 2, 4 et 8 canaux. Chaque canal comporte un PC817, sa résistance série et généralement une LED d'état, déjà montés, et les fils externes arrivent sur des borniers à vis au lieu de broches nues.
- Côté entrée : un bornier à vis + (ou IN+) et un bornier - (ou IN-) pour le signal externe
- Côté sortie : des broches VCC, GND et OUT (ou DO / OUT1..OUTn) pour l'Arduino UNO R4
Sur cette carte, le côté sortie est alimenté depuis la broche 5V plutôt que 3,3V, car l'UNO R4 lit une logique 5V. C'est une décision distincte de celle du côté entrée ci-dessous, et elle est la même pour toutes les variantes de module.
Voici ce qui piège les gens. La résistance série est déjà sur la carte, et elle est dimensionnée pour une seule tension d'entrée. Il n'existe pas de module universel. Les modules sont vendus en trois variantes, et vous achetez celle qui correspond au signal que vous voulez surveiller.
De Quel Module Optocoupleur PC817 Ai-je Besoin ?
Lisez la tension du signal que vous prévoyez de capter, puis choisissez la ligne :
| Signal que vous voulez surveiller | Variante de module à acheter | Source typique |
|---|---|---|
| Logique 3,3V ou 5V | module 3-5V | broche de sortie d'une autre carte, carte de commande 5V, capteur alimenté séparément |
| 12V DC | module 12V | contrôleurs de portail et de porte de garage, lignes d'accessoires automobiles, centrales d'alarme |
| 24V DC | module 24V | lignes d'activation d'alimentations de laboratoire, sorties d'automate, capteurs industriels |
Choisir la variante est l'équivalent, pour un module, du dimensionnement d'une résistance — c'est la seule décision d'achat de cette page qui compte vraiment. Deux façons de se tromper :
- Un module 12V sur une ligne 24V reçoit environ le double du courant pour lequel sa résistance a été choisie, et la LED interne est endommagée. C'est l'erreur coûteuse, et elle se produit en quelques secondes.
- Un module 24V sur une ligne 12V sous-alimente la LED. Rien ne brûle, mais la sortie peut commuter en retard, commuter seulement de temps en temps, ou ne jamais commuter — et cela ressemble à un défaut de câblage alors qu'il s'agit en réalité d'une erreur d'achat.
Si votre signal se situe entre deux étiquettes, choisissez la variante la plus proche sans la dépasser, et vérifiez sur l'établi avec la LED d'état avant de vous fier à la lecture.
Pourquoi Isoler un Signal 5V ou 3,3V sur une Carte 5V ?
La première ligne de ce tableau mérite une réponse à part, car le module 3-5V semble inutile sur une carte 5V. L'Arduino UNO R4 fait fonctionner ses propres E/S en 5V, donc isoler un autre signal 5V peut sembler ne servir à rien. Ce n'est pas le cas. L'isolation n'a jamais consisté à faire correspondre des tensions — il s'agit de refuser de partager une masse. Deux circuits 5V qui ont chacun leur propre alimentation, ou qui se trouvent aux extrémités opposées d'un long câble, ne sont pas d'accord sur l'emplacement du 0V, et relier leurs masses invite les courants de retour, le bruit et les défauts à circuler entre eux. Faire passer le signal par un PC817 laisse l'information traverser tout en gardant les masses séparées.
C'est l'argument en faveur de la variante 3-5V, et sur cette carte il est solide : une carte de commande alimentée séparément, un câble qui traverse tout un atelier, un driver de moteur placé à côté du câblage, ou la carte logique 5V à l'intérieur d'un appareil alimenté par le secteur. C'est la variante à choisir chaque fois que l'autre circuit fonctionne au niveau logique mais n'est pas sur votre alimentation.
Il est aussi utile de bien comprendre à quoi réagit l'entrée du PC817 : au courant, pas à la tension. Un rail 5V capable de fournir 20 A n'est pas plus dur pour l'optocoupleur qu'un rail ne pouvant fournir que 20 mA, car la résistance montée sur le module fixe le courant de la LED dans les deux cas. Ce que change la grosse alimentation, c'est l'ampleur des dégâts qu'une erreur de câblage ailleurs peut causer — une raison de plus de la garder de l'autre côté de l'espace isolant.
Actif BAS ou Actif HAUT : Dans Quel Sens Votre Module Lit-il ?
Avec la puce nue câblée comme le décrit ce guide, la réponse relève de la physique établie. Le collecteur va à une broche d'entrée numérique maintenue HIGH par une résistance de rappel — la résistance de rappel interne de l'Arduino UNO R4 est le choix le plus simple, et sur cette carte elle tire la broche à 5V. Une résistance de 10 kohms entre la broche et le 5V fait le même travail. Dans tous les cas, la lecture est inversée par rapport à ce qu'attendent les débutants :
- Signal externe PRÉSENT ⇒ LED allumée ⇒ le transistor conduit ⇒ la broche lit LOW
- Signal externe ABSENT ⇒ LED éteinte ⇒ transistor bloqué ⇒ la broche lit HIGH
Un module n'est pas aussi prévisible. La plupart des modules transmettent ce comportement tel quel, donc un signal présent se lit toujours LOW, mais certains fabricants ajoutent une inversion sur la carte pour que OUT suive l'entrée à la place. Les deux types sont en vente, parfois avec une sérigraphie presque identique, donc ne supposez rien — vérifiez. Cela prend moins d'une minute :
- Câblez le module comme indiqué ci-dessous, téléversez le sketch de ce guide et ouvrez le Moniteur Série à 9600.
- Laissez les bornes d'entrée non alimentées et notez ce que la carte affiche.
- Alimentez la ligne externe et notez ce qu'elle affiche maintenant.
- Ce qui apparaît lorsque la ligne est sous tension correspond au niveau actif de votre module. S'il affiche LIVE sans rien sur l'entrée et IDLE lorsque la ligne est alimentée, vous avez le type inverseur.
- Vérifiez avec la LED d'état du module, qui s'allume chaque fois que le côté entrée est alimenté. LED allumée mais état affiché inchangé signifie que vous lisez le mauvais niveau, pas que la prise est défectueuse.
Pour observer la broche brute au lieu de l'étiquette LIVE/IDLE, ajoutez cette ligne dans loop() pendant la durée du test :
Une fois que vous savez, une seule modification règle la question pour de bon : la constante MODULE_ACTIVE_LOW en haut du sketch. Laissez-la à true pour le module actif-BAS habituel, réglez-la sur false pour un module dont la sortie suit l'entrée. Rien d'autre ne change dans le code. L'actif BAS est la même habitude que l'on retrouve sur de nombreux Arduino UNO R4 - Relais., et la résistance de rappel interne est la même que celle utilisée dans le tutoriel Arduino UNO R4 - Bouton..
WARNING
NE connectez PAS la masse du circuit 12V ou 24V à la GND de l'Arduino UNO R4. Les deux masses doivent rester séparées, et cette séparation est toute la raison d'être de l'optocoupleur. Si vous reliez les masses, le PC817 commute toujours, mais l'isolation disparaît et un défaut du côté 12V/24V peut atteindre la carte.
Schéma de Câblage
- Schéma de câblage de l'Arduino UNO R4 et du module d'isolation à optocoupleur PC817 : le signal externe 12V ou 24V va aux borniers à vis IN+ et IN- de la variante de module correspondante, et VCC, GND et OUT vont au 5V, à GND et à la broche 2 de l'Arduino UNO R4 — la résistance série est déjà montée sur le module, il n'est donc pas nécessaire d'en ajouter une.

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Voir Comment alimenter l'Arduino UNO R4..
- Schéma de câblage de l'Arduino UNO R4 et de la puce PC817 nue, pour la réalisation optionnelle décrite à la fin de ce guide : le signal 12V arrive sur la broche 1 à travers une résistance de 1 kohm (utilisez 2,2 kohms pour un signal 24V), la broche 2 retourne à la masse du circuit 12V, la broche 4 va à la broche 2 de l'Arduino UNO R4, et la broche 3 va à GND sur l'Arduino UNO R4.
Connecter le PC817 en Parallèle avec l'Appareil à Surveiller
Prenons le moteur de portail comme exemple concret. Son contrôleur envoie du 12V par une paire de fils vers le relais du moteur du portail chaque fois que le portail est actionné, et l'Arduino UNO R4 est là pour le remarquer. L'entrée du module se place aux bornes de ces deux fils, en parallèle avec l'appareil, là où se placerait un voltmètre. Elle ne va jamais dans le fil.
WARNING
NE placez PAS l'entrée du PC817 en série avec l'appareil. En série, tout le courant de charge du moteur de portail, de la bobine de relais ou de la lampe doit traverser une LED interne prévue pour 20 mA, et le PC817 est détruit dès que l'appareil est mis en marche. Aux bornes de l'appareil, en parallèle — jamais en ligne avec lui.
Rien dans le câblage existant du portail n'est coupé ou redirigé. Trois connexions sont ajoutées, et c'est tout le travail :
- La borne positive commutée de l'appareil vers le bornier à vis IN+ du module — pas de résistance série de votre part, puisque le module porte déjà celle autour de laquelle sa variante est conçue
- La borne négative ou de retour de ce même appareil vers le bornier à vis IN-
- Le côté sortie reste exactement tel qu'il est : OUT vers la broche 2 de l'Arduino UNO R4, VCC vers 5V, GND vers GND
La prise ne coûte que le faible courant de LED d'entrée que le module est conçu pour consommer. À côté des ampères que tirent un moteur de portail, une bobine de relais, une vanne ou une lampe, ce n'est rien, donc l'appareil continue de se comporter exactement comme avant. La mesure est en lecture seule.
Trois détails déterminent si la prise fonctionne du premier coup :
- La polarité n'est pas optionnelle. Le côté entrée est une LED, et une LED ne conduit que dans un sens. Câblez IN+ et IN- à l'envers et rien ne casse — le module ne s'allume simplement jamais, sa LED d'état reste éteinte, et le sketch indique IDLE pour toujours. Mesurez la prise et déterminez quel côté est positif avant de la câbler.
- Une charge inductive a besoin d'une diode de protection. Un moteur de portail, une bobine de relais, un contacteur, un solénoïde ou une vanne génère un fort pic de tension inverse lorsque son alimentation est coupée, et la LED d'entrée du PC817 ne supporte que 6V en inverse. Une diode ordinaire montée en antiparallèle directement aux bornes IN+ et IN- — cathode de la diode sur IN+, anode de la diode sur IN- — l'absorbe. En fonctionnement normal, cette diode est polarisée en inverse et ne fait absolument rien ; lors d'un pic, elle conduit et limite la tension inverse bien en dessous d'un volt. Une 1N4148 suffit pour une petite prise, une 1N4007 pour une plus lourde.
- Une sortie électronique avec fuite trompe la prise. Certaines sorties à transistor d'automate, sorties à triac et drivers de lampes LED laissent passer un faible courant même lorsqu'elles sont coupées. Une fuite suffisante allume partiellement la LED d'entrée du module, et le sketch affirme alors que l'appareil est allumé alors qu'il est clairement éteint. L'indice est une lecture qui ne revient jamais à IDLE, avec la LED d'état qui brille faiblement. Placez une résistance de décharge d'environ 4,7 kohms à 10 kohms aux bornes IN+ et IN-, pour que la fuite passe par la résistance plutôt que par la LED.
Une dernière restriction : l'entrée du module est une seule LED, elle ne répond donc qu'à une polarité et qu'au courant continu. Détecter une ligne AC nécessite plutôt un optocoupleur dont l'étage d'entrée comporte deux LED tête-bêche.
Savoir si l'Appareil Fonctionne Réellement
C'est le fait d'être en parallèle avec l'appareil qui rend la lecture fiable. La broche ne suit pas un bouton particulier ni une sortie de contrôleur particulière — elle suit l'alimentation que reçoit réellement l'appareil. Un portail ouvert depuis la télécommande, depuis l'interrupteur mural ou depuis un contacteur à clé apparaît identique pour le sketch, car le sketch surveille le moteur plutôt que le déclencheur. Tout aussi utile, un portail qui a reçu l'ordre de s'ouvrir mais n'a rien reçu laisse la broche sur IDLE, et ce silence constitue en lui-même le rapport de panne.
C'est ce qui transforme une simple lecture numérique d'une ligne en quelque chose qui vaut la peine d'être enregistré : des totaux d'heures de fonctionnement pour le moteur du portail, une alerte lorsqu'une ouverture dure plus longtemps que les vingt secondes habituelles, un relevé des temps d'arrêt d'une machine, ou une simple vérification "a-t-il vraiment démarré ?" effectuée quelques secondes après l'envoi de la commande.
Une limite honnête accompagne tout cela : le PC817 indique que l'appareil est alimenté, pas qu'il fonctionne — un moteur grippé ou une résistance chauffante grillée consomme toujours du courant sur cette ligne et se lit toujours comme LIVE.
Optionnel : Réaliser la Même Entrée à Partir de la Puce PC817 Nue
Vous préférez souder vous-même ? Alors le choix de la variante devient un choix de résistance : vous montez la résistance que le module aurait portée.

La puce est un DIP à 4 broches, la broche 1 étant marquée d'un point ou d'une encoche.
- Broche 1 - Anode (A) : anode de la LED d'entrée, alimentée à travers la résistance série.
- Broche 2 - Cathode (K) : cathode de la LED d'entrée, vers la masse du circuit externe, PAS vers la GND de l'Arduino UNO R4.
- Broche 3 - Émetteur (E) : côté sortie, vers GND sur la carte.
- Broche 4 - Collecteur (C) : côté sortie, vers la broche 2 de l'Arduino UNO R4.
Dimensionnez la résistance pour environ 10 mA de courant de LED avec R = (Vin - 1.2) / 0.01 :
| Tension d'entrée | Résistance |
|---|---|
| 3,3V | 220 ohms |
| 5V | 390 ohms |
| 12V | 1 kohm |
| 24V | 2,2 kohms, en composant de 1/2 W |
Changez la résistance chaque fois que la tension d'entrée change. Le reste de cette page — prise en parallèle, diode de protection, résistance de décharge, masses séparées — s'applique sans changement, et avec la résistance de rappel interne cette réalisation est réellement active-BAS, donc laissez MODULE_ACTIVE_LOW à true.
Comment Programmer
- Nommez la broche à laquelle va la ligne OUT du module.
- Configurez cette broche en entrée avec résistance de rappel à l'aide de pinMode().
- Lisez la broche avec digitalRead().
- Transformez ce niveau brut en réponse oui/non grâce à la seule constante qui décrit votre module.
- Affichez-le, ou agissez en conséquence.
Code Arduino UNO R4 - Optocoupleur PC817
Aucune bibliothèque n'est nécessaire. Lire un PC817 revient à lire une simple entrée numérique.
Étapes Rapides
Suivez ces instructions étape par étape :
- Si c'est la première fois que vous utilisez l'Arduino Uno R4 WiFi/Minima, reportez-vous au tutoriel sur Arduino UNO R4 - Installation du logiciel..
- Vérifiez que la variante de module sur votre établi correspond à la tension de la ligne que vous allez capter.
- Câblez le module à l'Arduino UNO R4 comme indiqué sur le schéma, en gardant la masse 12V à l'écart de la GND de la carte.
- Connectez la carte Arduino Uno R4 à votre ordinateur à l'aide d'un câble USB.
- Lancez l'IDE Arduino sur votre ordinateur.
- Sélectionnez la carte Arduino Uno R4 appropriée (Arduino Uno R4 WiFi ou Arduino Uno R4 Minima) et le port COM.
- Copiez le code ci-dessus et ouvrez-le dans l'IDE Arduino.
- Cliquez sur le bouton Upload dans l'IDE Arduino pour transférer le code vers l'Arduino UNO R4.
- Ouvrez le Moniteur Série.
- Activez et désactivez la ligne 12V plusieurs fois.
- Consultez le résultat dans le Moniteur Série.
Si les lectures sont exactement inversées — LIVE au repos et IDLE lorsque la ligne est alimentée — votre module inverse le signal sur la carte, réglez donc MODULE_ACTIVE_LOW sur false et téléversez à nouveau. S'il indique LIVE alors que rien n'est câblé du côté entrée, vérifiez que GND atteint bien le module et que la broche est réglée sur INPUT_PULLUP. S'il n'indique jamais LIVE, vérifiez la polarité de l'entrée et que la variante de module correspond à la tension de cette ligne. Pour mesurer directement cette ligne externe au lieu de simplement la détecter, consultez le tutoriel Arduino UNO R4 - Mesurer la tension..