O potenciômetro é uma resistência variável que permite variar o valor da tensão nos seus terminais. Ele possui diversas aplicações, sobretudo para ajustar um valor: ajustar o brilho de uma luz ou o volume de uma caixa de som, modificar a posição de um servomotor, etc.
Pré-requisito: Dar sentidos ao seu robô
Material
- Computador
- Placa Arduino
- Cabo USB para ligar o Arduino ao PC
- 1 Potenciômetro 10kOhm
- 3 Cabos Dupont
Princípio de funcionamento
O potenciômetro tem três pinos: um ligado à alimentação, outro ligado à terra e o terceiro correspondente a um cursor que se desloca sobre uma pista de resistência. A tensão entre o pino deslizante e um dos outros dois terminais depende da sua posição e da tensão de alimentação. O esquema equivalente de um potenciômetro se assemelha a uma ponte divisora de tensão.

Existem diferentes tipos de potenciômetros: rotativos, lineares e digitais.
Esquema
O potenciômetro é um componente passivo. Para medir uma mudança na resistência, enviamos uma corrente entre os terminais extremos e podemos ler o valor da tensão resultante da ponte divisora assim criada no terminal do meio.

Código
Para exibir o valor físico do sensor, precisamos conhecer a regra de conversão, que muitas vezes será linear como y= a*x+b. Para ter um código limpo e legível, é preferível inseri-lo numa subfunção. Então, criaremos uma função que lê o valor do sensor e converte-o num valor físico.
/* 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;
}

Aplicação
Uma aplicação possível para um potenciômetro é o controle do brilho de um LED. Para isso, não é necessário converter o sinal do sensor num valor físico, mas simplesmente convertê-lo num valor de controle para o 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;
}
Fontes
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie