Hace muchos meses que no traía un proyecto nuevo, las ocupaciones y tanto trabajo no liberan mucho espacio, sin embargo hoy traigo un diseño breve de una alarma digamos que implementada para carro, pero el proyecto lo puedes modificar a conveniencia, claro desarrollado en la tarjeta Freedom de Freescale o actualmente de NXP cuya referencia es la KL25Z.Este proyecto está desarrollado en C++ al final del post podrás descargar el código + archivos de montaje, proteus y código.
Te dejo un vídeo del proyecto funcionando
Características del proyecto...
Se diseñará un sistema básico de alarma para automóvil. Dicho sistema debe contar con lo siguiente:
- 5 pulsadores que simulen las 5 puertas (programados por interrupción)
- 1 Pulsador que simule la activación o desactivación de la alarma
- 1 pulsador que simule el On/Off del vehículo.
- 1 Led Rojo para simular la sirena
- 1 Led Verde para simular la bomba de combustible
- 1 Pulsador de pánico (Interrupción)
¡Así debe funcionar! El pulsador de activación de alarma habilita o deshabilita el sistema de seguridad. Si el sistema está activado, se genera un escaneo de todos los pulsadores del sistema. Si algún pulsador se activa, la alarma debe activar de manera intermitente el LED que simula la sirena y apagar el LED de la bomba de combustible. Por otra parte, si el usuario presiona el botón de pánico, el sistema de alarma debe hacer lo siguiente: Esperar un tiempo de 1 minuto Activar la sirena de manera intermitente Apagar el led que simula la Bomba de combustible con el fin de parar el motor Solo el usuario puede reactivar el sistema mediante el uso del pulsador de activación/ desactivación de la alarma.
DESARROLLO COMPLETO DEL PROYECTO
Como siempre doy una breve aclaración este proyecto está diseñado exclusivamente para la tarjeta ya mencionada de Freedoom, pero, si dominas el código muy bien es probable quelo puedas adaptar o entender su lógica de programación y usarlo en otra tarjeta ya que en esencia es fácil de hacer.
1. Materiales y componentes
Aquí dejaremos la lista de componentes que hemos usado para el desarrollo de este proyecto:
- x1 Tarjeta Freedoom NXP KL25Z con su cable USB
- x8 Pulsadores normalmente abiertos pequeños
- x2 Resistencias de 220 Ohms (Rojo, Rojo, Café)
- x2 leds rojo y verde cada uno.
- x1 Buzzer de 5V.
- Cables jumpers para crear conexiones.
- x1 Protoboard
¡Listo! Con esto podrás empezar a hacer todo el montaje.
2. Montaje en la Protoboard - Simulación
Usé proteus para hacer un esquemático muy fácil de entender pero como tal no es posible simular el funcionamiento del circuito ya que no existen librerías de Freedoom para proteus sin embargo puedes checar los pines y conexiones de cada elemento:
Esquemático circuito a pines de la tarjeta |
3. Código proyecto
En este proyecto no se requiere ningún tipo de librerías externas lo puedes usar de forma directa y sin problema alguno:
/*SISTEMA DE ALARMA PARA CARRO CON DETECCIÓN EN 5 PUERTAS V1.0 DESARROLLADOR: Andrés Felipe Lozano */ #include "mbed.h" Timeout crono; //Variable encargada de activarse después de X tiempo //SALIDAS PINES DigitalOut verde(PTC7,1); //LED INDICADOR VERDE DigitalOut buzzer(PTC0,1); //PIN DONDE DEBE IR EL BUZZER //ENTRADAS PINES InterruptIn sw1(PTA13); //Puerta uno InterruptIn sw2(PTD5); //Puerta dos InterruptIn sw3(PTD0); //Puerta tres InterruptIn sw4(PTD2); //Puerta cuatro InterruptIn sw5(PTD3); //Puerta cinco InterruptIn onoffcar(PTD1); //Botón ON/OFF del auto InterruptIn panico(PTA1); //Botón depánico InterruptIn StarStop(PTA2); //Star/Stop //VARIABLES BOOLEANAS bool star=true; bool aux1,aux2, aux3; /* INICIO DECLARACIÓN DE MIS FUNCIONES */ void onoffalarma(){ star=!star; wait(1); //Elimina rebotes en el botón } void puertas(){ //Proceso que se ejecutará al llamar la función puertas while(1){ buzzer = 1; verde=0; wait(0.05); buzzer = 0; wait(0.05); aux1 = StarStop.read(); if (aux1 == 0){ NVIC_SystemReset (); //Parámetro reservado de mbed para reiniciar mi tarjeta } } } void carro(){ //FUNCIÓN ENCENDIDO CARRO verde = !verde; wait(1); if(sw1==0){ buzzer=0; } } void SOS(){ //FUNCIÓN BOTÓN PÁNICO while(1){ buzzer = 1; verde=0; wait(0.05); buzzer = 0; wait(0.05); aux1 = StarStop.read(); if (aux1 == 0){ NVIC_SystemReset (); } } } /*FIN DECLARACIÓN DE MIS FUNCIONES */ int main() { StarStop.fall(&onoffalarma); buzzer=0; verde=0; onoffcar.rise(&carro); while(1){ if(star){ buzzer=0; } else{ } if(verde==1){ //Si el led verde está encendido entonces anulará la ejecución de activar la alarma así opriman las puertas sw1.fall(NULL); //Flancos de bajada sw2.fall(NULL); sw3.fall(NULL); sw4.fall(NULL); sw5.fall(NULL); } else{ sw1.fall(&puertas); sw2.fall(&puertas); sw3.fall(&puertas); sw4.fall(&puertas); sw5.fall(&puertas); } if(verde==1){ //Si el led verde está encendido entonces ejecutará lo siguiente if(panico==0){ //Si se pulsa el botón de pánico ejecutará la acción del TIMEOUT que llama la función SOS crono.attach(&SOS, 10.0); //Ejecuta después de 10 segundos } } } }
4. Montaje final del Proyecto
Realmente este paso no tiene ningún criterio analítico pero muchos en el desarrollo de sus proyectos tienen dudas de este montaje como queda realmente así que aquí les dejo una fotografía:
Montaje físico circuito + tarjeta |
Es todo en este post, espero les sea de utilidad y aumenten su dominio en estos temas, ya que no se trata de sólo copiar. Hasta la próxima ;)
0 comentarios:
Publicar un comentario