2.6 Les entrées de l’Arduino

Savoir utiliser les pins d’une arduino en sortie pour allumer des leds ( et donc piloter des relais ou des moteurs) c’est bien mais ce n’est que la moitié des possibilités! En effets si vous ne l’avez pas déjà lu ou entendu ailleurs, les pins d’une arduino sont souvent appelés IO. O pour l’anglais OUTPUT = Sortie et I pour INPUT = Entrée !  C’est en utilisant les pins de votre carte arduino en tant   « qu’ entrées » que vous allez pouvoir indiquer des informations à votre arduino pour inter-agir avec et modifier le comportement de votre programme !

 Quelles Sont les entrées disponibles ?

Lorsque l’on parle des entrées d’une Arduino, il nous faut distinguer 2 choses :

Les entrées digitales :

Les entrées digitales, aussi appelée, numérique, binaire, booléen ou Tout ou rien, ( TOR) sont des entrée permettent d’obtenir une information d’état du pin qui ne peut prendre que 2 valeurs possible  HAUT (HIGH, 5V sur une carte Arduino) ou BAS (LOW, 0V), autrement dit 1 ou 0, ou encore Vrai ( = true)  ou Faux ( = false ).
Ce type d’entrée est idéal pour exécuter une action en fonction d’un bouton ou pour paramétrer une configuration par exemple. Et en combinant plusieurs entrée digitales vous pouvez exécuter de nombreuses actions ou faire des paramétrages complexe. Appliquez une tension supérieure à 3V sur le pin de votre arduino et le pin sera vu comme à l’état HAUT, ( = HIGH = true = 1 ) et une tension inférieur à 0.5V et le pin sera vu à l’état BAS ( = LOW = false = 0 ).

Question des curieux : Et entre 0.5V et 3V alors ? L'arduino lit quoi ? 0 ou 1 ? ?
=> Cliquez pour faire dérouler la réponse 😉

Voilà un exemple de code qui permet de lire les entrée numérique :

//Pins E/S
#define ARDUINOPIN 8 //On indique sur quelle  pin de l'arduino  on va se  brancher

void setup() {
pinMode(ARDUINOPIN, INPUT); // C'est ainsi qu'on Définis INTERRUPTEUR comme étant une  entrée TOR
Serial.begin(9600); //Initialise la liaison série à 9600 bauds
}

void loop() {
  
if (digitalRead(ARDUINOPIN) == LOW) // Si ARDUINOPIN est BAS (0V)
{
  Serial.println("OFF"); //Afficher avec retour à la ligne => OFF
}
else {         // Sinon (ARDUINOPIN est HAUT (5V)
Serial.println("ON"); //Afficher avec retour à la ligne => ON
}
  
delay(100); //Met le programme en pause pendant 100ms avant de reboucler 
}

Le programme vous permet d’afficher en continue sur le moniteur série, On ou Off en fonction de l’état de la broche  » ARDUINOPIN  » de l’arduino. Vous aurez noté l’usage de pinMode dans la fonction setup, avec le paramètre INPUT pour dire que l’on paramètre le pin en entré ainsi que la fonction digitalRead( pin ) qui prend en paramètre le numéro de la broche de l’arduino que vous voulez lire et qui comme son nom l’indique va lire de manière digital l’état de la pin en question pour vous retourner 0 ou 1 ! Donc rien de compliqué.

Remarque : On a arbitrairement choisi la broche 8, mais vous auriez pu choisir la n’importe quel pin entre 2 et 12 compris, ainsi que A0 A1 A2 A3 A4 ou A5 !  Les pin 0 et 1 sont utilisés pour communiquer avec le moniteur série et la pin 13 et relié à la led sur la carte arduino donc mieux vaut éviter de les utiliser !

Une fois la carte programmée débranchons notre arduino de l’ordinateur et commençons le montage pour tester ce code.

Ce qui est intéressant c’est qu’en maîtrisant l’usage des entrée digitales vous pourrez utiliser n’importe quel capteur fournissant une sortie TOR ! Bouton poussoir, interrupteur, microrupteur, détecteur de présence, barrière infrarouge, etc …

Les entrées analogiques :

Les entrées analogiques permettant de lire la valeur analogique d’une tension qui peut varier 0 à 5V. Cette lecture est discrétisée sur une résolution de 10 bits soit 1024 valeurs, allant de 0 à 1023.  Plus la tension sur le pin sera élevé et plus la valeur lue sera grande. Ainsi une tension de 5V sur une broche analogique pourra donner lors de la lecture analogique une valeur égale à 1023,  une valeur de 0 si la tension et de 0V ou encore une valeur de 511 si la tension est de 2,5V.

Pour les matheux la formule est :

Valeur =  partie entière de ( tension * 1023 / 5 )   *

*Valable uniquement pour une tension comprise entre 0 et 5V…

Voici un exemple de code très simple permettant de voir comment on utilise une entrée analogique :

//Pin E/S
#define ANALOGARDUINOPIN A0

void setup() {
pinMode(ANALOGARDUINOPIN, INPUT);
Serial.begin(9600);
}

void loop() {
Serial.println(analogRead(ANALOGARDUINOPIN));
delay(100);
}

Le programme vous permet d’afficher en continue sur le moniteur série, la valeur analogique lue sur la broche  » ANALOGARDUINOPIN  » de l’arduino.

Vous aurez noté l’usage de la fonction analogRead( pin )  qui prend en paramètre le numéro de la broche de l’arduino que vous voulez lire et qui comme son nom l’indique va lire de manière analogique l’état de la pin en question pour vous retourner une valeur comprise entre  0 et 1023 !

Remarque : On a arbitrairement choisi la broche A0, mais vous auriez pu choisir A1 A2 A3 A4 ou A5 qui sont tous des pins capable de faire des lectures analogiques.  Les pins de 0 à 13 n’en sont pas capable ils ne sont que digitaux.

Quelques remarques supplémentaires:

  • Il ne faut pas dépasser une tension de 5V  ni passer en dessous de 0V pour ne pas abîmer votre carte arduino Uno Nano ou Mega… Cette remarque est valable pour toute les carte de microcontrôleur fonctionnant en niveau logique 5V. De manière plus générale il ne faut éviter de mettre une tension en dehors de la plage 0V Vcc, sur le pin d’un microcontrôleur avec Vcc le niveau logique de ce microcontrôleur. Les arduino due et M0 fonctionnent en 3.3V par exemple …
  • Les entrées analogiques sont noté A0, A1, A2 … et peuvent généralement fonctionner de la même manière que les entrée sorties digitales. Il y a néanmoins parfois quelque exceptions comme les entrées uniquement analogique A6 et A7 sur les arduino pro mini par exemple …
  • Les microcontrôleurs ont un nombre limité d’entrées sorties (IO) cependant certains en ont plus que d’autre… L’arduino Mega est plus fournie qu’une arduino Uno.
  • Le courant qui circule dans un IO est très faible de l’ordre de 50mA maximum seulement environ, ça ne permettra donc pas d’alimenter des moteurs par exemple.

Bon eh bien maintenant passons à la pratique et réalisons quelques montages pour tester nos nouvelles briques de codes ! =)

<- Retourner à la page précédente | Passer à la page suivante ->

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *