
El problema
Es de vital importancia para los ganaderos que tienen vacas lecheras saber el día y la hora exactos en que sus vacas tienen un período de ciclo estral, lo que indica que el animal está listo para la inseminación. Por lo general, esto se hace monitoreando a las vacas en busca de varios signos físicos. Si el granjero pierde el día, la vaca no quedará preñada y esto resultará en que no se produzca leche durante unos 20 días.
La idea
Afortunadamente, cuando las vacas tienen un ciclo estral, comienzan a correr aquí y allá como locas y, en general, son más activas. Esta actividad se puede detectar con un pequeño dispositivo que mide los pasos que una vaca da a diario y cuando los supera, el ganadero sabrá que está lista para la inseminación.
El dispositivo puede ser muy pequeño (del tamaño de un reloj inteligente) que contiene un sensor de aceleración, una batería pequeña y un procesador diminuto. El dispositivo debería poder realizar cálculos matemáticos muy sencillos para detectar un paso. Dicho dispositivo también se puede usar en la pata de la vaca o en la cabeza o el cuello.
Además, si tenemos una granja que tiene 1000 vacas monitoreadas por dichos dispositivos, de alguna manera existe la necesidad de cargar sus datos en la nube. Obviamente, es imposible instalar un módem GSM en todos los dispositivos ya que el costo del dispositivo aumentará bastante. Para resolver ese problema, los dispositivos deberán conectarse en otros dispositivos cercanos que tengan conexión a Internet. Estos dispositivos actuarán como puntos de acceso, aunque desempeñarán un papel ligeramente diferente.
En la imagen de arriba podemos ver 7 vacas, cada una conectándose vía WiFi a un Punto de Acceso cercano. Gracias a Android Things, este proceso se puede realizar de manera muy sencilla implementando Network Discovery Services. En realidad, en el primer arranque, estos puntos de acceso se registrarán como servidores en la red WiFi. Cada 4 horas, los dispositivos que usan las vacas (CowBits), harán un chequeo de red para encontrar ese punto de acceso cercano. Cuando encuentren uno, se conectarán a él y le enviarán los datos. Los datos serán procesados por el Access Point y cuando esté listo los cargará en la nube.
En nuestro proyecto, implementamos los dispositivos en las vaca que van a contar los pasos usando la placa PICO-PI-IMX6UL de Wandboard e implementamos la parte de Access Point (llamémoslo servidor) usando una Raspberry Pi 3.
Hardware
Haciendo las conexiones
Para hacer con éxito un contador de pasos, necesitamos conectar la placa de conexión Adafruit Precision NXP 9-DOF a la placa Pico-Pi . Realice la conexión como se indica en el diagrama a continuación.
Las conexiones de hardware deberían terminar pareciéndose a las 2 imágenes siguientes.
Lo siguiente que debe hacer es actualizar los dispositivos Pico-Pi y Raspberry Pi con sus últimas imágenes de O / S.
Firebase
Para el proyecto, usaremos Google Firebase DB para almacenar los datos del sensor. ¡Inicialicemoslo!
Vaya a https://firebase.google.com/ y regístrese si aún no lo ha hecho. Inicie sesión y acceda a la consola pulsando el enlace que se indica en la siguiente imagen.
Presione el botón Agregar proyecto para crear un nuevo proyecto.
Ingrese un nombre de proyecto, seleccione un país / región y presione el botón Crear proyecto.
Una vez creado el proyecto, haga clic en la opción Autenticación en el menú, luego en el Método de inicio de sesión y habilite la autenticación de correo electrónico / contraseña.
Luego, haga clic en la pestaña Usuarios en la página Autenticación para ingresar un nuevo usuario. Por ahora, como correo electrónico ingrese test@test.com y como contraseña el ‘123456’ (números del 1 al 6). Más adelante podemos ingresar un usuario diferente y cambiar estos valores del programa si es necesario, pero por ahora ingresarlo así.
Anote el UID del usuario en el lado derecho del usuario. Necesitaremos esa identificación en el siguiente paso. Tome el siguiente Json.
{
«users» : {
«<Enter the user ID>» : {
«clientID» : «testClient»,
«mobileAppUser» : true,
«uploadUser» : true
}
}
}
Reemplace la clave <Ingrese el ID de usuario> con el ID que copió de la pestaña de usuarios en el paso anterior. Guárdelo en una carpeta con un nombre que pueda recordar (por ejemplo, Users.json).
Presione en la opción Base de datos del menú de Firebase. Luego haga clic en el botón Comenzar en la sección Base de datos en tiempo real. En la pestaña Datos, verá tres puntos cerca del enlace de la base de datos. Haga clic en ellos y luego haga clic en el elemento de menú Importar JSON. Allí, busque y seleccione el archivo que acaba de crear (por ejemplo, Users.json) y presione el botón de importación. Los datos de su base de datos deberían verse como se muestra a continuación (mire la ID de usuario).
Funciones de Google Cloud
El dispositivo Pico-Pi estará haciendo lo siguiente. Toma las lecturas del sensor, las analiza y luego las envía al punto de acceso para su posterior procesamiento y carga de los resultados a la nube. Actualmente, los datos (el número de pasos) se almacenan en la base de datos en un intervalo por minuto. ¿Qué pasa si el usuario quiere ver los pasos dados por una vaca para un día específico? En ese caso, necesitamos leer todos los pasos almacenados en los 1440 minutos de ese día y sumarlos. Esta es una tarea intensa que se debe realizar en un dispositivo móvil. También requiere que se descarguen muchos datos del servidor. No es bueno, ¿verdad?
Afortunadamente, Google está proporcionando muy buenas herramientas para dar soluciones a este tipo de problemas. Lo que tenemos que hacer es realizar la tarea de cálculo en el lado del servidor. Entonces, cuando un cliente almacena valores de pasos en la base de datos, el servidor se activa y comienza a hacer varias sumas para calcular los recuentos de pasos acumulados para varios intervalos (por ejemplo, por hora, por día, por mes, etc.). Esta funcionalidad se puede implementar mediante Google Cloud Functions para Firebase .
Para que podamos crear una función en la nube de Firebase, necesitamos instalar y configurar NPM que viene con Node.js. Vaya a https://nodejs.org/ y descargue Node.js para la versión de su sistema operativo. Luego instálelo.
Si aún no lo ha hecho, es el momento de descargar el código fuente de CowBit de Github. Vaya a https://github.com/ekalyvio/CowBit y descargue o clone el repositorio. Después de hacer eso, abra un símbolo del sistema y vaya al directorio en el que ha descomprimido el repositorio. Debería ver una carpeta de Firebase dentro de eso. Vaya a esa carpeta y también ingrese a la carpeta de funciones (repositorio / Firebase / functions). Ejecute el siguiente comando para instalar la CLI.
npm install firebase-tools
Dependiendo de su conexión a Internet y la velocidad de su computadora, este proceso puede demorar varios minutos. ¡Asegúrese de tener una gran taza de café cerca de usted, ya que necesitará combustible para continuar!
Por una razón que no entiendo del todo, tenemos que ejecutar también el siguiente comando.
npm install
Por favor, avíseme en los comentarios a continuación si conoce el motivo o si he cometido algún error. ¡Esa es la comunidad de Hackster!
Entonces corre
firebase –version
y asegúrese de que la versión sea superior a 3.5.
firebase login
e inicie sesión con su cuenta de Google.
firebase use –add
y seleccione el proyecto de Firebase de la lista y luego un alias para el proyecto cuando se le solicite (por ejemplo, predeterminado).
firebase deploy
El comando anterior generará la función que suma los pasos en la nube. Si todo ha ido bien hasta ahora, debería poder ver su función en la consola de Firebase. Haga clic en la opción Funciones en el menú de Firebase y asegúrese de que exista la función sumCowSteps (vea la imagen a continuación).
Google Tensorflow
Las vacas rumian. Eso significa que tienen un estómago temporal (segundo) y almacenan la comida allí después de comerla. Posteriormente, durante el día traen la comida y la rumian. Cuando las vacas tienen enfermedades, durante la rumia suelen escupir la comida. Podríamos decir que lo están vomitando. Por lo general, los agricultores encuentran en el suelo los vómitos, pero no saben de qué vaca proviene. Las enfermedades también se están propagando rápidamente a otras vacas, ya que comen del suelo y absorben el virus. En ese momento, existe una necesidad urgente de que el granjero encuentre la vaca enferma, la aísle y le dé tratamiento y medicamentos, pero esto es imposible porque el agricultor no sabe cuál de ellos está enfermo. Por esa razón, los ganaderos comienzan a dar antibióticos a todas las vacas, ya sea que los necesiten o no.
CowBit obtiene datos sin procesar de los sensores y luego los pasa al punto de acceso. El punto de acceso los analiza y, al usar Tensorflow, puede detectar movimientos específicos durante el proceso de rumia de las vacas. Eso significa que detectará si la vaca vomitó la comida y, como tal, si está enferma o no.
LOL !!! ¡Estoy bromeando contigo!
Dicha funcionalidad aún no se ha implementado, pero está en la lista de tareas pendientes en un futuro próximo. Cuando se implemente, actualizaré el proyecto en el repositorio de Github y, como tal, lo analizaré de cerca.
Último paso antes de ejecutar las aplicaciones
Ve a la consola de Firebase. En el lado derecho del elemento del menú Descripción general, hay un icono de engranaje. Haga clic en él y luego haga clic en Configuración del proyecto.
Haga clic en el botón AÑADIR APLICACIÓN . Perdóname por la captura de pantalla desordenada. Tuve que borrar la información que creía que era un poco sensible al público;).
Haga clic en el botón Agregar Firebase a su aplicación de Android . Como nombre de paquete, ingrese lo siguiente:
com.kaliviotis.efthymios.cowsensor.serverapp
Para el apodo de la aplicación, ingrese Aplicación del servidor.
Después de registrar la aplicación, presione Continuar y luego Finalizar . No es necesario descargar nada todavía.
Ahora, nuestra aplicación de servidor está configurada para comunicarse con Firebase. Tenemos que rehacer todo el proceso una vez más para permitir que nuestra aplicación cliente (móvil) también se comunique con Firebase.
Solo esta vez, como nombre de paquete, ingrese:
com.kaliviotis.efthymios.cowsensor.mobileapp
y como apodo ingrese Aplicación móvil.
Después de presionar el botón Registrarse, no olvide descargar el archivo google-services.json como se indica en la siguiente pantalla.
Abra el proyecto en Android Studio. En la estructura del proyecto, abra el módulo ServerApp. Arrastre y suelte el archivo google-services.json allí. La estructura de la carpeta debe ser la siguiente.
Haga lo mismo para el módulo MobileApp (vuelva a copiar el archivo allí).
¡Felicidades! Has terminado todo el proceso. ¡Ahora está listo para ejecutar las aplicaciones y comenzar a recopilar datos!
Ejecutando las aplicaciones
Dentro del proyecto de Android Studio, hay tres módulos. Uno llamado MobileApp, uno llamado SensorApp y otro llamado ServerApp. Tienes que ejecutar la SensorApp en el dispositivo Pico-Pi que tiene el sensor, la ServerApp en la Raspberry Pi que actuará como una especie de Access Point y la MobileApp en cualquier dispositivo móvil Android.
Tenga en cuenta lo siguiente. Antes de ejecutar SensorApp y ServerApp, asegúrese de que en sus archivos de manifiesto ubicados en src / main / AndroidManifest.xml debajo de cada proyecto, la siguiente línea no esté comentada.
<category android:name=»android.intent.category.IOT_LAUNCHER» />
Después de ejecutar las aplicaciones por primera vez, puede reiniciar ambos dispositivos. Las aplicaciones deben iniciarse por sí mismas después de que se inicien los dispositivos. Debería ver los primeros datos después de aproximadamente 4 horas o un poco más.
Si ejecuta la aplicación móvil en un dispositivo, según la cantidad de sensores que tenga y la cantidad de datos que haya recuperado, debería ver imágenes como la siguiente.
Para iniciar sesión en el dispositivo móvil, utilice como correo electrónico test@test.com (el que creamos en el primer paso). Como contraseña ingrese ‘123456’ (números del 1 al 6). Ya hemos creado ese usuario en la base de datos. ¿Lo recuerdas? Después de iniciar sesión, toque una vaca de la lista (si existe) para ir a sus detalles. Allí puede cambiar su nombre por algo más significativo en lugar de mirar la identificación hexadecimal. Además, al hacer clic en el botón inferior derecho, puede modificar el gráfico para mostrar el número de pasos realizados en un día, mes o año específico.
Alguna información sobre el software
Dentro del archivo StepsDataStorage.java del módulo SensorApp, hay una constante llamada . Si desea probar las aplicaciones, en lugar de esperar 4 horas para que se carguen los datos, puede hacer que este proceso ocurra más rápido. Cambie esa variable a algo como 60 * 1000. Esto es 60000 milisegundos (un minuto).lMinutesToUpload
Dentro del archivo SensorFusion.java, hay una constante llamada . Si establece ese valor en 1, el dispositivo almacenará datos sin procesar del sensor en varios archivos. No se realizará ningún cálculo del recuento de pasos. Si establece ese valor en 2, solo se producirá el cálculo del recuento de pasos (además, se enviarán los datos al punto de acceso). Si ese valor es 3, las dos funciones anteriores se producirán al mismo tiempo.ProcessorType
En el mismo archivo (SensorFusion.java), en caso de que no posea una placa Pico-Pi pero posea una segunda Raspberry Pi 3, puede descomentar la siguiente línea en la sección Raspberry Pi 3 y comentarla en la Pico-Pi sección.
public static final String I2CInterface = «I2C1»;
Recuerda que tienes que hacer el cableado correcto en la Raspberry Pi ya que es diferente con la Pico-Pi.
Además, para leer el sensor en Raspberry Pi 3, debe emitir el siguiente comando desde el shell como root.
echo -n 1 > /sys/module/i2c_bcm2708/parameters/combined
Este comando habilita el modo combinado en Raspberry Pi. Sin ejecutar el comando, la Raspberry no puede leer los datos del sensor. Google ha sido informado por un incidente y, con suerte, lo harán ejecutar automáticamente en el momento del arranque en la próxima versión de Android Things para Raspberry Pi. Una persona de Google ha emitido un informe de error en mi nombre en el siguiente enlace .
Ideas para el futuro del proyecto
Android Things en el lado del sensor, nos permite crear un software prototipo completamente funcional en muy poco tiempo para ser utilizado como prueba de concepto. Pronto, el dispositivo y el software se probarán en una vaca real y obtendremos información valiosa de los sensores. También verificaremos el algoritmo de conteo de pasos y nos aseguraremos de que dicho algoritmo pueda funcionar sin problemas y sin problemas. Evidentemente la vaca tendrá que andar por distintos tipos de superficies (hormigón, arena, hierba, etc.) para ver si el algoritmo funciona correctamente en todos estos casos.
Como se indicó anteriormente, el dispositivo Pico-Pi no está diseñado para ser utilizado como un producto comercial en tal tipo de proyecto. No es energéticamente eficiente y funciona al menos a 50 miliamperios en promedio. Como tal, solo se utilizará como prueba de concepto. Cuando veamos que el software funciona sin problemas en el Pico-Pi, se reescribirá en otro dispositivo de factor de forma pequeño hecho solo para tales operaciones.
En la imagen de arriba puede ver una placa Adafruit Feather Huzzah ensamblada que tiene la CPU ESP8266. Esa placa junto con el sensor no debería consumir más de 2 miliamperios de energía en el peor de los casos. Una simple batería de 750 mAh como la de la imagen puede mantener todo el dispositivo en funcionamiento durante semanas (e incluso meses) sin necesidad de recargarlo.
Dependiendo de las sugerencias de los veterinarios, también podríamos integrar un sensor de temperatura en el dispositivo para obtener las lecturas de temperatura de las vacas. Además, al utilizar varios algoritmos de fusión de sensores como Mahony o Madgwick ( ver ese enlace ) podemos conocer la orientación del dispositivo. Como tal, podemos saber si la vaca está acostada en el suelo y está durmiendo o no. En general, podemos recopilar muchos datos para poder detectar los comportamientos futuros de cada vaca. Esto se puede hacer con el uso de kits de herramientas de inteligencia artificial como Tensorflow.
Podés bajar el código fuente de CowBit en este link: https://github.com/ekalyvio/CowBit
Muy buen proyecto, muchas gracias.
Me parece que estamos en una época donde somos consientes de lo que es la explotación animal y las graves consecuencias que ha traído al ambiente; promover la industria ganadera ya es un lujo que el planeta no puede costear. Habiendo tantas leches vegetales, ¿en serio es necesario seguir embarazando vacas una y otra vez para quitarles a sus crías y así obtener una leche que ni siquiera necesitamos para vivir? Las vacas lecheras no existen, las vacas dan leche porque son mamás y sus crías necesitan ese alimento.
Estimado lector, estás invitado a publicar una nota sobre lo expuesto, por supuesto desde la perspectiva descrita en la siguiente propuesta:
https://humanizationoftechnology.com/contacto/solicitudes-de-publicacion-de-articulo-en-la-revista-tecnologia-humanizada/
¡Esperamos tu contacto!