Site icon AranaCorp

Usar um potenciômetro com o Arduino

0
(0)

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

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

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

Exit mobile version