Raspberry Pi Pico - Optocoupleur PC817 : Surveiller un Signal d'Entrée 12V/24V DC
Dans ce guide, nous allons apprendre à configurer et à utiliser l'optocoupleur PC817 avec le Raspberry Pi Pico. Nous aborderons les points suivants :
- Quel module optocoupleur PC817 acheter selon le signal que vous voulez surveiller, car le module existe en trois variantes d'entrée.
- Comment câbler un module optocoupleur PC817 à un Raspberry Pi Pico pour que la carte puisse surveiller en toute sécurité une ligne DC de 3,3V, 5V, 12V ou 24V.
- Comment brancher le module aux bornes d'un appareil pour que le Raspberry Pi Pico sache si cet appareil fonctionne réellement.
- Comment savoir si votre module est actif LOW ou actif HIGH, et comment adapter le code en une seule ligne.
- Comment programmer le Raspberry Pi Pico pour lire l'entrée numérique isolée en MicroPython.
- Comment réaliser la même entrée avec la puce PC817 seule et une résistance en série, si vous le préférez.

Le Raspberry Pi Pico est petit, peu coûteux et consomme très peu d'énergie ; c'est donc une excellente carte à laisser câblée en permanence à une machine, comme un petit surveillant autonome. La vraie question à laquelle répond un tel surveillant n'est pas de savoir si une tension est présente, mais si l'appareil à l'autre bout fonctionne réellement en ce moment. Ce guide vise deux projets : compter les cycles d'une machine qui signale chaque course sur une sortie d'automate 24V, et surveiller le signal de position 12V d'un contrôleur de portail ou de barrière pour toujours savoir s'il est ouvert ou fermé. Ces deux signaux sont bien trop élevés pour qu'un Raspberry Pi Pico puisse les toucher directement, et c'est le PC817 qui permet de les lire.
Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
À Propos de l'Optocoupleur PC817
Le PC817, également vendu sous le nom de photocoupleur ou d'opto-isolateur, est une puce à 4 broches qui transmet un signal d'un circuit à un autre sans aucun fil entre eux. À l'intérieur du boîtier en plastique, une LED infrarouge est orientée vers un phototransistor, de l'autre côté d'un espace isolant. Lorsque le courant traverse la LED, sa lumière rend le transistor passant, de sorte que le signal passe sous forme de lumière plutôt que d'électricité. C'est précisément pour cette raison que les deux côtés restent électriquement séparés, et c'est pourquoi un Raspberry Pi Pico peut surveiller une ligne industrielle 24V sans jamais y être câblé.
La plupart des gens ne soudent jamais la puce elle-même. Un module d'isolation à optocoupleur PC817 place cette puce sur une petite carte avec sa résistance série et une LED d'état, amène le côté entrée sur des bornes à vis marquées IN+ et IN-, et amène le côté sortie sur un connecteur marqué VCC, GND et OUT. C'est cette version que ce guide câble, et les modules existent en versions à 1, 2, 4 et 8 canaux, ce qui est pratique lorsqu'un seul Raspberry Pi Pico doit surveiller plusieurs lignes isolées à la fois.
| PC817 | |
|---|---|
| Boîtier | DIP à 4 broches (broche 1 repérée par un point ou une encoche) |
| Tension directe de la LED (Vf) | environ 1,2 V typique, 1,4 V max |
| Courant direct de la LED (If) | 20 mA max en continu, 5 à 20 mA en fonctionnement normal |
| Tension collecteur-émetteur (VCEO) | 35 V max |
| Courant de collecteur (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 la catégorie |
| Vitesse de commutation | montée environ 4 µs, descente environ 3 µs |
| Température de fonctionnement | -30°C à +100°C |
Quel Module Optocoupleur Me Faut-il ?
Comme la résistance qui alimente la LED interne est déjà montée sur la carte, un seul module ne peut pas couvrir toutes les tensions d'entrée. Les modules sont vendus en trois variantes distinctes, et la résistance de chacune est choisie pour la tension de cette variante. Achetez la variante qui correspond au signal que vous comptez surveiller :
| Signal que vous voulez surveiller | Module à acheter |
|---|---|
| Un signal 24 volts DC, comme une sortie d'automate | Module 24V |
| Un signal 12 volts DC, comme un voyant de portail ou de barrière | Module 12V |
| Un signal logique 3,3 volts ou 5 volts | Module 3-5V |
C'est la seule décision d'achat qui compte ici. Avec un module, vous ne calculez jamais rien ; vous choisissez la bonne variante et vous la câblez. Si vous vous trompez dans un sens ou dans l'autre, vous le remarquerez :
- Alimentez un module 12V depuis une ligne 24 volts et environ le double du courant prévu traversera sa LED interne, ce qui l'endommagera.
- Alimentez un module 24V depuis une ligne 12 volts et la LED sera sous-alimentée, donc la sortie pourra commuter en retard, commuter de façon peu fiable, ou ne jamais commuter.
Une tension basse n'est pas une raison pour se passer de l'isolation et utiliser un simple fil de liaison. Un signal logique de 5 volts ou 3,3 volts mérite d'être isolé dès que les deux circuits sont alimentés par des sources séparées, se trouvent aux deux extrémités d'un long câble, ou que l'un d'eux est électriquement bruyant, comme un pilote de moteur ou la carte de commande basse tension cachée dans un appareil alimenté par le secteur. L'isolation consiste à couper le chemin de masse, pas seulement à résister à une haute tension. C'est à cela que sert le module 3-5V.
Brochage
Le PC817 possède quatre broches. Les broches 1 et 2 appartiennent au côté entrée, qui fait face au circuit 12V ou 24V et qu'un module ramène sur les bornes IN+ et IN-. Les broches 3 et 4 appartiennent au côté sortie, qui fait face au Raspberry Pi Pico et qu'un module ramène sur son connecteur VCC, GND et OUT.
- Broche 1 - Anode (A) : la patte positive de la LED interne. Le signal 12V ou 24V atteint cette broche via la résistance série, qui est déjà présente sur la carte d'un module.
- Broche 2 - Cathode (K) : la patte négative de la LED interne. À connecter à la masse du circuit 12V ou 24V, et non à la masse du Raspberry Pi Pico.
- Broche 3 - Émetteur (E) : l'émetteur du phototransistor côté sortie. À connecter à une broche GND (0 volt) du Raspberry Pi Pico.
- Broche 4 - Collecteur (C) : le collecteur du phototransistor côté sortie. À connecter à une broche d'entrée GPIO du Raspberry Pi Pico avec la résistance de pull-up interne vers 3,3 volts activée.

Comment Ça Fonctionne
Côté sortie, le collecteur est maintenu à l'état haut par la résistance de pull-up interne du Raspberry Pi Pico, donc la broche est au repos à 3,3 volts. Dès que le signal externe apparaît, la LED s'allume, le phototransistor conduit et tire la broche vers 0 volt.
- Signal externe 12V ou 24V PRÉSENT : la LED est allumée, le transistor conduit, et la broche GPIO lit LOW.
- Signal externe 12V ou 24V ABSENT : la LED est éteinte, le transistor est bloqué, et la broche GPIO lit HIGH.
La lecture est donc inversée, ce qui surprend la plupart des gens la première fois. Une lecture LOW signifie que le signal est présent, et non absent. Notre code MicroPython la remet dans le bon sens avec une seule comparaison afin que le reste du programme reste lisible. Si vous avez déjà suivi le tutoriel Raspberry Pi Pico - Bouton., c'est exactement le même schéma actif LOW que vous y avez utilisé, sauf que la commutation se fait ici par la lumière au lieu d'un contact métallique.
Module Optocoupleur Actif HIGH ou Actif LOW
Tout ce qui précède relève de la physique bien établie pour la puce seule câblée comme indiqué. Un module, c'est autre chose : certains fabricants ajoutent sur la carte un étage à transistor qui inverse à nouveau le signal, de sorte que la broche OUT suit l'entrée au lieu de s'y opposer. Les deux types sont en vente, ils se ressemblent parfaitement, et rien sur la sérigraphie n'indique lequel vous avez entre les mains. Vérifiez-le avant de vous fier à la lecture.
Cela compte davantage sur cette page que sur la plupart des autres, car l'idée est de laisser le Raspberry Pi Pico fonctionner comme compteur de cycles dans une armoire. Un module de polarité opposée ne tombe pas en panne de façon visible - il compte les pauses au lieu des courses, il enregistre donc sans broncher exactement la mauvaise moitié de chaque cycle et le nombre affiché semble tout de même plausible. Deux minutes dans le Shell de Thonny maintenant vous éviteront de refermer le couvercle sur un compteur qui se trompe depuis le jour de son installation.
Une fois le module câblé et le Raspberry Pi Pico connecté, cliquez sur le bouton rouge Stop dans Thonny pour qu'aucun script ne tourne, puis tapez ces trois lignes dans le Shell en bas de la fenêtre :
Laissez les bornes d'entrée hors tension et appuyez sur Entrée sur la dernière ligne : notez le nombre que le Shell renvoie. Appliquez maintenant le signal sur IN+ et IN-, appuyez sur la flèche Haut pour rappeler cette même ligne, puis appuyez de nouveau sur Entrée. La valeur qui apparaît lorsque le signal est présent est le niveau actif de votre module. La LED d'état du module sert de contre-vérification, car elle s'allume dès que le côté entrée est alimenté - si la LED est allumée et que la broche lit toujours 1, votre module est actif HIGH.
Il y a une seule ligne à modifier dans le code ci-dessous. MODULE_ACTIVE_LOW est réglé sur True, ce qui convient aux modules courants et à la puce seule. Si votre test montre que le Shell affiche 1 lorsque le signal est présent, réglez-le sur False et rien d'autre dans le script n'a besoin d'être modifié.
Les Deux Masses Restent Séparées
C'est la partie qui protège votre carte, alors lisez-la deux fois. NE connectez PAS la masse du circuit 12V ou 24V au GND du Raspberry Pi Pico. La masse 12V/24V va à la borne IN- du module, ou à la broche 2 d'une puce seule, et s'arrête là. La masse du Raspberry Pi Pico va à la broche GND du connecteur de sortie, ou à la broche 3 d'une puce seule, et s'arrête là. Garder ces deux masses séparées est toute la raison d'être de la puce. Si vous les reliez, le PC817 commutera toujours et votre code affichera toujours le bon résultat, mais l'isolation aura disparu et un défaut côté machine aura désormais un chemin direct vers votre Raspberry Pi Pico. Lorsque vous voulez seulement abaisser une tension plutôt que l'isoler, un pont diviseur comme celui du tutoriel Raspberry Pi Pico - Measure Voltage est alors l'outil adapté.
Garder le Côté Sortie à 3,3 Volts
Le Raspberry Pi Pico est une carte 3,3V et ses broches GPIO ne tolèrent pas le 5V. Tout ce que vous appliquez sur une broche GPIO doit rester inférieur ou égal à 3,3 volts. C'est facile à respecter ici, car le phototransistor ne fait que tirer la broche vers 0 volt et n'y injecte jamais rien. Prenez le VCC du module sur la broche 3V3(OUT) du Raspberry Pi Pico, qui est la broche physique 36. Ne le prenez pas sur VBUS ou VSYS, car ces broches sont proches de 5 volts et le module porterait alors sa broche OUT à 5 volts. Cela s'applique aussi aux modules qui inversent le signal sur la carte, et ce sont justement eux qui pilotent activement la broche OUT à l'état haut, donc la tension que vous leur fournissez est exactement celle qui arrive sur GP0.
Schéma de Câblage
Câblez les composants comme indiqué ci-dessous, avec la variante de module qui correspond à la ligne que vous surveillez.
Câblage Raspberry Pi Pico - Module Optocoupleur PC817
Le connecteur de sortie va au Raspberry Pi Pico : VCC sur 3V3(OUT) à la broche physique 36, GND sur n'importe quelle broche GND, et OUT sur GP0, qui est la broche physique 1. Les bornes à vis vont au circuit isolé : IN+ au côté positif du signal et IN- à son retour. Il n'y a aucune résistance à ajouter, car le module intègre déjà celle qui convient à sa variante.

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Câbler le Module en Parallèle avec un Appareil pour Savoir s'il Fonctionne
Jusqu'ici, ce guide a parlé d'un signal, mais ce que vous avez généralement devant vous est un appareil, et la vraie question est de savoir si cet appareil fonctionne. Prenez le contrôleur de portail ou de barrière 12V du début de la page. Sa sortie de position alimente un voyant 12V qui est allumé chaque fois que la barrière est levée. Vous laissez ce voyant câblé exactement comme l'installateur l'a laissé, et vous branchez un module 12V à ses bornes :
- La borne positive commutée du voyant va à la borne IN+ du module.
- La borne négative de retour du voyant va à la borne IN- du module.
Rien n'est coupé ni redirigé dans le contrôleur, et rien n'est placé entre le voyant et son alimentation. Le module est placé en parallèle avec l'appareil, jamais en série. Le câbler en série ferait passer tout le courant de charge du voyant, de la bobine ou du moteur dans la LED interne, prévue pour 20 mA, et la puce serait détruite dès la mise en marche de l'appareil. Le branchement en parallèle ne consomme qu'environ 10 mA, ce qui n'est rien à côté de ce que consomme déjà un voyant, une bobine de relais, une vanne ou un moteur, donc le contrôleur de barrière continue de se comporter exactement comme avant. Il s'agit d'une mesure en lecture seule.
Comme le branchement suit l'appareil lui-même et non le bouton ou la sortie du contrôleur qui l'a commandé, le Raspberry Pi Pico voit l'état réel : la barrière qui se lève parce qu'une voiture a déclenché la boucle, quelqu'un qui la lève à la main la nuit, ou la barrière qui ne bouge pas du tout alors qu'elle aurait dû. C'est ce qui rend la lecture digne d'être enregistrée - heures de fonctionnement, nombre de cycles, temps d'inactivité et alertes « a-t-il vraiment démarré ? » découlent tous de ce même bit unique. Une limite honnête : cela vous indique que l'appareil est alimenté, pas qu'il fonctionne correctement, donc un moteur de portail grippé ou un voyant grillé consomme toujours du courant et sera toujours lu comme en marche.
Quelques points à régler avant de mettre le branchement sous tension :
- La polarité compte : le côté entrée du module est une LED et ne conduit que dans un sens. Inversez IN+ et IN- et il ne s'allumera tout simplement jamais, donc déterminez d'abord quel côté du branchement est positif.
- Les charges inductives nécessitent une diode de protection : une bobine de relais, un solénoïde, un contacteur, une vanne ou un moteur produit une forte pointe de tension inverse lorsqu'il s'éteint, et la LED d'entrée du PC817 ne supporte que 6 volts en inverse. Placez une diode ordinaire en antiparallèle directement aux bornes des deux entrées, cathode sur IN+ et anode sur IN-. En fonctionnement normal, elle est polarisée en inverse et ne fait rien ; lors d'une pointe, elle conduit et limite la tension inverse à bien moins d'un volt. Une 1N4148 convient pour un petit branchement, une 1N4007 pour un plus important.
- Les sorties à semi-conducteurs avec fuite provoquent de fausses lectures : les sorties à transistor d'automate, les sorties à triac et les pilotes de lampes LED laissent souvent passer un faible courant même lorsqu'ils sont éteints, et une fuite suffisante allume partiellement la LED du PC817, si bien que le Raspberry Pi Pico signale l'appareil comme en marche alors qu'il ne l'est pas. Le symptôme est une lecture qui ne revient jamais au repos. Placez une résistance de décharge d'environ 4,7 kohm à 10 kohm aux bornes des entrées et la fuite passera par elle au lieu de passer par la LED.
- DC uniquement : l'entrée est une seule LED, elle ne réagit 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.
Si Vous Préférez le Réaliser avec la Puce Seule
Un PC817 seul coûte quelques centimes et fait le même travail sur une breadboard, mais c'est alors à vous de dimensionner la résistance série sur la broche 1, en vous aidant du brochage ci-dessus. La règle est R = (Vin - 1.2) / 0.01, en prenant 1,2 volt comme chute de tension de la LED et 10 mA comme courant cible, ce qui donne :
- Entrée 3,3 volts : 220 ohm
- Entrée 5 volts : 390 ohm
- Entrée 12 volts : 1 kohm
- Entrée 24 volts : 2,2 kohm, et utilisez ici un composant de 1/2 W car il dissipe environ 0,24 W
La broche 3 va à une broche GND du Raspberry Pi Pico et la broche 4 à GP0, exactement comme les broches GND et OUT du module. Changez la résistance chaque fois que vous changez la tension surveillée : laisser une résistance de 1 kohm en place en passant d'un circuit 12V à un circuit 24V fait passer environ 22,8 mA dans une LED prévue pour 20 mA. Câblée de cette façon, la puce est toujours active LOW, donc le code ci-dessous ne nécessite aucune modification.
Code Raspberry Pi Pico - Optocoupleur PC817
Aucune bibliothèque n'est nécessaire. Lire un PC817 revient à lire une simple entrée numérique, donc tout le programme se résume à une résistance de pull-up, une comparaison et un affichage.
Étapes Rapides
Veuillez suivre ces instructions étape par étape :
- Assurez-vous que l'IDE Thonny est installé sur votre ordinateur.
- Assurez-vous que le micrologiciel MicroPython est installé sur votre Raspberry Pi Pico.
- Si c'est la première fois que vous utilisez un Raspberry Pico, consultez le tutoriel Raspberry Pi Pico - Premiers pas. pour des instructions détaillées.
- Utilisez la variante de module qui correspond à votre signal : le module 3-5V pour un signal logique 3,3V ou 5V, le module 12V pour un signal 12V, le module 24V pour un signal 24V.
- Câblez les composants selon le schéma fourni, en gardant la masse 12V/24V à l'écart du GND du Raspberry Pi Pico.
- Connectez le Raspberry Pi Pico à votre ordinateur à l'aide d'un câble USB.
- Lancez l'IDE Thonny sur votre ordinateur.
- Dans l'IDE Thonny, sélectionnez l'interpréteur MicroPython (Raspberry Pi Pico) en allant dans Tools Options.
- Dans l'onglet Interpreter, sélectionnez MicroPython (Raspberry Pi Pico) dans le menu déroulant.
- Assurez-vous que le bon port est sélectionné. L'IDE Thonny devrait détecter automatiquement le port, mais vous devrez peut-être le sélectionner manuellement (par exemple, COM3 sous Windows ou /dev/ttyACM0 sous Linux).
- Copiez le code ci-dessus et collez-le dans l'éditeur de l'IDE Thonny.
- Si votre test de polarité a montré que le Shell affiche 1 lorsque le signal est présent, réglez MODULE_ACTIVE_LOW sur False avant d'enregistrer.
- Enregistrez le script sur votre Raspberry Pi Pico en procédant comme suit :
- Cliquez sur le bouton Enregistrer, ou utilisez les touches Ctrl+S.
- Dans la boîte de dialogue d'enregistrement, vous verrez deux sections : This computer et Raspberry Pi Pico. Sélectionnez Raspberry Pi Pico
- Enregistrez le fichier sous le nom main.py
- Cliquez sur le bouton vert Run (ou appuyez sur F5) pour exécuter le script. Le script s'exécutera.
- Activez le signal 12V ou 24V, laissez-le actif quelques secondes, puis désactivez-le.
- Consultez le message dans le Shell en bas de Thonny.
Si les lignes SIGNAL PRESENT apparaissent lorsque le signal est coupé et les lignes IDLE lorsqu'il est actif, vous avez un module actif HIGH et la solution est la ligne unique mentionnée ci-dessus, pas une réécriture.
Si vous nommez votre script main.py et que vous l'enregistrez dans le répertoire racine du Raspberry Pi Pico, il s'exécutera automatiquement à chaque mise sous tension ou réinitialisation du Pico. C'est encore plus important pour ce projet que pour la plupart des autres, car un surveillant d'appareil est destiné à être laissé dans une armoire à côté de la machine, alimenté uniquement par un chargeur USB. Laissé ainsi, avec un compteur ajouté au code, le Raspberry Pi Pico devient un compteur de cycles permanent capable de dire si la machine a fonctionné aujourd'hui et combien de fois, sans que personne n'ait à y brancher un ordinateur portable. Confirmez la polarité avant de fermer l'armoire, car un compteur qui compte la mauvaise moitié de chaque cycle ressemble exactement, vu de l'extérieur, à un compteur qui fonctionne. Si vous donnez à votre script un autre nom que main.py, vous devrez le lancer à la main depuis le Shell de Thonny à chaque fois.
À partir de là, la même entrée peut déclencher une action au lieu d'un affichage. En envoyant la lecture isolée vers le tutoriel Raspberry Pi Pico - Relais., le surveillant devient un petit contrôleur qui réagit de lui-même à la ligne 24V.