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