Les entrées sorties de l’Arduino

. Par : Dominique, Guillaume, Jean-Luc. URL : https://www.locoduino.org/spip.php?article57

Le nombre d’entrées-sorties est variable selon les cartes Arduino. Toutefois leurs principes de fonctionnement se retrouvent quasiment à l’identique. Cet article se veut une présentation générale des entrées-sorties et de leur usage.

Si la plupart des broches d’entrées/sorties disponibles à la périphérie des Arduino permettent d’émettre ou de recevoir une valeur numérique binaire (0 ou 1), elles offrent aussi des fonctions spécialisées et on peut, par programme, décider de la fonction allouée à une broche particulière.

Quelque soit la broche de l’Arduino, on ne peut y brancher une tension supérieure à la tension d’alimentation, c’est à dire 5V ou 3,3V selon le modèle, ni une tension inférieure à la masse, le 0V, sous peine de destruction d’au moins la broche concernée si ce n’est l’Arduino en entier. Quelques Arduino 3,3V, ou assimilés comme le Teensy, acceptent une tension jusqu’à 5V.

Passons en revue la nature des entrées-sorties d’un Arduino.

Les entrées-sorties numériques

Quasiment toutes les broches d’un Arduino peuvent être programmées en entrée ou sortie numérique (et non les deux en même temps). Par exemple, sur l’Arduino Uno, il s’agit d’une part des broches numérotées de 0 à 13 mais également des broches A0 à A5. Une broche programmée ainsi peut être :

  • une entrée. Le programme peut lire une tension présente sur cette broche en utilisant digitalRead(...). Comme cette tension est interprétée comme un chiffre binaire (0 ou 1), la datasheet du MCU de l’Arduino Uno garantit que toute tension inférieure à 0,3 x Vcc, Vcc étant égale à 5V, soit 1,5V sera comprise comme un 0 et que toute tension supérieure à 0,6 x Vcc, soit 3V, sera comprise comme un 1. Entre les deux, c’est flou. digitalRead(...) renverra de toutes façons un 0 ou un 1 mais de manière plus ou moins aléatoire et variable selon l’Arduino utilisé.
  • une sortie. Le programme peut écrire un chiffre binaire, au moyen de digitalWrite(...), chiffre qui dans le programme sont nommées HIGH pour le 1 et LOW pour le 0, qui sera traduit en une tension de 5V pour le 1 et de 0V pour le 0. Attention toutefois, cette tension peut respectivement être plus basse ou plus haute si le courant qui est tiré de la broche commence à être important.
Entrées-sorties numériques de l’Arduino Uno
Les broches numérotées de 0 à 13 sont les entrées sorties numériques. Certaines d’entre elles peuvent également être utilisées en sortie PWM (en rose), les broches 0 et 1 servent aussi à la communication série (en rouge). L’I2C en gris est en haut et non étiqueté sur la carte.

Il est préférable de ne pas dépasser une consommation de 20 mA sur une broche programmée en sortie et absolument nécessaire de ne pas dépasser 40 mA sous peine de risque la destruction de la sortie du MCU. Il s’agit aussi de ne pas dépasser au total 200 mA.

Les sorties numériques sont employées de nombreuses manières : alimentation d’une DEL pour un éclairage ou un témoin, commande d’un transistor, connexion à un afficheur LCD, etc.

Les entrées numériques permettent également de connecter de nombreuses choses : interrupteur, bouton poussoir, interrupteurs à lame souple REED mais aussi des capteurs de présence plus sophistiqués.

Les entrées analogiques

Les Arduino sont pourvus de 6, pour le Uno, à 16 entrées analogiques, pour le Mega. Ce sont les broches étiquetées A suivie d’un nombre. Les tensions, toujours entre 0 et 5V, présentes sur ces broches, peuvent être numérisées via un convertisseur analogique-numérique ou ADC (Analog Digital Converter). La fonction analogRead(...) remplit ce rôle.

Entrées analogiques de l’Arduino Uno
Ces broches peuvent également être utilisées comme entrées-sorties numériques.

Le convertisseur des Arduino à base d’AVR effectue une conversion sur 10 bits, c’est à dire qu’il convertit la tension en un nombre entier ayant une valeur de 0 à 1023.

0 correspond au 0V de la tension et 1023 au 5V. La résolution, c’est à dire la différence entre deux valeurs successives de la tension correspondant à une différence de 1 sur l’entier résultat, est donc d’environ 5mV.

