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

Sonido con Arduino. Zumbador

Sonido con Arduino. Zumbador

| Actualizado:
Comentarios: 0

En este post vamos a aprender a generar sonidos con Arduino. Utilizaremos una señal eléctrica para hacer vibrar la membrana del zumbador. Contenido 1 Sonido con Arduino 2 Generar sonido con un zumbador 3 Sonido controlado por un potenciómetro 4…

Medir la temperatura con Arduino
Medir la temperatura con el sensor LM35 y Arduino

Medir la temperatura con el sensor LM35 y Arduino

| Actualizado:
Comentarios: 5

Veremos cómo medir la temperatura con el sensor analógico LM35 y mostrar el valor de la temperatura en el monitor serial de Arduino o en un display de 4 dígitos y 7 segmentos. El LM35 es uno de los sensores…

¿Cómo medir la temperatura y la humedad con el módulo DHT11 y Arduino?
Medir la temperatura y humedad con Arduino

Módulo DHT11, medir la temperatura y la humedad con Arduino.

| Actualizado:
Comentarios: 1

En este artículo veremos el funcionamiento del módulo DHT11 para medir la temperatura y la humedad, realizaremos la conexión con la placa Arduino y mostraremos las medidas obtenidas a través de una pantalla LCD. Contenido 1 Conectando el sensor DHT11…

Iluminación de un led según la cantidad de luz
Sistema de regulación de la iluminación de un led a partir de la cantidad de luz

Sistema de regulación de la iluminación de un led a partir de la cantidad de luz

| Actualizado:
Comentarios: 0

El objetivo es encender un LED y variar su intensidad dependiendo de la luz ambiental, para esto vamos a utilizar un sensor de luz LDR. Antes de cambiar la intensidad del LED según la cantidad de luz, haremos que se…

Comentarios - 0

Deja un comentario

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