Arduino - Potenciômetro

Neste tutorial, vamos aprender:

Sobre o Potenciômetro

O potenciômetro rotativo (também chamado de sensor de ângulo rotativo) é usado para ajustar manualmente o valor de algo (por exemplo, o volume do som, o brilho de uma lâmpada, o nível de zoom de um osciloscópio...)

Pinagem do Potenciômetro

Pinagem

O potenciômetro geralmente tem 3 pinos:

  • Pino GND: precisa ser conectado ao GND (0V)
  • Pino VCC: precisa ser conectado ao VCC (5V ou 3.3V)
  • Pino de saída: envia a tensão para o pino de entrada do Arduino.
Pinagem do Potenciômetro

※ Nota:

O pino GND e o pino VCC são intercambiáveis

Como Funciona

O eixo do potenciômetro pode girar de 0° (mais próximo do GND) até um ângulo limite superior (mais próximo do pino VCC), chamado ANGLE_MAX.

A tensão no pino de saída varia da tensão do GND até a tensão do VCC. A tensão de saída é diretamente proporcional ao ângulo de rotação do eixo.

  • Se o ângulo for 0°, a tensão do pino de saída é 0V
  • Se o ângulo for ANGLE_MAX, a tensão do pino de saída é a tensão do VCC
  • Se o ângulo estiver entre 0° e ANGLE_MAX, output_voltage = angle × VCC / ANGLE_MAX

※ Nota:

O valor de ANGLE_MAX depende do fabricante. Na prática, geralmente NÃO nos importamos com o valor de ANGLE_MAX, exceto quando precisamos calcular o ângulo de rotação (veja a parte de casos de uso).

Como o Potenciômetro Funciona

Arduino - Potenciômetro Rotativo

Os pinos A0 a A5 do Arduino podem funcionar como entrada analógica. O pino de entrada analógica converte a tensão (entre 0V e VCC) em valores inteiros (entre 0 e 1023), chamados de valor ADC ou valor analógico.

Conectando o pino de saída do potenciômetro a um pino de entrada analógica, podemos ler o valor analógico do pino e depois convertê-lo em um valor com significado.

O valor que o Arduino obtém NÃO é o ângulo, NÃO é a tensão. É um valor inteiro que varia de 0 a 1023.

Depois de obter o valor inteiro do pino de entrada analógica, reescalamos esse valor para outro valor. Vamos ver os casos de uso.

Casos de Uso

  • Reescalar para o ângulo do potenciômetro.
  • Reescalar para a tensão do potenciômetro:
  • Reescalar para o valor controlável (por exemplo, volume do som, brilho, velocidade do motor DC... ). Este é o caso mais usado.

Faixa de Reescala

DE PARA
Ângulogirado pelo usuário 0° → ANGLE_MAX
Tensãodo pino do potenciômetro 0V → VCC
Valor ADClido pelo Arduino 0 → 1023
Outro valorconvertido pelo Arduino VALUE_MIN → VALUE_MAX

Diagrama de Ligação

Diagrama de Ligação Arduino Potenciômetro

This image is created using Fritzing. Click to enlarge image

Como Programar o Potenciômetro

  • Leia o valor de um pino de entrada, conectado ao pino de saída do potenciômetro, usando a função analogRead().
analogValue = analogRead(A0);
  • Reescale para o ângulo do potenciômetro usando a função map().
angle = map(analogValue, 0, 1023, 0, ANGLE_MAX);
  • Reescale para a tensão do potenciômetro:
voltage = map(analogValue, 0, 1023, 0, VCC);
  • Reescale para o valor controlável (por exemplo, volume do som, brilho, velocidade do motor DC... )
value = map(analogValue, 0, 1023, VALUE_MIN, VALUE_MAX);
  • Por exemplo, reescalar para o brilho do LED. Como mencionado neste tutorial, o brilho do LED pode ser controlado usando um valor PWM de 0 (sempre DESLIGADO) a 255 (sempre LIGADO). Portanto, podemos mapear o valor analógico para o brilho do LED (de DESLIGADO até o mais brilhante) da seguinte forma:
brightness = map(analogValue, 0, 1023, 0, 255);

Se você quiser ajustar o LED da luz noturna até o mais brilhante,

nightlight = 100; // depending on your desired brightness brightness = map(analogValue, 0, 1023, nightlight , 255);

※ Nota:

A função map() só pode ser usada para reescalar o valor analógico para um valor do tipo int ou long. Se o valor controlável for do tipo float, você precisa usar a função floatMap() no lugar da função map().

Função floatMap():

float floatMap(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

Código Arduino

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-potentiometer */ float floatMap(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin A0: int analogValue = analogRead(A0); // Rescale to potentiometer's voltage (from 0V to 5V): float voltage = floatMap(analogValue, 0, 1023, 0, 5); // print out the value you read: Serial.print("Analog: "); Serial.print(analogValue); Serial.print(", Voltage: "); Serial.println(voltage); delay(1000); }

Passos Rápidos

  • Copie o código acima e abra com a Arduino IDE
  • Clique no botão Upload na Arduino IDE para carregar o código no Arduino
Arduino IDE Carregar Código
  • Abra o Serial Monitor
  • Gire o potenciômetro
  • Veja o resultado no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Analog: 0, Voltage: 0.00 Analog: 0, Voltage: 0.00 Analog: 126, Voltage: 0.62 Analog: 281, Voltage: 1.37 Analog: 517, Voltage: 2.53 Analog: 754, Voltage: 3.69 Analog: 906, Voltage: 4.43 Analog: 1023, Voltage: 5.00 Analog: 1023, Voltage: 5.00
Ln 11, Col 1
Arduino Uno on COM15
2

Vídeo

Desafie-se

Use o potenciômetro para fazer um dos seguintes projetos:

Conhecimento Adicional

  • O pino GND e o pino VCC são intercambiáveis. Não existe uma convenção sobre esses dois pinos. Se você escolher um pino como GND, o outro será o pino VCC. Há apenas uma coisa que você precisa prestar atenção: o valor de tensão no pino de saída é invertido quando trocamos esses pinos.

Referências de Funções

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!