Arduino Mega - Optocoupleur PC817 : Surveiller un Signal d'Entrée 12V/24V DC

Un Arduino Mega dispose de 54 broches numériques, ce qui en fait la carte idéale à placer devant un tableau rempli de lignes d'état 12V DC et 24V DC - mais câbler directement ne serait-ce qu'une de ces lignes sur une broche détruirait la carte. L'optocoupleur PC817 est le composant qui résout ce problème : il transmet le signal sous forme de lumière, de sorte que le Mega peut surveiller toute une armoire de lignes industrielles sans jamais les toucher électriquement. Et la question que vous vous posez vraiment est rarement « un signal est-il présent ? » - c'est « cette pompe, ce chauffage, cette machine fonctionne-t-elle vraiment en ce moment ? ». Comme le PC817 se branche aux bornes de l'appareil plutôt qu'en ligne avec lui, c'est exactement à cette question qu'il répond, une machine par broche. Dans ce guide, nous allons aborder :

Entrée 24V isolée par optocoupleur PC817 Arduino Mega

Nous vous suggérons :

Matériel Requis

1×Arduino MEGA
1×Alternativement: DIYables MEGA Development Board
1×Câble USB 2.0 type A/B (pour PC USB-A)
1×Câble USB 2.0 type C/B (pour PC USB-C)
1×PC817 Optocoupler Isolation Module 3-5V
1×PC817 Optocoupler Isolation Module 12V
1×Plaque d'essai
1×Fils de connexion
1×Recommandé: Screw Terminal Block Shield for Arduino Uno/Mega
1×Recommandé: Sensors/Servo Expansion Shield for Arduino Mega
1×Recommandé: Breadboard Shield for Arduino Mega
1×Recommandé: Enclosure for Arduino Mega

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À Propos de l'Optocoupleur PC817

L'optocoupleur PC817, également vendu sous le nom de photocoupleur ou d'opto-isolateur, se présente dans un boîtier DIP à 4 broches avec la broche 1 repérée par un point ou une encoche. À 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é. C'est toute la raison pour laquelle les deux côtés restent électriquement séparés, et c'est pourquoi une ligne industrielle 24V DC peut commander une broche de l'Arduino Mega sans aucun risque pour le Mega.

Voici les valeurs qui comptent lorsque vous concevez autour de ce composant :

Paramètre Valeur
Boîtier DIP à 4 broches
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 plage normale
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 le rang (A 80-160%, B 130-260%, C 200-400%, D 300-600%)
Vitesse de commutation montée environ 4 us, descente environ 3 us
Température de fonctionnement -30 C à +100 C

Presque plus personne ne câble cette puce seule, et sur un Mega avec des dizaines de canaux à construire, vous ne devriez certainement pas le faire. Ce que vous achetez à la place est un module d'isolation à optocoupleur PC817 : la même puce sur une petite carte avec la résistance série, une LED d'état, des borniers à vis pour le côté isolé et un connecteur à broches pour le côté Mega déjà installés. Le reste de ce tutoriel porte sur ce module, la puce seule restant une option présentée vers la fin.

De Quel Module Optocoupleur PC817 Ai-je Besoin ?

Voici la partie que les fiches produits passent sous silence. La résistance soudée sur le module a été choisie pour une seule tension d'entrée, et elle ne peut pas être autre chose, donc les modules sont vendus en trois variantes distinctes. Vous n'achetez pas « un module PC817 » - vous achetez celui qui correspond à la ligne que vous comptez surveiller.

Partez de cette ligne et remontez :

  • Une ligne 24V DC - une sortie d'automate, une lampe d'état de machine, une bobine de contacteur, un solénoïde de vanne : prenez le module optocoupleur 24V. C'est la variante dont un Mega placé devant un tableau industriel a besoin presque à chaque fois.
  • Une ligne 12V DC - câblage automobile, centrales d'alarme, circuits de lampes et de klaxons 12V : prenez le module optocoupleur 12V.
  • Un signal logique 3,3V ou 5V - un autre microcontrôleur, une carte capteur, la carte de commande basse tension à l'intérieur d'un appareil alimenté sur le secteur : prenez le module optocoupleur 3-5V.

