Arduino Nano ESP32 - Potenciómetro

Este tutorial proporciona instrucciones sobre cómo usar Arduino Nano ESP32 con el potenciómetro. En detalle, aprenderemos:

Acerca del potenciómetro

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

Pinout del potenciómetro

Disposición de pines 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:

Los pines GND y VCC son intercambiables.

Cómo funciona un potenciómetro

El eje del potenciómetro se puede girar desde 0° (más cercano al pin GND) hasta un ángulo (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 de 0 a VCC. La tabla siguiente 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 ANGLE_MAX depende de los fabricantes.

Cómo funciona un potenciómetro

Arduino Nano 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 valor ADC o valor analógico.

Podemos conectar la salida del potenciómetro al pin de entrada analógica de un 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:

  • Reescalar el valor analógico al ángulo del potenciómetro.
  • Reescalar el valor analógico al voltaje del potenciómetro.
  • Reescalar 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 potenciómetro y Arduino Nano ESP32

Diagrama de cableado del potenciómetro para Arduino Nano ESP32

This image is created using Fritzing. Click to enlarge image

Cómo programar un potenciómetro

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

Si quieres atenuar el LED desde la luz nocturna hasta el brillo máximo,

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

※ Nota:

La función map() solo puede usarse para reescalar el valor analógico al tipo de valor 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 de Arduino Nano ESP32

/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-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 the Serial to communicate with the Serial Monitor. 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 A5: int analog_value = analogRead(A5); // Rescale to potentiometer's voltage (from 0V to 3.3V): float voltage = floatMap(analog_value, 0, 4095, 0, 3.3); // print out the value you read: Serial.print("Analog: "); Serial.print(analog_value); Serial.print(", Voltage: "); Serial.println(voltage); delay(1000); }

Pasos R\u00e1pidos

Subir código al IDE de Arduino
  • Abrir Monitor Serial en el IDE de Arduino
Cómo abrir el monitor serial en el IDE de Arduino
  • Gira el potenciómetro
  • Consulta el resultado en el Monitor Serial. 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.2 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 sensor o componente. El ADC del Arduino Nano ESP32 es adecuado para proyectos que no requieren alta precisión. Sin embargo, para proyectos que requieren mediciones precisas, tenga en cuenta lo siguiente:

  • El ADC del Arduino Nano ESP32 no es perfectamente preciso y podría requerir calibración para obtener resultados correctos. Cada placa Arduino Nano ESP32 puede variar ligeramente, por lo que la calibración es necesaria para cada placa individual.
  • La calibración puede ser un desafío, especialmente para principiantes, y podría no siempre dar los resultados exactos que deseas.

Para proyectos que requieren alta precisión, considere usar un ADC externo (p. ej. ADS1115) con el Arduino Nano ESP32 o usar otro Arduino, como el Arduino Uno R4 WiFi, que tiene un ADC más fiable. Si aún desea calibrar el ADC del Arduino Nano ESP32, consulte el 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!