XVIII. Projet 10 : Le Potentiomètre - Cours Pour Débuter Sur Arduino

Le potentiomètre est une résistance variable. Contrairement, c'est le bouton de réglage du volume sur une radio. La plupart des potentiomètres sont soit rotatifs, soit linéaires.

Image non disponible

Image non disponible

Les potentiomètres sont très fréquents dans les appareils électroniques, par exemple les tables de mixage.

Image non disponible
Table de mixage du RadioBus (http://radiobus.fm)

Voici les symboles électroniques (européens dessus et américains dessous) du potentiomètre :

Image non disponible

Comme toute résistance, le potentiomètre modifie la tension d'un circuit. On va donc l'utiliser principalement comme entrée (input) dans une broche analogique (A0 à A5) de l'Arduino.

Les potentiomètres ont en général trois broches. Les broches extérieures se connectent sur l'alimentation +5 V et sur la terre, alors que la broche centrale envoie le signal sur la broche d'entrée analogique de l'Arduino.

Image non disponible

XVIII-A. Circuit 12 : utiliser le potentiomètre pour faire varier la luminosité d’une LED▲

Il est temps de griller notre première LED (si cela n'est pas déjà fait) ! C'est le passage obligé de tout bon maker ! Pour ce faire, nous allons connecter une LED sur la broche OUT du potentiomètre et la mettre à la terre. Petit conseil : avant de brancher, tourner le potentiomètre au minimum, dans le sens inverse des aiguilles d'une montre.

Une fois l'Arduino branché, tourner délicatement le potentiomètre dans le sens des aiguilles d'une montre. La LED va commencer à s'illuminer, puis de plus en plus, avant de… griller.

Circuit 12

Image non disponible

Image non disponible

Nous venons de le voir : varier le voltage à l'entrée d'une LED n'est pas la meilleure solution pour faire varier sa luminosité… même si la LED ne grille pas, au-delà de son voltage de fonctionnement, sa durée de vie sera fortement réduite. Mais qu'importe, puisque nous avons la fonction PWM(12). Nous allons donc coupler le potentiomètre, en entrée analogique sur A0, avec une LED en PWM sur la broche 9.

Liste des composants

  • 1 LED ;
  • 1 résistance de 220 Ω ;
  • 1 potentiomètre de 10 kΩ ou 20 kΩ .

XVIII-B. Circuit 13 : utiliser le potentiomètre pour faire varier la luminosité d’une LED▲

Circuit 13

Image non disponible

Image non disponible

Le code est très simple. Comme pour le code 17, on récupère la valeur comprise en 0 et 1023 sur A0, avant de la diviser par 4, afin de la rendre compatible avec la portée du PWM, comprise entre 0 et 255. Comme pour le code 18, on pourrait aussi imaginer un mappage au lieu de la division.

Code 19Sélectionnez1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20./* Code 19 - Edurobot.ch, destiné à l'Arduino Objectif: Lire la valeur du potentiomètre pour faire varier la luminosité de la LED en PWM Source: Philippe Krähenbühl */ int ledPin = 9; // On renomme la broche 9 en "ledPin" int analogPin = 0; // Le potentiomètre est connecté à la broche analogue 0 int val = 0; // la variable qui stocke la valeur lue est mise à 0 void setup() { pinMode(ledPin, OUTPUT); } void loop() { val = analogRead(analogPin); //lecture de la valeur analogue (potentiomètre) analogWrite(ledPin, val / 4); // valeur analogue lue (0 à 1023) divisée par 4 (0 à 255) }

XVIII-C. Circuit 14 : allumer les LED d’un bargraphe à l’aide d’un potentiomètre▲

Quand on tourne le bouton pour augmenter le volume, il serait intéressant d'avoir un bargraphe qui nous indique le niveau.

On va donc réaliser un bargraphe à l'aide de 8 LED.

Liste des composants

  • 8 LED ;
  • 8 résistances de 220 Ω ;
  • 1 potentiomètre de 10 kΩ ou 20 kΩ.

Circuit 14

Image non disponible

Image non disponible

XVIII-D. Code 20 : fficher la valeur d'un potentiomètre à l'aide d'un bargraphe▲

Le cas de ce code est très intéressant. Nous savons maintenant que nous avons 1024 paliers sur l'entrée analogique de l'Arduino. Lorsque l'Arduino reçoit la valeur de 1024, 8 LED devront être allumées. Ainsi, lorsqu'il recevra la valeur de 512, 4 LED devront être allumées (512 étant naturellement la moitié de 1024).

On va donc diviser nos 1024 paliers par 8, pour obtenir l'intervalle qui allumera les LED les unes après les autres. Attention, on commence à compter à 0, pas à 1. C'est la raison pour laquelle nos 1024 paliers se terminent à 1023.

On arrive au résultat suivant :

LED1 : de 0 à 127 LED2 : de 128 à 255 LED3 : de 256 à 383 LED4 : de 384 à 511 LED5 : de 512 à 639 LED6 : de 640 à 767 LED7 : de 768 à 895 LED8 : de 769 à 1023

À partir de là, il suffit d'aller chercher la valeur reçue, qu'on va stocker dans la variable readValue, puis de la faire passer dans 8 tests à partir de if… else consécutifs.

Le serial.print a pour objectif d'afficher dans le moniteur la valeur reçue par l'Arduino (voir code 17).

Code 20Sélectionnez/* Code 20 - Edurobot.ch, destiné à l'Arduino Objectif: Afficher la valeur d'un potentiomètre à l'aide d'un bargraphe */ // Information sur les LED int led1 = 5; int led2 = 6; int led3 = 7; int led4 = 8; int led5 = 9; int led6 = 10; int led7 = 11; int led8 = 12; // Information sur le potentiomètre int potPin = A0; int readValue; int writeValue; void setup() { Serial.begin(9600); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); } void loop() { /*Écriture de la valeur du potentiomètre dans la variable "readValue" */ readValue = analogRead(potPin); /*Incription dans le moniteur série de "Color=valeur de la variable readValue */ Serial.print("\Val="); Serial.print(readValue); delay(200); // De 0 à 127, led1 if (readValue < 128) { Serial.println("\tled 1"); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led5, HIGH); digitalWrite(led6, HIGH); digitalWrite(led7, HIGH); digitalWrite(led8, HIGH); } // De 128 à 255, led 1 à 2 else if (readValue >= 128 && readValue < 256) { Serial.println("\tled 2"); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); digitalWrite(led6, LOW); digitalWrite(led7, LOW); digitalWrite(led8, LOW); } // De 256 à 383, led 1 à 3 else if (readValue >= 256 && readValue < 384) { Serial.println("\tled 3"); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, LOW); digitalWrite(led5, LOW); digitalWrite(led6, LOW); digitalWrite(led7, LOW); digitalWrite(led8, LOW); } // De 384 à 511, led 4 else if (readValue >= 384 && readValue < 512) { Serial.println("\tled 4"); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led5, LOW); digitalWrite(led6, LOW); digitalWrite(led7, LOW); digitalWrite(led8, LOW); } // De 512 à 639, led 5 else if (readValue >= 512 && readValue < 640) { Serial.println("\tled 5"); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led5, HIGH); digitalWrite(led6, LOW); digitalWrite(led7, LOW); digitalWrite(led8, LOW); } // De 640 à 767, led 6 else if (readValue >= 640 && readValue < 768) { Serial.println("\tled 6"); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led5, HIGH); digitalWrite(led6, HIGH); digitalWrite(led7, LOW); digitalWrite(led8, LOW); } // De 768 à 895, led 7 else if (readValue >= 768 && readValue < 896) { Serial.println("\tled 7"); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led5, HIGH); digitalWrite(led6, HIGH); digitalWrite(led7, HIGH); digitalWrite(led8, LOW); } // De 896 à 1023, led 8 else { Serial.println("\tled 8"); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led5,HIGH); digitalWrite(led6,HIGH); digitalWrite(led7,HIGH); digitalWrite(led8,HIGH); } }

Variante 1 : utiliser un bargraphe 10 LED

On peut, à ce stade, utiliser un potentiomètre et afficher sa valeur à l'aide d'un bargraphe 10 LED. Il suffit pour cela de ne plus diviser 1024 par 8, mais par 10 (en arrondissant).

Image non disponible

Variante 2 : utiliser un afficheur LED 8 digits

Voici une variante un peu plus sophistiquée. Il s'agit à nouveau d'afficher la valeur d'un potentiomètre. Mais cette fois avec un afficheur LED 8 digits. On affiche la valeur de 0 (min) à 9 (max).

Image non disponible

Tag » Arduino Chenillard 10 Led