Entradas digitales I

Luego de aprender sobre las salidas digitales, debemos aprender sobre las entradas digitales. El concepto de una señal digital es el mismo, y los pines disponibles también. Pero antes de ver las entradas digitales veremos un poco de electrónica relacionada. Recuerde que este tutorial es parte de un Curso más grande y que en el mismo usaremos conocimientos que ya fueron explicados. Si no comprende algo, le sugerimos ver las entregas anteriores o dejarnos un comentario al pie de esta página.

Señales digitales y estados

Sucede que se habla todo el tiempo de cosas digitales, sonido digital, señales digitales, video digital. Pero, ¿qué significa realmente? en general hablaremos de señales digitales, y por ahora diremos que una señal digital expresa solamente 2 estados: alto y bajo. El estado alto es aquel en el que la señal alcanza (o se acerca lo suficiente) la señal de tensión (voltaje) alto de su circuito. Por ejemplo, si su circuito trabaja con 5v (como un Arduino UNO), una señal digital alta será idealmente de 5v. El opuesto a una señal alta es una señal baja, y su estado se marca cuando la señal es idealmente masa (GND).

Como vimos en el instructivo anterior, prendíamos un led con una señal alta, y lo apagábamos con una señal baja. Lo cierto es que las señales digitales no se diseñaron para alimentar componentes electrónicos, aunque nuestros Arduinos pueden hacerlo con cierta limitación como ya vimos. Pero para ver todo esto de manera más visible lo graficaremos:

Señales digitales

En el gráfico de 2 ejes, en el eje vertical tenemos tensión (en voltios) y en el eje horizontal tenemos tiempo (en segundos), y lo que graficamos son las señales digitales que usamos para prender el led en el instructivo anterior. En él vemos que la señal se mantiene alta (5v) por 1 segundo, y luego baja y se mantiene baja (0v o GND) por otro segundo, y así sucesivamente.

Leyendo señales digitales

Para ir directo a un ejemplo concreto, haremos como nos gusta un mini-proyecto. Para él necesitaremos:

  • Arduino UNO (o similar) y su cable USB
  • Un protoboard pequeño
  • Un pulsador
  • 2 cables de conexión macho-macho.

Entradas digitales - materiales

Vamos a cargar el siguiente Sketch que leerá el estado digital del pin 8 de nuestro Arduino y nos mostrará por el Monitor Serial cada vez que el mismo cambie:

/*
 * Curso de Arduino - Entradas digitales - sin pullup
 * ArduinoHobby.com
 */
 
#define PIN_DIGITAL 8

void setup() {
  Serial.begin(9600);
  pinMode(PIN_DIGITAL, INPUT);
}

int ultimo = 0;

void loop() {
  int nuevo = digitalRead(PIN_DIGITAL);
  
  if (nuevo != ultimo) {
    Serial.print("Leido: ");
    Serial.println((nuevo?"HIGH":"LOW"));
    
    ultimo = nuevo;
  }
}

Luego de cargar el Sketch y ejecutarlo deberemos abrir el Monitor Serie. El Monitor Serie es una herramienta muy útil que usaremos frecuentemente. Siempre debe abrirlo una vez cargado el Sketch en su Arduino. Para hacerlo, debe ir al menu de su Arduino IDE en Herramientas > Monitor Serie. Deberá abrirse una ventana nueva similar a la de la imagen:

Arduino IDE - Monitor Serie

El Monitor Serie

Como dijimos, el Monitor Serie es una herramienta que usaremos seguido. Sirve para establecer una comunicación entre su Arduino y nuestra computador mediante el puerto USB. En él verá todo lo que envíe desde su Sketch al mismo, y también podrá enviar información de regreso a su Arduino (lo que aprenderemos más adelante).

Veamos algunas opciones que nos presenta:

Enviar texto

Esto lo haremos en la zona superior. Usted escribe el texto en el campo de texto superior y luego para enviar el texto hace click en el botón “Enviar“. El texto que escriba NO se enviará hasta que presione el botón mencionado por lo que puede corregir si es necesario.

Arduino IDE - Monitor Serie - Enviar texto

Recibir texto

Como dijimos, el texto que su Arduino envíe a nuestra computadora lo recibiremos en el área de texto grande exactamente como lo manda Arduino. Debajo de dicha área tenemos algunas opciones que explicaremos.

Autoscroll – Sirve para pedirle al Monitor Serie que cuando la pantalla se llene (en número de líneas) enviará a la primera línea para arriba (fuera del área visible) moviendo todo el texto una línea para arriba y haciendo lugar para la nueva línea abajo de todo. Recomendamos usarlo activo. Lo contrario a ello será que cuando la pantalla se llene, las siguientes líneas no se verán a menos que manualmente vaya con el mouse y haga scroll para abajo.

Velocidad – El Monitor Serie se comunica mediante el puerto USB usado como puerto Serie. Por ello, utiliza varias configuraciones que refieren a puertos Serie y una de ellas es la velocidad. Si bien Arduino y el Monitor Serie pueden comunicarse a distintas velocidades, lo más importante es que la velocidad a la que esté configurado el Monitor Serie coincida con la configurada en su Arduino. En nuestro caso 9600 baudio coincide con la línea en nuestro Sketch donde configuramos la velocidad para nuestro Arduino también.

Arduino IDE - Monitor Serie - Velocidad de comunicación

Clear output – Del Inglés “Limpiar salida” es un botón que le permite eliminar todo lo recibido de la pantalla en cualquier momento.

¿Qué hace el Sketch?

El código de nuestro Sketch y las instrucciones nuevas las veremos en detalle luego, pero a rasgos generales podemos decir que nuestro Sketch lee el estado digital del pin 8 y lo envía a nuestro Monitor Serie.

Pero, ¿Por qué vemos constantemente que nuestro Arduino envía un estado HIGH y uno LOW y así sucesivamente? Esto se debe a que los puertos digitales en los Arduino no tienen un estado definido interno por defecto. Si no le indicamos un estado desde el exterior, el estado fluctuará entre HIGH y LOW sin definición aparente. Esto es así porque cuando usamos un pin como entrada digital solo queremos leer el estado real que la electrónica conectada al mismo nos envía, sin influir de manera alguna.

Conectando el pulsador

Ahora bien, nuestro objetivo es conectar un pulsador al pin 8 y mediante la lectura de su estado digital detectar cuando se presiona el pulsador. Pero con toda esa inestabilidad parece complicado…

Sin embargo, Arduino posee una opción que nos ayudará con este problema y se llama “Internal Pullup” y significa que puede conectar “internamente” una resistencia a 5v fijando el estado del pin en HIGH. Esto es especialmente útil para entradas digitales y para asegurar que el estado de un pin específico se mantiene estable a menos que un factor externo (nuestro pulsador) lo cambie.

Antes de proceder con la conexión del pulsador, veamos un pequeño cambio en nuestro Sketch que estabilizará el estado del pin 8 como lo explicamos. Cargue el siguiente Sketch y pruebe abrir el Monitor Serie nuevamente:

/*
 * Curso de Arduino - Entradas digitales - sin pullup
 * ArduinoHobby.com
 */
 
#define PIN_DIGITAL 8

void setup() {
  Serial.begin(9600);
  pinMode(PIN_DIGITAL, INPUT_PULLUP);
}

int ultimo = 0;

void loop() {
  int nuevo = digitalRead(PIN_DIGITAL);
  
  if (nuevo != ultimo) {
    Serial.print("Leido: ");
    Serial.println((nuevo?"HIGH":"LOW"));
    
    ultimo = nuevo;
  }
}

Su Monitor Serie ahora deberá mostrar algo similar a lo siguiente:

Monitor Serie - luego de cambiar pinMode a INPUT_PULLUP

En donde la salida se quedará estable en HIGH y no cambiará por ahora. Ahora sí procederemos a conectar nuestro pulsador. Como hacemos para toda conexión electrónica que hacemos, desconectamos nuestro Arduino de la computadora primero, hacemos todas las conexiones, y luego conectamos el Arduino nuevamente. Y como el estado por defecto ahora es HIGH, el pulsador debería cambiarlo a LOW. Y como vimos antes, un estado LOW corresponde con 0V o GND, por lo tanto conectaremos nuestro pulsador en un extremo a GND y el otro extremo a nuestro pin 8.

Entradas digitales - pulsador conectado a pin 8

Luego de conectar el pulsador podemos volver a conectar nuestro Arduino a la computadora. El Sketch que probaremos es el mismo, así que si ya lo tiene cargado no necesita hacer ese proceso nuevamente. Si el Monitor Serie lo tiene abierto, ciérrelo y ábralo nuevamente y deberá ver lo mismo que antes, que el estado del pin es HIGH y no cambia

Habiendo hecho lo anterior pruebe presionar el pulsador mientras el Monitor Serie se encuentra abierto. Si todo salió bien deberá ver algo similar a lo siguiente, donde claramente se muestra el cambio de estado y si usted mantiene presionado el pulsador el estado debería mantenerse en LOW (hasta que lo suelte).

Entradas digitales - Pulsador - Salida en MOnitor Serie pulsando

Repeticiones en la salida

Es posible que mientras prueba el Sketch anterior con el pulsador, en lugar de ver un cambio de estado cada vez que presiona el pulsador, vea dos o más cambios de estado con solo presionar una vez.

Entradas digitales - Monitor Serie - Rebotes

A esto se le llama rebote (bouncing en Inglés), y es normal. Veremos este tema en la siguiente entrega así como la manera de evitarlo si es necesario.

¿Qué sigue?

Pasemos a ver el código de nuestro Sketch en mas detalle y aprener así nuevos conceptos de programación: http://www.arduinohobby.com/entradas-digitales-parte-2/.

Deja un comentario