Sortie analogique arduino, exemple analogInOutSerial.

Utiliser une sortie analogique arduino, exemple analogInOutSerial.

Cette exemple qui s’inspirera beaucoup du précédent readAnalogVoltage (disponible à ce lien). Nous utiliserons un potentiomètre pour envoyer la valeur de sa tension au PC, mais cette fois nous allumerons en même temps une LED qui brillera plus ou moins fort selon la position de notre potar. Alors démarrons ce tutoriel de sortie analogique arduino via l’exemple analogInOutSerial!

Sortie analogique et arduino.

Rappel: Nous parlons de variables analogiques toutes variables pouvant avoir plus de deux états (cliquez sur ce lien pour voir l’article consacré aux valeurs analogiques).

Nous avons vu précédemment que l’arduino gérer très bien les entrées analogiques (cf. ce lien), mais on ne peut pas en dire autant en ce qui concerne les sorties analogiques (qu’il ne sait tout simplement pas générer). Alors pour pallier à ce problème, notre micro-controleur aura recourt à une technique applée Modulation de Largeur d’Implusion (MLI), ou en anglais Pulse Width Modulation (PWM).

Signal PWM01

Ci dessus de trouve un signal PWM tel que le sort l’arduino. On appel cela un signal carré et il est caractérisé par deux paramètres:

  • La tension est soit à 5V, soit à 0V.
  • Le rapport du temps entre la tension étant à 5V et à 0V est appelé Duty cycle et est exprimé en %.

Ce signal étant (relativement) tellement rapide que l’on peut dire que sa tension est égale à la valeur moyenne de son signal. Et pour un signal carré cela se calcul très simplement:

Tension analogique = Tension maximale * (Duty Cycle/100)

Exemple avec notre tension maximale égale à 5V (comme c’est le cas pour l’arduino):

  • Duty Cycle à 0%: Sortie ana = 5 * 0 = 0V
  • Duty Cycle à 25%: Sortie ana = 5 * 0.25 = 1.25V
  • Duty Cycle à 50%: Sortie ana = 5 * 0.5 = 2.5V
  • Duty Cycle à 75%: Sortie ana = 5 * 0.75 = 3.75V
  • Duty Cycle à 100%: Sortie ana = 5 * 1.0 = 5V

Analyse du programme analogInOutSerial.

Où trouver le programme analogInOutSerial?

chemin exemple analogInOutSerial

Déclaration des variables.

Voici la partie de déclaration des variables:

declaration variables analoginoutserial

Les deux premières déclarations sont des constantes de type Integer servant à nommé de façon plus « parlante » les broches A0 et 9. Ainsi les bornes A0 et 9 seront respectivement appelées dans le programme analogInPin (l’entrée analogique) et analogOutPin (la sortie analogique).

Ensuite sensorValue sera un integer dans lequel sera stocké l’entrée analogique envoyée par le potentiomètre.

outputValue stockera la sortie analogique à envoyer à la LED.

Fonction setup().

setup analoginoutserial

la fonction setup ne contient que l’initialisation de la communication série telle que vue dans l’exemple précédent (disponible à ce lien).

Fonction loop().

void loop() {
// read the analog in value:
sensorValue = analogRead(analogInPin);
// map it to the range of the analog out:
outputValue = map(sensorValue, 0, 1023, 0, 255);
// change the analog out value:
analogWrite(analogOutPin, outputValue);

// print the results to the serial monitor:
Serial.print("sensor = " );
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);

// wait 2 milliseconds before the next loop
// for the analog-to-digital converter to settle
// after the last reading:
delay(2);
}
    • Ligne 3: Acquisition de la valeur du potentiomètre sur l’entrée analogique (cf l’exemple Analoginput).
    • Ligne 5: Utilisation de la fonction map pour mettre à l’échelle la sortie analogique. Arrêtons nous un instant sur cette fonction.
      Voila le problème, en entrée nous avons un potentiomètre qui nous renvoie une variable allant de 0 à 1023 pour une position allant de 0 à 100%; et en sortie nous assignons un signal allant de 0 à 255 pour une sortie comprise entre 0 et 100%.
      Dans notre programme, nous souhaitons simplement que lorsque le potentiomètre est à 0%, la sortie soit à 0%, lorsque le potentiomètre est à 25%, la sortie soit à 25%… Il nous faut donc faire une mise à l’échelle (comme nous l’avons fais manuellement à la ligne 6 de la fonction loop de l’exemple readAnalogVoltage). Mais ici nous allons utiliser la fonction map afin de nous simplifier la tache.
      En s’appuyant sur la description du site arduino (disponible à ce lien), nous pourrons aisément comprendre cette nouvelle fonction.
      Son premier paramètre est l’entrée analogique, ici notre potentiomètre.
      Son deuxième paramètre est la valeur minimal de l’entrée analogique, ici 0 points.
      Son troisième paramètre est la valeur maximale de l’entrée analogique, ici 1023 points.
      Son quatrième paramètre est  la valeur minimal de la sortie analogique, ici 0 points.
      Son cinquième paramètre est la valeur maximale de la sortie analogique, ici 255 points.
    • Ligne 7: Voila la fonction qui nous permet d’envoyer notre sortie analogique. Lorsque l’on regarde analogWrite sur le site d’arduino, on voit que l’on a quelques informations technique que nous laisserons de coté pour l’instant, puis nous arrivons à sa syntaxe: analogWrite(pin, value). Vous l’auriez peut être déjà comprit, pour l’utiliser il suffit de mettre en premier la broche utilisée comme sortie ana (dans notre cas la pin 9 nommée analogoutPin, puis le deuxième argument est la valeur de sortie comprise entre 0 et 255.
    • Ligne 10 à 13: On envoie nos valeurs analogique au moniteur série du Pc via le port USB (cf. l’exemple readAnalogVoltage).
    • Ligne 18: L’auteur du programme à inséré un delay de 2 ms pour laisser le temps aux acquisitions de se faire, même si cela n’est pas préconisé sur le site arduino.

Cablage de l’exemple arduino analogInOutSerial.

cablage arduino analogInOutSerial 01

Le câblage est plutôt simple, il suffit de brancher une led sur la borne 9 (cf. l’exemple button) et le potentiomètre sur l’entrée A0 (cf. l’exemple analogInput).

N’oubliez pas de laisser brancher votre arduino au PC pour la communication avec le moniteur série.

Utilisation du moniteur serie d’arduino IDE.

La lecture des valeurs sur le PC via le moniteur série se fait de la même façon que l’exemple précédent.

Conclusion sur la sortie analogique arduino.

Comme la plupart des fonctions arduino, vous avez pu constater que la gestion des sorties analogique a été bien simplifiée dans son utilisation. Si vous avez suivi les exemples précédents, vous avez maintenant toutes les connaissances de base requise à l’élaboration d’un programme. La prochaine étape sera la découverte de fonctions un peu plus compliquée telles que les boucles FOR, WHILE…

D’ici là amusez vous bien avec votre arduino, n’hèsitez pas à passer sur le forum si vous avez des questions et à suivre ma chaine youtube & mon facebook si vous aimez le contenu.

@bientot!


Liens internes:

Page Youtube.

Page Facebook.

Liens externes:

Exemple analogInOutSerial du site arduino.

Fonction analogWrite du site arduino.

 

About the Author: maxpeigne