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.

NOTA: En esta práctica diseñaremos el código para ambas placas, tanto la antigua Arduino UNO Rev3, como para la nueva Arduino UNO Q. A veces, el mismo código sirve para ambas placas, por lo que si en la sección de código fuente no pone nada, dicho código valdrá para ambas placas.

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.

Multivibrador monoestable con LiveWire.exe

Circuito del multivibrador monoestable en LiveWire.exe.

La salida del circuito será alta, cuando se presione el pulsador o se quede presionado. Y volverá a bajo, cuando se libere el pulsador.

Con Arduino también podemos crear un multivibrador monoestable gracias a la configuración de sus puertos. Empecemos.

Ensamblaje en Arduino UNO Rev3.

>

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.

Montaje del primer multivibrador monoestable con arduino

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.

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.

multivibrador monoestable

//Este código está patrocinado por Mirpas.com int pulsador = 0; // the setup routine runs once when you press reset: void setup() { pinMode(3, OUTPUT); //diodo Verde pinMode(4, OUTPUT); //diodo rojo 1 pinMode(5, OUTPUT); //diodo rojo 2 //Establezco el puerto 2 como entrada pinMode(2, INPUT); } // the loop routine runs over and over again forever: void loop() { //pongo el pulsador en modo escucha pulsador = digitalRead(2); //condicional según esté presionado o no el pulsador if (pulsador == LOW) { //si no está presionado el diodo verde estará encendido digitalWrite(3, HIGH); //diodo Verde encendido //Los otros dos diodos rojos estarán apagados digitalWrite(4, LOW); //diodo rojo 1 digitalWrite(5, LOW); //diodo rojo 2 } else { //Si está presionado el diodo verde se apagará digitalWrite(3, LOW); //diodo verde apagado //Los diodos rojos pasaran a alto digitalWrite(4, LOW); //pasa a bajo para que no se enciendan a la vez digitalWrite(5, HIGH); //para la alternancia, introduzco una pausa y lo subo delay(250); digitalWrite(4, HIGH); //Diodo rojo 1 activo digitalWrite(5, LOW); //Diodo rojo 2 desactivado delay(250); //otra pausa y comienza de nuevo el bucle } } Arduino

Explicación del código.

El circuito utiliza la placa Arduino como controladora simplemente activando o desactivando los puertos digitales cambiando su estado de HIGH a LOW y viceversa 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).

El primer paso de todo programa es declarar las variables o constantes globales. Para ello, fuera del setup(), incluiremos la sentencia primera.

int pulsador = 0; // the setup routine runs once when you press reset: void setup() { pinMode(3, OUTPUT); //diodo Verde pinMode(4, OUTPUT); //diodo rojo 1 pinMode(5, OUTPUT); //diodo rojo 2 //Establezco el puerto 2 como entrada pinMode(2, INPUT); } Arduino

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. El método pinMode() establece los pines de tu Arduino UNO como salida con el atributo OUTPUT. El número es el número de pin utilizado, por lo que por ejemplo pinMode(3, OUTPUT);, establece el pin 3 como salida.

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 fijo mientras no se presione al pulsador, y los otros dos led rojos esten 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.

En primer lugar, la variable creada pulsador en el setup(), la pongo en modo de escucha con la instrucción digitalRead() asignándo el puerto de escucha ligado al pulsador (pin 3). Y a raíz del estado del pulsador, si está presionado hará una cosa el circuito o hará otra. Esto lo hago con un bloque condicional IF.

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.

void loop() { //pongo el pulsador en modo escucha pulsador = digitalRead(2); //condicional según esté presionado o no el pulsador if (pulsador == LOW) { //si no está presionado el diodo verde estará encendido digitalWrite(3, HIGH); //diodo Verde encendido //Los otros dos diodos rojos estarán apagados digitalWrite(4, LOW); //diodo rojo 1 digitalWrite(5, LOW); //diodo rojo 2 } } Arduino

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.

void loop() { //pongo el pulsador en modo escucha pulsador = digitalRead(2); //condicional según esté presionado o no el pulsador if (pulsador == LOW) { //si no está presionado el diodo verde estará encendido digitalWrite(3, HIGH); //diodo Verde encendido //Los otros dos diodos rojos estarán apagados digitalWrite(4, LOW); //diodo rojo 1 digitalWrite(5, LOW); //diodo rojo 2 } else { //Si está presionado el diodo verde se apagará digitalWrite(3, LOW); //diodo verde apagado //Los diodos rojos pasaran a alto digitalWrite(4, LOW); //pasa a bajo para que no se enciendan a la vez digitalWrite(5, HIGH); //para la alternancia, introduzco una pausa y lo subo delay(250); digitalWrite(4, HIGH); //Diodo rojo 1 activo digitalWrite(5, LOW); //Diodo rojo 2 desactivado delay(250); //otra pausa y comienza de nuevo el bucle } } Arduino

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 con 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.

Comparte este conocimiento en redes sociales