Inicio > Tutorial > Tutorial 02 – Entradas y salidas digitales en Arduino

Tutorial 02 – Entradas y salidas digitales en Arduino

Antes de empezar aclararemos algunos conceptos básicos acerca del tópico.  Para conocimiento de los lectores quien les escribe no es electrónico de formación, ya que mi especialidad es el desarrollo y la arquitectura de software, por esa razón me pongo en los zapatos de muchos lectores y les haré la lectura lo más sencilla posible.

Antes de iniciar con los ejercicios es recomendable que descarguen la guía Arduino Programming Notebook (español) la cual está bajo la licencia Creative Commons.  Aquí encontrarán ejemplos de las funciones más importantes de Arduino que les ayudarán a hacer más sencilla al comprensión.

Teoría Prelimiar de Capítulo:

Como les mencioné en el tutorial anterior, Arduino está formado basicamente por pines de entrada, un microcontrolador en el medio y pines de salida.  Los pines de entrada sirven para escuchar y capturar información del exterior, ejem: pulsadores, sensores, lectoras, etc.; el microcontrolador sirve para procesar el programa cargado y finalmente los pines de salida sirven para enviar información desde la tarjeta Arduino hacia el exterior.

Al hablar de Entradas o Salidas digitales se entiende que tanto la información que escuchan como las respuestas pueden tener solamente dos estados: +5voltios o O voltios. OJO: Esto es solamente cuando se habla de señales digitales.  En la lógica Arduino las señales digitales pueden manejar los siguientes valores o estados:

Estado digital 5 voltios 0 voltios
 Opción 1  HIGH  LOW
 Opción 2  1  O
 Opción 3  TRUE  FALSE

TODO programa en Arduino debe tener dos funciones básicas: setup() y loop().  La sintaxis (forma de escribir) es la siguiente:

void setup(){
}
void loop(){
}

La función setup() sirve para definir el comportamiento inicial de mi placa Arduino, es decir cuando la a una fuente de alimentación (pila, batería).  Algunos ejemplos de uso de la función setup() son: Que pines voy a utilizar, cuáles serán entradas y cuáles salidas, iniciar alguna variable, etc

La función loop() sirve para definir todas las tareas que Arduino ejecutará repetidamente mientras esté conectada.  Por ejemplo: Leer el valor de las entradas, escribir en los pines de salida, enviar alertas, emitir sonidos, enviar mensajes por el puerto serial, etc.

Ejemplo 01:  (descargar T01_SampleA)

Para este ejemplo montaremos el siguiente circuito y necesitaremos las sigueintes partes:

  1. Una tarjeta Arduino UNO
  2. 5 Leds de colores (rojo, verde, amarillo, azul, naranja). Si no tienes de colores igual funcionará =)
  3. 1 tablero de prototipeo.
  4. cables para puentes.
  5. 1 microswitch
  6. 5 resistencias de 220 Ω,  1 resistencia de 10 kΩ.

Circuito a montar:

Primero ingresamos el código en nuestro Sketch.  El lenguaje de Arduino está basado en Processing que es una lenguaje muy parecido al C++ y al mismo Java.  Lo puedo afirmar ya que programo en ambos lenguajes.  A mi modesto parecer este se ha simplificado para que ser facilmente aplicable.

Lo primero que encontramos es la función setup() donde se definen los parámetros iniciales de la aplicación.  El comando void significa que la función no devuelve nada, esto lo veremos en el siguiente tutorial.  Luego encontramos la palabra setup() que viene a ser el nombre de la función.  Los paréntesis () son obligatorios y en un futuro colocaremos valores dentro de ellos llamados argumentos.  Seguidamente encontramos las llaves {}, las cuales nos indican el inicio y el fin de la función.  Dentro de las llaves colocamos los comandos que queremos que se ejecuten dentro de la función.  En el ejemplo usamos pinMode( numero de pin [valor entero], tipo [HIGH/LOW]) la cual defne el comportamiento del pin Arduino

void setup(){
 //Configuramos los pines como salidas.
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 }

