Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

BeeMonitor

Composants et fournitures

Arduino Nano 33 BLE Sense
× 1
Câble USB-A vers Micro-USB
× 1

Applications et services en ligne

Arduino IDE
Edge Impulse Studio
Android Studio

À propos de ce projet

Présentation

Nous présenterons le développement d'une application de contrôle des abeilles qui aide l'apiculteur à produire efficacement du miel et d'autres produits. L'application couvre le domaine de l'apiculture. Nous voyons la motivation à aider l'apiculteur à contrôler les abeilles et à être aussi efficace que possible. Cela permettrait à l'apiculteur de travailler plus facilement de longues heures sur des ruches individuelles. L'idée est qu'en fonction de la température et de l'humidité, l'application offre un aperçu de l'état de la famille des abeilles dans une ruche particulière et la détection d'un événement spécial appelé essaimage. Il s'agit d'un événement dans lequel la famille des abeilles est divisée en deux parties. Une partie reste dans la ruche et l'autre quitte la ruche et trouve un nouveau foyer. La première partie reste dans la ruche et attend l'éclosion de la nouvelle reine, tandis que la seconde moitié quitte la ruche avec l'ancienne reine. Ici, il est important que l'apiculteur prenne des mesures en temps opportun. Il serait aidé en cela par une application de contrôle des abeilles, qui reconnaît un tel événement sur la base du traitement sonore du bourdonnement des abeilles.

Solution

Étant donné qu'un apiculteur individuel possède généralement de grandes quantités de ruches et, par conséquent, également de nombreuses ruches, l'inspection manuelle d'une ruche individuelle nécessite beaucoup de temps. A l'aide de notre application, l'apiculteur se connecte à des ruches individuelles via un terminal mobile et une connexion Bluetooth, où il peut visualiser l'état de santé de la famille des abeilles. De plus, l'application avertira l'apiculteur en cas d'essaim qu'il pourra prendre des mesures en temps opportun et que les abeilles ne s'échapperont pas dans la nature, ce qui réduirait la production de miel.

Descriptif

Le système se compose d'un microcontrôleur Arduino Nano BLE 33 Sense, qui contient également un microphone sur sa carte de circuit imprimé. A l'aide d'un algorithme fonctionnant sur un microcontrôleur, le contrôleur écoute le bourdonnement des abeilles et, à l'aide d'un modèle appris, reconnaît la différence de bourdonnement des abeilles, quand la reine est présente dans la ruche et quand ce n'est pas. En plus de la détection des naissances, l'Arduino comprend également un capteur de température et d'humidité. À l'aide de ces données, nous pouvons déterminer l'état ou la santé de la famille d'abeilles située dans la ruche. Étant donné que l'objectif était une faible consommation d'énergie, le système ne mesure l'état que quelques fois par jour, ou dans les périodes comprises entre 10 h 00 et 13 h 00, où le risque d'alerte est le plus élevé. Le reste de la journée, l'appareil est en grande partie inactif et ne consomme pas d'énergie.

Modèle d'apprentissage automatique

Description Procédure EdgeImpulse

  • Capturer des données à l'aide d'un microphone

Tout d'abord, nous avons capturé le bourdonnement des abeilles à l'aide d'un microphone pour collecter des données qui ont constitué la base d'un modèle d'apprentissage.

  • Analyse spectrale des sons

Les données ont ensuite été traitées à l'aide d'un spectrogramme.

  • Créer un modèle à l'aide d'un réseau de neurones

Le spectrogramme était l'entrée du réseau de neurones, qui a été utilisé pour entraîner le modèle. Après un long recalcul, nous avons obtenu les résultats, qui ont été donnés dans une matrice montrant les performances de reconnaissance du modèle.

Le graphique ci-dessous montre les performances du modèle en fonction des données capturées.

  • Créer une bibliothèque et télécharger sur l'Arduino

Enfin, nous avons créé une bibliothèque à télécharger sur la carte Arduino.

Matériel

  • Arduino Nano BLE 33 Sense
  • Alimentation de la batterie
  • Terminal mobile Android

Connectivité

Pour recevoir des données d'Arduino vers une application sur un téléphone Android, nous avons utilisé l'option de connectivité Bluetooth. Arduino Nano BLE 33 Sense propose un module bluetooth sur son circuit imprimé. Cette communication vous permet de vous connecter à l'Arduino à l'intérieur de la ruche et d'être éloigné de la ruche où il n'y a aucun risque de piqûres d'abeilles.

Application Android

