1. El Octavo Bit
  2. / Arduino
  3. / Proyectos para Arduino
  4. / Lectura de un potenciómetro. Entradas analógicas en Arduino.

Lectura de un potenciómetro. Entradas analógicas en Arduino.

| Actualizado:
Comentarios: 0

Lectura de un potenciómetro. Entradas analógicas en Arduino.
Lectura de un potenciómetro. Entradas analógicas en Arduino.

En este post vamos a leer una señal analógica a través de un potenciómetro, mostraremos el valor por el puerto serie (monitor), en un segundo experimento lo transformaremos a voltaje, en porcentaje y utilizaremos una media para reducir los valores distorsionados; por último, variaremos la intensidad de un LED con ayuda de un potenciómetro.

Cuando nos referimos a entradas analógicas, los valores pueden ser múltiples (no solo 0 o 1). Podríamos decir que las entradas digitales son como un interruptor que enciende o apaga una bombilla, mientras que las analógicas son esos reguladores que te dejan seleccionar la intensidad con la que ilumina la bombilla. Cuando Arduino recibe una entrada analógica lo hace con un voltaje de entre 0 y 5 voltios y este valor es transformado por la propia tarjeta en valores equivalentes entre 0 y 1023 dependiendo del valor recibido. Será con este último valor transformado con el que trabajaremos nosotros.

Entradas analógicas, potenciómetro en Arduino

Para ver cómo funcionan las entradas analógicas usaremos una resistencia variable, también llamada potenciómetro. Tiene la particularidad de que el valor de su resistencia puede ser variado en cualquier momento.

Material

Montaje del circuito:

Esquema para la lectura de un potenciómetro con Arduino

El montaje es muy sencillo: el VCC del potenciómetro se conecta a la entrada de 5V de Arduino, el GND se conecta a tierra, y la salida de datos, a la entrada analógica A0. Este mismo esquema nos va a valer para los tres experimentos que vamos a realizar.

Experimento 1: Ver la salida analógica de los datos.

Como hemos dicho anteriormente una entrada analógica nos da valores de 0 a 1023; comprobémoslo con este primer código.

int valor = 0; // Variable donde almacenaremos el valor del potenciometro

void setup() {
  Serial.begin(9600);  // Inicializamos la comunicación serial
}

void loop() {
  valor = analogRead(A0); // Leemos del pin A0 valor

  // Imprimimos el valor por el monitor serie (0 - 1023)
  Serial.print("Valor analogico : ");
  Serial.println(valor);
  delay(1000);
}

Explicación del código:

En la primera línea se inicializa una variable entera, llamada valor y que vale 0.

En la función setup(), que solamente se ejecuta una vez, inicializamos la comunicación serial para poder ver los datos por el monitor serial

Serial.begin(9600);

En la función loop(), con la instrucción analogRead(A0), leemos el valor de la señal del potenciómetro a través del pin analógico A0, para mostrarlo en pantalla se utiliza Serial.print y la instrucción delay nos permite un retardo de un segundo antes de que vuelva a repetir la función loop().

valor = analogRead(A0);
Serial.print("Valor analógico : ");
Serial.println(valor);
delay(1000);

¿Cómo subimos el código a la placa?

Utilizando el IDE de Arduino podemos cargar el código a la placa de Arduino. El botón 1 nos permite compilar el programa y con el botón 2 subimos el código.

IDE arduino para compilar y subir el código a la placa de Arduino

Una vez subido el código, abrimos el monitor de serie y movemos la rueda del potenciómetro. Podremos observar cómo los valores están comprendidos entre 0 y 1023.

Experimento 2: transformar los datos analógicos a voltaje.

Para este experimento utilizamos el mismo esquema anterior. Al código se añade una nueva variable para almacenar el voltaje y se hace la conversión de los datos a voltaje. ¿Cómo hacemos la conversión? Muy fácil. Sabemos que 5V se corresponde con 1023, y el dato de valor corresponde con la lectura del potenciómetro:

Código:

int valor = 0;      // Variable donde almacenaremos el valor del potenciómetro
float voltaje = 0;  // Variable para almacenar el voltaje

void setup() {
  Serial.begin(9600); // Inicializamos la comunicación serial
}

void loop() {
  valor = analogRead(A0);           // Leemos del pin A0 valor
  voltaje = (valor*5.00/1023.00);   // Calculamos el voltaje
  Serial.print("valor analogico: ");
  Serial.print(valor);

  Serial.print(" Voltaje: ");
  Serial.print(voltaje);
  Serial.println("V");
  delay(1000);
}

Podemos comprobar que se ha añadido una nueva variable de tipo float, denominada voltaje. Dentro de la función loop es donde hemos añadido la nueva instrucción: voltaje = (valor*5.00/1023.00); que es la que calculará el voltaje.