Se tromper de variante est la seule erreur d'achat qui vous coûte du matériel ou un après-midi :

  • Un module 12V alimenté par une ligne 24V fait passer environ le double du courant prévu dans sa LED interne et l'endommagera. La carte ne peut pas se protéger - la résistance qu'elle porte est tout simplement trop faible pour cette tension.
  • Un module 24V alimenté par une ligne 12V fait l'inverse et sous-alimente la LED. Rien ne brûle, mais la sortie peut commuter en retard, ne commuter que de temps en temps, ou ne jamais commuter. Un canal qui indique discrètement « inactif » alors que la machine tourne est pire qu'un canal qui n'indique rien.

Avec un module, il n'y a aucun calcul de résistance à faire. Choisir la variante, C'EST ce calcul, déjà fait pour vous et soudé sur la carte.

※ Note:

La variante 3-5V n'est pas l'intruse de cette liste. Un signal 5V DC ou 3,3V DC vaut la peine d'être isolé 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 partagent une armoire avec quelque chose de bruyant comme un driver de moteur. L'isolation consiste à couper le chemin de masse, pas seulement à survivre à une haute tension.

Les Modules Multi-Canaux n'ont qu'une Seule Variante pour Toute la Carte

C'est là qu'un projet Mega se fait piéger, car le Mega est justement la carte pour laquelle on achète des modules multi-canaux. Les modules d'isolation PC817 existent en versions 1, 2, 4 et 8 canaux, et la variante de tension s'applique à toute la carte plutôt qu'à chaque canal : un module 24V à 8 canaux, ce sont huit étages d'entrée 24V identiques. Personne ne vend de carte avec six canaux 24V et quelques canaux 5V, car cela voudrait dire deux résistances différentes sur une même référence.

Donc, lorsque le tableau devant le Mega mélange les tensions - disons six lampes d'état 24V DC plus une ligne logique 5V provenant d'un contrôleur dans la même armoire - la réponse n'est pas un seul module à 8 canaux. C'est un module 24V à 8 canaux pour les lampes et un module 3-5V séparé pour la ligne logique, raccordés sur des broches différentes du Mega. Cela semble du gaspillage jusqu'à ce que vous vous rappeliez quelle carte vous tenez : avec 54 broches numériques, faire fonctionner deux ou trois modules côte à côte ne coûte que des broches que vous n'auriez jamais utilisées, et c'est la seule façon de couvrir un tableau mixte sans sous-alimenter un canal ou en griller un autre.

Schéma de Câblage

Nous utiliserons la broche numérique 2 de l'Arduino Mega pour ce premier canal isolé. Un seul canal n'a besoin de rien de plus qu'une broche numérique ordinaire avec un pull-up interne utilisable, et la broche 2 est facile d'accès pendant vos tests sur breadboard. Dès que vous dépassez un canal, déplacez tout le groupe vers le bloc numérique dédié 22-53 du Mega - une rangée continue de 32 broches à usage général le long du double connecteur - c'est exactement ce que fait le sketch multi-canaux plus loin sur cette page.

※ Note:

La masse du circuit 12V DC / 24V DC ne doit PAS être connectée à la GND de l'Arduino Mega. Garder les deux masses séparées est tout l'intérêt de l'optocoupleur PC817. Si vous les reliez, le PC817 commutera toujours, mais l'isolation disparaît et un défaut côté industriel peut atteindre le Mega.

Câbler le Module d'Isolation à Optocoupleur PC817

Tout ce qui se trouve à gauche du tableau ci-dessous appartient au côté isolé ; tout ce qui se trouve à droite appartient à l'Arduino Mega. Les deux borniers à vis reçoivent la tension pour laquelle votre variante a été conçue - le module 24V attend une ligne 24V DC, le module 12V une ligne 12V DC - et il n'y a rien à calculer, car la résistance est déjà sur la carte.

Borne / Broche du module Se connecte à
IN+ (bornier à vis) la ligne de signal, à la tension pour laquelle votre variante de module est conçue
IN- (bornier à vis) la masse de ce circuit 12V DC / 24V DC uniquement
VCC (broche du connecteur) 5V de l'Arduino Mega
GND (broche du connecteur) GND de l'Arduino Mega
OUT / DO (broche du connecteur) broche numérique 2 de l'Arduino Mega
Schéma de câblage Arduino Mega module d'isolation à optocoupleur PC817

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

