Tutorial cruce de semáforos con pic 16f84a

semáforos

Semáforos con pic 

En el siguiente tutorial les enseñaremos como programar un cruce con 2 semáforos que controlan el flujo de autos, Los dos semáforos están intercambiando de estado para conceder luz verde de uno a otro y sus estados intermedios de la luz ámbar y luz roja.

Descripción

El semáforo pasa por una serie de estados marcados por diferentes luces, verde, ámbar y rojo, cada uno representa una acción diferente para la persona que conduce. El verde significa que el vehículo puede avanzar, y cuando el tiempo esta por terminarse este empieza a parpadear para avisar a los conductores, luego este se apaga para encenderse la luz color ámbar que significa precaución y el conductor debe disminuir velocidad y detenerse, luego se enciende la luz roja que indica alto total, y así da paso a el encendido de la luz verde de otro semáforo, y continúe con el ciclo.

Lista de materiales 

– Pic16f84a
– 2 Capacitores cerámicos de 15pf
– 1 Cristal de cuarzo de 4Mhz
– 6 Resistencias de 330  
– 1 Resistencia de 100
– 1 Resistencia de 10k
– 2 Push button
– 2 Leds rojos, ámbar, verdes 

Desarrollo 

En la siguiente imagen podemos ver el diagrama de conexiones  simulado en proteus 
semáforo con pic
Ahora ya solo queda ver el programa, se los dejo comentado para su mayo entendimiento. 

</ br>

</ br>
</ br>#include //incluimos el pic a utilizar
#fuses xt,nowdt, noprotect, //fusibles
#use delay (clock=4000000) // Criztal de 4Mhz
#byte portb=0x06 // Declaramos que usaremos el puerto B
#byte trisb=0x086int a, memoria=0; //Declaramos dos variablesvoid main() //funcion principal
{
SET_TRIS_A(0xFF); //Declaramos el puerto A como entradas
set_tris_b(0x00); //Declaramos el puerto B como salidas
portb=0x00; //Inicializamos el puerto B con las salidas en 0
while(true) // Aqui se queda ciclado el programa
delay_ms(1);{if(input(PIN_A0)==1) //Si el pin A0 es = 1 guardamos el estado con memoria
{
memoria=memoria+1; // Utilizamos una memoria para saber que se presiono el boton
}

if(memoria==1) //SI la memoria se activa =1 entra al if
{
do
{
output_high(PIN_B5);//On verde 1
output_high(PIN_B0);//On rojo 2
delay_ms(500); //ciclo de verde y rojo
output_low(PIN_B5);// Off verde 1
for(a=1;a<=4;a++)//parpadeo verde 1

{
delay_ms(100);
output_high(PIN_B5);// parpadeo verde 1
delay_ms(100);
output_low(PIN_B5);// parpadeo verde 1
}

output_high(PIN_B4);// encenndido amarillo 1
delay_ms(500);
output_low(PIN_B4);//apagado amarillo 1
output_high(PIN_B3);// encendido rojo 1
output_high (PIN_B2);// encendido verde 2
output_low(PIN_B0);// apagado rojo 2
delay_ms(1000);
output_low(PIN_B2);//apagado verde 2

{
for(a=1;a<=4;a++)//parpadeo de verde 2

{
delay_ms(100);
output_high(PIN_B2);// verde 2
delay_ms(100);
output_low(PIN_B2);// verde 2
}

output_high(PIN_B1);// encendido amarillo
delay_ms(500);
output_low(PIN_B1);// apagado amarillo 2
output_low(PIN_B3);// apagado rojo 1
}
}
while(true);
}
}
}

Comments 2

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *