fbpixel
Etiquetas: , , , ,
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

  • 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

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.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?