※ Note:

La disposition des broches des modules d'isolation PC817 prêts à l'emploi n'est pas standardisée - elle varie selon le fabricant. Certaines cartes étiquettent le connecteur de sortie VCC / GND / OUT, d'autres utilisent DO ou OUT1..OUT8, et quelques-unes inversent l'ordre des borniers à vis. Lisez toujours la sérigraphie imprimée sur votre propre module avant de le câbler à l'Arduino Mega.

Sur un module multi-canaux, les broches OUT1..OUTn vont simplement sur des broches consécutives du bloc 22-53 du Mega - 22, 23, 24 et ainsi de suite - tandis que l'unique paire VCC et GND alimente toute la carte. Avant de vous fier à ce que ces broches indiquent, lisez la section ci-dessous sur le sens de la sortie de votre module : c'est un détail propre à chaque fabricant, pas à chaque canal.

Brancher le Module en Parallèle avec l'Appareil à Surveiller

Le tableau ci-dessus part d'un signal déjà disponible sur une paire de bornes. Sur une vraie machine, c'est rarement le cas. Ce que vous avez, c'est un appareil qui est soit alimenté, soit non, et le travail consiste à faire savoir au Mega lequel des deux. Pour cela, vous placez l'entrée du module AUX BORNES de l'appareil - en parallèle avec lui.

※ Note:

Ne placez jamais l'entrée du module en série avec l'appareil. En série, tout le courant de charge de la lampe, de la bobine ou du moteur est forcé à travers la LED interne de l'optocoupleur, prévue pour 20 mA - le PC817 est détruit dès que l'appareil s'allume. Le côté entrée est une dérivation qui se place à côté de la charge, jamais un maillon de la chaîne qui l'alimente.

Prenons le travail pour lequel cette carte est achetée : un tableau de commande portant une rangée de lampes d'état 24V DC - RUN, FAULT, HEATER, PUMP - et un Mega derrière la porte qui doit enregistrer lesquelles sont allumées. Vous installez un module 24V avec autant de canaux qu'il y a de lampes, et chaque dérivation se compose des trois mêmes connexions :

Point de dérivation Se connecte à
La borne commutée (+) de la lampe le bornier à vis IN+ de ce canal
La borne de retour (-) de la lampe le bornier à vis IN- de ce même canal
La broche OUT de ce canal une broche du bloc 22-53 de l'Arduino Mega

Il n'y a aucune résistance dans cette dérivation. Le module 24V porte déjà celle qui convient à une lampe 24V, et c'est toute la raison pour laquelle la variante devait correspondre. Ce que vous devez tout de même lire au pied de la lettre, c'est « ce même canal » : quatre lampes, cela signifie quatre paires de borniers à vis et quatre broches du Mega, et vous ne reliez pas entre elles les bornes IN- de canaux différents pour économiser un fil, car chaque dérivation conserve la référence de masse de la lampe à laquelle elle appartient. Seul le côté Mega est commun. Certaines cartes multi-canaux mettent effectivement en commun leur masse d'entrée sur la sérigraphie - si c'est le cas de la vôtre, cela n'est utilisable que lorsque toutes les lampes surveillées partagent réellement un même retour. Rien dans le tableau n'est coupé ou redirigé non plus : la dérivation se place aux bornes de la lampe existante et consomme environ 10 mA, ce qui n'est rien à côté de ce que consomment déjà une lampe, une bobine de contacteur ou une vanne, donc le tableau se comporte exactement comme avant. La mesure est en lecture seule.

C'est aussi ce qui rend la lecture fiable. Comme la dérivation suit la lampe elle-même, elle indique l'état réel de l'appareil - y compris lorsque l'automate l'active sans que personne ne regarde, et y compris lorsque la machine reçoit l'ordre de démarrer et ne s'allume jamais. Les compteurs d'heures de fonctionnement, les journaux de temps d'inactivité et les alertes « la pompe a-t-elle vraiment démarré ? » en découlent tous.

