Material requerido.
Kit inicio UNO | |
Kit Inicio Mega |
Los potenciómetros
Hasta ahora hemos usado siempre resistencias fijas, de un valor dado. Pero a veces es conveniente disponer de una señal variable para controlar el circuito que nos interesa. Imaginad el volumen de un equipo de música, o el dial que sintoniza una emisora en una radio FM.
Un potenciómetro es, simplemente, un mecanismo para proporcionar una resistencia variable.
Hay potenciómetros de tantos tamaños, formas y colore,s como podáis imaginar, pero al final son una resistencia fija de un valor dado (10 kΩ en nuestro caso actual) y un mecanismo que permita deslizar un dial conductor sobre esa resistencia, que nos permita tomar una parte de ese valor.
Por eso un potenciómetro siempre tiene 3 pines en fila. Los del extremo se comportan como una resistencia del valor de fondo de escala del potenciómetro, y un pin central que va tomando valores de resistencia en función del movimiento que hagamos con el ajuste.
Vamos a montar un circuito como este (en el que el potenciómetro esta rotulado Pot1):
La idea es conectar 5V y GND a los extremos del Potenciómetro (no importa cual es uno y otro) y luego conectar el pin central al positivo de un LED y el negativo a GND directo, pasando por una resistencia de limitación.
De este modo cuando giremos el potenciómetro estaremos modificando la tensión que aplicamos a la entrada del LED, que variara entre 0 y 5V (Aunque ahora parezca extraño es muy sencillo) y habremos conseguido un regulador de intensidad del LED.
Muy poco para conseguir iluminar el LED que requiere unos 20 mA. Así que durante la mayor parte del giro del potenciómetro el LED estará apagado.
Circuito para protoboard
El montaje en la protoboard sería similar a esto ya que vamos a utilizar el Arduino simplemente para dar tensión al circuito y nada más, Veréis que la intensidad de la luz varia de forma continua al girar el potenciómetro.
Arduino y las entradas analógicas
Con Arduino hemos visto que podemos influir en el mundo exterior aplicando salidas todo / nada en los pines digitales y también que usando PWM podemos simular bastante satisfactoriamente señales analógicas en algunos de esos pines.
También hemos visto cómo detectar pulsaciones de botones, definiendo como entradas los pines digitales. Pero en muchas ocasiones los sensores que usamos para supervisar el mundo exterior, nos entregan una señal analógica. Es el caso de los sensores de temperatura o distancia, de presión o PH, de intensidad de corriente en un circuito o de caudal de agua en una tubería.
Para leer este tipo de señales continuas necesitamos un convertidor analógico a digital (o ADC por sus siglas en ingles) y que nos permite leer el valor de una señal analógica en un momento dado.
Estos convertidores toman una muestra del valor actual de la señal y nos entregan su valor instantáneo, medido en Voltios.
Mediante la lectura repetida de muestras a lo largo del tiempo podemos reconstruir la señal original con mayor o menor precisión, dependiendo de la exactitud de nuestra medida y de la velocidad a la que pueda tomar esas muestras.
Arduino UNO dispone de seis convertidores analógico a digital, nominados de A0 hasta A5, rotuladas como ANALOG IN:
Veamos cómo usar las entradas analógicas con un circuito como este, en el que damos tensión a los extremos de un potenciómetro y conectamos el pin central (el variable) a la entrada de la puerta A5 de Arduino:
La primera curiosidad es que no necesitamos declarar en el setup() que vamos a usar una puerta analógica. Y la segunda es que para tomar una muestra (leer) del pin A5, usaremos la instrucción:
int Val = analogRead(A5) ;
Vamos a escribir un programa que lea el valor del pin A5 y lo envíe a la consola para que podamos visualizarlo.
Usando las puertas analógicas
Prueba este programa:
void setup() { Serial.begin(9600); // Iniciamos la puerta serie } void loop() { int Lectura = analogRead(A5) ; Serial.println( Lectura); delay(200) ; }
Cuando lo vuelques, arranca la consola y veras que a medida que giras el ajuste las lecturas varían de forma continua reflejando la posición del potenciómetro, las lecturas reflejan la caida en voltios en el.
No puedo resistirme a proponeros esta prueba: Desconecta el potenciómetro de la puerta A5 y observa los resultados que arduino envía a la consola. ¿Porque salen esos valores?
Un último comentario
Decíamos en una sección anterior, que la fidelidad con que podemos muestrear una señal analógica dependía, básicamente, de la resolución de la muestra y de la velocidad a la que podíamos muestrear la señal (Sample Rate en inglés).
Ya dijimos que la familia Arduino, dispone de convertidores de 10 bits por lo que nuestra resolución es de 210 = 1.024 y en el caso del DUE de 212 = 4.096. Pero hasta ahora no hemos visto a qué velocidad podemos tomar muestras con nuestro Arduino. Vamos a comprobarlo, con este mismo circuito.
Tenemos una función llamada millis() que nos indica en milisegundos el tiempo transcurrido desde que iniciamos Arduino y la podemos usar para ver cuantas muestras podemos tomar por segundo.
void setup() { Serial.begin(9600); } void loop() { unsigned long T ; int n = 0 ; T = millis(); while (millis() <= T + 1000) // Mientras no pase un Segundo = 1000 mS { analogRead( A5) ; n++ ; // Contamos cada vez que leemos } Serial.println(n); }
SI corréis este programa en un Arduino UNO os dará, poco más o menos, un resultado de 8.940 muestras o lecturas por segundo. No está mal.
Es adecuado para muestrear señales que no varíen demasiado rápido con el tiempo, como son casi todos los sensores habituales en la industria, pero que se quedará corto si queréis muestrear señales de audio.
Resumen de la sesión