Entrées et sorties numériques

Quelques idées pour mettre en place des entrées et sorties numériques sur le Raspberry Pi.

Entrées et sorties numériques disponibles sur le port GPIO

Le Raspberry pi dispose de 17 broches configurables en entrées ou sorties nuémriques (Si l'on réserve certaines broches aux bus I2C,SPI,UART et PWM). C'est bien, mais elles ont 3 limites importantes :


 - Elles sont en nombre limitées,
 - elles sont limitées à 3,3 VDC,
 - et ne sont pas facilement manageables par blocs de 4 ou 8 bits.


Ce sont les rasions pour lesquelles, et sauf si je n'ai besoin que d'une ou deux voies, j'utilise toujours une carte comprémentaire pour mettre en oeuvre des entrées et sorties numériques. Je choisi des cartes d'extension interfacées en bus I2C et équipées du composant MCP23017.

Carte à base de MCP23017

Ma carte de prédilection est la carte IO Pi Plus (MCP23017).


A cela plusieurs raisons :


 - Elle dispose de 32 voies via 2 composants MCP23017 disposant, bien sur, chacun de leur propre adresse I2C,
 - les voies sont manageables par ports de 8 bit,
 - elle peut fonctionner en 3,3 VDC ou 5VDC,
 - et peut disposer de sa propre alimentation pour fonctionner en 5VDC, et donc ne tire pas sur l'alimentation du Raspberry Pi.


Son seul inconvénient est qu'elle est fabriquée en Angleterre. Donc depuis que les "rosbifs" ont voté le brexit, vous aurez des frais de douane. Vous pouvez aussi la trouver chez Digikey, mais dans ce cas elle traverse l'Atlantique vers les USA puis le retraverse dans l'autre sens pour venir en France.... Pas très bon pour la planète. Sauf si j'ai raté un truc, je n'ai pas trouvé de distributeur en France.


Avec une carte comme celle-ci, vous pouvez gérer des entrées et sorties numériques en TTL 5VDC ou 3,3 VDC. Pour ce qui est des résistances de pull up, pull down requises, reportez vous à la rubrique : Résistances Pull Up/Pull Down.


Cela dit, pour faire de la domotique, piloter un arrosage automatique, piloter un moteur, vous avez besoin de commuter des niveaux de tension et surtout de puissance plus importants. De même si vous voulez vérifier qu'un signal comme le 220 VAC est bien présent à un endroit ou un autre de votre système, ces entrées et sorties TTL 5VDC ou 3,3 VDC ne suffisent pas.

Piloter des relais

Pour commuter des niveaux de puissance plus importants que les niveaux TTL, vous devez utiliser des relais. Vous piloterez la bobine du relais en 5VDC qui lui commutera la puissance via ses contacts.


Le choix du type de relais dépend de plusieurs facteurs. Le principal concerne la puissance à commuter et le besoin d'isolation. Cela dépend donc de l'équipement à piloter :


 - L'équipement à contrôler se pilote avec une tension continue comprise entre 9 et 12 VDC. Vous pouvez utilsier des relais électromécaniques sans protection d'isolement. Le choix est large et souvent ces relais suportent des niveaux de tension allant jusqu'à 24VDC ou 32VDC. Mais il est sage de na pas dépasser 9 à 12VDC sans système d'isolation. Sous 9VDC, si le relais claque, vous ne risquez pas grand chose, sous 24 VDC, c'est une autre histoire. Si le 24VDC remonte au Raspberry Pi.... Votre petit Raspberry Pi risque un gros coup de chaud. Autre facteur à prendre en compte est le courant consommé par l'équipement à piloter. Avec ce type de relais, je reste toujours sur des composants consommant moins de 100 mA. Donc pour 9 à 12 VDC sous 100 mA max, voila le genre de truc que j'utilise : Relais Omron G5V1-5.


 - Si le compsoant à piloter fonctionne sur un niveau de tension supérieure à 12 VDC et inférieure à 30 VDC et consomme moins de 3 A, alors j'utilise des modules à relais de ce type : Module 4 relais 5 Vcc GT108. La raison principale est que ces cartes (il en existe avec 1, 2, 3, 4, 8, n relais) isole par un optocoupleur le relais du Raspberry Pi. Si le relais vient à flancher, le Raspberry Pi ne craint rien. Le revers de la médaille est que les optocoupleurs doivent être alimentés. En général en 5 VDC. Si vous tirez ce 5 VDC du Raspberry Pi, attention à ne pas trop consommer. Dans ce cas, comme pour la carte IO PI Plus, mieux vaut disposer d'une alimentation 5 VDC externe. Et la, vient un deuxième potentiel problème. Si vous utilisez votre Raspberry Pi dans les champs et que vous le faites fonctionner sur batterie, vous allez accélerer la décharge de la batterie.


 - Si vous pilotez des niveaux de tension supérieurs à 30VDC, ou si vous voulez directement piloter le 220 VAC (pour des loupiottes, par exemple), il faut privliégier la sécurité avant tout. Donc utliser des relais statiques avec isolement important. Bien sur, le prix s'en ressent... A l'origine ce sont des modules de marque OPTO22, les modèles ODC5 pour commuter des tensions continues de 5 à 60 VDC et les modèles OAC5A pour commuter le 220VAC. Ils offrent un isolement jusqu'à 4000 Volts. Les modèles OPTO22 sont relativement onéreux, mais il y a aujourd'hui beaucoup de marques qui proposent des modules compatibles (Ils portent même le même nom !!!) à des prix plus raisonnables. Mais par rapport aux relais cités plus haut, le prix sera multiplé par 3 à 4. La sécurité est à ce prix. La page OPTO22 OAC5A et un module compatible : 70M-OAC5A.


Toutes ces solutions imposent que la tension soit maintenue sur la bobine du relais tant que vous voulez l'activer. Donc la consommation s'en ressent. Surtout si vous fonctionnez sur batteries. A titre d'exemple, j'ai développé une centrale de contrôle de l'arrosage automatique du jardin. Le Raspberry Pi est au milieu du jardin et fonctionne sur batteries. Si je devais maintenir la tension aux bornes des électrovannes tout le temps de l'arrosage, je changerai les batteries toutes les semaines. Ici, les niveaux de puissance sont faibles. Tout cela se commande en 9 VDC sous moins de 15 mA. Donc je n'ai pas besoin d'isolement. La bonne solution pour ne pas trop consommer consiste à utiliser des relais bistables.


Un relais monostable (c'est à dire la très grande majorité) ne maintient le contact fermé que lorsqu'il est alimenté. Un relais bistable dispose de deux bobines : Une pour la fermeture, une pour l'ouverture. Il suffit d'envoyer une impulsion en 5VDC pendant quelques millisecondes à la bobine de fermeture pour fermer le relais. Il reste en position fermée. Puis pour le rouvrir, une autre impulsion de quelques millisecondes sur la bobine d'ouverture. Il s'ouvre et reste ouvert. La consommation chute de manière vertigineuse. Le revers de la médaille est q'un relais bistable a besoin de 2 sorties numériques : Une pour la fermeture, une pour l'ouverture. Et il faut faire attention dans le code pour ne pâs piloter les deux en même temps !!! Voila le genre de relais que j'utilise : Relais bistable G6BK-5V.

Optocoupleurs

Vérifer la présence d'une tension en entrée ou sortie d'un équipement via une entrée numérique répond presque aux même critères. Dans ce cas on utilise des optocoupleurs. J'en utilise trois types :


 - Pour vérifier la présence de tension inférieures à 24VDC j'utilise de simples optocoupleurs comme celui-ci : DST-1R4P-P 24V. Il en existe pour divers niveaux de tension en sorties 3,3VDC ou 5VDC. Dans ce cas il faut que les entrées numériques soient configurées avec une résistance de Pull down.


 - Pour un signal continu compris entre 24VDC et 60 VDC j'utilise des optocoupleurss OPTO22 de la série IDC5 ou toute autre marque proposant des produits compatibles.


 - Pour des niveaux de 220 VAC, ce sera les modules OPTO22 IAC5Aou toute autre marque proposant des produits compatibles.

Piloter des diodes LED

Je vois souvent sur les forums des questions du genre : Puis-je piloter une LED en 9VDC, 12VDC, etc..? Oui bien sûr. Il suffit de comprendre comment marche une diode LED.


Une LED, c'est avant tout une diode. Une diode est un semi-conducteur simple. Lorsqu'on lui applique une tension de 0V, il se comporte comme un isolant. Lorsque la tension dépasse un certain seuil, il devient conducteur. La tension à partir de laquelle il devient conducteur se nomme la "tension directe". Lorsqu'une diode LED est soumise à une tension au minimum égale à cette tension directe, elle devient conductrice, consomme du courant et emet de la lumière. Ce seuil de tension directe n'est pas une valeur discrète. La diode commence à être passante à un niveau de tension et devient totalement passante à un niveau de tension légèrement supérieur. La tension directe, c'est donc plus assimilable à un intervalle entre 2 tensions minimale et maximale. Sachant qu'au dela d'une certaine tension, la diode rend l'âme. Allumer une diode LED, c'est donc lui fournir une tension comprise dans cet intervalle autour de la tension directe. Lorsque la diode LED devient passante et emet de la lumière elle consomme du courant. Pour les LEDs "classiques" de diamètre 5mm ou 3mm, on estime que le courant maximum consommé est de 20 mA.


La tension directe d'une diode dépend des matéreiaux qui la compose. A titre d'exemple une diode composé de InGaN (Indium Gallium et Azote) a une tension directe d'environ 3,5V. Pour les LED, c'est aussi ces matériaux qui la compose qui détermine leur couleur (leur longueur d'onde d'émission). Les LED à base d'InGaN (selon les proportions de ces 3 éléments) emettent dans le vert, le bleu, le violet. Enfin, plus la tension se rapproche du seuil haut de la tension directe, plus l'intensité lumineuse sera importante. Ci-dessous un tableau qui résume tout cela pour les couleurs les plus courantes :



Le schéma de cablage d'une diode LED est le suivant :



Dans ce schéma, la tension U2 correspond à la tension directe de la diode. La tension U correspond à la tension d'alimentaiton : 3.3, 5, 9, 12 VDC... Sachant que U2 = U - U1, il nous faut déterminer U1 pour que U2 soit égale à la tension directe de la diode. On sait que la diode consomme typiquement 20 mA. C'est une norme. Il nous reste plus qu'à appliquer la loi d'ohm (U = R X I).


Dans le cas d'une diode rouge avec une tension d'alimentation de 5 VDC. La tension directe pour une diode rouge est 1,8 VDC. Partant de 5 VDC, il faut que U1 soit de 5 - 1.8 = 3.2 VDC. La loi d'ohm nous dit que R = U /I. Dans notre exemple R = 3.2 V / 20 mA (il faut ramener les mA en A : 20 mA = 0.02 A) donc R = 3.2 / 0.02 = 160 Ohms. La resistance R à mettre devant le diode devra être de 160 Ohms.


Pour les tensions 3.3, 5, 9 et 12V, et les LEDs du tableau précédent, cela donne le résultat suivant :



Vérifiez quand même auprès de votre fournisseur de diodes, qu'elles respectent bien ces valeurs de tension directe.


Enfin, il y a peu de chances que votre pack de résistances proposent des résistances à la bonne valeur exacte. Prenez la valeur la plus proche, sans excés bien sur. ou enchainez 2 ou 3 résistances si nécessaire pour vous approher de la valeur idéale.


Il faut quand même faire attention à un facteur, qui risque de se produire si vous voulez aller au dela de 12V. C'est la puissance qu'aura à dissiper la résistance. La puissance dissipée par une résistance est egale au courant au carré X valeur de la résistance ( P = RI2). Le cas le plus défavorable est celui ou la résistance est la plus haute : 510 Ohms. Sous 20 mA, cette résistance devra être capable de supporter une puissance (exprimée en Watts) = 510 * 0.022 = 0,204 W = 204 mW.


Les résistances standard ont une puissance admissible de 250 mW (On parle de résistances 1/4 W). Elles sont donc valides pour les valeurs de notre tableau. Mais si, à titre d'exemple, vous passez à 15V sur une diode rouge, la puissance de la résistance sera de 264 mW, donc supérieure à 250 mW. Un résistance 1/4 W ne suffirait plus.


Enfin, et pour être complet, les broches GPIO de votre Raspberry Pi sont normalement capables de débiter chacune 16 mA de courant et qu'au total, avec plusieurs broches actives pour plusieurs LEDs vous ne devez pas dépasser 50 mA. Tout ça pour dire que vous ne devriez pas brancher plus de 3 LEDs sur la prise GPIO. Si vous avez besoin de plus que cela, une carte avec un MCP23017 comme la IO Pi Plus alimentée en 5VDC présentée plus haut, peut fournir 25 mA par sortie numérique. Vous pouvez alors monter beaucoup plus de LEDs.


Pour les néophites : Une diode est un bipolaire. Contrairement à une résistance que vous pouvez monter dans n'importe quel sens, sur une LED vous devez respecter la polarité. La patte du + (que l'on apelle l'anode) est toujours la patte la plus longue. La patte la plus courte est le - (que l'on apelle la cathode).