La siguiente función es loop() la cual se ejecuta continuamente cientos de veces por segundo, por lo tanto es importante saber como controlar este proceso repetitivo en favor nuestro.  La primera instrucción o comando es digitalWrite(  numero de pin [valor entero]tipo [HIGH/LOW). Este comando lo que hace enviar un valor al pin de salida el cual puede ser O ó 5 voltios.  De esta manera se explica cómo es que un pin puede mandar el voltaje necesario para encender un Led.

Primero encendemos el pin 2 con el valor HIGH, luego con la función delay(500) creamos un retardo de medio segundo.  Con la función delay() hay que tener mucho cuidado ya que cada vez que se llama detiene la ejecución del bloque loop(), dejando como en un estado suspendido a Arduino.  En otro tutorial veremos otras formas de reemplazar a delay() sin necesidad de detener la ejecución de Arduino.

void loop(){
 //ENCENDEMOS LOS PINES DEL 2 AL 7 CADA MEDIO SEGUNDO
 digitalWrite(2,HIGH);
 delay(500);
 digitalWrite(3,HIGH);
 delay(500);
....

Finalmente volvemos a llamar a la función digitalWrite(pin, LOW)  para apagar los pines.  El parámetro LOW indica que se enviará un nivel bajo al pin, es decir O voltios.  Nótese que se dejan apagados por 1 segundo con el comando delay(1000).

 //APAGAMOS LOS PINES DEL 2 AL 7
 digitalWrite(2,LOW);
 digitalWrite(3,LOW);
 digitalWrite(4,LOW);
 digitalWrite(5,LOW);
 digitalWrite(6,LOW);
 digitalWrite(7,LOW); 
 //LOS MANTENEMOS APAGADOS POR 1 SEGUNDO
 delay(1000);
}

Teoría instrucción For:

La instrucción for() es un contador y ejecuta una tarea repetitiva el número de veces que se le indique.  Tiene tres partes separadas por (;) y la sintaxis es la siguiente:

for (inicialización; condición; expresión)
{
Instrucciones 
}
En la práctica sería algo así:
for (int x=0; x<10; x++)
{
  digitalWrite(2,HIGH);
  delay(500);
  digitalWrite(2,HIGH);
  delay(500);
}

Ejemplo 02:  (descargar T02_SampleB)

Ahora optimizaremos un poco el código del programa usando los bucles.  Si lo notas escribir 7 veces pinMode() y 7 veces digitalWrite() puede parecer un poco ocioso.  Para esto podemos utilizar la instrucción for() como un contador de pines del 2 al 7.  Veamos el código:

void loop(){
 //ENCENDEMOS LOS PINES DEL 2 AL 7 CADA MEDIO SEGUNDO
 for (int i= 2; i<=7; i++)
 {
 digitalWrite(i,HIGH);
 delay(500);
 }

En la línea for (int i= 2; i<=7; i++) se define lo siguiente:
Inicialización: Se declara una variable de tipo entero llamada “i” (int i) con el valor 2.
Condición: el contador irá desde 2 (valor asignado en la Inicialización) hasta 7.
Expresión: i++ indica que el valor incrementará de 1 en 1, es decir tomará los valores 2,3,4,5,6,7.  Si se colocara i+=2 el contador incrementará de 2 en 2 y tomaría los valores 2,4,6; no llegaría a 8 puesto que la condición dice que debe ser <=7.

Finalmente apagamos los pines 2,3,4,5,6,7 usando nuevamente la instrucción  for().  Esta vez pasamos el valor O en lugar de LOW ya que como dijimos al principio en Arduino LOW, FALSE y O tiene el mismo valor al escribir una salida.

for (int i= 2; i<=7; i++)
 {
 digitalWrite(i,0);
 } 
 //LOS MANTENEMOS APAGADOS POR 1 SEGUNDO
 delay(1000);
}

Ejemplo 03:  Agregando una entrada digital (descargar T02_SampleC)

En este ejemplo haremos que la secuencia funcione sólo mientras tengamos un pulsador presionado.  Para leer una entrada digital usamos el función digitalRead(# de pin) la cual devolverá dos valores posibles:  HIGH o LOW.  Será HIGH cuando se inserten 5 voltios en el pin; mientras que será LOW cuando el pin esté conectado a tierra (GND).

Armamos el siguiente circuito:

Circuito 2 - Ejemplo 3

Veamos los cambios en la función setup()

void setup(){
 for (int i=2; i<=7;i++){
   pinMode(i, OUTPUT);
 }
   //Nueva linea. Le indica a Arduino que se van a leer señales digitales por la entrada 12.
   pinMode(12,INPUT); }

Ahora veamos los cambios en la función loop().  Lo primero que se puede apreciar es la aparición de la función if-else.  Esta es una condicional que evalúa una condici[on y dependiendo del resultado ejecuta una u otra acción.  En nuestro caso la condición a evaluar será: Si al iniciar loop()  Arduino sensa 5 voltios (HIGH) en el pin 12, entonces Arduino ejecutará la tarea de secuenciar el encendido de los leds.
Nota: En este ejemplo una vez que pasa la validación if ya no se puede detener la ejecución del programa hasta que se inicie el nuevo ciclo loop().

void loop(){
 //SI LEE UNA SEÑAL ALTA EN EL PIN 12
 if (digitalRead(12)==HIGH){
   //ENCENDEMOS LOS PINES DEL 2 AL 7 CADA MEDIO SEGUNDO
   for (int i= 2; i<=7; i++)
   {
     digitalWrite(i,HIGH);
     delay(500);
   }

   //APAGAMOS LOS PINES DEL 2 AL 7
   for (int i= 2; i<=7; i++)
   {
     digitalWrite(i,LOW);
   }
 } //FIN DEL BLOQUE IF.
}

Una vez que apaga los leds Arduino estará a la espera que presionemos el pulsador para nuevamente iniciar el encendido secuencial de los leds.

Espero este tutorial les haya servido.  Nos vemos pronto.  No olvide aportar con sus comentarios.  En la parte proyectos verá un trabajo aplicando lo aprendido en este tutorial.

Anuncios
Categorías:Tutorial
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: