Entrées Sorties Numériques

De Node Blue Wiki
Aller à : Navigation, rechercher

Si les cartes électroniques de la famille Arduino ne pouvaient pas interagir avec l’extérieur, elles ne présenteraient pas beaucoup d'intérêt. Il y a donc sur toutes ces cartes la possibilité de mesurer et de générer des signaux électriques.

Cette interaction se fait par des variations de tension. Avant de voir comment on utilise ces fonctions avec Node Blue, voici quelques petites notions utiles. On distingue 2 types de signaux par rapport à la façon dont ils sont gérés par les microcontrôleurs : les signaux dits "numériques" et les signaux dits "analogiques". Commençons par les signaux numériques.

Entrées numériques

Les entrées numériques peuvent servir à capter l'état d'un bouton ou d'un capteur de fin de course, a recevoir un signal d'une autre carte et bien d'autres choses.

Ils ne sont représentés que par 2 états : 0 ou 1, qui correspondent à des plages de tensions qui dépendent de la technologie.

Par exemple les signaux TTL considèrent qu'une tension entre 0 et 1.4V vaut "0", et une tension entre 2.4 et 5V vaut 1. Ces valeurs proviennent de la technologie qui est utilisée pour réaliser les circuits électroniques, et elles vont varier selon les technologies. Il faudra dans certains (rares) cas vérifier si on respecte ces seuils dans les documentations des composants qu'on utilise.

Attention certaines cartes fonctionnent en 3.3V et seront détruites si vous appliquez du 5V sur une entrée (par exemple les Arduino Due ou les Teensy LC), d'autres sont ce qu'on appelle "tolérantes au 5v" et pourront accepter du 5V malgré leur fonctionnement en 3.3V. Les cartes qui fonctionnent en 5V n'auront quant à elles aucun problème si on applique du 3.3V sur une entrée. Il existe des convertisseurs de niveaux pour passer d'une tension à l'autre, mais il faut éviter de les utiliser car parfois ils ne montent pas assez haut en fréquence pour certains types de signaux (SPI ou I2C par exemple).


Dans certains cas, une entrée peux se retrouver "en l'air", c'est à dire connectée à rien (par exemple avec un bouton non appuyé), et dans ce cas la tension peut prendre n'importe quelles valeurs, ce qui n'est pas souhaitable. On rajoute alors une résistance de "tirage" pour forcer l'entrée à 0V (pull down) ou à Vcc (pull up). Tous les Arduinos proposent le mode "pull up" avec une résistance intégrée au micro-contrôleur (donc pas besoin d'en rajouter une en externe), mais seulement certains proposent le mode "pull down" (par ex les Teensy).


Pour mettre ceci en pratique, connectez un bouton poussoir à 2 broches entre la broche D2 d'un Arduino et la masse (GND), et testez le design suivant :

DigitalIn.jpg

Nous verrons plus tard comment fonctionnent le module "Format Text" et "UsbSerial", mais pour le moment il faut juste savoir qu'il vont nous servir à visualiser la valeur de l'entrée sur laquelle est connectée le bouton. Dans l'IDE Arduino ouvrez un moniteur série et observez ce qui se passe lorsque vous appuyez sur le bouton et que vous le relâchez.

On constate que lorsque le bouton est relaché, on a la valeur "1" (grace à la résistance de "Pull Up"), et lorsqu'on appuie dessus, la valeur passe à 0. Si vous voulez l'inverse (cas le plus courant), il faut sélectionner "Yes" pour l'option "Invert" du module d'entrée numérique.

Vous devriez également remarquer que la valeur change plusieurs fois, même lorsqu'on n'a effectué qu'une seule action. Ceci provient des rebonds mécaniques du contact à l'intérieur du boutons. Tous les boutons mécaniques on ce "défaut", même ceux de meilleure qualité. Les rebonds vont durer plus ou moins longtemps (c'est là ou la qualité peut faire une différence), et cette durée peut aller de 2 ms à plus de 10 ms (au delà ça devient inquiétant).

Il y a plusieurs méthodes pour corriger ce problème, certaines impliquent de rajouter des composants externes pour filtrer le signal (condensateur), d'autres fonctionnent uniquement par logiciel.

Dans ces méthodes logicielles, il y a en gros 2 approches :

1) Dès que le signal change, on prend en compte ce changement et on interdit toute modification pendant une certaine durée. C'est la méthode la plus réactive.

2) On attend que le signal ne change pas pendant une certaine durée pour le valider. Cette méthode est moins réactive que la 1), puisqu'elle va systématiquement ajouter un délai égal à la durée de test, mais l'avantage c'est que cette méthode fonctionne aussi pour éliminer des parasites autres que les rebonds.


Dans Node Blue, pour les modules "Digital In", c'est la méthode 1) qui est utilisée car nous avons décidé de privilégier la réactivité. Si vous avez des parasites sur votre signal d'entrée, essayez de déterminer d'où ils viennent afin de les éliminer ou de les contenir (avec boîtiers en métal, des câble blindés, etc). Au pire utilisez un circuit de filtrage si vous n'arrivez pas à éliminer les parasites par les méthodes classiques.

Pour voir cet algorithme en action, ouvrez les propriétés du module "Digital In" et mettez 10 ms comme valeur pour le paramètre "Debounce", téléversez le code et observez ce qui se passe : il n'y a plus qu'un seul changement d'état lorsqu'on appuie ou qu'on relâche le bouton.

Note : Vous trouverez sur Internet des tutoriaux qui utilisent des interruptions pour détecter le changement d'état d'un bouton. S'il n'y a pas de filtrage externe, fuyez ! En effet, c'est une hérésie car les rebonds vont générer des interruptions à répétition, ce qui à mon sens n'est pas bon pour plein de raisons. Les interruptions seront introduites plus tard dans Node Blue, car elle peuvent tout de même être utiles pour les entrées numériques, à condition qu'elles soient stables.

Sorties numériques

Les sorties numériques vont servir à allumer ou éteindre une LED, envoyer un signal à une autre carte, et bien d'autres choses. Attention la capacité de sortie en courant est en général très faible (40 mA par ex pour l'ATMega32U4 des Arduino Leonardo), suffisante pour commander une petite LED, mais trop faible pour piloter un relais ou un moteur, pour lesquels il faudra rajouter un circuit de commande de puissance.

Pour la valeur "0", la tension de sortie va être proche de 0V, pour la valeur "1", on aura 5V ou 3.3V selon la tension de fonctionnement de la carte.

Gardez votre bouton connecté, et testez cet exemple qui va allumer la Led de la carte quand vous appuyez sur le bouton :

DigitalInOut.jpg


Passons maintenant aux entrées analogiques...

Outils personnels
Espaces de noms

Variantes
Actions
Tutoriels
Outils