Entradas analógicas con Arduino

En esta sesión comenzamos a trabajar las entradas analógicas con potenciómetros. El funcionamiento básico de un potenciómetro es el de una resistencia variable, de tal forma que a medida que giramos su palanca variamos el valor de la resistencia interna.

El funcionamiento básico de un potenciómetro es el de una resistencia variable, de tal forma que a medidapotenciometro que giramos su palanca variamos el valor de la resistencia interna. Un potenciómetro tendrá 3 patas: una conectada a 5V, otra a GND, y la tercera, situada en el medio, será la que vaya conectada a nuestra entrada analógica.

En Arduino podemos encontrar 6 entradas analógicas (A0-A5). Internamente, Arduino tiene un conversor analógico-digital que mapea la tensión recibida a un número entero. Los valores van desde 0V igual a 0, hasta 5V igual a 1023. El resto de los valores se calculan de manera proporcional.

RETO Nº 1

Vamos a realizar un montaje del potenciómetro y comprobaremos a través del monitor de puerto serie como va variando los valores desde 0 a 1023.

El esquema de montaje sería como se puede ver a continuación:

 

potenciometro

 

Una vez realizado el montaje, procederemos a cargar desde el IDE el programa que podemos encontrar en Ejemplos-Basics-AnalogReadSerial.

La instrucción que utilizamos para leer un valor análogico en nuestro programa es la siguiente:

sensorValue = analogRead(A0);

de esta forma leeremos la entrada analógica AO y guardaremos su valor en la variable sensorValue, que posteriormente vamos a utilizar para visualizarla a través del puerto serie con una pausa entre valores de 1 milisegundo en el siguiente trozo de código:

 Serial.println(sensorValue);
delay(1); // delay in between reads for stability

Abriremos el monitor del puerto serie y comprobaremos cómo van variando los valores de 0 a 1023 en función de cómo vamos girando nuestro potenciómetro.

Podemos ver la información completa en la guía oficial en el siguiente enlace:

https://www.arduino.cc/en/Tutorial/AnalogReadSerial

RETO Nº 2

El objetivo de este reto es montar un led de tal forma que varíe la velocidad de parpadeo en función de cómo utilicemos nuestro potenciómetro. El esquema de montaje sería el siguiente:

 

potenciometro-con-led

 

A continuación cargamos el programa desde Ejemplos-Analag-AnalogInputLa instrucción que utilizamos para leer un valor análogico en nuestro programa es la siguiente:

sensorValue = analogRead(sensorPin);

de esta forma leeremos la entrada analógica AO y guardaremos su valor en la variable sensorValue, que posteriormente vamos a utilizar entre las dos instrucciones digitalWrite para establecer la pausa entre el encendido y el apagado del led. A mayor valor del potenciómetro, mayor será la distancia entre el encendido y el apagado, y por lo tanto, más lento el cambio de estados. Lo podemos ver en el siguiente trozo de código:

// turn the ledPin on
digitalWrite(ledPin, HIGH);
// stop the program for <sensorValue> milliseconds:
delay(sensorValue);
// turn the ledPin off:
digitalWrite(ledPin, LOW);
// stop the program for for <sensorValue> milliseconds:
delay(sensorValue);

 

La guía oficial la podemos encontrar en el siguiente enlace: https://www.arduino.cc/en/Tutorial/AnalogInput

RETO Nº 3

En este reto, manteniendo el mismo montaje, vamos a variar el código para que nuestro led brille según los valores del potenciómetro. Para ello cargaremos el programa de la librería ejemplos desde la ruta Ejemplos-Analag-AnalogInOutSerial. En este código merece la pena destacar dos instrucciones especialmente:

outputValue = map(sensorValue, 0, 1023, 0, 255);
// change the analog out value:
analogWrite(analogOutPin, outputValue);

Con la función map() lo que hacemos es partiendo del valor de nuestro potenciómetro, y sabiendo que se puede mover entre los valores 0 y 1023, hacer una regla de tres a los valores que puede recibir un led para que brille más o menos y que van desde el 0 al 255.

Con la función analogWrite() lo que hacemos es poner ese valor calculado en el led indicado, lo que finalmente se traduce en una tensión para dar más o menos brillo al led.

La guía oficial la podemos encontrar en

https://www.arduino.cc/en/Tutorial/AnalogInOutSerial

 

RETO Nº 4

Para finalizar, un reto algo exigente a estas alturas: montaje de 6 leds para que se vayan encendiendo led a led a media que aumentamos el valor que recibimos del potenciómetro.

Para ello tenéis que añadir 6 leds al montaje actual, y a partir de aquí tendremos que añadir el siguiente código a nuestro nuevo programa que cargaremos en Arduino :

int i = 0;
int pinPotenciometro =A0;
int valorPotenciometro = 0;
int pinLed2=8;
int pinLed3=9;
int pinLed4=10;
int pinLed5=11;
int pinLed6=12;
int pinLed7=13;
void setup()
{
pinMode(pinPotenciometro, INPUT);
pinMode(pinLed2, OUTPUT);
pinMode(pinLed3, OUTPUT);
pinMode(pinLed4, OUTPUT);
pinMode(pinLed5, OUTPUT);
pinMode(pinLed6, OUTPUT);
pinMode(pinLed7, OUTPUT);
Serial.begin(9600);
}
void loop()
{
valorPotenciometro = analogRead(pinPotenciometro);
Serial.println(valorPotenciometro, DEC);
delay(100);
//preguntamos y en función del valor del potenciómetro encendemos el pin correspondiente
if (valorPotenciometro >= 10 && valorPotenciometro < 200) digitalWrite(pinLed2, HIGH);
if (valorPotenciometro >= 200 && valorPotenciometro < 400) digitalWrite(pinLed3, HIGH);
if (valorPotenciometro >= 400 && valorPotenciometro < 600) digitalWrite(pinLed4, HIGH);
if (valorPotenciometro >= 600 && valorPotenciometro < 800) digitalWrite(pinLed5, HIGH);
if (valorPotenciometro >= 800 && valorPotenciometro < 900) digitalWrite(pinLed6, HIGH);
if (valorPotenciometro >= 900) digitalWrite(pinLed7, HIGH);
//si el valor es menor de diez, ordenamos apagar todos los leds
if (valorPotenciometro < 10 ) apagarLeds();
}
//la siguiente función tiene un bucle que ejecutará 6 veces la instrucción de apagar el led correspondiente
//se sabe el led que tiene que apagar por la variable «i» que tendrá valores desde el inicial 8 hasta el final 13
void apagarLeds()
{
for (i = 8; i < 14; i++)
digitalWrite(i, LOW);
}

leds-y-potenciometro

 

Y para finalizar, os dejamos con Antonio Rey quien os va a contar todo el proceso paso a paso.. por si os ha quedado alguna duda.

Deja una respuesta

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