ESP32 - Potenciómetro

Este tutorial te enseña cómo usar el ESP32 con el potenciómetro. En detalle, aprenderemos:

Acerca del potenciómetro

El potenciómetro (también conocido como sensor de ángulo rotatorio) se utiliza para cambiar los ajustes (p. ej. el volumen del altavoz, la temperatura de la habitación, el brillo de la lámpara...).

Disposición de pines del potenciómetro

Pinout del potenciómetro

Un potenciómetro suele tener 3 pines:

  • Pin VCC: conecta este pin a VCC (5V o 3.3V)
  • Pin GND: conecta este pin a GND (0V)
  • Pin de salida: entrega la tensión al pin de entrada del ESP32.
Pinout del potenciómetro

※ Nota:

El pin GND y el pin VCC son intercambiables.

Cómo funciona un potenciómetro

El eje del potenciómetro puede girarse desde 0° (el más cercano al pin GND) hasta un ángulo (el más cercano al pin VCC), llamado ANGLE_MAX.

El voltaje en el pin de salida es directamente proporcional a la posición angular del eje, variando desde 0 hasta VCC. La tabla a continuación muestra la relación entre el ángulo y el voltaje en el pin de salida:

Angle Voltage
0v
ANGLE_MAX°VCC
angle°angle° × VCC / ANGLE_MAX°

※ Nota:

El valor de ANGLE_MAX depende de los fabricantes.

Cómo funciona un potenciómetro

ESP32 - Potenciómetro giratorio

El pin de entrada analógica del ESP32 convierte la tensión (entre 0 V y 3.3 V) en valores enteros (entre 0 y 4095), llamados valores ADC o valores analógicos.

Podemos conectar el pin de salida del potenciómetro al pin de entrada analógica del ESP32 y luego leer el valor analógico desde ese pin.

El valor analógico del pin de entrada puede reescalarse a otro valor. Veamos los casos de uso:

  • Reescale el valor analógico al ángulo del potenciómetro.
  • Reescale el valor analógico al voltaje del potenciómetro.
  • Reescale el valor analógico al valor de ajuste (p. ej. el volumen del altavoz, la temperatura de la habitación, el brillo de la lámpara...)

Rango de reescalado

FROM TO
Anglerotated by userANGLE_MAX°
Voltagefrom potentiometer's pin 0V3.3V
ADC valueread by ESP32 04095
Setting valueconverted by ESP32 VALUE_MINVALUE_MAX

Diagrama de cableado entre el potenciómetro y el ESP32

Diagrama de cableado del potenciómetro ESP32

This image is created using Fritzing. Click to enlarge image

Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.

Cómo conectar un ESP32 y un potenciómetro

Cómo programar un potenciómetro

  • Lee el valor de un pin de entrada, que está conectado al pin de salida del potenciómetro mediante la función analogRead().
analogValue = analogRead(36); // GPIO36
  • Reescala al ángulo del potenciómetro utilizando la función map().
angle = map(analogValue, 0, 4095, 0, ANGLE_MAX);
  • Reescalar al voltaje del potenciómetro:
voltage = map(analogValue, 0, 4095, 0, 3.3);
  • Reescalar al valor controlable (p. ej. volumen de un estéreo, brillo, velocidad de un motor de corriente continua...)
value = map(analogValue, 0, 4095, VALUE_MIN, VALUE_MAX);
  • Por ejemplo, ajustar el brillo del LED. Como se menciona en este tutorial, el brillo del LED se puede controlar utilizando un valor PWM desde 0 (apagado) hasta 255 (encendido). Por lo tanto, podemos mapear el valor analógico al brillo del LED (desde apagado hasta el brillo máximo) de la siguiente manera:
brightness = map(analogValue, 0, 4095, 0, 255);

Si quieres atenuar el LED desde la luz nocturna hasta la más brillante,

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

※ Nota:

La función map() solo puede usarse para reescalar el valor analógico al tipo int o long. Si el valor controlable es de tipo float, necesitas usar la función floatMap() en lugar de la función map().

Función 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 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.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); }

Pasos R\u00e1pidos

Subir código al IDE de Arduino
  • Abrir el Monitor Serial en el IDE de Arduino.
Cómo abrir el monitor serie en el IDE de Arduino
  • Gira el potenciómetro.
  • Consulta el resultado en el Monitor Serial. Se ve como se muestra a continuación:
COM6
Send
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
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Nota:

Este tutorial utiliza la función analogRead() para leer valores de un ADC (convertidor analógico-digital) conectado a un potenciómetro. El ADC del ESP32 es adecuado para proyectos que NO requieren alta precisión. Sin embargo, para proyectos que necesitan mediciones precisas, tenga en cuenta lo siguiente:

  • El ADC del ESP32 no es perfectamente preciso y podría necesitar calibración para obtener resultados correctos. Cada placa ESP32 puede ser un poco diferente, por lo que es necesario calibrar el ADC para cada placa individual.
  • La calibración puede ser difícil, especialmente para principiantes, y podría no dar siempre los resultados exactos que deseas.

Para proyectos que requieren alta precisión, considera usar un ADC externo (p. ej. ADS1115) con el ESP32 o usar un Arduino, que tiene un ADC más fiable. Si aún desea calibrar el ADC del ESP32, consulte ESP32 ADC Calibration Driver

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!