Paso 3: Sensor ultrasónico - detección de movimiento
Introducción a los sensores de distancia por ultrasonidos
El sensor de ultrasonidos HC-SR04 y otros como él, simplemente envían un 'ping' (con una frecuencia por encima de la audición humana) cuando se activa y guardar el tiempo que se tarda en recibir el eco.
El tiempo que se tarda en recibir la señal reflejada se representa como un pulso en el pin de "Eco".
El uso habitual del caso de uno de estos sensores para medir distancia, pero, mediante la comparación de múltiples lecturas, podemos hacer un detector de movimiento utilizable.
Retos y limitaciones
- El sensor tiene un alcance máximo (cerca de 3m supuestamente)
- Hay un límite a la frecuencia con podemos probar (no podemos probar hasta que el pulso ha regresado por lo menos).
- El sensor producirá lecturas extrañas cada ahora y entonces, tenemos que manejar estos correctamente.
Detección de movimiento
Decidí que la manera más fácil de detectar movimiento sería simplemente tomar una lectura de la distancia y comparar con la anterior, si había cambiado en más de un 30% entonces sabe ha habido movimiento. Con un sensor perfecto en un ambiente perfecto esto sería workfine, pero en realidad, hay extrañas lecturas cada ahora y después que causarían falsos disparos.
La forma de evitar esto era doble:
- Para las mediciones "anteriores" mantenía un balanceo promedio de los últimos diez valores.
- Para la comparación me aseguré de que tanto de las últimas dos lecturas en más de 30% diferente a la media. De esta manera, si una lectura no era válida, la otra sería dentro de 30% de la media y allí sería no ser ningún disparo falso.
Aplicación promedio/alisar
Este artículo tiene un buen ejemplo elegante y comprensible sobre la aplicación de un promedio de un Arduino, adaptaron su código.
Evitar los desencadenantes de repetición
No queremos a enviar SMS múltiples cuando algo se mueve por delante del sensor, o mientras que el promedio es colocando después de un disturbio, así que usé "blink contador" del LED rojo (Lea la sección LED) para determinar si ha pasado suficiente tiempo para el siguiente disparo la alarma. Me aseguré de que el número de parpadeos multiplicado por a + el tiempo del rojo que LED fue mayor que el tiempo que se tarda en llegar una nueva lectura promedio estable.