Ensuite, nous avons conçu l'application Android dont nous avons besoin pour nous connecter à l'Arduino Nano BLE 33 Sense et commencer à télécharger des données et des alertes sur l'état de la famille des abeilles.

1. Connexion à l'appareil dans la ruche

2. Écran principal avec données de température et d'humidité et alertes d'événements.

Ci-dessous, vous pouvez voir les alertes envoyées par l'appareil Arduino à l'application Android.

Concept de fonctionnement

Faites-le vous-même !

Instructions pour tester notre système.

Étape 1 Téléchargement de l'environnement de programme .ino pour programmer l'Arduino ble 33 sense. Compilez le code et envoyez-le à la carte Arduino.

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

Étape 2 Téléchargez l'application sur votre appareil Android (fichier .apk en pièce jointe)

Étape 3 Installez le périphérique Arduino dans la ruche.

Étape 4 Connexion à l'appareil avec une connexion Bluetooth

Améliorations

  • Amélioration du modèle d'apprentissage automatique en augmentant la base de données du bourdonnement des abeilles.
  • Ajouter des fonctionnalités supplémentaires à l'application Android
  • Nous constatons des améliorations dans la création d'une base de données d'informations sur les ruches sur le réseau LoraWan, où les données peuvent être envoyées à un serveur et accessibles n'importe où, n'importe quand.

Conclusion

Nous sommes heureux de présenter notre idée et de partager avec vous un projet que vous pouvez essayer dans votre propre environnement. Nous pensons être sur la bonne voie pour faciliter le travail de l'apiculteur avec de nouvelles améliorations. Vous pouvez également contribuer à l'amélioration du modèle en augmentant la base de données des enregistrements de buzz d'abeilles. Cela rendra le système plus précis et moins sensible aux interférences. Merci !

Code

  • Arduino Nano ble 33 sens
  • ei-smartbees-arduino-1.0.6.zip
Arduino Nano ble 33 sensC/C++
/* Exemples d'Arduino Edge Impulse Copyright (c) 2021 EdgeImpulse Inc. L'autorisation est par la présente accordée, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), de traiter dans le Logiciel sans restriction, y compris, sans limitation, les droits d'utilisation, de copie, de modification, de fusion, de publication, de distribution, de sous-licence et/ou de vente de copies du Logiciel, et de permettre aux personnes auxquelles le Logiciel est fourni de le faire, sous réserve des conditions suivantes :L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans toutes les copies ou parties substantielles du logiciel. LE LOGICIEL EST FOURNI « EN L'ÉTAT », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS, MAIS SANS S'Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D'ADAPTATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. EN AUCUN CAS LES AUTEURS OU TITULAIRES DE DROITS D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QU'IL SOIT DANS UNE ACTION DE CONTRAT, DÉLIT OU AUTRE, DÉCOULANT DE, OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES TRANSACTIONS DANS LE LOGICIEL.*/// Si votre cible est limitée en mémoire, supprimez cette macro pour économiser 10K RAM#define EIDSP_QUANTIZE_FILTERBANK 0/* Inclut ----------------------- ----------------------------------------- */#include  #include #include #include #include #define BLE_UUID_STRING "1A3AC131-31EF-758B-BC51-54A61958EF82"#DEFine-2E BLE_UUIDBA2E_UUID48 082F-C079-9E75AAE428B1"/** Tampons audio, pointeurs et sélecteurs */typedef struct { int16_t *buffer; uint8_t buf_ready; uint32_t buf_count; uint32_t n_samples;} inference_t;static inference_t inference;static short sampleBuffer[2048];static bool debug_nn =false; // Définissez ceci sur true pour voir par exemple fonctionnalités générées à partir du signal brut BLEDevice central; BLEService service (BLE_UUID_TEST_SERVICE); BLEStringCharacteristic serviceOutput (BLE_UUID_STRING, BLERead | BLENotify, 200);/** @brief Arduino setup function*/void setup(){ // mettez votre code de configuration ici, pour exécuter une fois :Serial.begin(115200); tandis que (!Série); pinMode(LED_BUILTIN, SORTIE); if (!BLE.begin()) { Serial.println("échec du démarrage de BLE !"); tandis que (1) ; } BLE.setLocalName("BeeHive"); BLE.setAdvertisedService(service); service.addCharacteristic(serviceOutput); BLE.addService(service); BLE.publicité(); Serial.println("Périphérique Bluetooth actif, en attente de connexions..."); if (!HTS.begin()) { Serial.println("Impossible d'initialiser le capteur d'humidité et de température !"); tandis que (1) ; } if (microphone_inference_start(EI_CLASSIFIER_RAW_SAMPLE_COUNT) ==false) { ei_printf("ERR :échec de la configuration de l'échantillonnage audio\r\n"); retourner; }}/** @bref fonction principale Arduino. Exécute la boucle d'inférence.*/void loop(){ central =BLE.central(); if (central) { Serial.print("Connecté au central :"); Serial.println(central.address()); digitalWrite(LED_BUILTIN, HAUT); while (central.connected()) { ei_printf("Démarrage de l'inférence dans 2 secondes...\n"); retard (2000); ei_printf("Enregistrement...\n"); bool m =microphone_inference_record(); if (!m) { ei_printf("ERR :échec de l'enregistrement audio...\n"); retourner; } température flottante =HTS.readTemperature(); float humidité =HTS.readHumidity(); StaticJsonDocument<600> doc ; doc["température"] =(rond(température*10)/10,0); doc["humidité"] =(rond(humidité*10)/10,0); doc["événement"] =""; ei_printf("Enregistrement terminé\n"); signal_t ​​signal ; signal.total_length =EI_CLASSIFIER_RAW_SAMPLE_COUNT ; signal.get_data =µphone_audio_signal_get_data; ei_impulse_result_t résultat ={ 0 } ; EI_IMPULSE_ERROR r =run_classifier(&signal, &result, debug_nn); if (r !=EI_IMPULSE_OK) { ei_printf("ERR :échec de l'exécution du classificateur (%d)\n", r); retourner; } // affiche les prédictions ei_printf("Prédictions "); ei_printf("(DSP :%d ms., Classification :%d ms., Anomaly :%d ms.)", result.timing.dsp, result.timing.classification, result.timing.anomaly); ei_printf(":\n"); prédictions flottantes[3] ; pour (size_t ix =0 ; ix  0) { Serial.write(print_buf); }}/** @brief Rappel complet du tampon PDM Obtenir des données et appeler le rappel du thread audio*/static void pdm_data_ready_inference_callback(void){ int bytesAvailable =PDM.available(); // lecture dans le tampon d'échantillons 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; Pause; } } }}/** @brief Init inferencing struct et setup/start PDM @param[in] n_samples Les n échantillons @return { description_of_the_return_value }*/static bool microphone_inference_start(uint32_t n_samples){ inference.buffer =(int16_t *)malloc (n_samples * sizeof(int16_t)); if (inference.buffer ==NULL) { return false; } inference.buf_count =0; inférence.n_samples =n_samples ; inference.buf_ready =0; // configurer le rappel de réception de données PDM.onReceive(&pdm_data_ready_inference_callback); // éventuellement définir le gain, la valeur par défaut est 20 PDM.setGain(80); PDM.setBufferSize (4096); // initialiser PDM avec :// - un canal (mode mono) // - une fréquence d'échantillonnage de 16 kHz if (!PDM.begin(1, EI_CLASSIFIER_FREQUENCY)) { ei_printf("Impossible de démarrer PDM!"); microphone_inference_end(); renvoie faux ; } return true;}/** @brief Attendre les nouvelles données @return True une fois terminé*/static bool microphone_inference_record(void){ inference.buf_ready =0; inference.buf_count =0; while (inference.buf_ready ==0) { //delay(10); retard (2000); } return true;}/** Récupère les données brutes du signal audio*/static int microphone_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 Arrête PDM et libère les tampons*/static void microphone_inference_end(void){ PDM.end(); free(inference.buffer);}#if !defined(EI_CLASSIFIER_SENSOR) || EI_CLASSIFIER_SENSOR !=EI_CLASSIFIER_SENSOR_MICROPHONE#error "Modèle invalide pour le capteur actuel."#endif
ei-smartbees-arduino-1.0.6.zipC/C++
Bibliothèque avec modèle d'apprentissage automatique
Aucun aperçu (téléchargement uniquement).
Application Android
https://github.com/TCodingB/BeeMonitor.git
Fichier Apk pour appareil Android
https://github.com/TCodingB/BeeMonitor/tree/main/apk/debug

Processus de fabrication

  1. Qu'est-ce que l'usinage VMC ?
  2. Guide du marquage laser sur aluminium
  3. Soudage MIG vs soudage TIG
  4. Guide du marquage laser
  5. Considérations pour l'usinage suisse à haute production
  6. Guide du prototypage CNC
  7. Comprendre le processus de fabrication d'arbres
  8. Électropolissage contre passivation
  9. Qu'est-ce que la passivation de l'acier inoxydable ?