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 :

Arduino UNO R4 optocoupleur PC817 entrée isolée 12V et 24V

À 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 :

Serial.println(digitalRead(PC817_PIN)); // 1 = HIGH, 0 = LOW

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.
Schéma de câblage Arduino UNO R4 module d'isolation optocoupleur PC817 24V

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.

Brochage de l'optocoupleur PC817
image source: diyables.io

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.
#define PC817_PIN 2
  • Configurez cette broche en entrée avec résistance de rappel à l'aide de pinMode().
pinMode(PC817_PIN, INPUT_PULLUP);
int raw = digitalRead(PC817_PIN);
  • Transformez ce niveau brut en réponse oui/non grâce à la seule constante qui décrit votre module.
bool signal_active = MODULE_ACTIVE_LOW ? (raw == LOW) : (raw == HIGH);
  • 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.

/* * Ce code Arduino UNO R4 a été développé par newbiely.fr * Ce code Arduino UNO R4 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-uno-r4/arduino-uno-r4-pc817-optocoupler-monitor-12v-24v-dc-input-signal */ #define PC817_PIN 2 // The Arduino UNO R4 pin connected to the module OUT pin (or the PC817 collector, pin 4) // Most PC817 optocoupler modules pull the output LOW when the input signal is present. // Some modules invert on-board and do the opposite. If yours does, change this to false. const bool MODULE_ACTIVE_LOW = true; void setup() { // initialize serial communication at 9600 bits per second Serial.begin(9600); // the internal pull-up holds the pin at 5V while the PC817 is off pinMode(PC817_PIN, INPUT_PULLUP); } void loop() { int raw = digitalRead(PC817_PIN); bool signal_active = MODULE_ACTIVE_LOW ? (raw == LOW) : (raw == HIGH); if (signal_active) Serial.println("12V gate line -> LIVE"); else Serial.println("12V gate line -> IDLE"); delay(500); }

É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.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
12V gate line -> IDLE 12V gate line -> IDLE 12V gate line -> LIVE 12V gate line -> LIVE 12V gate line -> LIVE 12V gate line -> LIVE 12V gate line -> IDLE 12V gate line -> IDLE
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2

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

Vidéo

Références des Fonctions

Commentaires

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !