Descripción
Vamos a conectar un potenciómetro de 10K a una de las entradas analógicas de arduino, la A5, y con ayuda del monitor del puerto serie, veremos como al variar la posición del potenciómetro, varían los valores presente en dicho pin de entrada.
Antes de empezar veamos lo siguiente:
Si tenemos un circuito básico con una batería, un interruptor y una lámpara, tendremos un circuito digital, pues la lámpara solo podrá tener dos estado apagada (LOW o 0V) y encendida (HIGH o 5V). Pero si queremos tener una señal analógica, entonces necesitamos además poder iluminar nuestra lámpara con tensiones intermedias, lo cual se verá como mayor o menor intensidad en el brillo de la lámpara. Antes de empezar veamos lo siguiente:
Un circuito analógico para controlar el brillo de un LED a través de un potenciómetro, sería el siguiente:
En el circuito vemos que variando el valor del potenciómetro, variamos la resistencia del circuito, y con ella la intensidad de corriente que recorre el circuito, y todo ello se ve reflejado en el brillo del LED. Esto es una forma analógica de controlar el brillo del LED. Es importante conectar R1, aunque el potenciómetro es una resistencia que limita la corriente que circula por el LED, llega un momento cuando el eje central llega a uno de los extremos, que la resistencia se vuelve 0, y eso dañaría al LED. En este caso vamos a usar arduino, únicamente para dar tensión al circuito.
Circuito
Basándonos en el circuito anterior, vamos a conectar la patilla central del potenciómetro, a una de las entradas analógicas de arduino, la A5 por ejemplo, con el código adecuado y con ayuda del monitor serie vamos a ver como varía los valores analógicos en la entrada de aduino, al modificar la posición del eje del potenciómetro. Si conectásemos cualquier otro sensor, no debemos de asegurar que su señal no será superior a 5V, ya que esto dañaría el arduino.
Arduino detecta señales digitales, como pulsadores, definiendo sus pines como entradas, pero en el mundo exterior muchas cosas son analógicas como es el caso de la temperatura, que puede tener varios valores. Para convertir esas señales analógicas en digital, arduino tiene con convertidor analógico a digital. Este funciona leyendo repetídamente los valores de tensión instantaneos que se van presentando en la entrada analógica, a lo largo del tiempo y va reconstruyendo la señal original con mayor o menor precisión, dependiendo de lo exactas que sean las medidas y de la velocidad que va tomando esas medidas, a mayor velocidad, más cantidad de muestras que puede tomar.
es decir, cuanta más muestras de señal pueda leer, más resolución tendrá el convertidor, y cuanta más resolución, más exacta será la señal reproducida por arduino.
Código
Este código no va a permitir ver las variaciones del potenciómetro en el monitor del puerto serie, al variar el potenciómetro veremos como varían los valores. Los convertidores de arduino UNO y Mega, son de 10bits de resolución, lo cual nos devolverá valores entre 0 y 210 = 1024 para tensiones de entre 0 y 5V. El valor mínimo es 0 y el máximo 1023.
Con void setup, inicilizamos la conexión por el puerto serie a 9600 baudios.
En void loop, declaramos una variable tipo entero a la cual le asignamos la lectura que obtenga analogRead en el pin A5. Luego imprimimos en la pantalla del monitor del puerto serie la lectura y salta a la siguiente línea, espera 200 ms y vuelve a empezar.
Cuando arranca la consola, verás que a medida que giras el potenciómetro, las lecturas varían de forma continua, reflejando las posición del potenciómetro.
Si desconectas A5 y la dejas al aire, arduino irá leyendo la entrada y enviará datos aleatorios. En realidad, arduino está captado ruido aleatorio de radiofrecuencia e intenta darle sentido, pero lo tiene mal. Las variaciones son pequeñas, van subiendo de uno en uno y luego empieza a baja, pero si le conectas una antena, las variaciones son mucho más grande y suben o bajan rápido hasta los valores de extremos.
Para finalizar y a modo de curiosidad, tenemos un código que contiene la función millis() que nos indica el tiempo transcurrido desde que se conecta el arduino, y la cantidad de muestras que este toma por segundo en una determinada entrada analógica.
En el void setup inicializamos la conexión con el puerto serie a 9600 baudios. En el void loop declaramos una variable tipo long sin signo llamada T, declaramos otra variable tipo entero llamada n y le asignamos el valor 0. A continuación asignamos a T el valor de la función millis(). Luego con la instrucción while, decimos que mientras que millis no pase o sea igual o menor que un segundo, lea la entrada A5 y con n++ cuente cada vez que lea durante el segundo. Con Serial.println, imprime las veces que ha leido la señal de la entrada A5, en un segundo y haga salto de línea.
Hemos
usado un unsigned long para guardar millis porque es el tipo que
Arduino usa internamente para su reloj.
Sería un error manejar millis
con un int porque su valor máximo es 32.767 y midiendo milisegundos el
contador desbordaría en poco más de 32 segundos.
El resultado en un Arduino UNO os dará, poco más o menos, un resultado de 8.940 muestras o lecturas por segundo. No está mal, y 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. Para jugar con audio es mejor usar un Arduino DUE. Tiene una velocidad de reloj 4 veces más rápida(os hará falta), capacidad de muestreo a velocidad de audio (40Khz) y auténticos convertidores DAC (digital to analog converters).