Quatre détails déterminent si la dérivation fonctionne :

  • La polarité. Le côté entrée est une LED et ne conduit que dans un sens. Inversez IN+ et IN- et le canal ne s'allume jamais - aucun dommage, juste une ligne qui reste inactive pour toujours. Vérifiez quelle borne de la dérivation est positive avant de la câbler.
  • Les charges inductives nécessitent une diode de protection. Une bobine de contacteur, une électrovanne, un relais ou un moteur génère une forte pointe de tension inverse lorsqu'il se désactive, et la LED d'entrée du PC817 n'est prévue que pour 6 V en inverse. Placez une diode ordinaire en antiparallèle directement entre les bornes IN+ et IN- - cathode de la diode sur IN+, anode de la diode 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 une petite dérivation, une 1N4007 pour une plus lourde.
  • Les sorties statiques avec fuite donnent de fausses lectures. Les sorties transistor d'automate, les sorties triac et les drivers de lampes LED laissent souvent passer un peu de courant même lorsqu'elles sont désactivées, et une fuite suffisante allume la LED du PC817 juste assez pour être détectée. Le symptôme est sans équivoque : un canal qui indique LIVE et ne revient jamais à l'état inactif. Placez une résistance de décharge d'environ 4,7 kohm à 10 kohm entre ces mêmes bornes IN+ / IN-, pour que la fuite s'écoule à travers elle plutôt qu'à travers l'optocoupleur.
  • Uniquement en DC. L'entrée du PC817 est une seule LED, elle ne répond donc qu'à une seule polarité ; 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.

Une limitation honnête à garder à l'esprit : cela vous indique que l'appareil est alimenté, pas qu'il fait son travail. Un moteur de pompe grippé ou une résistance chauffante grillée consomme toujours de l'énergie et apparaîtra toujours comme LIVE sur le Mega.

Optionnel : Réaliser la Même Entrée avec la Puce Seule

Si vous préférez souder la puce DIP brute à 4 broches plutôt que d'acheter une carte, la puce vous offre la même isolation sans la résistance, la LED ou les borniers. Les broches 1 et 2 constituent le côté isolé : la broche 1 est l'Anode, alimentée depuis la ligne surveillée à travers une résistance série, et la broche 2 est la Cathode, reliée à la masse de ce circuit et jamais au Mega. Les broches 3 et 4 constituent le côté Mega : la broche 3 est l'Émetteur, câblé à la GND du Mega, et la broche 4 est le Collecteur, câblé à la broche numérique 2.

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

La résistance est la pièce que le module gérait pour vous. Dimensionnez-la avec R = (Vin - 1.2) / 0.01 pour un courant de LED de 10 mA : 3,3V DC nécessite 220 ohm, 5V DC nécessite 390 ohm, 12V DC nécessite 1 kohm, et 24V DC nécessite 2,2 kohm en 1/2 W. Choisir la bonne valeur est la version « puce seule » du choix de variante - laisser 1 kohm en place quand une dérivation passe de 12V à 24V fait passer environ 23 mA dans une LED prévue pour 20 mA.

Aucune résistance de pull-up externe n'est nécessaire sur la broche 4 - le sketch active celle interne au Mega.

Module Optocoupleur : Actif à l'État HAUT ou Actif à l'État BAS ?

C'est le point qui piège la plupart des gens la première fois, et sur un Mega vous pouvez faire l'erreur sur trente-deux broches à la fois, alors réglez-le avant d'écrire la moindre logique.

Sur la puce seule, la réponse relève d'une physique établie. Le collecteur va sur une broche numérique du Mega maintenue à l'état haut par sa résistance de pull-up interne, ce qui signifie :

  • Signal externe 12V DC / 24V DC PRÉSENT → LED allumée → le transistor conduit → la broche du Mega lit LOW
  • Signal externe 12V DC / 24V DC ABSENT → LED éteinte → le transistor est bloqué → la broche du Mega lit HIGH

Donc, sur une puce seule, une ligne sous tension se lit LOW. Sur un module, ce n'est que le cas le plus courant. Certains fabricants ajoutent un étage inverseur côté sortie pour que la broche suive l'entrée, et les deux types sont vendus sous la même description « module d'isolation à optocoupleur PC817 » sans rien sur la fiche produit pour les distinguer. Mesurez le vôtre plutôt que de supposer.