Experimento 3: ver los datos en porcentaje.

El esquema de montaje sigue siendo el mismo, la única diferencia es que para calcular el porcentaje utilizamos la instrucción map().

posición = map(valor, 0, 1023, 0, 100);

 

int valor = 0;  //variable que almacena la lectura analógica
int posicion;   //posicion del potenciómetro en tanto por ciento
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  valor = analogRead(A0);          // realizar la lectura analógica
  posicion = map(valor, 0, 1023, 0, 100);  // convertir a porcentaje
 
  Serial.print("Valor %: ");
  Serial.println(posicion);
  delay(1000);
}

 

Al trabajar con sensores analógicos uno de los problemas que podemos tener es que cada cierto tiempo obtengamos algún pico, es decir, un valor distorsionado y separado de los demás y, por tanto, erróneo. El ruido es una realidad molesta a la hora de utilizar un potenciómetro. Una forma de reducirlo es tomando varias medidas y considerando su media como el valor más fiable.

Experimento 4. Hallar una media

En el siguiente ejemplo tomamos 10 valores para hallar una media:

 

int valor = 0; // Variable donde almacenaremos el valor del potenciómetro
int total = 0;
int media = 0;
int i=0;
void setup() {
  Serial.begin(9600);  // Inicializamos la comunicación serial
}

void loop() {
  total = 0;
  for(i=0; i <= 9; i++){
    valor = analogRead(A0); // Leemos del pin A0 valor
    Serial.print("  valor: ");
    Serial.println(valor);
    delay(1);
    total = total + valor;
  }
  media = total / i;
  // Imprimimos el valor medio por el monitor serie (0 - 1023)
  Serial.print("Valor medio : ");
  Serial.println(media);
  delay(1000);
}

Esto lo podemos aplicar para dar más o menos intensidad a un led, para variar la velocidad de un motor, la frecuencia de un sonido… por ejemplo.

Cambiar la intensidad de un LED con un potenciómetro.

 

Material necesario:

Esquema que vamos a utilizar para el encendido de un led y cambiar su intensidad con un potenciómetro.

Esquema para cambiar la intensidad de un LED con un potenciómetro

Código:

int valor = 0;      // Variable donde almacenaremos el valor del potenciómetro
float voltaje = 0;  // Variable para almacenar el voltaje
int valorPot=0;

void setup() {
  pinMode(3,OUTPUT);
  Serial.begin(9600); // Inicializamos la comunicación serial
}

void loop() {
  valor = analogRead(A0);           // Leemos del pin A0 valor
  voltaje = (valor*5.00/1023.00);   // Calculamos el voltaje
  valorPot = map(valor,0,1023,0,255);
  analogWrite(3,valorPot);           // Encendemos el Led (0-255)
  Serial.print("valor analogico: ");
  Serial.print(valor);

  Serial.print(" Voltaje: ");
  Serial.print(voltaje);
  Serial.print("V");

  Serial.print(" valor: ");
  Serial.println(valorPot);
  delay(1000);
}

Artículos que te pueden interesar

Detector de incendios con Arduino
Detector de incendios con Arduino y el sensor KY-026

Detector de incendios con Arduino y el sensor KY-026

| Actualizado:
Comentarios: 0

El módulo KY-026 es un sensor de llama que permite detectar un fuego gracias a un sensor óptico sensible a la radiación emitida por la llama. El sensor puede detectar fuentes de luz en el rango de una longitud de…

Salidas digitales y ejemplos en Arduino
Salidas digitales y ejemplos en Arduino. Efecto coche fantástico.

Salidas digitales y ejemplos en Arduino. Efecto coche fantástico.

| Actualizado:
Comentarios: 0

Siguiendo con los tutoriales de Arduino vamos a programar el efecto de las luces del coche fantástico. Para ello primero veremos cómo encender y apagar un LED, a continuación haremos el efecto con 3 LEDS conectados en paralelo, con 7…

Display de 4 dígitos y 7 segmentos
Funcionamiento del display de 4 dígitos y 7 segmentos con Arduino

Funcionamiento del display de 4 dígitos y 7 segmentos con Arduino

| Actualizado:
Comentarios: 0

Para mostrar más información, como la hora o la temperatura, necesitamos un display de más dígitos o conectar varios display de un solo dígito. En este tutorial veremos cómo conectar un display de 4 dígitos a Arduino. Contenido 1 Esquema…

Servomotores con Arduino, servo SG90
Uso de servomotores con Arduino. Servo SG90

Uso de servomotores con Arduino. Servo SG90

| Actualizado:
Comentarios: 0

En este tutorial se explicará el funcionamiento y características de un servomotor, Servo SG90, así como la conexión con la placa Arduino y su utilización Contenido 1 Librería servo de Arduino 2 Esquema para su montaje 3 Código para girar…

Comentarios - 0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *