Ya hay una aplicación para Android para detección de movimientos, tiene el sorprendente nombre de Motion Detector. La aplicación es excelente (tiene una configuración casi idéntica al MOTION para Linux), consume muy poca batería y es capaz de detectar movimiento y hacer fotos incluso estando el movil bloqueado y con la pantalla apagada lo cual repercute en un excelente bajo consumo de batería, PERO tiene un problema: esta forma de funcionamiento y de acceso a la cámara provoca que las fotografías estén enfocadas en infinito, y no hay manera de enfocarlas desde el propio programa.
Claro es bastante incómodo y algo absurdo, detectar movimientos cerca y fotografiar enfocando lejos, a infinito, justamente el único sitio donde no hay movimiento!!

Pero todo tiene remedio. Con ayuda de Tasker (una app para Android que ya os comenté hace tiempo) he ingeniado una tarea para grabar vídeos/fotografías bien enfocados y con toda la calidad HD que da el Galaxy S4.

La idea es sencilla: detectar movimientos usando Motion detector, pero este en lugar de tomar fotografías activa un evento Tasker que se encarga de: pausar la detección, tomar el control de la cámara, ponerla a grabar (con su autofoco activo), parar la grabación después de unos segundos y volver a reactivar la detección. Así se hizo este vídeo.

Este método via tareas de Tasker tiene algunas limitaciones, la más importante es que Tasker no puede desbloquear el teléfono cuando este se bloquea manualmente ó por un periodo de tiempo inactivo (no es un bug es una feature). Por lo que antes de usar este script es obligatorio eliminar cualquier tipo de sistema de seguridad de la pantalla de bloqueo. Una vez desactivado el bloqueo de la pantalla Secure Settings puede «levantar» el teléfono que se encuentra inactivo y proceder a activar la cámara y emular las pulsaciones de teclas (en realidad Secure Settings si puede levantar un teléfono que esté bloqueado por el método de patrón y PIN, pero puesto que no son métodos que yo esté usando los he ignorado).

Tarea para Tasker

Empezaremos por el final, diseñando la lista de acciones que se van a realizar en el momento que se detecte movimiento. Para ello abrimos Tasker, vamos a TAREAS y creamos una nueva tarea que llamaremos «Grabarunvideo«, esta tarea contiene:

  1. Desactivar MOTION DETECTOR
    Sistema > Enviar INTENT > Acción : org.motion.detector.ACTION_DETECTOR_OFF
  2. Reactivar la pantalla con Secure Settings
    Plugins > Secure Settings > Configuracion: Actions > Wake Device : Screen & Keyboard Light on
  3. Esperar 500 ms
    Tarea > Esperar : 500 Ms
  4. Abrir cámara
    Sistema > Enviar INTENT > Acción : android.media.action.STILL_IMAGE_CAMERA
  5. Esperar 3 s.
    Tarea > Esperar : 3 s
  6. Emular pulsación de botón de vídeocámara en pantalla
    Script > Ejecutar Consola : input tap 1800 240
  7. Esperar 20 segundos
    Tarea > Esperar : 20 s
  8. Emular pulsación de botón DETENER GRABACIÓN en pantalla
    Script > Ejecutar Consola : input tap 1800 260
  9. Esperar 500 ms
    Tarea > Esperar : 500 Ms
  10. Emular botón ATRAS
    Entrada > Botón : Atras
  11. Esperar 4 s.
    Tarea > Esperar : 4 s
  12. Reactivar MOTION DETECTOR
    Sistema > Enviar INTENT > Acción : org.motion.detector.ACTION_DETECTOR_ON

Podéis importar desde Tasker esta tarea usando este XML.

Llegados a este punto si damos PLAY a la tarea que acabamos de crear se nos debería grabar un primer vídeo y al final activaría Motion detector (que no lo teníamos activado).

Configurar Motion Detector

La configuración de Motion detector requeriría un solo apunte para comentarla así es que en este programa únicamente necesitáis por ahora es

  1. Desactivar la captura de imágenes (Register > Picture > Desac )
  2. Activar el envío de eventos ( Notification > Send > Activ )
  3. Activar la recepción de eventos ( Notification > Receive > checkbox seleccionado)

Con esta configuración tal y como aparece en la imagen Motion detector no realizará ninguna acción unicamente producirá y recibirá eventos.


Perfil para Tasker

Ya solo nos falta crear un perfil en Tasker que detecte cuando Motion detector ha detectado movimiento y lance la tarea que creamos anteriormente. Dirígete a la solapa Perfiles de Tasker y crea una nuevo

  1. Nuevo Perfil > Evento > Sistema > Intent Recibido > Accion: org.motion.detector.ACTION_GLOBAL_BROADCAST

A continuación de la lista de tareas que os mostrará seleccionad la que creasteis anteriormente llamada «Grabarunvideo». Listo.

Funcionamiento y mejoras

Una vez seguidos los pasos anteriores cuando quieras grabar alguna situación lo único que tienes que hacer es deshabilitar cualquier sistema seguridad de la pantalla de bloqueo, buscar una ubicación donde puedas dejar la cámara sin que esta se mueva, activar Motion detector y situar la cámara (desde Motion detector podéis configurar cuanto tiempo de retardo -delay- debe pasar entre que se active el programa y comience la detección, lo normal es darle 20-30 segundos para que os de tiempo tranquilamente a ubicar el teléfono con seguridad y apartarse sin que este os grabe).
Si pretendéis fotografiar algún tipo de fauna (un pajarillo, un ratón) es recomendable además poner en modo silencio el teléfono para evitar sustos como la llegada de un SMS, una llamada inoportuna, etc… .
OJO: La detección sigue de forma indefinida hasta que la detengáis. Para hacerlo bastaría con coger el teléfono parar la grabación que hubiera en marcha y desactivar Tasker. Esta sería la primera mejora.


Mejoras. Como decía si por cualquier motivo se os va de la cabeza que tenéis el teléfono detectando movimiento podéis encontraros con la tarjeta llena ó el aviso de «batería al 15%». Así la primera mejora probablemente sería activar algún contador/limite de grabaciones.
Ahora bien, hay que tener en cuenta que puesto que tanto Motion detector y la tarea Grabarunvideo de Tasker se están reiniciando constantemente no vale con poner una variable que haga de contador porque a cada ciclo esta se reiniciaría a CERO, así es que es necesario recurrir a almacenar datos en la tarjeta SD que mantengan el control de QUE y CUANDO se está grabando para detenerlo cuando nos interese.
Yo no lo he hecho porque tampoco preveo usarlo tanto como para que se me olvide que la estoy usando. La he usado y la uso ocasionalmente para sacar algún primer plano de algún pájaro en casa (no recelan de la presencia cercana de un teléfono) o sorprender a algún ratón saliendo de su madriguera, pero tenedlo en cuenta si queréis darle un uso más intensivo.

A partir del esquema anterior es muy fácil modificar la tarea para realizar otras acciones: llamar por teléfono cuando se detecte movimiento, hacer que el móvil grite si alguien lo mueve, enfocar durante la grabación áreas de la pantalla no-centrales, etc, etc, etc.. las posibilidades son infinitas.