18.1 Objetivo General:
Cambiar la luz de un semáforo de verde a rojo para permitir el paso peatonal. Se utiliza una subrutina para contar el tiempo que el semáforo debe estar en luz roja.
Un botón pulsador se usa para indicar que el semáforo debe cambiar de la luz verde a roja y mantenerse en luz roja por el tiempo requerido por el peaton para realizar el cruce de calle. Se simula con este circuito el comportamiento de un semáforo con botón peatonal para activar la luz roja.
BASADO EN PRÁCTICA 11
El montaje del circuito es identico al de la práctica 11, la diferencia es en la programación. En este caso el botón es usado para cambiar de rojo a verde para permitir el paso peatonal.
La práctica enseña como usar subrutinas.
18.2 Materiales y Métodos:
- Tres LEDs (Colores: Amarillo, Verde y Rojo).
- Una tarjeta Arduino Uno-R3 o Arduino Mega 2560.
- Un cable USB impresora.
- Un computador.
- Cables para el montaje del circuito.
- Tarjeta Protoboard.
- Tres Resistencias Eléctrica de 220 ohm.
- Un Botón Pulsador.
18.3 Montaje de la práctica:
Antes de comenzar el montaje del circuito, se proyecta su montaje en el programa Fritzing. Recuerde que para instalar los LED se debe conocer cuall es el cátodo y ánodo de los LED (práctica 1). Se coloca el ánodo del LED verde en el pin 13, LED amarillo en el pin 12 y LED rojo en el pin 8. El cátodo de cada LED va a tierra (ground). Se va a usar el pin 5V para alimentar el botón pulsador tal como se muestra en la figura 2:
Figura 2. Montaje del circuito en el programa Fritzing
Se observa en la Figura 2 que se usa una placa Arduino Uno y un protoboard para instalar los LEDs, resistencia, botón y cables. La línea que esta de color rojo emite los 5V al botón pulsador. El computador es capaz de proveerle Arduino 5V. Los 5V van hacia al botón y luego al cerrarse el circuito le deja pasar al pin 7. Para proteger el circuito y evitar que al pin 7 no le llegue más de 5V, se coloca una resistencia eléctrica.
Luego que proyectar el circuito en el programa Fritzing se procede desarrollarlo en el protoboard. Luego, se comienza con a programar en el IDE de Arduino.
18.4 IDE de Arduino para la práctica:
– Se selecciona la tarjeta Arduino que se esta utilizando.
– Se selecciona el Puerto Serial. Bajo que puerto USB se va a conectar el Arduino con el computador.
– Se empieza a realizar el código:
-
- Inicialmente debemos darle un nombre de qué consiste el codigo, esto se hace a través del símbolo //, se puede colocar el título de la práctica o del programa en sí. También se puede utilizar como comentarios dentro del programa.
-
- Se declaran las variables. Los pines 8, 12 y 13 se usaran para alimentar los LEDs. Por lo que se declaran 3 parámetros que serán constantes del tipo entero led_verde, led_rojo y led_amarillo. También se declara que el botón estará en el pin 7. Se usará una variable del tipo entero val igual a para tener guardado el estado del botón.
- Se declaran las variables. Los pines 8, 12 y 13 se usaran para alimentar los LEDs. Por lo que se declaran 3 parámetros que serán constantes del tipo entero led_verde, led_rojo y led_amarillo. También se declara que el botón estará en el pin 7. Se usará una variable del tipo entero val igual a para tener guardado el estado del botón.
-
- En el lazo void setup () se inicializan las variables. La primera acción del código será ejecutar la subrutina pedestriaBoton(). Note que las subrutinas son pedazos de código aparte que se usan para desarrollar una parte del código. Las subrutinas permiten reducir el tamaño del código ya que si una misma acción se repite constantemente esta puede codificarse mediante subrutinas. Para mas información sobre subrutinas ver la definición en wikipedia.
- La subrutina pedestriaBoton() tiene la función de verificar si el botón fue pulsado el código debe esperar 500 por cada lazo indicado en el comando for. Por ejemplo, i=i=1;i<21; indica que el lazo se ejecuta 20 veces, si el boton está apagado seria 20 x 500 milisegundos = 10 segundos. Esto indica que si se oprime el botón, en 10 segundos saldrá de la subrutina.
- Si el botón se pulsa, en 10 segundos el código sigue y se encuentra con que debe apagar el LED verde, luego encender el amarillo por 1 segundo delay(1000). Finalmente enciende el LED rojo para que el peaton pueda cruzar.
- En el código, el LED rojo se enciende por 5 segundos y luego se apaga. Una vez que se apaga el LED rojo, nuevamente se vuelve a encender el LED verde para que los vehículos continuen su transito por la via.
- Si el botón no se activa if (state==0) , la luz roja esperará 20 x 1000 milisegundos = 20 segundos en cambiar al verde. Se puede jugar con el delay de 1000 milisegundos para prolongar por mas tiempo la luz roja y que esta se active solo en el caso de que el peatón oprima el botón.
- En el lazo void setup () se inicializan las variables. La primera acción del código será ejecutar la subrutina pedestriaBoton(). Note que las subrutinas son pedazos de código aparte que se usan para desarrollar una parte del código. Las subrutinas permiten reducir el tamaño del código ya que si una misma acción se repite constantemente esta puede codificarse mediante subrutinas. Para mas información sobre subrutinas ver la definición en wikipedia.
- Al terminar el desarrollo del programa se debe compilar para verificar si existen errores dentro del codificado. Luego si no existen errores se debe cargar el código en la tarjeta Arduino para que lo ejecute.
NOTA: Para quel IDE de Arduino pueda entender los comandos es necesario que al final de cada instrucción se coloque punto y coma (;).
En la siguiente imagen se mostrara como quedo plasmado en el IDE de Arduino, los procedimientos anteriormente señalados:
// Semáforo con botón peatonal
// declarando parametros
int led_verde = 13;
int led_amarillo = 12;
int led_rojo = 8;
const int BOTON = 7; // pin de entrada botón
int state = 0; //para activar luz roja
void setup() {
// se indica que cada pin es de salidad OUTPUT.
pinMode(led_verde, OUTPUT);
pinMode(led_amarillo, OUTPUT);
pinMode(led_rojo, OUTPUT);
pinMode(BOTON,INPUT);
digitalWrite(led_verde,HIGH); //Luz verde encendida.
digitalWrite(led_verde,LOW); //Luz roja apagada
digitalWrite(led_verde,LOW);
//Luz Amarilla apagada
}
// lazo a ejecutar continuamente una vez cargado el código en el arduino
void loop(){
digitalWrite(led_verde,HIGH); // encender LED verde
pedestriaBoton(); // se llama la rutina pedestriaBoton
digitalWrite(led_verde,LOW); // apagar LED verde
digitalWrite(led_amarillo,HIGH); // encender LED amarillo
delay(1000); // mantener por 1 segundos
digitalWrite(led_amarillo,LOW); // apagar LED verde
digitalWrite(led_rojo,HIGH); // encender LED rojo
delay(5000);
digitalWrite(led_rojo,LOW); // encender LED rojo
}
void pedestriaBoton(){
for(int i=1;i<21; i++){
state=digitalRead(BOTON);
if (state==0) {
delay(1000);
}
else if (state=1){
delay(500);
return;
} // cierra lazo else if
} // cierra lazo for
} //cierra void pedestriaBoton
Algoritmo 1 Código para encender y apagar un LED utilizando un botón pulsador.
Implementación del algoritmo 1 en el simulador TinkerCAD:
18.5 Conclusión:
En esta práctica hemos utilizado subrutinas. Específicamente hemos creado una subrutina para indicarle al circuito cuando debe pasar de la luz verde a roja. El cirtuito y código desarrollado permitió simular el comportamiento de un semáforo cuando se utiliza un botón peatonal.
Si nuestro contenido te fue de utilidad, por favor considera dar tu apoyo a lo que hacemos: