Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

BeeMonitor

Componentes y suministros

Arduino Nano 33 BLE Sense
× 1
Cable USB-A a Micro-USB
× 1

Aplicaciones y servicios en línea

Arduino IDE
Edge Impulse Studio
Android Studio

Acerca de este proyecto

Introducción

Presentaremos el desarrollo de una aplicación de control de abejas que ayuda al apicultor en la producción eficiente de miel y otros productos. La aplicación cubre el campo de la apicultura. Vemos la motivación en ayudar al apicultor a controlar a las abejas y ser lo más efectivo posible. Esto facilitaría al apicultor trabajar largas horas en colmenas individuales. La idea es que, en función de la temperatura y la humedad, la aplicación ofrezca información sobre el estado de la familia de las abejas en una colmena en particular y la detección de un evento especial llamado enjambre. Este es un evento en el que la familia de las abejas se divide en dos partes. Una parte permanece en la colmena y la otra abandona la colmena y encuentra un nuevo hogar. La primera parte permanece en la colmena y espera a que nazca la nueva reina, mientras que la segunda mitad abandona la colmena junto con la reina vieja. Aquí es importante que el apicultor tome las medidas oportunas. En esto le ayudaría una aplicación de control de abejas, que reconoce tal evento sobre la base del procesamiento del sonido del zumbido de las abejas.

Solución

Dado que un apicultor individual suele tener grandes cantidades de colmenas y, en consecuencia, también muchas colmenas, la inspección manual de una colmena individual requiere mucho tiempo. Con la ayuda de nuestra aplicación, el apicultor se conecta a colmenas individuales a través de un terminal móvil y una conexión Bluetooth, donde puede ver la salud de la familia de las abejas. Además, la aplicación advertirá al apicultor en caso de enjambres que podrá tomar las medidas oportunas y las abejas no se escaparán a la naturaleza, lo que reduciría la producción de miel.

Descripción

El sistema consta de un microcontrolador Arduino Nano BLE 33 Sense, que también contiene un micrófono en su placa de circuito impreso. Con la ayuda de un algoritmo que se ejecuta en un microcontrolador, el controlador escucha el zumbido de las abejas y, con la ayuda de un modelo aprendido, reconoce la diferencia en el zumbido de las abejas, cuando la reina está presente en la colmena y cuando No lo es. Además de la detección de nacimientos, el Arduino también incluye un sensor de temperatura y humedad. Con la ayuda de estos datos podemos determinar la condición o la salud de la familia de abejas ubicada en la colmena. Dado que el objetivo era un bajo consumo de energía, el sistema mide la condición solo unas pocas veces al día, o en los períodos de tiempo entre las 10 a.m. y la 1 p.m., donde la probabilidad de enjambre es mayor. El resto del día, el dispositivo está casi inactivo y no consume energía.

Modelo de aprendizaje automático

Descripción procedimiento EdgeImpulse

  • Capture datos con un micrófono

Primero, capturamos el zumbido de las abejas usando un micrófono para recolectar datos que formaron la base de un modelo de aprendizaje.

  • Análisis espectral de sonidos

Luego, los datos se procesaron utilizando un espectrograma.

  • Construyendo un modelo usando una red neuronal

El espectrograma fue la entrada a la red neuronal, que se utilizó para entrenar el modelo. Después de un largo recálculo, obtuvimos los resultados, que se dieron en una matriz que muestra el rendimiento de reconocimiento del modelo.

El siguiente gráfico muestra el rendimiento del modelo en función de los datos capturados.

  • Cree una biblioteca y cárguela en Arduino

Finalmente, creamos una biblioteca para cargarla en la placa Arduino.

Hardware

  • Arduino Nano BLE 33 Sense
  • Energía de la batería
  • Terminal móvil Android

Conectividad

Para recibir datos de Arduino a la aplicación en un teléfono Android usamos la opción de conectividad bluetooth. Arduino Nano BLE 33 Sense ofrece un módulo bluetooth en su placa de circuito. Esta comunicación le permite conectarse al Arduino dentro de la colmena y tener una distancia de la colmena donde no hay riesgo de picaduras de abejas.

Aplicación de Android

A continuación, hemos diseñado la aplicación de Android que necesitamos para conectarnos al Arduino Nano BLE 33 Sense y comenzar a descargar datos y alertas sobre el estado de la familia de abejas.

1. Conexión al dispositivo en la colmena

2. Pantalla principal con datos de temperatura y humedad y alertas de eventos.

A continuación puede ver las alertas que el dispositivo Arduino envía a la aplicación de Android.

Concepto de funcionamiento

¡Hágalo usted mismo!

Instrucciones para probar nuestro sistema.

Paso 1 Descargando el entorno del programa .ino para programar el Arduino ble 33 sense. Compile el código y envíelo a la placa Arduino.

https://www.arduino.cc/en/software

Paso 2 Descargue la aplicación en su dispositivo Android (archivo .apk adjunto)

Paso 3 Instale el dispositivo Arduino en la colmena.

Paso 4 Conexión al dispositivo con conexión bluetooth

Mejoras

  • Mejorar el modelo de aprendizaje automático aumentando la base de datos de zumbidos de abejas.
  • Agregue funciones adicionales a la aplicación de Android
  • Vemos mejoras en la creación de una base de datos de información de colmenas en la red LoraWan, donde los datos se pueden enviar a un servidor y acceder a ellos en cualquier lugar y en cualquier momento.

Conclusión

Estamos felices de presentar nuestra idea y compartir contigo un proyecto que puedes probar en tu propio entorno. Creemos que estamos en el camino correcto para facilitar el trabajo de los apicultores con más mejoras. También puede contribuir a mejorar el modelo aumentando la base de datos de registros de zumbidos de abejas. Esto hará que el sistema sea más preciso y menos sensible a las interferencias. ¡Gracias!

Código

  • Arduino Nano ble 33 sense
  • ei-smartbees-arduino-1.0.6.zip
Arduino Nano ble 33 sense C / C ++
 / * Ejemplos de Edge Impulse Arduino Copyright (c) 2021 EdgeImpulse Inc. Por la presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para negociar el Software sin restricciones, incluidos, entre otros, los derechos para usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y / o vender copias del Software, y permitir que las personas a quienes se les proporcione el Software lo hagan, sujeto a las siguientes condiciones:El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software. EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIABILIDAD, APTITUD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE CUALQUIER RECLAMO, DAÑOS U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE OTRO MODO, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIACIONES EN EL SOFTWARE. * /// Si su objetivo tiene memoria limitada, elimine esta macro para ahorrar 10K de RAM # defina EIDSP_QUANTIZE_FILTERBANK 0 / * Incluye ----------------------- ----------------------------------------- * / # incluye  #include  #include  #include  #include  #define BLE_UUID_STRING "1A3AC131-31EF-758B-BC51-54A61958EFESTLE_UU92" #define 082F-C079-9E75AAE428B1 "/ ** Búferes, punteros y selectores de audio * / typedef struct {int16_t * buffer; uint8_t buf_ready; uint32_t buf_count; uint32_t n_samples;} inference_t; inference_t estática inferencia; sampleBuffer corto con signo estático [2048]; static bool debug_nn =false; // Establezca esto en verdadero para ver, por ejemplo, características generadas a partir de la señal sin procesar BLEDevice central; BLEService service (BLE_UUID_TEST_SERVICE); BLEStringCharacteristic serviceOutput (BLE_UUID_STRING, BLERead | BLENotify, 200); / ** @brief función de configuración de Arduino * / void setup () {// ingrese su código de configuración aquí, para ejecutar una vez:Serial.begin (115200); mientras (! Serial); pinMode (LED_BUILTIN, SALIDA); if (! BLE.begin ()) {Serial.println ("¡el inicio de BLE falló!"); mientras (1); } BLE.setLocalName ("Colmena"); BLE.setAdvertisedService (servicio); service.addCharacteristic (serviceOutput); BLE.addService (servicio); BLE.advertise (); Serial.println ("Dispositivo Bluetooth activo, esperando conexiones ..."); if (! HTS.begin ()) {Serial.println ("¡Error al inicializar el sensor de temperatura de humedad!"); mientras (1); } si (inicio_inferencia_de_micrófono (EI_CLASSIFIER_RAW_SAMPLE_COUNT) ==false) {ei_printf ("ERR:No se pudo configurar el muestreo de audio \ r \ n"); regreso; }} / ** @brief Función principal de Arduino. Ejecuta el ciclo de inferencia. * / Void loop () {central =BLE.central (); if (central) {Serial.print ("Conectado a central:"); Serial.println (dirección.central ()); escritura digital (LED_BUILTIN, ALTO); while (central.connected ()) {ei_printf ("Comenzando a inferir en 2 segundos ... \ n"); retraso (2000); ei_printf ("Grabando ... \ n"); bool m =registro_inferencia_micrófono (); if (! m) {ei_printf ("ERR:Error al grabar audio ... \ n"); regreso; } temperatura de flotación =HTS.readTemperature (); humedad de flotación =HTS.readHumidity (); StaticJsonDocument <600> doc; doc ["temperatura"] =(round (temperatura * 10) /10.0); doc ["humedad"] =(round (humedad * 10) /10.0); doc ["evento"] =""; ei_printf ("Grabación finalizada \ n"); señal_t señal; signal.total_length =EI_CLASSIFIER_RAW_SAMPLE_COUNT; signal.get_data =&micrófono_audio_signal_get_data; ei_impulse_result_t result ={0}; EI_IMPULSE_ERROR r =run_classifier (&señal, &resultado, debug_nn); if (r! =EI_IMPULSE_OK) {ei_printf ("ERR:No se pudo ejecutar el clasificador (% d) \ n", r); regreso; } // imprime las predicciones ei_printf ("Predicciones"); ei_printf ("(DSP:% d ms., Clasificación:% d ms., Anomalía:% d ms.)", result.timing.dsp, result.timing.classification, result.timing.anomaly); ei_printf (":\ n"); predicciones flotantes [3]; para (tamaño_t ix =0; ix  0) {Serial.write (print_buf); }} / ** @brief Devolución de llamada completa del búfer de PDM Obtener datos y llamar a la devolución de llamada del hilo de audio * / static void pdm_data_ready_inference_callback (void) {int bytesAvailable =PDM.available (); // leer en el búfer de muestra int bytesRead =PDM.read ((char *) &sampleBuffer [0], bytesAvailable); if (inference.buf_ready ==0) {for (int i =0; i > 1; i ++) {inference.buffer [inference.buf_count ++] =sampleBuffer [i]; if (inference.buf_count> =inference.n_samples) {inference.buf_count =0; inference.buf_ready =1; descanso; }}}} / ** @brief Inicializar estructura de inferencia y configurar / iniciar PDM @param [in] n_samples Las n muestras @return {description_of_the_return_value} * / static bool micrófono_inference_start (uint32_t n_samples) {inference.buffer =(int16_t *) malloc (n_muestras * tamaño de (int16_t)); if (inference.buffer ==NULL) {devolver falso; } inference.buf_count =0; inference.n_samples =n_samples; inference.buf_ready =0; // configurar la devolución de llamada de recepción de datos PDM.onReceive (&pdm_data_ready_inference_callback); // establece opcionalmente la ganancia, por defecto es 20 PDM.setGain (80); PDM.setBufferSize (4096); // inicializar PDM con:// - un canal (modo mono) // - una frecuencia de muestreo de 16 kHz if (! PDM.begin (1, EI_CLASSIFIER_FREQUENCY)) {ei_printf ("¡Error al iniciar PDM!"); micrófono_inferencia_end (); falso retorno; } return true;} / ** @brief Espera nuevos datos @return True cuando termine * / static bool micrófono_inferencia_record (void) {inference.buf_ready =0; inference.buf_count =0; while (inference.buf_ready ==0) {// retraso (10); retraso (2000); } return true;} / ** Obtiene datos de señales de audio sin procesar * / static int micrófono_audio_signal_get_data (size_t offset, size_t length, float * out_ptr) {numpy ::int16_to_float (&inference.buffer [offset], out_ptr, length); return 0;} / ** @brief Detener PDM y liberar búfer * / static void micrófono_inferencia_end (void) {PDM.end (); libre (inferencia.buffer);} # si! definido (EI_CLASSIFIER_SENSOR) || EI_CLASSIFIER_SENSOR! =EI_CLASSIFIER_SENSOR_MICROPHONE # error "Modelo no válido para sensor actual". # Endif 
ei-smartbees-arduino-1.0.6.zip C / C ++
Biblioteca con modelo de aprendizaje automático
 Sin vista previa (solo descarga). 
Aplicación para Android
https://github.com/TCodingB/BeeMonitor.git
Archivo Apk para dispositivo Android
https://github.com/TCodingB/BeeMonitor/tree/main/apk/debug

Proceso de manufactura

  1. ¿Qué es el mecanizado VMC?
  2. Guía para el marcado láser de aluminio
  3. Soldadura MIG frente a soldadura TIG
  4. Guía de marcado láser
  5. Consideraciones para el mecanizado suizo de alta producción
  6. Guía para la creación de prototipos CNC
  7. Comprensión del proceso de fabricación del eje
  8. ¿Qué es el marcado láser de fibra?
  9. Electropulido frente a pasivación
  10. ¿Qué es la pasivación de acero inoxidable?
  11. Cómo diseñar y diseñar equipos de pesca en horario de trabajo