Tutoriel 08: analogRead() et Communications par Port Série

analogRead() et Communications par Port Série

Savoir si quelque chose est activé ou désactivé peut être extrêmement utile, mais vous voudrez souvent en savoir plus. Quelle est la luminosité de la lumière?

À quelle vitesse le satellite se déplace-t-il ? Ces types de réponses sont souvent analogiques – elles couvrent une large gamme de valeurs, pas seulement activées ou désactivées.

L’Arduino gère les entrées analogiques avec 6 broches dédiées, étiquetées A0 à A5. Ces broches ont accès à un convertisseur analogique-numérique, qui prend la plage de valeurs d’entrée et crée une version numérique en découpant la plage en minuscules morceaux. Tout cela est géré en coulisses – tout ce que vous avez à faire est d’utiliser des fonctions très simples et vous obtiendrez ce dont vous avez besoin.

Vous aurez Besoin de

  1. Potentiomètre (toute plage de résistance fonctionnera)
  2. Fils de cavalier – au moins 3
  3. Pneu de vélo

Instructions étape par étape

  1. Placez le potentiomètre dans votre planche à pain.
  2. Faites passer un fil cavalier de la broche 5 volts de l’Arduino à l’une des broches extérieures de votre potentiomètre.
  3. Faites passer un autre fil de connexion de l’une des broches de masse de votre Arduino (étiquetées GND) à l’autre broche extérieure du potentiomètre.
  4. Faites passer le fil de connexion final de la broche A0 de votre Arduino à la broche centrale du potentiomètre.
  5. Branchez l’Arduino sur votre ordinateur.
  6. Ouvrez l’ Arduino Arduino.
  7. Ouvrez l’esquisse de cette section.
  8. Cliquez sur le bouton Vérifier en haut à gauche de l’écran. Il deviendra orange puis redeviendra bleu une fois terminé.
  9. Cliquez sur le bouton Télécharger (à côté du bouton Vérifier). Il deviendra orange puis redeviendra bleu une fois terminé.
  10. Dans la barre de menus, accédez à Outils > Moniteur série – cela ouvrira la fenêtre du moniteur série – vous devriez voir les chiffres défiler vers le bas de cet écran.
  11. Maintenant, ajustez le bouton du potentiomètre et regardez la fenêtre du moniteur série. Les nombres doivent s’ajuster entre 0 et 1023.

 Utilisation de la fonction Arduino analogread et map avec un potentiomètre à la broche A0

Cette image composée avec Fritzing.

Le code Arduino

/* AnalogReadSerial Reads an analog input on pin 0, prints the result to the serial monitor. Graphical representation is available using serial plotter (Tools > Serial Plotter menu) Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground. This example code is in the public domain.*/// the setup routine runs once when you press reset:void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600);}// the loop routine runs over and over again forever:void loop() { // read the input on analog pin 0: int sensorValue = analogRead(A0); // print out the value you read: Serial.println(sensorValue); delay(1); // delay in between reads for stability}

Discutez de l’esquisse

Cette esquisse commence par un commentaire sur plusieurs lignes décrivant l’esquisse et le circuit. Vous remarquerez probablement que le premier bloc de code est la fonction setup() – nous ne déclarons ni n’initialisons aucune variable au début de cette esquisse – nous le ferons plutôt à l’intérieur de la fonction loop(), comme dans le dernier exemple. À l’intérieur des accolades de setup(), nous revisitons la bibliothèque série et utilisons la fonction Série.commencer().

void setup() {// initialize serial communication at 9600 bits per second:Serial.begin(9600);}

Si vous vous souvenez de la dernière leçon, série.begin() prend le débit en bauds comme argument (ce sera presque toujours 9600). Cette fonction vous permet de configurer un canal de communication entre l’ordinateur et l’Arduino. Comme vous le savez peut-être maintenant, setup() ne s’exécute qu’une seule fois, puis nous passons au bloc de code suivant.

Mais attendez! Ne devons-nous pas définir le mode du code pin que nous utiliserons? Super point!

Ce que fait l’Arduino, par défaut, est de définir toutes les broches de la carte comme entrées, sauf si vous lui dites le contraire. Ainsi, dans de nombreux cas, vous n’avez pas à définir explicitement une broche comme entrée à l’aide de la fonction pinMode(). Cela étant dit – je prends l’habitude de le faire de toute façon – parce que cela me rend les choses claires – et cela en vaut la peine en espace et en effort.

Alors je vous mets au défi, définissez le mode de la broche en utilisant la fonction pinMode (A0, INPUT) à l’intérieur des accolades de setup() – vous ne le regretterez pas.

En passant à la fonction loop(), nous commençons par une déclaration et une initialisation de variables.

int sensorValue = analogRead(A0);

Nous déclarons une variable appelée sensorValue et nous l’initialisons à la sortie d’une nouvelle fonction. Cette nouvelle fonction est le glamour analogRead(). Alors devinez ce que fait cette nouvelle fonction analogRead(). Il lit la valeur à la broche analogique que vous avez choisie – dans ce cas, il s’agit de la broche analogique A0, où nous avons la broche centrale du potentiomètre connectée. La tension à la broche A0 sera mappée à un nombre compris entre 0 et 1023, et cette valeur sera affectée à la variable sensorValue.

Si vous vous souvenez d’en haut, la tension réelle à la broche A0 sera comprise entre 0 et 5 volts, selon l’endroit où votre potentiomètre est réglé – cette valeur est mappée sur la plage 0 – 1023 à l’aide du convertisseur analogique-numérique. Nous avons donc une variable qui a enregistré la valeur à notre potentiomètre – et ensuite? Eh bien, regardons la valeur. Pour ce faire, nous devons l’imprimer de l’Arduino à notre ordinateur – et vous l’avez deviné, nous utiliserons la fonction de bibliothèque série println() pour le faire…

Serial.println(sensorValue);

Pas de grandes surprises ici – nous envoyons en argument la variable sensorValue à la fonction Serial.println() et notre fenêtre moniteur série afficheront les valeurs résultantes.

Pour terminer l’esquisse, nous invoquons la fonction delay() pendant une milliseconde pour nous assurer que notre prochaine lecture est stable et nous recommençons en haut de la boucle(). Nous enregistrons une nouvelle valeur en utilisant analogRead(), l’enregistrons dans la variable sensorValue, puis l’imprimons sur l’ordinateur.

Tout cela est bien et bien, vous pensez peut-être, mais qu’est-ce qu’un potentiomètre a à voir avec les capteurs? Un potentiomètre ne détecte rien ! Vous avez raison – mais il est intéressant de noter que de nombreux capteurs fonctionnent en appliquant le même principe qu’un potentiomètre: ajuster la résistance. Prenez un photorésisteur par exemple – il peut être utilisé pour détecter la lumière – car la résistance change en fonction de la luminosité de la lumière à laquelle elle est exposée – ce changement de résistance ajustera la quantité de tension qu’une broche à l’extrémité réceptrice recevra. Alors maintenant, la balle est dans votre camp – à quoi pouvez-vous utiliser analogRead()?

Essayez par vous-même

  • Changez la broche analogique en A2. Faites des ajustements dans le code et le circuit.
  • Essayez un potentiomètre différent dans le circuit, cela affecte-t-il la plage de valeurs affichée?

Pour en savoir plus

  • analogRead()
  • Broches d’entrée analogiques
  • tutoriel sur le potentiomètre – c’est bien

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.