La vérification prend moins d'une minute :

  1. Câblez un canal sur la broche 2 et téléversez le sketch à un canal ci-dessous - il affiche le niveau brut de la broche à côté de l'état qu'il en déduit.
  2. Laissez les borniers à vis d'entrée non connectés et lisez ce qu'affiche le Moniteur Série.
  3. Appliquez le signal sur les bornes d'entrée et lisez à nouveau.
  4. La valeur brute qui apparaît lorsque le signal est présent est le niveau actif de votre module. Si c'est LOW, le sketch est déjà correct.
  5. Vérifiez avec la LED d'état du module. Cette LED s'allume lorsque le côté entrée est alimenté, c'est donc votre référence : LED allumée avec la broche à LOW signifie actif à l'état BAS, LED allumée avec la broche à HIGH signifie actif à l'état HAUT.

Si votre carte s'avère active à l'état HAUT, vous ne réécrivez rien. Les deux sketches de cette page comportent une constante en haut :

const bool MODULE_ACTIVE_LOW = true; // set to false for an active-HIGH module

Réglez-la sur false et tous les canaux de la carte suivent, car l'étage de sortie est le même pour tous. Vérifiez cependant chaque carte séparément - si vous utilisez un module 24V et un module 3-5V sur le même Mega, ils peuvent très bien ne pas se comporter de la même façon.

Comment Programmer pour l'Optocoupleur PC817

Aucune bibliothèque n'est nécessaire pour l'optocoupleur PC817. Il s'agit d'une simple lecture d'entrée numérique, en trois étapes.

  • Étape 1 - configurer la broche en entrée avec la résistance de pull-up intégrée, pour que la broche reste à un état HIGH défini tant que la ligne externe est hors tension :
pinMode(2, INPUT_PULLUP);
  • Étape 2 - lire le niveau brut de la broche avec digitalRead() :
int raw = digitalRead(2);
  • Étape 3 - transformer ce niveau brut en « la ligne externe est sous tension », en utilisant la constante de polarité pour que le même sketch convienne aux deux types de modules :
bool signalActive = MODULE_ACTIVE_LOW ? (raw == LOW) : (raw == HIGH);

Comparer signalActive avec sa valeur de la boucle précédente suffit pour détecter le moment où une ligne 24V DC s'allume ou s'éteint.

Code Arduino Mega pour l'Optocoupleur PC817

Ce premier sketch surveille un seul canal isolé sur la broche 2 et n'affiche une ligne que lorsque l'état de la ligne externe change. Il indique le niveau brut de la broche à côté de l'état, ce qui permet de l'utiliser pour le test de polarité décrit ci-dessus.

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega 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-mega/arduino-mega-pc817-optocoupler-monitor-12v-24v-dc-input-signal */ #define PC817_PIN 2 // The Arduino Mega pin connected to the PC817 collector (pin 4) // Most PC817 modules pull the output LOW when the input signal is present. // If your module works the other way round, change this to false. const bool MODULE_ACTIVE_LOW = true; bool lastActive = false; bool isSignalActive(int raw); void printState(bool active, int raw); void setup() { Serial.begin(9600); // internal pull-up: the pin idles HIGH while the external 12V/24V line is dead pinMode(PC817_PIN, INPUT_PULLUP); Serial.println("PC817 isolated input monitor ready on D2"); // print the state once at startup int raw = digitalRead(PC817_PIN); lastActive = isSignalActive(raw); printState(lastActive, raw); } void loop() { int raw = digitalRead(PC817_PIN); bool active = isSignalActive(raw); if (active != lastActive) { printState(active, raw); lastActive = active; } delay(20); } // turns the raw pin level into "the external line is live" bool isSignalActive(int raw) { return MODULE_ACTIVE_LOW ? (raw == LOW) : (raw == HIGH); } void printState(bool active, int raw) { Serial.print("[D2] raw="); if (raw == LOW) Serial.print("LOW -> isolated line: "); else Serial.print("HIGH -> isolated line: "); if (active) Serial.println("ENERGIZED"); else Serial.println("OPEN"); }

Étapes Rapides

