Raspberry Pi - Optocoupleur PC817 : Surveiller un Signal d'Entrée 12V/24V DC
Les broches GPIO d'un Raspberry Pi fonctionnent en 3,3V et ne tolèrent PAS le 5V, donc un fil 12V ou 24V égaré qui touche le connecteur 40 broches n'endommage pas seulement une broche - il détruit généralement toute la carte, y compris le lecteur de carte SD, le port Ethernet et tout le reste. Un optocoupleur PC817 élimine complètement ce risque : la tension externe n'atteint jamais le Pi, car le signal traverse l'espace isolant sous forme de lumière plutôt que d'électricité.
La plupart des gens qui en câblent un se posent en réalité une question simple : cette machine, cette pompe, ce chauffage ou cette lampe fonctionne-t-il vraiment en ce moment ? Un Raspberry Pi est une bonne réponse, car il peut rester allumé pendant des semaines et noter ce qu'il a observé. Ce tutoriel montre comment transformer un Raspberry Pi en un nœud toujours actif qui surveille une ligne 12V ou 24V isolée et en garde un historique. En détail, nous allons apprendre :
- Pourquoi un optocoupleur est le moyen le plus sûr de lire un signal 12V/24V avec un Raspberry Pi
- Laquelle des trois variantes de module PC817 - 3-5V, 12V ou 24V - correspond à la ligne que vous voulez surveiller
- Comment câbler un module d'isolation PC817 prêt à l'emploi au Raspberry Pi, et comment construire la même chose à partir de la puce nue si vous préférez
- Comment savoir en moins d'une minute si votre module est actif à l'état bas ou actif à l'état haut, et comment inverser le code avec une seule constante
- Comment brancher le PC817 en travers d'un appareil, en parallèle avec celui-ci, afin que le Pi suive si cet appareil est allumé ou éteint
- Comment programmer le Raspberry Pi en Python pour lire l'entrée isolée
- Comment enregistrer chaque changement du signal externe dans un fichier avec un horodatage, afin d'obtenir un historique de fonctionnement
Nous vous suggérons :
- De lire d'abord le tutoriel Raspberry Pi - Bouton. si vous n'avez jamais configuré une broche GPIO en entrée avec pull-up. Le PC817 se lit exactement de la même manière.
- De lire plutôt le tutoriel Raspberry Pi - Interrupteur de fin de course. si ce que vous voulez détecter est un contact mécanique sec qui ne porte aucune tension. Dans ce cas, aucun optocoupleur n'est nécessaire.
- De lire le tutoriel Raspberry Pi - Enregistrer des données avec horodatage sur carte SD. si vous prévoyez de laisser le Pi fonctionner comme nœud d'enregistrement à long terme.
- De lire le tutoriel Raspberry Pi - Relais. si vous voulez commuter une charge 12V/24V plutôt que la lire. Un relais est l'équivalent côté sortie de l'optocoupleur.

Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
Les variantes de module sont la même carte vendue en différentes versions - vous achetez celle qui correspond à votre signal, pas plusieurs.
À Propos de l'Optocoupleur PC817
Le PC817 est un photocoupleur, aussi appelé opto-isolateur ou optocoupleur. Dans son petit boîtier noir, une LED infrarouge fait face à un phototransistor, séparés par un espace isolant. Lorsque le courant traverse la LED, sa lumière rend le phototransistor passant. Comme la seule chose qui traverse l'espace est la lumière, les deux côtés de la puce restent électriquement séparés - et c'est exactement ce qui protège le Raspberry Pi.
Les caractéristiques du PC817 sont :
- Boîtier : DIP 4 broches, avec la broche 1 marquée par un point ou une encoche
- Tension directe de la LED d'entrée (Vf) : environ 1,2 V typique, 1,4 V maximum
- Courant direct de la LED d'entrée (If) : 20 mA maximum en continu, 5 mA à 20 mA en usage normal, 10 mA est une bonne cible
- Tension collecteur-émetteur de sortie (VCEO) : 35 V maximum
- Courant de collecteur de sortie (IC) : 50 mA maximum
- Dissipation de puissance du collecteur : 150 mW
- Tension d'isolation : 5000 Vrms pendant 1 minute
- Taux de transfert de courant (CTR) : 50% à 600% selon la classe (classe A 80-160%, classe B 130-260%, classe C 200-400%, classe 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
La valeur d'isolation de 5000 Vrms est le chiffre qui compte pour un Raspberry Pi. Elle signifie que le circuit 12V ou 24V devrait percer cinq mille volts d'isolation avant de pouvoir atteindre le connecteur.
Le Module d'Isolation à Optocoupleur PC817
La façon pratique d'utiliser un PC817 avec un Raspberry Pi est un module d'isolation prêt à l'emploi. Il porte la même puce sur une petite carte avec une résistance série, une LED d'état et des borniers à vis, donc rien n'est à calculer ni à souder :

- Borniers à vis IN+ et IN- : le côté entrée. Le signal 12V/24V doit être connecté à IN+ et la masse de ce même circuit 12V/24V doit être connectée à IN-.
- Broche VCC : doit être connectée au 3,3V (broche 1) du Raspberry Pi.
- Broche GND : doit être connectée à une broche de masse du Raspberry Pi, par exemple GND (broche 6).
- Broche OUT (parfois marquée DO ou OUT1) : doit être connectée à une broche GPIO du Raspberry Pi, par exemple GPIO 12 (broche 32).
La LED d'état de la carte mérite d'être connue avant de câbler quoi que ce soit : elle s'allume lorsque le côté entrée est alimenté, ce qui vous indique que la moitié entrée fonctionne avant même que le Raspberry Pi soit allumé.
※ Note:
La disposition des broches d'un module peut varier selon les fabricants. Certaines cartes inversent VCC et GND, et d'autres impriment les bornes d'entrée + et - au lieu de IN+ et IN-. Fiez-vous toujours aux marquages imprimés sur votre propre module plutôt qu'à l'image ci-dessus, et regardez attentivement avant d'alimenter quoi que ce soit.
Quel Module Optocoupleur Me Faut-il - 3-5V, 12V ou 24V ?
C'est la seule décision d'achat de toute la page, et il est facile de se tromper car les trois variantes se ressemblent. La résistance série est déjà montée sur la carte, et elle est dimensionnée pour UNE seule tension d'entrée. C'est pourquoi les modules sont vendus en trois versions distinctes :
| La ligne que vous voulez surveiller | Le module à acheter | Exemple typique |
|---|---|---|
| Un signal logique 3,3V ou 5V | le module 3-5V | une sortie de capteur, un signal d'automate 5V, un autre microcontrôleur |
| Un signal 12V DC | le module 12V | un circuit automobile, une pompe ou un ventilateur 12V, une centrale d'alarme |
| Un signal 24V DC | le module 24V | une sortie de machine industrielle, un contact d'alarme d'onduleur, un solénoïde 24V |
Deux erreurs à éviter, car elles coûtent soit un module, soit un après-midi :
- Alimenter un module 12V avec une ligne 24V fait passer environ le double du courant prévu dans sa LED interne et l'endommagera.
- Alimenter un module 24V avec une ligne 12V sous-alimente la LED, donc la sortie peut commuter en retard, commuter de façon peu fiable, ou ne pas commuter du tout - et une entrée intermittente est bien plus difficile à diagnostiquer qu'une entrée morte.
Si votre signal se situe entre les tensions indiquées, ou si vous n'êtes pas sûr de sa valeur, mesurez-le avec un multimètre avant de commander. Avec un module, vous ne calculez rien, vous choisissez la bonne variante - et ce choix est l'équivalent, pour un module, du choix manuel de la valeur de la résistance.
La variante 3-5V surprend certaines personnes : pourquoi isoler un signal qu'une broche GPIO pourrait lire directement ? Parce que l'isolation consiste à couper le chemin de masse, pas seulement à gérer une haute tension. Elle trouve sa place chaque fois que les deux circuits fonctionnent avec des alimentations séparées, se trouvent aux deux extrémités d'un long câble, ou que l'un d'eux est électriquement bruyant - un driver de moteur, ou la carte de commande basse tension à l'intérieur d'un appareil alimenté par le secteur. Avec un Raspberry Pi, cet argument est plus fort que d'habitude, car ce que vous protégez est un ordinateur Linux complet avec une carte SD.
Comment Ça Fonctionne
La broche GPIO du Raspberry Pi est configurée en entrée avec le pull-up interne activé, elle reste donc à 3,3V tant que rien ne la tire vers le bas. C'est le phototransistor qui la tire vers le bas.
| Signal externe 12V/24V | LED interne | Phototransistor | Lecture GPIO du Raspberry Pi |
|---|---|---|---|
| PRÉSENT | allumée | passant | LOW |
| ABSENT | éteinte | bloqué | HIGH |
La lecture est donc INVERSÉE : la broche lit LOW lorsque le signal externe est présent, et HIGH lorsqu'il est absent. Cela surprend presque tout le monde la première fois. Le code de cette page l'inverse à nouveau, de sorte qu'une variable nommée signal_active soit True lorsque la ligne 12V/24V est réellement sous tension.
Le Raspberry Pi dispose de résistances de pull-up internes sélectionnables par logiciel sur ses broches GPIO, donc aucune résistance de pull-up externe n'a besoin d'être ajoutée. Elle s'active avec un seul argument dans GPIO.setup().
Votre Module Optocoupleur Est-il Actif à l'État Bas ou Actif à l'État Haut ?
Le tableau ci-dessus est une question de physique réglée pour la puce nue câblée comme le décrit cette page : avec un pull-up sur la broche GPIO, le phototransistor tire la broche vers le bas, donc signal présent = LOW.
Un module est une autre affaire. Certains fabricants ajoutent un étage inverseur sur la carte, 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, et l'annonce du vendeur indique rarement lequel vous avez. Alors ne supposez rien - prenez une minute pour le découvrir :
- Câblez le module au Raspberry Pi comme indiqué ci-dessous et exécutez le premier script de cette page, qui affiche l'état brut de la broche.
- Sans rien de connecté aux borniers d'entrée, notez ce que le terminal affiche.
- Alimentez maintenant le côté entrée et notez ce qu'il affiche à la place.
- Ce qui apparaît pendant que le signal est présent est le niveau actif de votre module. Si la broche lit LOW à ce moment-là, le module est actif à l'état bas ; si elle lit HIGH, le module est actif à l'état haut.
- Vérifiez-le avec la LED d'état embarquée : cette LED s'allume lorsque le côté entrée est alimenté, donc l'allumage de la LED et le passage de la broche à son niveau actif doivent toujours se produire ensemble. Si la LED s'allume et que rien ne change du tout sur le Pi, le problème se situe côté sortie - VCC, GND ou le fil OUT - et non côté entrée.
Quel que soit le résultat, la correction tient en un mot dans le code. Les deux scripts Python de cette page commencent par :
MODULE_ACTIVE_LOW = True
Laissez-la à True pour un module actif à l'état bas, mettez-la à False pour un module actif à l'état haut. Rien d'autre ne doit changer dans l'un ou l'autre script, car chaque lecture découle de cette seule constante.
Schéma de Câblage
Câbler un module d'isolation à optocoupleur PC817 au Raspberry Pi

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Pour simplifier et organiser votre montage de câblage, nous recommandons l'utilisation d'un shield à bornier à vis pour Raspberry Pi. Ce shield assure des connexions plus sûres et mieux gérées, comme illustré ci-dessous :

Les connexions sont :
- Le fil positif du signal externe 12V/24V vers le bornier à vis IN+ du module
- La masse du circuit externe 12V/24V vers le bornier à vis IN- du module
- La broche VCC du module vers le 3,3V (broche 1) du Raspberry Pi
- La broche GND du module vers le GND (broche 6) du Raspberry Pi
- La broche OUT du module vers GPIO 12 (broche 32) du Raspberry Pi
Il n'y a aucune résistance série dans cette liste, et c'est tout l'intérêt d'un module - tant que la variante correspond à la tension qui arrive sur les bornes d'entrée, la résistance est déjà sur la carte.
※ Note:
Alimentez le côté sortie de l'optocoupleur depuis le 3,3V (broche 1 ou broche 17) du Raspberry Pi, et NON depuis le 5V (broche 2 ou broche 4). Une broche GPIO ne supporte que 3,3V, et un module alimenté en 5V peut présenter 5V sur sa broche OUT.
※ Note:
La masse du circuit 12V/24V ne doit PAS être connectée à la masse du Raspberry Pi. Ces deux masses doivent rester séparées - cette séparation est toute la raison d'être du PC817. Si les deux masses sont reliées, le circuit commute toujours et le code fonctionne toujours, mais l'isolation a disparu et le Raspberry Pi est de nouveau exposé à tout ce qui se passe côté 12V/24V.
Optionnel - Construire la Même Entrée à Partir de la Puce PC817 Nue
Si vous préférez la souder vous-même, la puce nue fait le même travail pour moins cher - vous reprenez simplement la décision concernant la résistance que le module prenait pour vous.
La puce est un DIP à 4 broches, avec la broche 1 marquée par un point ou une encoche et les broches numérotées dans le sens inverse des aiguilles d'une montre à partir de celle-ci.

Les connexions sont :
- Le fil positif du signal externe 12V/24V vers une patte de la résistance série
- L'autre patte de la résistance série vers la broche 1 du PC817 - Anode (A)
- La broche 2 du PC817 - Cathode (K) vers la masse du circuit externe 12V/24V, et NON vers la masse du Raspberry Pi
- La broche 4 du PC817 - Collecteur (C) vers GPIO 12 (broche 32) du Raspberry Pi
- La broche 3 du PC817 - Émetteur (E) vers le GND (broche 6) du Raspberry Pi
Les broches 1 et 2 constituent le côté entrée, les broches 3 et 4 le côté sortie, sans aucun chemin électrique entre elles. Dimensionnez la résistance avec R = (Vin - 1.2) / 0.01 pour un courant de LED cible de 10 mA : 220 Ω à 3,3V, 390 Ω à 5V, 1 kΩ à 12V, 2,2 kΩ à 24V (un composant de 1/2 W à 24V). Laisser une résistance de 1 kΩ en place sur une ligne 24V fait passer environ 22,8 mA dans une LED prévue pour 20 mA - l'équivalent, pour la puce nue, du montage d'un module 12V sur une ligne 24V. Une puce nue câblée de cette façon est toujours active à l'état bas.
Connecter le PC817 en parallèle avec l'appareil que vous voulez surveiller
Les schémas ci-dessus montrent l'entrée alimentée par sa propre source, ce que vous feriez sur un établi. Dans une installation réelle, le côté entrée n'est alimenté par rien qui lui soit propre - il est branché EN TRAVERS de l'appareil dont vous voulez connaître l'état, en parallèle avec celui-ci. L'exemple utilisé ici est le contact d'alarme 24V d'une machine ou d'un onduleur, le type de ligne déjà câblée à un gyrophare ou à un tableau et que vous voulez maintenant faire surveiller aussi par le Raspberry Pi.
WARNING
Ne placez jamais l'entrée de l'optocoupleur en SÉRIE avec l'appareil. En série, tout le courant de charge de cet appareil - une bobine de relais, un contacteur, une lampe, un moteur - est forcé à travers la LED interne, et la LED est détruite dès que l'appareil est mis en marche. L'entrée se branche en parallèle, en travers des deux bornes de l'appareil, et rien dans le circuit existant n'est coupé ni dévié.
En prenant comme exemple ce contact d'alarme 24V de machine ou d'onduleur, et en utilisant un module 24V, les connexions sont :
- La borne positive (commutée) du contact d'alarme 24V vers le bornier à vis IN+ du module
- La borne négative (de retour) du contact d'alarme 24V vers le bornier à vis IN- du module
- La broche VCC du module vers le 3,3V (broche 1) du Raspberry Pi
- La broche GND du module vers le GND (broche 6) du Raspberry Pi
- La broche OUT du module vers GPIO 12 (broche 32) du Raspberry Pi
- Le câblage existant du contact d'alarme reste exactement tel qu'il était - rien n'est déconnecté
Un branchement en parallèle sur un module ne nécessite aucune résistance série supplémentaire ; celle de la carte est déjà dimensionnée pour 24V, ce qui est précisément la raison pour laquelle la variante doit correspondre à la ligne sur laquelle vous vous branchez. Avec la puce nue, le même branchement reçoit une résistance de 2,2 kΩ devant la broche 1.
Le branchement consomme environ 10 mA. À côté de ce que consomme une bobine de relais, une lampe, une électrovanne ou un moteur, ce n'est absolument rien, donc l'appareil continue de fonctionner exactement comme avant. La mesure est non invasive et en lecture seule.
La polarité compte, car le côté entrée est une LED et une LED ne conduit que dans un sens. Inversez IN+ et IN- - ou les broches 1 et 2 sur une puce nue - et le circuit ne s'activera tout simplement jamais, sans aucun autre symptôme pour vous guider. Vérifiez quel côté du branchement est positif avant de le câbler.
※ Note:
Un appareil inductif nécessite une diode de protection. Une bobine de relais, un solénoïde, un contacteur, une vanne ou un moteur génère un important pic de tension inverse au moment où il se coupe, et la LED d'entrée du PC817 ne supporte que 6 V en inverse, ce pic peut donc la détruire. Montez une diode ordinaire en antiparallèle directement sur les bornes d'entrée - cathode de la diode sur IN+, anode de la diode sur IN- (sur une puce nue, cathode sur la broche 1 et anode sur la broche 2). En fonctionnement normal, cette diode est polarisée en inverse et ne fait rien du tout ; lors d'un pic, 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.
Certaines sorties statiques présentent des fuites. Les sorties transistor d'automate, les sorties triac et les drivers de lampes LED peuvent laisser passer un faible courant même lorsqu'ils sont à l'état bloqué, et une fuite suffisante allume partiellement la LED interne - le Raspberry Pi indique alors l'appareil comme ON alors qu'il est en réalité au repos. Le symptôme est facile à reconnaître : la lecture ne revient jamais à l'état inactif, et sur un module la LED d'état brille faiblement au lieu de s'éteindre. Le remède est une résistance de fuite d'environ 4,7 kΩ à 10 kΩ montée en parallèle avec les bornes d'entrée de l'optocoupleur, afin que le courant de fuite passe par la résistance plutôt que par la LED.
Il s'agit aussi d'un branchement DC uniquement : l'entrée du PC817 est une seule LED et ne répond qu'à une seule polarité, ce n'est donc pas le bon composant pour détecter une ligne AC - cela nécessite un optocoupleur dont l'étage d'entrée comporte deux LED tête-bêche.
Comme le branchement se trouve en travers de l'appareil plutôt que devant lui, ce que lit le Raspberry Pi est l'état réel de cet appareil, quelle qu'en soit la cause - un thermostat, un interrupteur à flotteur, un automate, une minuterie, ou quelqu'un qui appuie sur un bouton à l'autre bout du bâtiment. Il suit l'appareil tout aussi fidèlement lorsque celui-ci ne démarre pas du tout, ce qui rend l'enregistrement intéressant : totaux de temps de fonctionnement, alertes de défaut et vérifications « a-t-il vraiment démarré ? » découlent tous du même branchement. Une limitation honnête : cela vous indique que l'appareil est alimenté, pas qu'il fait son travail. Un moteur grippé ou un chauffage grillé consomme toujours de l'énergie et sera toujours lu comme ON.
Code Raspberry Pi - Lire un Signal 12V/24V Isolé via l'Optocoupleur PC817
Aucune bibliothèque n'est nécessaire pour ce projet. Le PC817 transforme la tension externe en un simple niveau HIGH/LOW, donc RPi.GPIO suffit.
Étapes Rapides
- Câblez le PC817 à votre Raspberry Pi comme indiqué sur le schéma de câblage du module ci-dessus, et vérifiez bien que la masse 12V/24V ne touche pas le Pi.
- Assurez-vous que Raspberry Pi OS ou tout autre système d'exploitation compatible avec le Raspberry Pi est installé sur votre Pi.
- Assurez-vous que votre Raspberry Pi est connecté au même réseau local que votre PC.
- Assurez-vous que votre Raspberry Pi est connecté à Internet si vous devez installer des bibliothèques.
- Si c'est la première fois que vous utilisez le Raspberry Pi, consultez Installation du logiciel - Raspberry Pi.
- Connectez votre PC au Raspberry Pi via SSH à l'aide du client SSH intégré sous Linux et macOS ou de PuTTY sous Windows.
- Assurez-vous que la bibliothèque RPi.GPIO est installée. Sinon, installez-la à l'aide de la commande suivante :
- Créez un fichier de script Python pc817_optocoupler.py et ajoutez le code suivant :
- Enregistrez le fichier et exécutez le script Python en lançant la commande suivante dans le terminal :
- Mettez la ligne externe 12V/24V sous tension, puis coupez-la à nouveau.
- Consultez le résultat dans le Terminal.
Le script continue d'interroger la broche GPIO toutes les demi-secondes et affiche une ligne à chaque fois, indéfiniment. Il ne s'arrête que lorsque vous appuyez sur Ctrl + C dans le terminal, ce qui libère également la broche GPIO.
C'est aussi le script à exécuter pour la vérification actif à l'état bas ou actif à l'état haut décrite précédemment : alimentez l'entrée et regardez quel libellé apparaît. S'il affiche ENERGISED lorsque la ligne est au repos et idle lorsque la ligne est sous tension, votre module inverse le signal sur la carte - mettez MODULE_ACTIVE_LOW à False en haut du fichier et exécutez-le à nouveau. Rien d'autre dans le script ne décide du sens de la lecture, cette seule constante est donc la seule chose à modifier.
Explication du Code
Consultez l'explication ligne par ligne contenue dans les commentaires du code source !
Code Raspberry Pi - Surveiller Si un Appareil Est Allumé ou Éteint et l'Enregistrer avec un Horodatage
Afficher la même ligne deux fois par seconde est utile pour un premier test, mais un Raspberry Pi est généralement laissé en fonctionnement comme un petit serveur toujours actif. Dans ce rôle, vous ne voulez pas un flux de lignes identiques - vous voulez un historique des moments où quelque chose a réellement changé. Ce second script affiche et ajoute une ligne à un fichier uniquement lorsque l'entrée isolée change d'état, avec la durée de l'état précédent.
Cela le rend directement utilisable pour une ligne de voyant de marche ou de défaut d'une machine 24V, et pour un signal de fonctionnement 12V d'un compresseur de congélateur ou d'une pompe de relevage, où la question intéressante n'est pas l'état actuel mais combien de fois et pendant combien de temps l'appareil a fonctionné pendant la nuit. Laissé en fonctionnement pendant des semaines - sous nohup, ou comme un petit service systemd - le même script construit discrètement un historique des heures de fonctionnement de l'appareil, et l'écart entre deux entrées répond à la question qu'un coup d'œil à un tableau ne peut jamais résoudre : a-t-il vraiment démarré quand il le devait ?
Réglez la question de la polarité avec le premier script AVANT de partir en laissant celui-ci tourner, car un module câblé dans l'autre sens n'échoue pas bruyamment ici - il écrit discrètement dans le fichier journal un historique plausible mais inversé, chaque période de fonctionnement enregistrée comme une période de repos et inversement, et vous pourriez ne pas vous en apercevoir pendant des semaines.
Étapes Rapides
- Créez un fichier de script Python pc817_optocoupler_logger.py et ajoutez le code suivant :
- Enregistrez le fichier et exécutez le script Python en lançant la commande suivante dans le terminal :
- Allumez et éteignez plusieurs fois la ligne externe 12V/24V, en la laissant dans chaque état pendant un moment.
- Consultez le résultat dans le Terminal.
Les mêmes lignes sont ajoutées à un fichier nommé isolated_input.log à côté du script, de sorte que l'historique est conservé après la fermeture de la session SSH. Ce script contient la même constante MODULE_ACTIVE_LOW que le premier et en déduit sa détection de changement, donc ce que vous avez réglé là-bas s'applique aussi ici. Le script continue d'interroger l'entrée à son propre intervalle de boucle jusqu'à ce que vous appuyiez sur Ctrl + C dans le terminal.
Explication du Code
Consultez l'explication ligne par ligne contenue dans les commentaires du code source !
Vidéo
Mettez-vous au Défi
- Facile : modifiez les libellés affichés pour qu'ils correspondent à votre propre machine, et allumez une LED sur une autre broche GPIO chaque fois que l'entrée isolée est sous tension.
- Moyen : transformez le second script en compteur d'heures de fonctionnement pour l'appareil surveillé : additionnez le temps passé sous tension, comptez combien de fois il a démarré, et affichez les deux totaux à chaque changement.
- Avancé : ajoutez un anti-rebond logiciel afin qu'un long fil 24V bruité ne puisse pas enregistrer deux événements d'affilée, surveillez quatre lignes isolées à la fois avec un module optocoupleur à 4 canaux, ou écrivez un avertissement « la pompe n'a pas démarré » dans le journal lorsque l'entrée n'est toujours pas passée sous tension quelques minutes après le moment prévu.
Connaissances Supplémentaires
Une question très courante chez les débutants est de savoir pourquoi quelques résistances ne feraient pas le même travail pour beaucoup moins cher.
Comparons un optocoupleur PC817 avec un pont diviseur de tension à résistances pour lire un signal 24V sur un Raspberry Pi.
Les points communs entre l'optocoupleur et le pont diviseur de tension :
- Tous deux abaissent un signal 24V à un niveau qu'une broche GPIO 3,3V peut accepter.
- Tous deux se lisent avec la même unique ligne de Python.
- Tous deux coûtent très peu.
Les différences entre l'optocoupleur et le pont diviseur de tension :
| Optocoupleur PC817 | Pont diviseur de tension à résistances | |
|---|---|---|
| Connexion électrique au Pi | aucune, les deux côtés sont séparés | directe, les deux circuits partagent une masse |
| Tension d'isolation | 5000 Vrms | aucune |
| Si le côté 24V subit un pic ou un court-circuit | le Pi n'est pas affecté | le pic atteint la broche GPIO |
| Lecture | inversée sur la puce nue et sur la plupart des modules, réglée par une constante dans le code | non inversée, HIGH signifie signal présent |
| Gestion de la masse | la masse 12V/24V doit rester séparée | la masse 12V/24V doit être reliée à la masse du Pi |
| Composants supplémentaires | un module, ou une puce et une résistance | deux résistances |
Pour une expérience sur votre bureau avec une alimentation de laboratoire que vous contrôlez, un pont diviseur est acceptable. Pour tout ce qui est relié à un véhicule, une machine, une centrale d'alarme ou une alimentation 24V branchée sur le secteur, le pont diviseur est un mauvais compromis : il économise un composant et sacrifie la seule chose qui se trouve entre un défaut électrique et un Raspberry Pi mort. Comme une broche GPIO endommagée signifie normalement le remplacement de toute la carte plutôt que d'une seule puce, l'optocoupleur est rentabilisé dès la première fois que quelque chose tourne mal.