Le potentiomètre est une résistance variable qui permet de faire varier la valeur de tension à ses bornes. Il est utilisé dans plusieurs applications notamment pour régler une valeur: régler la luminosité d’une lumière, régler le volume d’un haut-parleur, modifier la position d’un servomoteur, etc.
Prérequis : Donnez des sens à votre robot
Matériel
- Ordinateur
- Carte Arduino
- Câble USB pour connecter la carte Arduino au PC
- 1x potentiomètre 10kOhm
- 3x câbles Dupont
Principe de fonctionnement
Le potentiomètre possède 3 broches: une reliée à la tension d’alimentation, une reliée à la masse et une broche correspondant à un curseur se déplaçant sur une piste résistante. La tension entre la broche du curseur et une des deux autres bornes dépend de la position du curseur et de la tension d’alimentation. Le schéma équivalent d’un potentiomètre s’apparente à un pont diviseur de tension.
Il existe différents types de potentiomètre: rotatif, linéaire ou numérique.
Schéma
Le potentiomètre est un composant passif. Pour mesurer un changement de résistance, nous envoyons un courant entre les bornes extrêmes du potentiomètre et nous pouvons lire la valeur de la tension résultante du pont diviseur ainsi créé sur sa borne du milieu.
Code
Pour afficher la valeur physique du capteur, il faut connaitre la règle de conversion qui sera souvent linéaire du type y= a*x+b.
Afin d’avoir un code propre et lisible, il est préférable de placer le code dans une sous fonction. Nous allons donc créer une fonction qui se charge de lire la valeur du capteur et de la convertir en valeur physique.
/* Potentiometer reading program */ // Constants #define DELAY 500 // Delay between two measurements in ms #define VIN 5 // V power voltage #define R 10000 //ohm resistance value // Parameters const int sensorPin = A0; // Pin connected to sensor //Variables int sensorVal; // Analog value from the sensor float res; //resistance value void setup(void) { Serial.begin(9600); } void loop(void) { sensorVal = analogRead(sensorPin); res=sensorRawToPhys(sensorVal); Serial.print(F("Raw value from sensor= ")); Serial.println(sensorVal); // the analog reading Serial.print(F("Physical value from sensor = ")); Serial.print(res); // the analog reading Serial.println(F(" ohm")); // the analog reading delay(DELAY); } float sensorRawToPhys(int raw){ // Conversion rule float Vout = float(raw) * (VIN / float(1023));// Conversion analog to voltage float phys = R *((Vout))/VIN; // Conversion voltage to resistance between GND and signal float phys2 = R *((VIN - Vout))/VIN; // Conversion voltage to resistance between 5V and signal return phys; }
Application
Une application possible avec un potentiomètre est le contrôle de la luminosité d’une LED. Pour cela, il n’est pas nécessaire de convertir le signal du capteur en valeur physique mais simplement de convertir le signal analogique en une valeur de commande pour la LED.
/* Potentiometer controlling lamp program */ // Constants #define DELAY 20 // Delay between two measurements in ms #define MIN_RAW 0 // Analog minimum value #define MAX_RAW 1023 // Analog maximum value #define MIN_CMD 0 // Digital minimum value #define MAX_CMD 200 // Digital maximum value // Parameters const int sensorPin = A0; // Pin connected to sensor const int ledPin = 3; // Pin connected to sensor //Variables int sensorVal; // Analog value from the sensor int cmd; //Led command value //Main void setup(void) { Serial.begin(9600); pinMode(ledPin,OUTPUT); } void loop(void) { sensorVal = analogRead(sensorPin); cmd=sensorToLed(sensorVal); analogWrite(ledPin,cmd); delay(DELAY); Serial.print("Sensor : "); Serial.println(sensorVal); Serial.print("Command : "); Serial.println(cmd); } //Functions int sensorToLed(int raw){ int val = map(sensorVal, MIN_RAW, MAX_RAW, MIN_CMD, MAX_CMD); val=max(val,MIN_CMD); val=min(val,MAX_CMD); return val; }
Sources
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie