ESP32 - Potenciômetro

Este tutorial ensina você a usar o ESP32 com o potenciômetro. Em detalhes, vamos aprender:

Sobre o Potenciômetro

O potenciômetro (também conhecido como sensor de ângulo rotativo) é usado para alterar configurações (por exemplo, o volume do alto-falante, a temperatura do ambiente, o brilho da lâmpada...)

Pinagem do Potenciômetro

Pinagem do Potenciômetro

Um potenciômetro geralmente tem 3 pinos:

  • Pino VCC: conecte este pino ao VCC (5V ou 3.3v)
  • Pino GND: conecte este pino ao GND (0V)
  • Pino de saída: envia a tensão para o pino de entrada do ESP32.
Pinagem do Potenciômetro

※ Nota:

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

Como o Potenciômetro Funciona

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

A tensão no pino de saída é diretamente proporcional à posição angular do eixo, variando de 0 a VCC. A tabela abaixo mostra a relação entre o ângulo e a tensão no pino de saída:

Ângulo Tensão
0°0v
ANGLE_MAX°VCC
ângulo°ângulo° × VCC / ANGLE_MAX°

※ Nota:

O valor de ANGLE_MAX depende do fabricante.

Como o Potenciômetro Funciona

ESP32 - Potenciômetro Rotativo

O pino de entrada analógica do ESP32 converte a tensão (entre 0v e 3.3V) em valores inteiros (entre 0 e 4095), chamados de valor ADC ou valor analógico.

Podemos conectar o pino de saída do potenciômetro a um pino de entrada analógica do ESP32 e então ler o valor analógico desse pino.

O valor analógico do pino de entrada pode ser reescalado para outro valor. Vamos ver os casos de uso:

  • Reescalar o valor analógico para o ângulo do potenciômetro.
  • Reescalar o valor analógico para a tensão do potenciômetro.
  • Reescalar o valor analógico para o valor de configuração (por exemplo, o volume do alto-falante, a temperatura do ambiente, o brilho da lâmpada...)

Faixa de Reescala

DE PARA
Ângulogirado pelo usuário 0° → ANGLE_MAX°
Tensãodo pino do potenciômetro 0V → 3.3V
Valor ADClido pelo ESP32 0 → 4095
Valor de configuraçãoconvertido pelo ESP32 VALUE_MIN → VALUE_MAX

Diagrama de Ligação entre o Potenciômetro e o ESP32

  • Como conectar o ESP32 e o potenciômetro usando uma protoboard
Diagrama de Ligação do Potenciômetro com ESP32

This image is created using Fritzing. Click to enlarge image

Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

Como conectar o ESP32 e o potenciômetro

Como Programar o Potenciômetro

  • Leia o valor de um pino de entrada, que está conectado ao pino de saída do potenciômetro, usando a função analogRead().
analogValue = analogRead(36); // GPIO36
  • Reescale para o ângulo do potenciômetro usando a função map().
angle = map(analogValue, 0, 4095, 0, ANGLE_MAX);
  • Reescale para a tensão do potenciômetro:
voltage = map(analogValue, 0, 4095, 0, 3.3);
  • Reescale para o valor controlável (por exemplo, volume do som, brilho, velocidade do motor DC... )
value = map(analogValue, 0, 4095, 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, 4095, 0, 255);

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

nightlight = 100; // depending on your desired brightness brightness = map(analogValue, 0, 4095, 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() em vez 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 ESP32

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-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); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin GPIO36: int analogValue = analogRead(36); // Rescale to potentiometer's voltage (from 0V to 3.3V): float voltage = floatMap(analogValue, 0, 4095, 0, 3.3); // print out the value you read: Serial.print("Analog: "); Serial.print(analogValue); Serial.print(", Voltage: "); Serial.println(voltage); delay(1000); }

Passos Rápidos

Carregar Código na Arduino IDE
  • Abra o Serial Monitor na Arduino IDE
Como abrir o Serial Monitor na Arduino IDE
  • Gire o potenciômetro
  • Veja o resultado no Serial Monitor. Ele se parece com o abaixo:
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' 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: 4095, Voltage: 3.30 Analog: 4095, Voltage: 3.30
Ln 11, Col 1
ESP32 Dev Module on COM15
2

※ Nota:

Este tutorial usa a função analogRead() para ler valores de um ADC (Conversor Analógico-Digital) conectado a um potenciômetro. O ADC do ESP32 é bom para projetos que NÃO precisam de alta precisão. No entanto, para projetos que precisam de medições precisas, observe:

  • O ADC do ESP32 não é perfeitamente preciso e pode precisar de calibração para obter resultados corretos. Cada placa ESP32 pode ser um pouco diferente, então você precisa calibrar o ADC para cada placa individualmente.
  • A calibração pode ser difícil, especialmente para iniciantes, e nem sempre pode fornecer os resultados exatos que você deseja.

Para projetos que precisam de alta precisão, considere usar um ADC externo (por exemplo, ADS1115) com o ESP32 ou usar um Arduino, que tem um ADC mais confiável. Se ainda quiser calibrar o ADC do ESP32, consulte o ESP32 ADC Calibration Driver

Vídeo

※ 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!