Arduino - Potenciómetro

En este tutorial, vamos a aprender:

Acerca del potenciómetro

Potenciómetro giratorio (también llamado sensor de ángulo giratorio) se utiliza para ajustar manualmente el valor de algo (por ejemplo, el volumen del estéreo, el brillo de la lámpara, el nivel de zoom del osciloscopio...)

Pinout del potenciómetro

Diagrama de pines

El potenciómetro suele tener 3 pines:

  • Pin GND: debe conectarse a GND (0 V).
  • Pin VCC: debe conectarse a VCC (5 V o 3.3 V).
  • Pin de salida: entrega la tensión al pin de entrada del Arduino.
Diagrama de pines del potenciómetro

※ Nota:

Los pines GND y VCC son intercambiables.

Cómo funciona

El eje del potenciómetro se puede girar desde 0° (el más cercano a GND) hasta un ángulo límite superior (el más cercano al pin VCC), llamado ANGLE_MAX.

La tensión en el pin de salida varía desde la tensión de masa hasta la tensión de VCC. La tensión de salida está en proporción directa con el ángulo de giro del eje.

  • Si el ángulo es 0°, la tensión de salida del pin es 0v
  • Si el ángulo es ANGLE_MAX, la tensión de salida del pin es la tensión de VCC
  • Si el ángulo está entre 0° y ANGLE_MAX, output_voltage = angle × VCC / ANGLE_MAX

※ Nota:

El valor de ANGLE_MAX depende de los fabricantes. En la práctica, normalmente NO nos importa el valor de ANGLE_MAX, excepto cuando necesitamos calcular el ángulo rotado (ver la sección de casos de uso).

Cómo funciona un potenciómetro

Arduino - Potenciómetro Giratorio

Los pines A0 a A5 de Arduino pueden funcionar como entrada analógica. El pin de entrada analógica convierte la tensión (entre 0 V y VCC) en valores enteros (entre 0 y 1023), llamados valor ADC o valor analógico.

Conectando la salida de un potenciómetro a una entrada analógica, podemos leer el valor analógico del pin y luego convertirlo en un valor significativo.

El valor que Arduino obtiene NO es un ángulo, NO es voltaje. Es un valor entero que va de 0 a 1023.

Después de obtener el valor entero del pin de entrada analógica, reescalamos este valor a otro valor. Veamos los casos de uso.

Casos de uso

  • Reescala al ángulo del potenciómetro.
  • Reescala al voltaje del potenciómetro:
  • Reescala al valor controlable (p. ej. volumen del estéreo, brillo, velocidad del motor de corriente continua...). Este es el caso de uso más común.

Rango de reescalado

FROM TO
Anglerotated by userANGLE_MAX
Voltagefrom potentiometer's pin 0VVCC
ADC valueread by Arduino 01023
Other valueconverted by Arduino VALUE_MINVALUE_MAX

Diagrama de Cableado

Diagrama de cableado de potenciómetro para Arduino

This image is created using Fritzing. Click to enlarge image

Cómo programar para un potenciómetro

  • Lea el valor de un pin de entrada, que está conectado al pin de salida del potenciómetro mediante la función analogRead().
analogValue = analogRead(A0);
  • Reescala al ángulo del potenciómetro usando la función map().
angle = map(analogValue, 0, 1023, 0, ANGLE_MAX);
  • Reescala al voltaje del potenciómetro:
voltage = map(analogValue, 0, 1023, 0, VCC);
  • Reescalar al valor controlable (p. ej. volumen del estéreo, brillo, velocidad de un motor de corriente continua... )
value = map(analogValue, 0, 1023, VALUE_MIN, VALUE_MAX);
  • Por ejemplo, ajustar el brillo del LED. Como se menciona en este tutorial, el brillo del LED puede controlarse usando un valor PWM de 0 (apagado siempre) a 255 (encendido siempre). Por lo tanto, podemos mapear el valor analógico al brillo del LED (de apagado al más brillante) como se muestra a continuación:
brightness = map(analogValue, 0, 1023, 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(analogValue, 0, 1023, nightlight , 255);

※ Nota:

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

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

Pasos R\u00e1pidos

  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir en Arduino IDE para subir el código al Arduino
Subir código al IDE de Arduino
  • Abrir Monitor Serial
  • Gira el potenciómetro
  • Ver el resultado en Monitor Serial
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: 1023, Voltage: 5.00 Analog: 1023, Voltage: 5.00
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

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.

Desafíate a ti mismo

Utilice el potenciómetro para realizar uno de los siguientes proyectos:

Conocimientos Adicionales

  • El pin GND y el pin VCC son intercambiables. No hay ninguna convención sobre estos dos pines. Si eliges un pin como GND, el otro será VCC. Solo hay una cosa a la que debes prestar atención. El valor de voltaje en el pin de salida se invierte al intercambiar estos pines.

Referencias de funciones

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