Sistema Wirless de Alarma Comunitaria


Introducción



Proyecto que consiste en la implementación de un sistema de alarma comunitaria, en el cual, cada dispositivo conectado y perteneciente a la red recibirá, desplegará y repetirá el mensaje de alarma emanada por alguno de los dispositivos (nodos).




Implementación


La implementación fue llevada a cabo mediante el uso de motes, particularmente telosb.

A continuación se presentará el esquema general de conexiones, así como la lista de módulos programados, con su debida explicacion.

Cabe destacar que para iniciar este proyecto se hizo de la aplicación GlowRadio como base, la que fue siendo modificada paulatinamente, hasta el punto de prácticamente conservar su nombre y el de algunas variables solamente. Obviamente es uno de los aspectos que se deben mejorar de esta versión.

Esquema completo de conexiones

SWAC-Conf-Basica3.jpg

GlowRadioCArchivo de configuración de modulo GlowRadioM encargado de efectuar las conecciones de StdControl entre módulo principal (main) y GlowRadioM, GenericComm y UserButtonC, Ademas de conectar módulos Leds y UserButtonM e interfaces GenericComm.SendMsg, GenericComm.ReceiveMsg a GlowRadioM
GlowRadioMMódulo encargado de implementar la interfaz StdControl proveída a main y manejar la recepción, interpretación y envío de paquetes, además es encargado de manejar las interfaz con el usuario, ya que interpreta y ejecuta la orden de apagado de leds.
UserButtonCArchivo de configuración de modulo UserButtonM, se encarga de proveer la interfaz StdControl al módulo Main la que a será compartida con el modulo UserButtonM, y de proveer la interfaz MSP430Event al módulo GlowRadioM,la que será compartida con el módulo UserButtonM.
UserButtonM Módulo encargado de implementar las interfaces StdControl y MSP430Event, la implementación de esta última permite al módulo GlowRadioM la utilización del botón de usuario.





Archivos de código versión presentada:Archivos de código versión más avanzada no finalizada:
GlowRadioC
GlowRadioM
UserButtonC
UserButtonM
GlowRadioC
GlowRadioM
UserButtonC
UserButtonM



A continuación se explicará el algoritmo de manejo de leds y estados.




En GlowRadioM:
async event void UserButton.fired()
  {       
          if(myState == IDLE)
          {
            GlowMsg_t* body = (GlowMsg_t*)m_msg.data;
          
         body->action = HELP;
         body->address = myAddress;
         body -> sourceMoteID = myAddress;
         if( call SendMsg.send( TOS_BCAST_ADDR, sizeof(GlowMsg_t), &m_msg ) == SUCCESS )
             m_is_sending = TRUE;
            myState = SENDING_MESSAGE;
            showAddress = myAddress;
          turnOnLed(myAddress);
}
        else
        if(myState == SENDING_MESSAGE)
        {
            turnOffLeds();
            myState = IDLE;
        }
        else
        if(myState == RECEIVING_MESSAGE)
        {
            turnOffLeds();
            myState = IDLE;
        }

    }
Se ha pulsado botón de usario
{
  Si estoy en estado de descanso
  {
     - Llenar paquete a enviar con mis              datos
     - Enviar paquete
     - Encender LED correspondiente a mi        mote
  }
o
  Si he enviado señal de auxilio
  {
      - Apagar LEDs
      - Setear a estado de descanso
   }
o
Si he recibido señal de auxilio
   {
      - Apagar LEDs
      - Setear a estado de descanso
   }
}


Trabajo a futuro


  • Implementar sistema de reenvío de paquetes
  • Implementar salida a LCD
  • Implementar sistema de configuración desde servidor

Consideraciones Finales


Creo que, si bien no pude cumplir a cabalidad los objetivos propuestos, puesto que no logré terminar mi versión con repetición de paquetes, ni utilizar el puerto de I/O para controlar un display LCD, si cumplí el más importante:  aprender.

Creo que el aprendizaje de esta tecnología es muy interesante, dado el potencial que tiene, lo nueva que es y, por ende la gran cantidad de desarrollos posibles y la poca gente capacitada para hacerlo.