Los pines analógicos: Su normalidad y su anormalidad
Uy uy uy! ¿Qué tal el carnaval? ¿Ha sido durito? Bueno entonces hoy me comportaré y nada de cosas complicadas. Hoy vamos a los fundamentos de Arduino, a sus raíces, a la esencia de los pines.
Sí, los pines también tienen derecho a tener un post. Aunque no es el primero… Ya he comentado alguna vez sobre los pines que hacen cosas con el PWM y pasan de ser digitales a ser analógicos. Eso sí que son unos pines y no como los analógicos que nadie los utiliza… Están ahí decorando la placa…
Un momento… ¿Están ahí de decoración?
Los pines analógicos: Su uso normal
Si utilizas normalmente los pines analógicos (A0-A5) sabrás que son 6 pines que permiten leer valores analógicos. Los valores analógicos (por si no lo he dicho 1000 veces, lo digo una más) son aquellos que nos da la vida real. Son aquellos con decimales. Un ejemplo es la temperatura. La temperatura es un número continuo que no tiene estados ni pausas, puedes tener 30.1ºC o -4.6ºC.
Los digitales son los contrarios, los que solamente tienen dos estados como un sí o un no. El ejemplo típico es una lámpara que está encendida o apagada. Pero esta lámpara podría tener valores analógicos cuando se puede regular la intensidad de la luz.
Pues con estos pines analógicos puedes medir estos valores tan de la naturaleza. Pero claro, tu no metes un sensor de temperatura y Arduino te dice: Tienes 10.78ºC en tu habitación. No, Arduino te da un número de 0 a 1023… ¿Por qué esta locura?
Porque realmente lo que contienen esos pines es lo que se llama un ADC. ¿Un qué? Un Analog-Digital Converter. Eso son unos chips que convierten los valores analógicos en valores digitales que son con los que trabajan las placas electrónicas.
Una de las cosas más importantes de los ADC es lo que llaman la resolución. En el caso de Arduino son 10 bits. Esto significa que hay 10 bits con los que toda la información se tiene que representar. 10 bits son 2 elevado a 10 que son 1024 (Por eso lo de 0 a 1023). Con estas 1024 posiciones hay que representar desde la temperatura -4.5ºC a la 50ºC.
Para ello lo que se utiliza en estos casos no es la temperatura en sí, sino la tensión (o voltaje) que llega al pin. Es decir, que dividimos los 5 Voltios (el máximo que puede entrar en Arduino sin quemarse) en 1024 partes de 0.0048 Voltios. Este es el mínimo cambio que se puede medir. Si la temperatura del sensor cambiase tan poco que el cambio fuese de 0.003 Voltios, Arduino no se enteraría del cambio.
Si nuestro sensor de temperatura mide de 0 a 50ºC, dividiendo estos 50ºC entre los 1024, solamente notaremos cambios de 0.048ºC (Qué justo, he cogido números muy similares…). Por ejemplo cuando Arduino recibiera un valor de tensión que le diese 1000, habría que multiplicar estos 1000 por 50ºC y dividirlos por 1024 para saber la temperatura que recibimos:
Así que ese es el uso más común de los pines analógicos, el de medir magnitudes continuas como cantidad de luz, ruido, nivel de agua, caudal de una tubería, etc…
Antes de pasar a las cosas raras que pueden hacer estos pines, decirte que estos pines no se declaran como entrada o salida como los digitales ya que estos siempre son de entrada (Al menos cuando actúan como pines analógicos…).
Utilizar los pines analógicos como pines digitales… ¡Qué raro!
Qué pasa, que los muy desgracia*** no solo funcionan como puertos analógicos que se portan bien y hacen su función, sino que también pueden trabajar como pines digitales. Los muy cabr**** les quitan trabajo a los pines digitales. Y eso te alegra sobremanera cuando vas justo de pines digitales… ¡Ya que te regala seis más!
Para ello tan solo hay que actuar como si de un pin digital se tratara, pero en lugar de poner el número del pin digital (1,2,3,…,13) ponemos el nombre del pin analógico (A0, A1,…, A5). Sería algo como esto:
pinMode(A0, OUTPUT); digitalWrite(A0, HIGH);
Si quisiéramos leer con el analogRead, escribiríamos algo como esto:
analogRead(A0);
Esta es la manera utilizada en el apartado anterior. Pero hay que ser muy cuidadoso ya que si antes hemos llamado a los pines analógicos para que sean OUTPUT digital… Se va a liar un poco el programa y no se va a poder leer de forma analógica ya que le has dicho que sea una salida y así se va a quedar. A no ser que le digas lo contrario volviendo a hacerlo INPUT. Me refiero a algo así:
void setup() { pinMode(A0, OUTPUT); digitalWrite(A0, HIGH); } void loop() { pinMode(A0, INPUT); analogRead(A0); }
Información básica sobre Proteción de datos
Responsable ➥ Sergio Luján Cuenca
Finalidad ➥ Gestionar el envío de correos electrónicos con artículos, noticias y publicidad. Todo relacionado con los temas de rufianenlared.com
Legitimación ➥ Consentimiento del interesado
Destinatarios ➥ Estos datos se comunicarán a MailRelay para gestionar el envío de los correos electrónicos
Derechos ➥ Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la política de privacidad
Plazo de conservación de los datos ➥ Hasta que se solicite la supresión por parte del interesado
Información adicional ➥ Puedes encontrarla en la política de privacidad y el aviso legal
Una rareza más, el INPUT_PULLUP
Como última cosa rara antes de irme, es que también puedes configurar estos pines analógicos como pines digitales que tienen una INPUT_PULLUP resistor. La programación queda así:
digitalWrite(A0, INPUT_PULLUP);
No me voy a liar mucho, pero lo que hace esta propiedad (Se le puede llamar así?) es cambiar los valores. Cuando tu Arduino reciba 5 Voltios dirá que está recibiendo un LOW y cuando reciba 0 Voltios estará recibiendo un HIGH. Esto se utiliza para chips o controladores que mandan la función en lógica inversa (Es decir, que cambian el LOW y el HIGH).
No seré yo quien diga que esto es una tontería pero bueno… Que si sabes que es de lógica inversa cambias en tu programa los LOW por los HIGH y listo. No hay que marearse tanto… Además de que hay que ir con mucho cuidado de conectar siempre la señal a 5 Voltios o a algo ya que si la dejas al aire… estaría continuamente en HIGH… Y eso sí puede ser una jodedera…
Mil razones para utilizar los pines analógicos, tú decides cómo…
Lo siento, pero me encanta esta paaarte. La parte en la que tú comentas qué te ha parecido el post en los comentarios mientras escuchas la canción de la semana. ¿Qué más se puede pedir?
Bueno, te pido que seas benévolo con los pines analógicos y no los utilices para hacer el mal. De eso del mal ya me encargo yo, tranqui 😛
Déjame un comentario que en el fondo soy buen chaval
Hola, muy buena tu nota. Una pregunta a ver si puedes ayudarme.
Cómo hago para saber si el dispositivo conectado a un pin analógico está funcionando o mandando valores?
Tengo un Arduino pegado a una Pi a través del puerto serial y lo máximo que puedo saber es si hay problemas de puerto o si llegan valores. Pero no puedo saber si el dispositivo conectado sigue ahí.
Hice pruebas con un potenciometro y he visto que al sacar los cables de los pines siguen llegando valores. Si esto sucediera en la realidad y estuviera midiendo temperaturas por ejemplo, como sabría si las temperaturas son mediciones reales o son valores que llegan si estar midiendo nada.
Gracias por tu ayuda.