martes, 9 de octubre de 2018

PROYECTO: Alarma de carro en C++ con Fredoom mbed KL25Z código

Este proyecto está desarrollado en C++ al final del post podrás descargar el código + archivos de montaje, proteus y código.
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.


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
Recordemos que los pines que se ven en el esquema anterior es donde se deben conectar en la tarjeta para ello debes mirar el esquemática de conexiones de pines de la tarjeta y listo. (Recuerda que al final del post podrás descargar todos los archivos proteus + código + montaje).


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
Finalmente es todo lo que hay referente a este proyecto más claro no puede ser a continuación podrás descargar el proyecto completo este incluye código listo para copiar + archivo de proteus (Recuerda que no es simulación y solo esquemático de pines y circuito, pero sirve) + guía de ayuda + Fotos del montaje en buena resolución:

https://drive.google.com/open?id=1pk7rG9kWk6LxXzeGRS3qtLL8vrqHdYId

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 ;)
Compartir:

0 comentarios:

Publicar un comentario

SkullTrapers

 

CLICK AQUI PARA IR A NUESTRA TIENDA ON LINE ARDUINO, ELECTRÓNICA, COMPONENTES