Puertos analógicos
Los microcontroladores y procesadores trabajan con 1 y 0. Esta afirmación implica que no pueden interpretar correctamente el mundo físico donde no podemos ir de un punto a otro sin pasar por los puntos intermedios, es decir, para pasar de 0V a 5V es necesario pasar por 1V-2V-3V-4V aunque sea muy rápido se ha pasado por esos Voltios intermedios.
Para solucionar este tema existen unos conversores denominados “Analógico/Digital” o por sus siglas en inglés “ADC” y son los que convierten señales analógicas en datos digitales que pueden interpretar los microcontroladores. Cabe destacar que no todos los dispositivos disponen de los ADC, por ejemplo la Raspberry Pi no es capaz de interpretar estas señales y requiere conectar dispositivos externos que hagan ese trabajo como por ejemplo el HAT RaspiPRENDE.
Ese tipo de conversores tienen una tensión mínima (lo normal es que sean los 0V) y una tensión máxima (habitualmente la máxima de alimentación, 5V en Arduino) dividen esa diferencia de tensiones en unos bits concretos (en Arduino son 10bit, o lo que es lo mismo 1024 divisiones).
Por ejemplo en el Arduino que divide en 1024 trozos idénticos la tensión entre 0V y 5V significa que será capaz de diferenciar cambios de 5mV. O si nos fijamos en el número digital: la mitad que se corresponde con el número 512 serán 2,5V.
Lectura de un dato analógico: potenciómetro
Con un botón estamos pasando de 0V a 5V, sin pasar por los valores intermedios. Pero con un potenciómetro sí es posible pasar por todos los valores intermedios y lograr 2,5V.
Un potenciómetro consiste en una resistencia con 3 terminales: 2 a los extremos y el tercero es el que está conectado al elemento móvil siendo este elemento el que define qué tipo de potenciómetro tenemos: rotativo, lineal, multivuelta… Otro valor importante a la hora de comprar un potenciómetro es el valor que hay entre los extremos fijos y su valor dependerá de la aplicación donde lo queramos utilizar.
Esquemáticamente el potenciómetro requiere un montaje similar al siguiente:
Y si se realiza el montaje tendría una pinta tal que así:
En el pin marcado como “S” se ha de realizar la lectura analógica, que veremos en el siguiente punto.
Manejo de la lectura analógica
Los pines analógicos, habitualmente, vienen marcados con la palabra inglesa “ANALOG” o la letra “A” para simplificar, por ejemplo en los Arduinos vienen como A0, A1…
En el siguiente ejemplo, para Arduino, se usará el que viene marcado como “A0” y es donde se conectaría el pin libre del montaje mostrado anteriormente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
const byte POTpin = A0; // PIN donde está conectado el potenciómetro const byte LEDpin = 13; // Y el PIN del LED int potVALUE = 0; // Variable para guardar el valor del POT. void setup() { pinMode(LEDpin, OUTPUT); // El LED es una SALIDA digital pinMode(POTpin, INPUT); // El potenciómetro es una ENTRADA } void loop() { potVALUE = analogRead(POTpin); // Leer el valor del PIN del potenciómetro digitalWrite(LEDpin, HIGH); // Encender el LED delay(potVALUE); // Para el programa durante <sensorValue> milisegundos digitalWrite(LEDpin, LOW); // Apagado del LED delay(potVALUE); // Para el programa los mismos milisegundos que antes } |
El programa anterior varía el tiempo del parpadeo del LED (conectado al puerto digital 8) en función del valor seleccionado en el potenciómetro. Este programa está basado en los ejemplos de Arduino, concretamente se puede encontrar en Archivo > Ejemplos > 03.Analog > AnalogInput.