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.

22 Comments

  1. Boa tarde!, gostaria de saber o porque quando usa-se um potenciômetro muda os valores na função “map”. Como acima está descrito quando usa o “potenciômetro de grafith” se faz variando de 0 a 255, e quando usa um “potenciômetro real ” usa de 0 a 1024. fico grato

    1. Oi Alex,
      desculpa a demora em responder, agora estou voltando com o blog!
      A mudança feita na chamada da função map para o potenciômetro de grafite foi necessária para calibrar o ponto de início e final do hardware em si (no papel). Sobre a variação de 0 à 255 é apenas para definir a potência do canal pwm ok?

  2. Ola, otimo video adorei. Eu estou fazendo algumas experiencias e ainda não domino bem o Arduino.
    Estou tentendo fazer um voltimetro pra medir de 0 a 20 vdc. mas estou tendo problemas por não conhecer bem os codigos, será que vc pode me da uma força? Valeu.

    1. Oi Fernando,
      que bom que gostou do video. Posso lhe ajudar sim, basta me enviar um email com sua dúvida (paulo@paulotrentin.com.br) que responderei mais rapidamente ok?

      Abraços

  3. Olá Paulo
    Sou leigo em programação, eletrônica e muito mais quando se trata de micro controladores. Porém sou um entusiasta quando se fala em querer aprender sobre esses assuntos.
    Gostei muito do modo que você usou para explicar o funcionamento de um potenciômetro no arduino (”um potenciômetro em uma folha de papel”), como se fala aqui na Bahia “MASSA”.
    E também gostaria de ouvir sua opinião sobre um pequeno projeto que estou idealizando. Dê-me esta força se possível, agradeço…

  4. Boa tarde amigo.

    Muito legal esse POST.

    Você saberia me dizer com eu faria para usar o potenciometro para controlar uma lâmpada em AC 127v?

    Seria possível eu controlá-la utilizando as portas PWM do arduino?

    Obrigado.

  5. bom dia
    nao esquenta nao ja consegui pesquisar e fazer o trabalh0 , mas mesmo assim agradeço a vc pela ajuda fornecida ..blz ? abraços

  6. Paulo,

    Gostei de sua explicação, é bem didática. Me responda uma dúvida: liguei um potenciômetro ao arduíno e com ele parado em qualquer ponto da escala, obtenho várias leituras, de valores completamente diferentes. Como posso estabilizar essa leitura?

    1. Oi Roselito,
      tem certeza que os polos extremos do potenciômetro estão em 0 e 5v respectivamente?

      Pois a leitura dele deve variar muito pouco neste caso. Verifique as conexões, e faça a leitura do pino do meio em relação ao GND ok?

  7. Olá boa noite, comprei um pressurizador PL 9 da Lorenzetti e pretendo encontrar meios de instalar na saída de agua na parede e antes do chuveiro – espalhador grande – com redutor de pressão que for necessário, + aumentar o diâmetro dos furos do espalhador e o que mais for possível para não dar vazamentos, seria possível ao invés de tudo isso instalar um potenciômetro na linha de energia elétrica obtendo-se a corrente desejada para uma pressão também desejada não exagerada para evitar excesso de pressão ou vazamentos? desde já obrigado, atenciosamente, Miguel.

    1. Olá Miguel, não tenho certeza de que variando a corrente do pressurizador irá variar a pressão que ele impõe ao sistema de água. Isso você precisaria verificar com o fabricante ou alguém que entenda mais desta área.
      Quanto a variar a corrente, além de um potenciômetro, precisaria de um driver que aguentasse a corrente consumida pelo motor, o potenciômetro apenas informaria ao driver qual potência ajustar na saída.

  8. Paulo, parabéns pelos posts.
    Cara, comprei um joystik r300b-m1 de 5k, mas quando leio as portas analógicas , estão variando muito, por exemplo: Preciso comparar o valor da A0 c A1 para tomar uma determinda ação, mas ai que me ferro. Varia muito a leitura. Vc pode me ajudar com isso ?
    Agradeço

  9. Como saber o valor de um potenciometro c/chave P-4 de um rádio portátil de duas pilhas? Tentei , ñ consegui e estou precisando desesperadamente substituir o componente estragado. Muitíssimo obrigado.

Leave a Reply

%d