Suivez ces étapes une par une.

  • Choisissez la variante de module qui correspond à votre tension d'entrée - 3-5V, 12V ou 24V - ou dimensionnez une résistance série si vous optez pour la puce seule.
  • Câblez le module d'isolation PC817 à l'Arduino Mega comme indiqué sur le schéma, en gardant la masse 12V DC / 24V DC séparée de la GND du Mega.
  • Connectez l'Arduino Mega à votre ordinateur avec un câble USB.
  • Ouvrez Arduino IDE sur votre ordinateur.
  • Choisissez la bonne carte (Arduino Mega) et le bon port COM.
  • Copiez le code ci-dessus et ouvrez-le dans Arduino IDE.
  • Cliquez sur le bouton Téléverser dans Arduino IDE pour téléverser le code vers l'Arduino Mega.
  • Ouvrez le Moniteur Série.
  • Activez et désactivez plusieurs fois la ligne externe 12V DC / 24V DC.
  • Consultez le résultat dans le Moniteur Série.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Mega Or...
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Mega Or...' on 'COM15')
New Line
9600 baud
PC817 isolated input monitor ready on D2 [D2] raw=HIGH -> isolated line: OPEN [D2] raw=LOW -> isolated line: ENERGIZED [D2] raw=HIGH -> isolated line: OPEN [D2] raw=LOW -> isolated line: ENERGIZED [D2] raw=HIGH -> isolated line: OPEN
Ln 11, Col 1
Arduino Mega Or... on COM15
2

Si votre Moniteur Série affiche raw=HIGH alors que la LED d'état du module est allumée, vous avez une carte active à l'état HAUT - réglez MODULE_ACTIVE_LOW sur false et téléversez à nouveau.

Code Arduino Mega pour Surveiller Plusieurs Appareils Allumés ou Éteints à la Fois

Les 54 broches numériques du Mega sont la raison de choisir cette carte pour ce travail. Au-delà d'un seul canal, abandonnez la broche 2 et déplacez le groupe vers le bloc 22-53, où les canaux se trouvent côte à côte sur le double connecteur. Le sketch ci-dessous surveille quatre lignes isolées sur les broches 22, 23, 24 et 25 - quatre lampes d'état, quatre bobines de contacteur ou quatre sorties d'automate, lues via un module à 4 canaux de la variante requise par ces lignes (un module 24V à 4 canaux pour une rangée de lampes 24V DC), ou via quatre puces PC817 seules, chacune avec sa propre résistance série. La constante de polarité est déclarée une seule fois et appliquée à chaque canal, car l'étage de sortie d'un module est le même pour tous.

/* * Ce code Arduino Mega a été développé par newbiely.fr * Ce code Arduino Mega 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-mega/arduino-mega-pc817-optocoupler-monitor-12v-24v-dc-input-signal */ // Four isolated channels from a 4-channel PC817 optocoupler module. // The Arduino Mega has 54 digital pins, so pins 22..25 are used here. const int PC817_PINS[] = {22, 23, 24, 25}; const int CHANNEL_COUNT = 4; // Most PC817 modules pull the output LOW when the input signal is present. // If your module works the other way round, change this to false. // A module's output stage is the same on every channel, so this one setting // covers all four of them. const bool MODULE_ACTIVE_LOW = true; bool lastActive[CHANNEL_COUNT]; bool isChannelActive(int pin); void printMap(); void setup() { Serial.begin(9600); for (int i = 0; i < CHANNEL_COUNT; i++) { pinMode(PC817_PINS[i], INPUT_PULLUP); lastActive[i] = isChannelActive(PC817_PINS[i]); } Serial.println("Monitoring 4 isolated channels on D22..D25"); printMap(); } void loop() { bool changed = false; for (int i = 0; i < CHANNEL_COUNT; i++) { bool active = isChannelActive(PC817_PINS[i]); if (active != lastActive[i]) { lastActive[i] = active; changed = true; } } if (changed) printMap(); delay(20); } // reads one channel and turns the raw pin level into "the external line is live" bool isChannelActive(int pin) { int raw = digitalRead(pin); return MODULE_ACTIVE_LOW ? (raw == LOW) : (raw == HIGH); } void printMap() { for (int i = 0; i < CHANNEL_COUNT; i++) { Serial.print("CH"); Serial.print(PC817_PINS[i]); Serial.print(":"); if (lastActive[i]) Serial.print("LIVE "); else Serial.print("idle "); } Serial.println(); }