Il est possible de changer la tension de référence de la conversion analogique-numérique, c’est à dire la tension comprise comme 1023. Le MCU des Arduino possède une référence de tension interne de 1,1V qui peut être sélectionné à la place de la tension d’alimentation. Cela permet une meilleure résolution, environ 1mV, sur les faibles valeurs de tension à convertir. Il est également possible de sélectionner la tension fournie sur la broche AREF comme tension de référence.

Plusieurs types de capteurs analogiques peuvent trouver place sur ces broches. On citera la mesure de courant traversant une résistance ou la mesure d’intensité lumineuse via une photo-résistance.

Les sorties PWM

Selon les Arduino, de 6, pour l’Arduino Uno, à 15 broches, pour l’Arduino Mega, peuvent être configurées en sortie PWM. La configuration est effective dès que le programme utilise la fonction analogWrite(...) [1] sur une des broches configurable en PWM. Le rapport cyclique de la PWM est réglé via cette même fonction entre 0, le signal est constamment à l’état bas, 0V, à 255, le signal est constamment à l’état haut, 3,3V ou 5V selon l’Arduino, soit un rapport cyclique de 100%.

La PWM trouve son emploi lorsqu’il s’agit de commander un moteur électrique à courant continu, comme celui qui équipe nos locomotive, ou une intensité lumineuse, par exemple dans une DEL. Si le courant nécessaire à une DEL est compatible avec ce que peut fournir une sortie PWM, il n’est est pas de même pour la commande d’un moteur. Dans ce dernier cas, il est nécessaire d’amplifier le signal via un transistor qui permettra également de passer des 3,3V ou 5V de l’Arduino aux 12V nécessaires pour nos engins.

La ligne série

Les 2 broches étiquetées TX et RX sont respectivement la ligne d’émission série (T pour Transmit, émettre) et la ligne de réception série (R pour receive, recevoir). Cette ligne est principalement employée pour dialoguer avec l’ordinateur hôte, votre Mac ou votre PC. Des fonctions permettent d’afficher des messages dans une fenêtre de l’ordinateur hôte et de lire le clavier de l’ordinateur hôte.

Elle est également employer pour dialoguer avec certains modules comme les modules radio XBee ou certains modules WiFi ou encore bluetooth.

Le bus I2C

l’I2C est l’un des bus de communication disponibles pour dialoguer soit avec un autre Arduino soit avec des circuits périphériques disposant de ce bus. 2 broches sont employées pour l’I2C, l’horloge et l’adresse/donnée. De nombreux circuits périphériques disposent d’une interface I2C. On peut citer les expanseurs d’entrées/sorties, circuits qui permettent d’ajouter des entrées/sorties numériques à l’Arduino et les générateurs de PWM qui permettent donc d’augmenter le nombre de PWM pilotables.

Le bus SPI

Enfin, le SPI est également un bus de communication destiné à dialoguer avec les circuits périphériques. À la différence de l’I2C, il est bidirectionnel. Il permet aussi un débit de communication plus important. 4 broches sont employées pour le SPI, l’horloge, les données en sortie, les données en entrée et la sélection du circuit avec lequel l’Arduino veut dialoguer. Il faudra autant de broches de sélection que de circuit branché sur le SPI [2].

Les broches d’alimentation

Elles ne font pas partie des entrées/sorties mais les voici pour que la visite soit complète :

  • IOREF. Cette broche est destinée à indiquer aux shields la tension de fonctionnement de l’Arduino. Sur un Arduino 5V, elle aura une tension de 5V et sur un 3,3V une tension de 3,3V
  • RESET. Cette broche permet de réinitialiser l’Arduino et donc de redémarrer le programme au début. Pour réinitialiser l’Arduino, il suffit de mettre cette broche à 0V puis de la repasser à 5V, ou 3,3V selon l’Arduino.
  • 3.3V. Un arduino Uno est équipé d’un régulateur 3,3V dont la sortie est connectée à cette broche. On peut s’en servir pour alimenter un circuit externe en 3,3V.
  • 5V. L’Arduino, si il fonctionne sous une tension de 5V, est équipé d’un régulateur 5V. La sortie de ce régulateur est connecté sur cette broche qui peut donc être employée pour alimenter des circuits externes en 5V. Si on désire construire sa propre alimentation 5V, on peut également fournir cette tension à l’Arduino via cette broche.
  • GND. La masse ou 0V
  • Vin. L’entrée du régulateur embarqué sur l’Arduino. On peut choisir d’alimenter l’Arduino via cette broche au lieu d’utiliser la prise d’alimentation.

Nous avons terminé ce rapide tour d’horizon.

[1Nom de fonction bien mal choisi, la grandeur présente sur la broche n’est pas du tout analogique

[2Sauf si on utilise un décodeur