Entendendo o funcionamento de um potenciômetro com Arduino

Introdução

Um potenciômetro é basicamente um resistor que sofre variação de sua resistência dependendo da posição em que se encontra. Neste post vamos montar um potenciômetro do zero, isso mesmo, e depois brincar com ele.

A origem da ideia

Infelizmente a ideia aqui apresentada não foi minha :(  . O video original que me inspirei para fazer esta publicação encontra-se aqui: http://www.youtube.com/watch?v=VPVoY1QROMg. Vale à pena dar uma conferida!

Como funciona o potenciômetro?

Um componente muito comum em nosso dia a dia, encontrado em lápis de escrever por exemplo. Sua origem é o carbono, material muito utilizado na fabricaçãod e resistores.

A proposta aqui é usar um lapis para produzir um resistor que será então usado como potenciômetro. Como?

Veja a figura que exemplifica o funcionamento de um potenciômetro:
Assumindo que V1 (pino A) está conectado em 5V e que B está conectado ao GND, o V2 (pino W) irá conter a metade da tensão total, ou seja 2.5 Volts. Concordo que essa explicação é meio difícil de assimilar no começo, mas fique tranquilo, vamos fazer o nosso!
Quanto mais próximo W estiver de A mais tensão será enviada para V2, assim como quanto mais próximo W estiver de B menos tensão será enviada para V2.

Construindo um potenciômetro

Aqui veremos como construir nosso resistor que será então usado como um potenciômetro

Materiais

Você vai precisar de:

  • lápis 6B
  • fita crepe ou outra fita qualquer
  • Arduino
  • 3 Fios de conexão
  • Um pouco de escova de aço
  • Papel em branco
  • Régua (para ficar bonito :) )

Materiais necessários para construção do resistor

Construindo o resistor

Sega passo-a-passo e veja como é simples!

  1. Faça um retânculo de 8 x 2 cm na folha
  2. Pinte-o completamente de maneira uniforme procurando preencher todos os espaços em branco
  3. Messa com um multímetro (medida de resistores até 20k) a resistência de seu retângulo

Você acabou de montar um resistor que será usado como potenciômetro! Veja nas figuras abaixo passo-a-passo:

retangulo 8 x 2 cm

retângulo pintado

medindo resistor desenvolvido

Faça dois riscos nas extremidades do retângulo, cada um à 1 CM de distância da lateral.

Agora precisamos fixar os fios que alimentam o potenciômetro. Em suas extremidades iremos conectar cada um dos dois fios. Um deles conectado ao 5V e o outro ao GND do Arduino.

Entre o fio e a folha coloque uma bolinha de escova de aço. Prenda tudo com fita crepe.

Riscos e bolinha de esponja de aco

preparando para fixar fio no resistor

Arduino completamente fixado com fios no resistor

Carregue o seguinte sketch em seu Arduino:

void setup() {
  Serial.begin(9600);
  Serial.println("Inicio ok");
}
 
void loop() {
  // Le valor do pino analógico
  int valorSensor = analogRead(A0);
  Serial.print("valor lido = " );
  Serial.println(valorSensor);
  delay(100);
}

Medindo contato do resistor

Contatos feitos e valores medidos

Abra o monitor serial e enconste o fio conectado ao pino analógico 0 do Arduino no primeiro risco à direita. Anote este valor.

Depois, enconste o mesmo fio no risco à esquerda e anote novamente o valor. Eu obtive no risco da direita 220 e no da esquerda 800.

Agora, se supormos que 220 é o nosso 0 e 800 é nosso 100%, teremos uma variação no meio do retângulo desses valores.

O uso da função map

A função map do Arduino, mapeia uma faixa de valores em outra. Neste exemplo desejamos mapear a faixa 220 – 800 para 0 – 100.

Seguindo o site de referência do Arduino, temos o seguinte protótipo para a função map:

map(value, fromLow, fromHigh, toLow, toHigh)

Esta função recebe 5 parâmetros:

  • value: Informamos aqui o valor lido da porta analógica.
  • fromLow: Início da escala de origem. Neste nosso exemplo aqui teremos o 200.
  • fromHigh: Fim da escala de origem. Aqui teremos o 800.
  • toLow: Início da escala de destino. O valor 0.
  • toHigh: Fim da escala de destino. O valor 100.

Teremos então o seguinte software:


void setup() {
  Serial.begin(9600);
  Serial.println("Inicio ok");
}
 
void loop() {
  // Le valor do pino analógico
  int valorSensor = analogRead(A0);
 
  // Mapeia o valor lido para escala 0 à 100
  int valorModificado = map(valorSensor, 200, 800, 0, 100);
 
  Serial.print("valor lido = " );
  Serial.println(valorSensor);
  Serial.print("valor modificado = ");
  Serial.println(valorModificado);
  delay(500);
}

Com o programa visto acima, podemos receber um valor em escala 0 à 100 de acordo com a posição de nosso fio no retângulo.

Agora conecte um LED no pino digital 5 do Arduino e rode o programa abaixo. Veja que o brilho do LED muda de acordo com a posição do pino central conectado ao pino analógico 0 do Arduino.

int pinoLed = 5;
 
void setup() {
  pinMode(pinoLed, OUTPUT);
}
 
void loop() {
  // Le valor do pino analogico
  int valorSensor = analogRead(A0);
 
  // Mapeia o valor lido para escala 0 a 255
  int valorParaLed = map(valorSensor, 280, 800, 0, 255);
 
  // Validaçao para que nao sejam extrapolados os valores
  if (valorParaLed < 0){     valorParaLed = 0;   }   if (valorParaLed > 255){
    valorParaLed = 255;
  }
 
  // Faz uma escrita analgica em um pino digital (usa PWM)
  analogWrite(pinoLed, valorParaLed);
 
  delay(10);
}

testando led – posicao inicial

testando led – posicao central

testando led – posicao final

 

Usando um potenciômetro de verdade

O potenciômetro desenvolvido aqui é interessante para aprendermos como eles funcionam, porém sua estabilidade é baixa e como riscamos muito a folha logo ele irá parar de funcionar.

Usar um de verdade é tão simples quanto, basta conectarmos um pino da extremidade em 5 Volts e outro em 0 Volts. O pino central do potenciômetro irá conectado a porta analógica 0.

Como esse potenciômetro irá realmente mandar algo entre 0 e 5 Volts para a porta analógica, altere o uso da função map mudando o 200 para 0 e o 800 para 1023:

// Mapeia o valor lido para escala 0 a 255
int valorParaLed = map(valorSensor, 0, 1023, 0, 255);

Potenciometro real conectado ao Arduino

 

Conclusão

Como vimos, um potenciômetro não passa de um resistor que tem sua resistência variando conforme a posição do pino central. A função map vista aqui pode ser usada em qualquer programa que precise converter escalas. Ler um sensor de luz ou temperatura (que funcionem como resistores) ocorre da mesma maneira vista aqui, bastando adaptar o software a necessidade.

Implementou o que vimos aqui? Deixe um comentário, conte sua experiência e ajude a complementar este material.

Comments

  1. By Alex Ferreira

    Responder

    • Responder

  2. By Fernado

    Responder

    • Responder

  3. By Eder Carneiro

    Responder

    • Responder

  4. By Bruno Zanotti

    Responder

  5. By Gregory

    Responder

  6. By bruno

    Responder

    • Responder

  7. By bruno siqueira

    Responder

  8. By Roselito

    Responder

    • Responder

  9. By Miguel Angelo Tardivo

    Responder

    • Responder

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>