Para determinar el umbral de caída hay que tener en cuenta las siguientes cuestiones:
- Desconexiones del end device
- Añadir un comando que indique al visualizador que el arduino ha detectado una caída
- Características del algoritmo de detección
Desconexiones del end device
Hay que tener en cuenta que en cualquier momento puede ocurrir una desconexión del end device. Una desconexión por parte del end device deja, como mucho, un byte corrupto (el resto de datos se pierden), por lo que, si el byte es de indicación de eje, se ignorará, mientras que si es de dato se visualizará una medición errónea. El error no iría más allá de uno o dos datos erróneos (el segundo en la reconexión). Que sólo afecta a la visualización.
Añadir comandos
Se aprovechará para modificar el protocolo de comunicación entre el arduino y el visualizador. Aprovechando que el rango de valores de los ejes no es 0-255, se irán asignando los números superiores a los diferentes comandos. Esto permitirá un mayor blindaje frente a errores de envío, ya que será más difícil confundir un comando con un valor de eje.
De este modo, se asignan los siguientes bytes a los distintos comandos:
Comando | byte (decimal) | byte (hexadecimal) |
---|---|---|
dato eje X | 255 | 0xFF |
dato eje Y | 254 | 0xFE |
caída detectada | 253 | 0xFD |
Cuando el arduino detecte una caída informará al visualizador enviándole el byte ‘253’. Hay que tener en cuenta que en caso de desconexión, el byte de información de caída no llegará al visualizador, pero esto no es importante por el momento, porque el objetivo es sólo detectar umbrales y algoritmos.
Algoritmo de detección
El algoritmo para la detección de caídas debería cumplir como mínimo las siguientes características características:
- Ser de cálculo rápido
- No consumir mucha RAM
- Ser robustos frente a posibles valores erróneos aislados de lectura: cuando por algún motivo extraño uno de los valores es de manera llamativa muy superior a todos los circundantes.
Una pregunta que surge es: ¿Es necesario tener en cuenta los dos ejes conjuntamente, o se pueden tratar los ejes independientemente?
Como primer algoritmo, se propone utilizar un simple umbral de 2g (correspondiente a 2/3 del valor máximo en positivo y negativo de los ejes). Será necesario probar si se ha de verificar en ambos ejes en una ventana temporal el mismo suceso, o simplemente tenerlo en cuenta para un eje.
Para la robustez, se verificará una ventana de valores antes y después, para comprobar si es un valor aislado.
Post a Comment