Étapes Rapides

  • Câblez OUT1 à OUT4 du module à 4 canaux aux broches 22, 23, 24 et 25 de l'Arduino Mega.
  • Câblez le VCC du module au 5V et la GND du module à la GND du Mega.
  • Câblez chaque paire de borniers à vis d'entrée à l'une des quatre lignes à surveiller, toutes à la tension pour laquelle cette variante de module est conçue.
  • Téléversez le code et ouvrez le Moniteur Série.
  • Mettez les lignes sous tension une par une et observez la carte des états changer.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Mega Or...
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Mega Or...' on 'COM15')
New Line
9600 baud
Monitoring 4 isolated channels on D22..D25 CH22:idle CH23:idle CH24:idle CH25:idle CH22:LIVE CH23:idle CH24:idle CH25:idle CH22:LIVE CH23:LIVE CH24:idle CH25:idle CH22:LIVE CH23:LIVE CH24:idle CH25:LIVE CH22:idle CH23:LIVE CH24:idle CH25:LIVE
Ln 11, Col 1
Arduino Mega Or... on COM15
2

Connaissances Supplémentaires

Pourquoi le nombre de broches est-il si important lorsqu'on isole des entrées ? Parce que l'isolation ne s'étend pas comme un bus. Un capteur I2C vous fournit une douzaine de lectures sur deux fils, mais chaque ligne isolée correspond à un optocoupleur PC817 et à une broche numérique dédiée - il n'y a aucun partage, par conception, car le partage annulerait l'isolation. Un tableau de commande 24V DC avec huit lignes d'état nécessite huit broches, point final.

C'est là que l'Arduino Mega se distingue des cartes plus petites. Les broches 22 à 53 forment un bloc continu de 32 broches le long du double connecteur, physiquement alignées face à face, de sorte qu'un câble plat provenant d'un module d'isolation PC817 à 8 canaux se branche directement sur des broches consécutives sans enchevêtrement de fils. Vous pouvez faire fonctionner quatre de ces modules et il vous restera encore des broches pour une carte relais et un écran.

Trois remarques pratiques lorsque vous dépassez un canal :

  • Planifiez vos blocs de broches par tension, car les modules vous y obligent. Un module 24V et un module 12V sont des produits différents, donc un tableau mixte en nécessite un de chaque - décidez quelles broches appartiennent à quelle carte tant que ce n'est encore qu'un dessin, pas une fois le câblage installé dans les goulottes.
  • Vérifiez la polarité de chaque carte que vous ajoutez, pas seulement de la première. Deux modules achetés à plusieurs mois d'intervalle peuvent se comporter différemment, et c'est exactement le genre de panne qui ressemble pendant une heure à une erreur de câblage.
  • Le PC817 commute en quelques microsecondes, il ne ralentit donc rien. Ce qui peut être lent, c'est un contact mécanique à l'autre bout de la ligne isolée - un relais ou une bobine de contacteur qui rebondit. Si vos comptages semblent gonflés, appliquez le même anti-rebond logiciel que pour un Arduino Mega - Bouton ou un interrupteur mécanique.

Les utilisations courantes de ce circuit sur un Mega sont la surveillance simultanée de plusieurs sorties d'automate 24V DC ou de lignes de lampes « marche »/« défaut » sur un tableau de machine, et la détection de l'alimentation réelle d'une bobine de contacteur ou de solénoïde 12V DC ou 24V DC - sur laquelle vous pouvez ensuite agir avec un relais ou que vous pouvez enregistrer en parallèle d'un Arduino Mega - Capteur de porte sur la même carte. Une fois les dérivations en place, le sketch ci-dessus n'est qu'à une étape de ce que les gens attendent vraiment d'un tableau : un compteur d'heures de fonctionnement pour chaque machine, une alerte lorsque la pompe reçoit l'ordre de démarrer mais que sa lampe ne s'allume jamais, et un journal de temps d'inactivité qui montre quel poste de la ligne passe son temps à attendre.

Vidéo

Références des Fonctions

Commentaires

Tutoriels connexes

※ 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 !