Entrée & Sorties


Les cartes Arduino possèdent des entrées et des sorties, certaines sont analogiques et peuvent recevoir un signal compris entre 0 et 1023 (sur 10 bits) ; alors que d’autres sont numériques (ou digitales) et ne peuvent recevoir ou envoyer qu’un signal binaire (0 ou 1).

La carte Arduino Uno dispose de 14 broches Digitales / Numériques (numéro 5 sur l’image ci-contre), et de 6 broches analogiques (numéro 6 sur l’image ci-contre).

 

Notez que les broches numériques / digitales sont numérotées de 0 à 13, et que les broches analogiques sont numérotées de A0 à A5.

 

Pour pouvoir utiliser au mieux ces broches, il existe une suite d’instructions permettant de lire, de déclarer ou de les piloter.

 

Voici les commandes principales pour gérer ces broches au niveau du programme.


I. Entrées & Sorties Numériques (pinMode, digitalWrite, digitalRead...)


1) pinMode


La commande pinMode permet de configurer une broche de la carte, pour indiquer à la carte s’il s’agit d’une entrée ou d’une sortie.

 

Elle s’utilise dans le setup.  

 

La commande pinMode se présente ainsi :

 

pinMode (paramètre 1, paramètre2) ;

 

Le paramètre 1 correspond au numéro de la broche, ou au nom de la variable associée à la broche que l’on souhaite définir en entrée ou en sortie.

 

Le paramètre 2 correspond à la configuration que l’on souhaite donner à cette broche : entrée ou sortie, par les commandes : OUTPUT ou INPUT.

2) digitalRead


La commande digitalRead permet de lire une broche digitale (numérique). Lorsqu’on parle de lecture, comprenez par-là, connaître son état logique : à savoir haut ou bas (HIGH ou LOW), laissant passer le courant ou pas, ouvert ou fermé, à la valeur 0 ou 1…

 

Elle se présente ainsi : instruction suivi du numéro ou nom de la variable associée à la broche de la carte que l’on souhaite lire (entre parenthèses), sans oublier le point-virgule qui clôture la ligne.

 

L’exemple qui suit provient du code Button, que l’on peut voir dans l’IDE à Fichier, Exemple, 02.Digital.

 

Il permet d’affecter à une variable nommée « etatbouton » la valeur que la carte Arduino lira sur la broche associée à la variable « bouton ». L’idée de ce code est de lire à chaque fois instant l’état du bouton, est-il appuyé ou pas, est-il ouvert ou fermé ? Grâce à ce code, la carte garde en mémoire l’état dans lequel le bouton était, pour le comparer à son état actuel.

Attention : une Tension en entrée inférieur à 1,5V (1V pour une Arduino sous 3,3V) sur une broche analogique sera considérée comme LOW.

3) digitalWrite


La commande digitalWrite permet de piloter une sortie digitale / numérique.

 

Entendez par là, que l’on peut ordonner à la carte Ardunio de mettre une broche digitale / numérique à l’état haut ou à l’état bas, c’est-à-dire à avoir un 0 ou un 1. Ce qui revient laisser passer le courant ou pas.

 

La commande digitalWrite se présente ainsi :

 

digitalWrite (paramètre 1, paramètre2) ;

 

Le paramètre 1 correspond au numéro de la broche, ou au nom de la variable associée à la broche que l’on souhaite piloter.

 

Le paramètre 2 correspond à l’état que l’on souhaite appliquer à cette broche : 0 ou 1, ouvert ou fermé… par les commandes : HIGH ou LOW.

 

Comme dans l’exemple suivant : 

Noter : que lorsqu’on donne une instruction d’état (Haut ou Bas) à une sortie, celle-ci la conserve jusqu’à ce que l’instruction soit redéfinie avec un état inverse.

 

En d’autres termes, si on donne l’instruction de mettre la broche sur laquelle il y a une LED branchée dessus (imaginons que ce soit la 13), à l’état haut (avec un digitalWrite (13, HIGH) ;), celle-ci s’allume.

 

Mais elle ne s’éteindra pas à moins qu’on lui en donne l’ordre par un digitalWrite (13, LOW) ;


II. Entrées Analogiques(analogRead)


1) Entrée Analogique et échelle de valeurs


La carte Arduino Uno possède 6 entrées analogiques numérotées A0 à A5 (une Arduino Mega en possède 15), permettant de récupérer des données analogiques.

 

Ce qui est indispensable pour lire certains capteurs analogiques, comme des capteurs de température, d’humidité…

 

Pour rappel : les broches analogiques à la différence des broches digitale/numériques (qui ne gèrent que 2 états le 0 et le 1), peuvent gérer des valeurs allant de 0 à 1023.

 

Comment font-elles alors que le courant est soit ouvert (5V) ou fermé (0V) ?

 

Eh bien, ces broches vont juste utiliser des variations de la tension pour fournir une valeur comprise entre 0 et 1023.

 

Pour faire simple, 0 correspond à 0V et 1023 correspond à 5V (ou parfois 3.3V dans le cas de certains capteurs). Donc sur ce modèle 512 correspondrait à 2,5V si la tension maximum est de 5V.

 

En fait pour calculer combien de Volts représente telle ou telle valeur. Il faut prendre la valeur, la multiplier par 5 (car c’est sur une échelle de 5V maximum) et on divise le tout par 1023 (valeur maximum de notre échelle) ce qui représente : 

