Arduino UNO.
No se puede estudiar Arduino UNO si no se practica para conocer los efectos de nuestros programas y circuitos sobre aquellos elementos sobre los que queramos actuar. En esta practica de este capítulo empezarás a entender los motivos de Arduino, conociendo sus puertos y como configurarlos para producir ciertos efectos físicos o visuales.
Multivibrador monoestable.
Según lo aprendido en el curso de electrónica, un multivibrador monoestable es un circuito electrónico que mantiene un estado de salida mientras que sobre él no se actúe; y cuando se actúa, cambia el estado del mismo mientras se aplique el pulso que lo hace cambiar, y cuando cesa el pulso, el circuito vuelve a su estado inicial.
Pues si, con Arduino podemos crear un multivibrador monoestable gracias a la configuración de sus puertos y el microprocesador ATmega. Empecemos.
Ensamblaje.
Para el ensamblaje del circuito necesitarás los siguientes componentes:
● 1 Placa Arduino.
● 3 resistencias de 330Ω
● 1 resistencia de 10kΩ
●1 pulsador
● 2 diodos LED rojos
● 1 diodo LED verde
● Cableado.
Como puedes ver en la imagen el montaje del circuito es muy sencillo. Simplemente debes de conectar los componentes según los ves en pantalla cada puerto a cada componente:
Primero saca un cable desde el Pin POWER 5V y utilizalo como positivo de alimentación llevándolo a la protoboard. Después haz lo propio con el Pin GND y lleva un cable para utilizarlo como negativo en la protoboard.
Puedes ver que utilizaremos los pines digitales 3, 4 y 5 para conectar el hardware del circuito y el pin 2 para conectar el controlador del circuito. Ten en cuenta que el cátodo de los LEDs deben de estar conectados al terminal más negativo, pues de lo contrario no se iluminarán y pensarás que el circuito no funciona. Además las resistencias de 330Ω se han añadido para limitar la corriente por el interior de los mismos y evitar su destrucción.
En cuanto al sistema de control, está formado por un pulsador que por un extremo se conecta al terminal positivo directamente y por el otro extremo a la resistencia de 10KΩ que se conecta a masa.
Funcionamiento del circuito.
El circuito va a tener fija la luz verde mientras que no se pulse el pulsador. Este estado es su estado de reposo. Cuando se presione el pulsador, el estado del multivibrador cambiará y apagará la luz verde mientras las dos luces rojas parpadean a una intermitencia de 1 segundo, todo ello mientras el pulsador esté presionado.
En cuanto se libera de nuevo el pulsador, el circuito vuelve a su estado normal encendiéndose el led verde y apagándose los leds rojos.
El circuito utiliza la placa Arduino como controladora simplemente activando o desactivando los puertos digitales cambiando su estado a HIGH o LOW en los momentos adecuados. Si se presiona el pulsador, el puerto digital 3 pasa a LOW y mediante un condicional, pongo los puertos 4 y 5 en LOW y HIGH respectivamente (para evitar que ambos diodos rojos estén encendidos al mismo tiempo). después de una pausa de un cuarto de segundo, invierto los valores y paso a HIGH y LOW y genero otra pausa de otro cuarto de segundo. Así cuando esté presionado el pulsador, los diodos rojos alternarán repetidamente hasta que se suelte, momento en el cual se vuelve a poner el puerto 3 en HIGH (diodo verde). ¿Te parece dificil? empecemos a desarrollarlo.
Desarrollo de código.
Aunque el ejemplo te lo puedes descargar desde ésta página en formato .ZIP, también puedes ir ensamblándolo poco a poco desde éste apartado.
El primer paso de todo programa es declarar las variables o constantes globales. Para ello, fuera del setup(), incluiremos la sentencia primera:
Utilizaré una variable del tipo int y llamada pulsador, y con un valor asignado de cero, que será la que se encarga de interrumpir el estado inicial y, por así decirlo mandar el pulso al multivibrador.
Lo siguiente será siempre acostumbrarse configurar los puertos como salidas o dejarlos como entradas y darles un valor lógico.
Como puedes ver, usamos la función pinMode indicando entre paréntesis el número de puerto y el estado en que queremos que se quede, en este caso queremos que se queden configurados como salidas ya que sino, no se aplicará corriente por dichos puertos y no se iluminarán los led. Además el puerto 2 lo configuraré como entrada ya que lo que quiero es interrumpir el flujo de salida. De ahí que el puerto conectado al pulsador sea un puerto de entrada.
Ya están declaradas todas las variables y asignados los puertos. Ahora solo queda configurar las acciones.
Loop.
En el loop se van a crear las instrucciones para que se consiga el efecto deseado: primero, queremos que el led verde esté encendido y los otros dos rojos apagados cuando no este presionado el pulsador, pero que se apague el led verde y parpadeen los dos rojos entre sí cuando se presione el pulsador. Entonces todo gira en torno al pulsador y una condición, ¿verdad?.
En primer lugar, la variable creada en el setup(), la pongo en modo de escucha con la instrucción digitalRead() asignándo el puerto de escucha ligado al pulsador. Y a raíz del estado del pulsador, si está presionado hará una cosa el circuito o hará otra.
El primer bloque if, puedes ver que la condición está supeditada a que el valor sea LOW, es decir que no esté presionado el pulsador.
En este estado el led verde estará encendido, con lo cual lo primero que hago es activar el puerto del pin 3 (led verde según el circuito anterior), mediante la instrucción digitalWrite y el estado de HIGH, que hace que el puerto proporcione corriente eléctrica al circuito conectado al mismo. Por el mismo lado, si el pulsador está libre, los otros dos diodos rojos estarán apagados, por lo que tendré que poner su puerto en LOW con la instrucción digitalWrite(puerto_correspondiente, LOW). Así hemos diseñado la condición de que cuando este libre el pulsador, el led verde esté encendido y los otros led apagados.
Cuando se presione el pulsador, la condición será falsa (no se ejecutará que pulsador==LOW), por lo tanto el programa ejecutará el bloque else.
Aquí podemos apreciar cosas interesantes como el hecho de que cada vez que parpadea un led, el otro debe de apagarse. Por ello, con digitalWrite, pongo el puerto del led verde en LOW y los otros dos en HIGH (salvo el primer led que permanecerá en LOW para que no se enciendan a la vez los dos led rojos).
A continuación como quiero que primero se encienda un led rojo y después de un tiempo otro, introduzco una pausa o delay, que hace una espera de tiempo en milesegundos indicados entre paréntesis. Después paso el pin 4 a alto, y el pin 5 a bajo (enciendo el otro led rojo y apago el primero). Para terminar introduzco otro delay con un cuarto de segundo de pausa para que vuelva a empezar el ciclo.
Hay que decir que esta intermitencia se repetirá continuamente mientras se mantenga pulsado el pulsador. En el momento en que se suelte, el condicional del loop será TRUE y cargará la primera condición, encendiendo el led verde y apagando los otros dos.