Al utilizar un microcontrolador como Arduino es posible lograr que nuestra computadora interactue con nuestros circuitos electrónicos. Podemos realizar cualquier cantidad de experiencias con solo escribir unas cuantas líneas de código en la memoria del microcontrolador. A continuación viviremos experiencia de encender un LED con nuestra placa Arduino Mega (se puede utilizar cualquier modelo de Arduino).
Un LED es un pequeño componente electrónico que se caracteriza por emitir luz. Es lo que en buen panameño llamaríamos un «foquito». Se puede encontrar el cualquier tienda electrónica con precios que varían desde los 0.05 centavos hasta más de un Balboa, dependiendo de la luminosidad. Para este ejemplo funciona cualquier tipo de LED sencillo.Lograremos encender el LED directamente a través de nuestro microcontrolador.
Para ello abriremos el Arduino IDE y procederemos a escribir el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// This function runs once when the Arduino starts up or is reset. void setup() { // Set pin 13 as an OUTPUT pin. // This is often used for an onboard LED or to control devices like LEDs. pinMode(13, OUTPUT); } // This function runs repeatedly after setup() is completed. void loop() { // Turn ON the device connected to pin 13. // If it's an LED, it will light up. digitalWrite(13, HIGH); } |
Todo programa en Arduino contará con 2 funciones: la función setup y la función loop.
- En setup se establece el uso que se le va a dar al microcontrolador. También pueden iniciarse variables e iniciarse otros procesos que veremos más adelante.
- En loop se establece los procesos que se ejecutarán cuando se inicie el microcontrolador. Dichos procesos se ejecutarán de manera indefinida, de ahí que la función se le denomine como loop (lazo, en español).
Esta información la podemos estudiar más a fondo en el siguiente post:
En el setup hemos establecido que el pin 13 del Arduino funcionará como Output, es decir, que entregará un voltaje cuando el usuario lo decida. Este voltaje es normalmente 5 voltios. He decidido utilizar el pin 13 ya que el mismo tiene una resistencia interna de protección, por lo que podemos colocar un LED directamente en este pin y el mismo no se fundirá por sobrecorriente.
En la función loop escribimos lo que se hará: establecer el pin digital 13 en estado High, es decir, obtendremos 5 voltios en dicho pin.
El comando digitalWrite() nos permite inicicar un pin y un estado, el cual puede ser HIGH o LOW, encendido o apagado.
Ahora, en nuestra placa colocamos un LED entre el pin 13 y GND de al lado.
Nótese que un LED es un Diodo Emisor de Luz (Light Emitting Diode), y como todo diodo tiene un ánodo y un cátodo, siendo el ánodo el positivo y el cátodo el negativo. El cátodo se diferencia del ánodo mirando en el interior del cristal del LED. Habrán 2 piezas metálicas separadas en el vacío. La pieza más grande es la que va conectada al GND, es decir, el cátodo. La pieza más pequeña es la que va en el pin 13, es decir, el ánodo.
Una vez que conectamos el LED con la placa, procedemos a conectar por USB la placa a la computadora y subimos el código a la placa como expliqué en el anterior post.
Cuando hacemos clic en el ícono –> se empezará a cargar el código. El LED parpadeará, al igual que las luces de la placa.
Si todo está en orden con los drivers y con el código, en el Arduini IDE debe aparecer lo siguiente en la parte inferior del programa:
Si todo está en orden, el LED en el pin 13 debe permanecer encendido. A continuación les muestro un video con este sencillo proceso y el resultado. Para este ejemplo utilicé un LED azul de alta luminosidad, por lo que se logra percibir un brillo bastante intenso.
Una de las funciones principales de un microcontrolador es precisamente esta, entregar una tensión eléctrica como la que enciende a este LED. Ahora, ¿Qué importancia tiene esto?
Pues a continuación veremos las cosas que podemos lograr utilizando la programación y nuestro microcontrolador.
Dentro del lenguaje Arduino existe una función llamada delay() la cual permite lograr un retraso en la ejecución de un comando. Dentro de los paréntesis se coloca un número entero que indique la cantidad de milisegundos que dura este retraso.
Lo que haremos a continuación es aprovechar este delay para hacer que nuestro LED se encienda y se apague a un ritmo que podremos establecer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// This function runs once when the Arduino starts up or is reset. void setup() { // Set pin 13 as an OUTPUT pin. // This pin is often used for controlling an onboard LED or other devices. pinMode(13, OUTPUT); } // This function runs repeatedly after setup() is completed. void loop() { // Turn ON the device (like an LED) connected to pin 13. digitalWrite(13, HIGH); // Keep the LED ON for 1000 milliseconds (1 second). delay(1000); // Turn OFF the device connected to pin 13. digitalWrite(13, LOW); // Keep the LED OFF for 1000 milliseconds (1 second). delay(1000); // This cycle of ON and OFF will repeat indefinitely, // creating a blinking effect on the LED. } |
Con este código, el pin 13 iniciará la ejecución del loop como HIGH, es decir, el LED estará recibiendo corriente desde el pin 13 y estará encendido.
Luego habrá un delay de 1000 milisegundos que es lo mismo que 1 segundo.
Durante ese segundo, el LED estará encendido. Luego el pin 13 pasará a LOW, por lo que el LED se apagará. Vendrá un delay de 1 segundo, en el cual el LED estará apagado. El código regresará al principio del loop y todo el código se empezará a ejecutar nuevamente.
El resultado de todo esto será una luz parpadeante que durará 1 segundo encendida y 1 segundo apagada. Subimos el código a la placa y si todo está bien, observaremos el siguiente comportamiento:
Nótese que al variar el delay podemos aumentar o reducir la frecuencia del parpadeo. Con un delay de 1000 ms obtenemos un parpadeo por segundo. Si colocamos 500 ms habrá 2 parpadeos por segundo. Si colocamos 250 ms habrá 4 parpadeos por segundo, y así sucesivamente.
Tambien se pueden agregar más LED y hacer un juego de luces. Se deben establecer los pines que contendrán los LEDs con el pinMode.
Por ejemplo, pinMode(12, OUTPUT) o pinMode(11, OUTPUT). Hay 54 pines digitales de entrada/salida en los cuales se puede hacer esto.
A la hora de encender o apagar los LEDs se utiliza el comando digitalWrite(), donde se establece el pin y el estado que adoptará, sea HIGH o LOW.
Si se va a utilizar un pin diferente del 13, se debe colocar una resistencia de protección para que el LED no se funda por sobrecorriente.
En el próximo aporte escribiré como encender y apagar un LED utilizando las teclas de nuestra computadora.
Cuál es el problema?
Una pregunta. Con pinMode(13, OUTPUT) y digitalWrite(13,HIGH) se puede encender el led L ¿como se podria apagar el led verde de POWER de la Mega 2560? Claro esta, sin tocar el circuito 😀 El tema es que estoy contruyendo un dataloger y el consumo aunque parezca trivial se incrementa con todo el arbol de navidad de los sensores y placa… Muchas Gracias!
Ahorrarte la energía del LED de power no hará la gran cosa por tu consumo energético. Mejor piensa en reducir la frecuencia del reloj (prescale) o en reducir la cantidad de ciclos del loop
Hola, estoy buscando las distintas opciones que tengo para desarrollar unos proyectos de iluminación. Viendo las posibilidades de Arduino pienso sí me conviene adentrarme a estudiarlo. Quiero programar luces. Luces led hechos por mi de distintas potencias y colores, además de posibles cabezas móviles. Lo que vi rápidamente que también se puede hacer con arduino. No tengo demasiados conocimientos en programación de pics pero sí de electrónica. La pregunta sería ¿Según tú punto de vista cuales son mis posibilidades para programar, extender y que desventajas conlleva? sí es que le encuentras alguna. Por ejemplo sí quiero programar 100 canales distintos… Read more »
Para programar 100 canales no podrías utilizar Arduino directamente. Sería necesario hacer una interfaz electrónica que sea controlada por Arduino. Se me ocurre utilizar algún driver de matriz de leds. Las matrices tienen muchos puntitos, cada uno es un LED. Hay circuitos que controlan estas matrices. Lo que se puede hacer es que a través de Arduino se controla dichos circuitos y así tendrías un sistema de luces con cualquier cantidad de Leds controlado desde la PC. La ventaja de Arduino es que se puede inferfaciar con lenguajes de más alto nivel como Java. Imagínate que puedas colocar las 100… Read more »