Une autre possibilité est de multiplier la valeur par 0,004887 (résultat de la division 5/1023).

Par exemple une valeur de 812, donnerait 3,968 Volt.

 

A l’inverse pour connaître la valeur à partir d’une tension, il faut : 

Par exemple 4,5 Volt, donnera une valeur de 921 (arrondi).

 

2) analogRead


La commande analogRead permet de lire une entrée analogique.

 

Entendez par là, que l’on peut récupérer la valeur d’un capteur dont la valeur sera comprise entre 0 et 1023 reçu sur une broche analogique de la carte Arduino.

 

La commande analogRead se présente ainsi :

 

analogRead (paramètre) ;

 

Le paramètre correspond au numéro de la broche, ou au nom de la variable associée à la broche que l’on souhaite piloter.

 

Comme dans l’exemple suivant provenant du code AnaloglnOutSerial, que l’on peut voir dans l’IDE à Fichier, Exemple, 02.Digital :

Ce code (AnaloglnOutSerial) permet de lire une broche d'entrée analogique, de mapper son résultat sur une plage de données allant de 0 à 255 et d’utiliser ce résultat pour définir la modulation de largeur d’impulsion (PWM) afin de moduler l’éclairage d’une LED en atténuant ou augmentant son éclairage. 

 

Il permet par exemple de faire varier l’intensité lumineuse d’une LED en fonction de ce qu’un capteur décèlera, comme par exemple un capteur de luminosité.

 

Attention : sur une broche analogique il ne faut pas dépasser une tension de 5V sur une carte Arduino de type Uno ou Mega, ni passer en dessous de 0V pour ne pas abîmer votre carte. Ce qui est également valable pour toute cartes utilisant des microcontrôleurs fonctionnant en 5V.


III. Sorties Analogiques (PWM, analogWrite …)


1) Sorties Analogiques


Les broches analogiques de l’Arduino, comme nous l’avons vu précédemment, ne sont que des entrées, permettant de lire des capteurs par exemple.

 

Attention : l’Arduino ne dispose pas de sortie analogiques.  

Pour rappel un signal analogique est une onde continue qui change sur une période de temps.

 

Alors qu’un signal numérique est une onde qui transporte des informations sous forme binaire. Possédant 2 états, l’état haut (le courant passe, c’est l’état correspondant à 1), et l’état bas (le courant ne passe pas, c’est l’état correspondant à 0).

 

 

Pour simuler des sorties analogiques, l’Arduino va utiliser la PWM (Pulse Width Modulation), appelé en français le MLI, Modulation de largeur d’impulsion.

 

Sur l’Arduino, les broches permettant d’utiliser la PWM sont les broches 3, 5, 6, 9, 10, et 11.

 

 

Elles sont reconnaissables grâce au symbole de la petite vaguelette devant le chiffre .

2) PWM


Le principe du PWM repose sur le fait d’alterner 2 états très rapidement et de jouer avec leurs durées, afin d’obtenir un troisième état intermédiaire.

 

 

Comme nous l’avons vu les broches digitales ne peuvent être qu’à deux états : ouvert ou fermé (à 0V ou à 5V) durant chaque cycle.

 

Dans un cycle si par exemple le signal est à 50% du temps à l’état haut (à 5V) et donc à 50% du temps à l’état bas (à 0V).

 

La broche PWM fournira pour ce rapport cyclique une moyenne de 2,5V, ce qui correspondra à la valeur PWM de 127.

 

En d’autres termes, en modulant à la fois la durée de l’état haut, et de l’état bas pour chaque cycle, on obtient une valeur moyenne de la tension comprise entre 0V et 5V.

 

Par exemple : 

 

La valeur de la PWM est donc comprise entre 0 et 255, puisque de microcontrôleur de l’Arduino est sur 1 octet, soit 8 bits.

3) Utilisation de la PWM


La PWM sert par exemple à faire varier la vitesse de moteurs continus, ou encore à permettre à une LED de varier son intensité… 

4) analogWrite


Pour utiliser la PWM, il est nécessaire de faire appel à la fonction analogWrite.

 

La commande analogWrite se présente ainsi :

 

analogWrite (paramètre 1, paramètre 2) ;

 

Le paramètre 1 correspond au numéro de la broche, ou au nom de la variable associée à la broche que l’on souhaite piloter.

 

Le paramètre 2 correspond à la valeur du rapport cyclique de la PWM, une valeur comprise comme entre 0 et 255.

 

Comme dans l’exemple suivant provenant du code Fading, que l’on peut voir dans l’IDE à Fichier, Exemple, 03.Analog

Dans cette exemple, l’argument, la variable fadeValue possède une valeur de départ de 0, et gagne si elle est inférieure à 255, +5 pts à chaque fois que le loop se relance, jusqu’à un maximum de 255.

 

Comme présenté dans la ligne de code suivante issue du même programme : 

Ce qui aura donc pour effet d’augmenter progressivement l’intensité lumineuse de la LED.

Sources :


Rappel :


les images présentent appartiennent au Domaine public et sont l’œuvre de Peggy_Marco sur le site Pixabay : https://pixabay.com/fr/users/Peggy_Marco-1553824/   ou proviennent du projet Fritzing : http://fritzing.org/home/