Hoy vamos a realizar el primer proyecto con Arduino. Por un lado ya hemos sido capaces de configurar correctamente nuestro Arduino y además hemos visto qué es un LED, cómo funciona y cómo hacer que emita luz.
Así que nuestro siguiente paso es hacer un pequeño programa para encender un LED a nuestro antojo.
Circuito y conexión a Arduino
El circuito que queremos realizar es el que nos permite encender un LED, es decir, el circuito de polarización directa de un LED que vimos en un post anterior:
En este circuito, vamos a sustituir la pila por conexiones a nuestra placa de Arduino de manera que podamos encender y apagar a nuestro antojo. Para ello vamos a utilizar los pines digitales de la placa. En una salida digital, o mejor dicho binaria, sólo dos posibles valores:
- “HIGH” (“alto” en inglés), que equivale a un “1” lógico y que eléctricamente es +5 voltios. Como ya sabemos, este voltaje es suficiente para superar la tensión umbral del LED y que se encienda.
- “LOW” (“bajo” en inglés), que equivale a un “0” lógico y que eléctricamente es +0 voltios.
¿Dónde debemos conectar en nuestra placa Arduino? Pues tenemos que encontrar qué pines van a ser el polo positivo (+) y el polo negativo (-) de nuestra pila.
- En nuestra placa tenemos un pin que indica “GND”, que es la abreviatura de “Ground” en inglés, que significa “tierra”. Este es el punto de referencia para todo el circuito y para nosotros equivale a los 0 voltios. En wikipedia tenéis la explicación de “tierra”, pero está mejor explicado en la versión inglesa, “ground (electricity)” :
“In electrical engineering, ground or earth is the reference point in an electrical circuit from which voltages are measured, a common return path for electric current, or a direct physical connection to the Earth.”
Además la indicación del punto de referencia que había explicado antes, añade otro concepto que es muy útil: “el camino de regreso de la corriente eléctrica”. Fijándonos en nuestro circuito, la corriente sale por el polo positivo de la pila y vuelve por el polo negativo. Así pues, nuestro cable negro del circuito, que era el polo negativo (-) de la pila, lo vamos a conectar al pin “GND”.
- Dado que ya tenemos el polo negativo (-) que es la referencia para el circuito conectado al pin de tierra (“GND”), el polo positivo (+) es mucho más fácil: cualquier pin que sea salida digital. La placa Arduino en este caso nos lo pone muy fácil: todos los pines digitales pueden ser tanto de salida como de entrada.
En resumidas cuentas.
- Cable negro del circuito, lo que antes era el polo negativo (-) de la pila, conectado al pin “GND”.
- Cable rojo del circuito, lo que antes era el polo positivo (+), conectado a un pin digital. Yo he elegido el pin 12.
Y tendréis algo tan bonito como esto:
Programa en Arduino
Una vez tenemos conectada nuestro Arduino a nuestra placa vamos a programarla. Para ello, lo primero:
- Conectamos la placa por USB al ordenador
- Abrimos nuestro Arduino IDE
- Comprobamos que la placa está bien conectada
Nada que no hayamos probado ya antes y que explicábamos en esta entrada anterior. Nuestro programa está basado en el ejemplo “Blink” y es así:
// Constantes const int PIN2BLINK=12; const int DELAYTIME=1000; // tiempo de espera: un segundo // Funcion de inicializacion void setup() { // Configuramos el pin como salida pinMode(PIN2BLINK, OUTPUT); } // Bucle infinito de ejecucion void loop() { digitalWrite(PIN2BLINK, HIGH); // Encendemos el LED delay(DELAYTIME); // wait digitalWrite(PIN2BLINK, LOW); // Apagamos el LED delay(DELAYTIME); // wait }
La explicación del código es la siguiente:
- Al comienzo del código se incluyen las constantes que serán utilizadas en el resto del código. En nuestro caso tenemos dos variables:
- PIN2BLINK: qué pin vamos a utilizar para hacer parpadear el LED. El pin seleccionado es el 12.
- DELAYTIME: que es el tiempo entre que lo encendemos y apagamos. Este tiempo está en milisegundos así que un valor de 1000 representa un segundo.
- Función setup(): es la parte de código que se va a ejecutar antes de entrar en un bucle infinito y sirve para ejecutar las sentencias que sólo es necesario realizar una vez. ¿Cuáles son estas sentencias? Las que nos permiten configurar la placa. En este caso configuramos el pin PIN2BLINK como salida.
pinMode(PIN2BLINK, OUTPUT);
- Función loop(): es la parte de código que se ejecutará infinitamente. ¿Qué hacemos en nuestro caso?
- Encendemos el LED, haciendo que en el pin PIN2BLINK tenga el valor de un “1” lógico, que es representado por la constante “HIGH” y que significa que ponemos ese pin a +5 voltios. Como el pin está en modo salida (OUTPUT) la operación que realizamos es escribir un “1” en el pin PING2BLINK:
digitalWrite(PIN2BLINK, HIGH); // Encendemos el LED
- Esperamos un tiempo DELAYTIME antes de realizar otra acción.
delay(DELAYTIME); // wait
- Apagamos el LED escribiendo un “0” lógico (“LOW”) en el mismo pin.
- Volvemos a esperar.
- Y vuelva al punto 1.
- Encendemos el LED, haciendo que en el pin PIN2BLINK tenga el valor de un “1” lógico, que es representado por la constante “HIGH” y que significa que ponemos ese pin a +5 voltios. Como el pin está en modo salida (OUTPUT) la operación que realizamos es escribir un “1” en el pin PING2BLINK:
Ya tenemos nuestro programa. ¿Como hacemos que nuestro Arduino ejecute nuestro programa?. Tendremos que hacer los siguientes pasos:
- Validar el programa: el Arduino IDE comprueba que el programa está bien escrito y no hay ningún error. Para validar el programa lo más sencillo es pulsar sobre el icono Si tenéis un error de compilación os aparecerá algo como esto:
En mi caso está indicando que se me ha olvidado el carácter “;” al final de una sentencia.
- Una vez ya no tenemos ningún error, transferimos el programa compilado a nuestra placa con el icono
Si todo ha ido bien, nuestro LED se pondrá a parpadear:
Más Pruebas
Ya tenemos nuestro primer proyecto realizado, lo que viene a ser el HelloWorld del mundo Arduino. Con este primer circuito os propongo algunas pruebas que podéis realizar:
- Podemos variar el tiempo para que parpadee más rápido o más lento. Si aumentamos el tiempo, parpadeará más lento, pues no tiene mucha gracia (parpadea más lento y punto), pero si disminuimos el tiempo, parpadeará más rápido y si lo disminuimos muchísimo, llega un punto en que parece que está siempre encendido, aunque en realidad sólo está encendido la mitad del tiempo.
Pregunta: ¿Con qué tiempo os parece siempre encendido?
Nota: no tengo ni idea pero puede que esta prueba de disminuir el tiempo pueda ser peligroso para una persona epiléptica. Cuidado con esto. - Podemos hacer que el tiempo que está encendido y el tiempo que está apagado sea distinto utilizando constantes distintas.
- Podemos añadir más LEDS al circuito.
Pregunta: ¿cuántos LEDS seguidos es capaz de encender una salida digital? Y lo más importante ¿Por qué?