Nuestro Arduino no sólo puede enviar señales sino que también puede recibirlas. Los propósitos principalmente son dos, el primero leer datos de sensores y el segundo recibir mensajes de otros dispositivos (Shield, otro Arduino, PC, etc.). Las entradas las clasificaremos en analógicas y digitales. Disponemos de dos tipos de entrada, las digitales y las analógicas.
Entradas analógicas (marcadas en rojo)
Entradas digitales (marcadas en amarillo)
Las entradas digitales son las mismas que las salidas digitales, es decir, los pines que van del 1 al 13. Se diferencian de las analógicas porque éstas son capaces de “entender” sólo dos niveles de señal, LOW o valores cercanos a 0 V y HIGH o valores cercanos a 5 V. Y no sólo porque a veces únicamente necesitemos saber dos estados (interruptor, pulsador, sensor de presencia, final de carrera....) sino porque así es capaz de leer señales de pulsos digitales. Por poner un ejemplo un sensor analógico de temperatura que incrementaría el nivel de la tensión que llega a la placa de forma proporcional a la temperatura. Sin embargo, uno digital lo que haría es cambiar la sucesión de pulsos y por tanto el mensaje que contiene el valor de la temperatura.
Aunque los pines digitales por defecto vienen configurados como entradas, si queremos hacerlo manualmente escribimos en nuestro código:
pinMode (pinentrada,INPUT) ;
Para almacenar los dos valores posibles LOW o HIGH en una variable llamada “lectura” escribimos
lectura = digitalRead (pinentrada);
Las entradas analógicas del modelo Uno son las correspondientes a los pines de A0 a A5. Se caracterizan por leer valores de tensión de 0 a 5 Voltios con una resolución de 1024 (10 bits). Si dividimos 5 entre 1024 tenemos que ser capaz de detectar variaciones en el nivel de la señal de entrada de casi 5 mV.
Para hacer la lectura de uno de estos pines escribiremos en nuestro código
lectura = analogRead (pinentrada);
“lectura” lo sustituimos por el nombre de la variable donde queramos almacenar el valor leído y en “pinentrada” tendremos que poner el número del pin analógico que hemos elegido (0,1,...5) o el nombre de la variable que almacena dicho número. Esta función nos devolverá un valor que va de 0 a 1023 en proporción al nivel de la señal de entrada. Para una entrada nula obtendremos el valor 0, para una entrada de 2.5 V obtendremos 511 (la mitad de 1023) y para 5 V el valor será de 1023.
Este vídeo aclara este tema de entradas analógicas y digitales.
Vamos a llevar a la práctica en TinkerCad un ejemplo práctico de la lectura de la entrada analógica de Arduino utilizando un potenciómetro.
VÍDEO DE LA PRÁCTICA
Práctica resuelta.
A continuación montamos en TinkerCad el circuito siguiente, podemos ver el código de más abajo.
El programa sería:
Dentro de nuestro programa han aparecido algunas sentencias que hasta ahora no había aparecido como son: Serial.begin (9600) y Serial.println (valorPot). Estas sentencias forman parte del protocolo de comunicación serial del ordenador con el Arduino y existen otras. Están descritas más abajo.
Serial.begin(rate). Abre un Puerto serie y especifica la velocidad de transmisión. La velocidad típica para comunicación con el ordenador es de 9600 aunque se pueden soportar otras velocidades.
Serial.println(data). Imprime datos al puerto serie seguido por un retorno de línea automático. Este comando tiene la misma forma que Serial.print() pero este último sin el salto de línea al final. Este comando puede emplearse para realizar la depuración de programas. Para ello puede mandarse mensajes de depuración y valores de variables por el puerto serie. Posteriormente, desde el entorno de programación de Arduino, activando el "Serial Monitor" se puede observar el contenido del puerto serie, y, por lo tanto, los mensajes de depuración. Para observar correctamente el contenido del puerto serie se debe tener en cuenta que el "Serial Monitor" y el puerto serie han de estar configurados a la misma velocidad (Para configurar la velocidad del puerto serie se hará con el comando Serial.begin(rate)).
Serial.read().Lee o captura un byte (un caracter) desde el puerto serie. Devuelve -1 si no hay ningún carácter en el puerto serie.
Serial.available(). Devuelve el número de caracteres disponibles para leer desde el puerto serie.
Aquí vemos este tema explicado sobre el IDE de Arduino. Ver a partir del minuto 2:40.
Para más información puedes acceder a estos vídeos:
Vamos a llevar a la práctica en TinkerCad un ejemplo práctico de la lectura de la entrada digital de Arduino utilizando un pulsador.
Resolución de la práctica
A continuación montamos en TinkerCad el circuito siguiente y el código de más abajo.
Vamos a llevar a la práctica en TinkerCad un ejemplo práctico de control de un LED RGB a través de un potenciómetro por cada uno de sus canales. En la práctica 6.2 utilizábamos las salidas PWM para controlar el nivel de color del diodo LED RGB, en esta ocasión vamos a controlar el color mediante las entradas analógicas en función de la variación de resistencia de tres potenciómetros, uno por cada canal.
Resolución de la práctica.
A continuación montamos en TinkerCad el circuito siguiente y el código se muestra más abajo.