BeeMonitor
Komponenten und Verbrauchsmaterialien
| × | 1 | ||||
| × | 1 |
Apps und Onlinedienste
| ||||
| ||||
|
Über dieses Projekt
Einführung
Wir präsentieren die Entwicklung einer Bienenkontrollanwendung, die dem Imker bei der effizienten Produktion von Honig und anderen Produkten hilft. Die Anwendung umfasst den Bereich der Imkerei. Wir sehen die Motivation darin, dem Imker zu helfen, die Bienen zu kontrollieren und so effektiv wie möglich zu sein. Dies würde es dem Imker erleichtern, lange Stunden an einzelnen Bienenstöcken zu arbeiten. Die Idee ist, dass die App basierend auf Temperatur und Luftfeuchtigkeit Einblicke in den Zustand der Bienenfamilie in einem bestimmten Bienenstock bietet und ein besonderes Ereignis namens Schwärmen erkennt. Dies ist eine Veranstaltung, bei der die Bienenfamilie in zwei Teile geteilt wird. Ein Teil bleibt im Bienenstock, der andere verlässt den Bienenstock und findet ein neues Zuhause. Der erste Teil verbleibt im Bienenstock und wartet auf das Schlüpfen der neuen Königin, während der zweite Teil den Bienenstock zusammen mit der alten Königin verlässt. Hier ist es wichtig, dass der Imker rechtzeitig eingreift. Dabei würde ihm eine Bienenkontrollanwendung helfen, die ein solches Ereignis anhand der Klangverarbeitung des Bienensummens erkennt.
Lösung
Da ein einzelner Imker in der Regel über große Mengen an Bienenstöcken und damit auch über viele Bienenstöcke verfügt, erfordert die manuelle Kontrolle eines einzelnen Bienenstocks viel Zeit. Mit Hilfe unserer Anwendung verbindet sich der Imker über ein mobiles Endgerät und eine Bluetooth-Verbindung mit einzelnen Bienenstöcken, wo er den Gesundheitszustand der Bienenfamilie einsehen kann. Darüber hinaus warnt die Anwendung den Imker bei Schwärmen, dass er rechtzeitig eingreifen kann und die Bienen nicht in die Natur entweichen, was die Honigproduktion reduzieren würde.
Beschreibung
Das System besteht aus einem Arduino Nano BLE 33 Sense Mikrocontroller, der auf seiner Leiterplatte auch ein Mikrofon enthält. Mit Hilfe eines Algorithmus, der auf einem Mikrocontroller läuft, hört der Controller auf das Summen der Bienen und erkennt mit Hilfe eines erlernten Modells den Unterschied im Summen der Bienen, wann die Königin im Bienenstock anwesend ist und wann es ist nicht. Neben der Geburtserkennung enthält der Arduino auch einen Temperatur- und Feuchtigkeitssensor. Mit Hilfe dieser Daten können wir den Zustand bzw. die Gesundheit der im Bienenstock befindlichen Bienenfamilie feststellen. Da ein geringer Energieverbrauch das Ziel war, misst das System den Zustand nur wenige Male am Tag bzw. in den Zeiträumen zwischen 10 und 13 Uhr, in denen die Wahrscheinlichkeit einer Verschwindung am größten ist. Den Rest des Tages ist das Gerät meistens im Leerlauf und verbraucht keine Energie.
Modell für maschinelles Lernen
Beschreibung EdgeImpulse-Verfahren
- Erfassen Sie Daten mit einem Mikrofon
Zuerst haben wir das Summen der Bienen mit einem Mikrofon aufgenommen, um Daten zu sammeln, die die Grundlage für ein Lernmodell bildeten.
- Spektralanalyse von Geräuschen
Die Daten wurden dann mit einem Spektrogramm verarbeitet.
- Ein Modell mit einem neuronalen Netzwerk erstellen
Das Spektrogramm war die Eingabe in das neuronale Netz, mit dem das Modell trainiert wurde. Nach langer Neuberechnung erhielten wir die Ergebnisse, die in einer Matrix dargestellt wurden, die die Erkennungsleistung des Modells zeigt.
Die folgende Grafik zeigt die Leistung des Modells basierend auf den erfassten Daten.
- Erstelle eine Bibliothek und lade sie zum Arduino hoch
Schließlich haben wir eine Bibliothek erstellt, die auf das Arduino-Board hochgeladen werden soll.
Hardware
- Arduino Nano BLE 33 Sense
- Batterieleistung
- Mobiles Android-Endgerät
Konnektivität
Zum Empfangen von Daten von Arduino zur Anwendung auf einem Android-Telefon haben wir die Bluetooth-Konnektivitätsoption verwendet. Arduino Nano BLE 33 Sense bietet auf seiner Platine ein Bluetooth-Modul. Diese Kommunikation ermöglicht es Ihnen, sich im Bienenstock mit dem Arduino zu verbinden und einen Abstand zum Bienenstock zu haben, in dem keine Gefahr von Bienenstichen besteht.
Android-App
Als nächstes haben wir die Android-App entwickelt, die wir benötigen, um eine Verbindung zum Arduino Nano BLE 33 Sense herzustellen und mit dem Herunterladen von Daten und Warnungen über den Status der Bienenfamilie zu beginnen.
1. Verbinden mit dem Gerät im Bienenstock
2. Hauptbildschirm mit Temperatur- und Feuchtigkeitsdaten und Ereigniswarnungen.
Unten sehen Sie Warnungen, die das Arduino-Gerät an die Android-Anwendung sendet.
Bedienkonzept
Mach es selbst!
Anleitung zum Testen unseres Systems.
Schritt 1 Download der.ino-Programmumgebung zum Programmieren des Arduino ble 33 sense. Kompilieren Sie den Code und senden Sie ihn an das Arduino-Board.
https://www.arduino.cc/en/software
Schritt 2 Laden Sie die App auf Ihr Android-Gerät herunter (.apk-Datei im Anhang)
Schritt 3 Installieren Sie das Arduino-Gerät im Bienenstock.
Schritt 4 Verbinden mit dem Gerät über Bluetooth-Verbindung
Verbesserungen
- Verbesserung des Modells für maschinelles Lernen durch Erhöhen der Datenbank des Bienensummens.
- Zusätzliche Funktionen zur Android-App hinzufügen
- Wir sehen Verbesserungen beim Aufbau einer Datenbank mit Bienenstockinformationen im LoraWan-Netzwerk, in der Daten an einen Server gesendet und überall und jederzeit darauf zugegriffen werden kann.
Fazit
Gerne präsentieren wir unsere Idee und teilen mit Ihnen ein Projekt, das Sie in Ihrer eigenen Umgebung ausprobieren können. Wir glauben, dass wir auf dem richtigen Weg sind, die Arbeit der Imker durch weitere Verbesserungen zu erleichtern. Sie können auch zur Verbesserung des Modells beitragen, indem Sie die Datenbank der Bienensummen-Aufzeichnungen erweitern. Dadurch wird das System genauer und weniger anfällig für Störungen. Danke!
Code
- Arduino Nano ble 33 Sinn
- ei-smartbees-arduino-1.0.6.zip
Arduino Nano ble 33 senseC/C++
/* Edge Impulse Arduino Beispiele Copyright (c) 2021 EdgeImpulse Inc. Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die "Software") erhält, kostenlos die Erlaubnis erteilt, mit dem Software ohne Einschränkung, einschließlich und ohne Einschränkung der Rechte, Kopien der Software zu verwenden, zu kopieren, zu modifizieren, zusammenzuführen, zu veröffentlichen, zu verteilen, zu unterlizenzieren und/oder zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:Der obige Urheberrechtshinweis und dieser Erlaubnishinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein. DIE SOFTWARE WIRD "WIE BESEHEN" BEREITGESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNGEN DER MARKTFÄHIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNGSVERLETZUNG. IN KEINEM FALL HAFTEN DIE AUTOREN ODER URHEBERRECHTSINHABER FÜR ANSPRÜCHE, SCHÄDEN ODER SONSTIGE HAFTUNG, OB AUS VERTRAGLICHEM, unerlaubter Handlung oder anderweitig, DIE AUS, AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN IN DER SOFTWARE.*/// Wenn Ihr Zielspeicher begrenzt ist, entfernen Sie dieses Makro, um 10K RAM zu sparen #define EIDSP_QUANTIZE_FILTERBANK 0/* Enthält ---------------------- ----------------------------------------- */#include#include #include #include #include #define BLE_UUID_STRING "1A3AC131-31EF-758B-BC51-54A61958EF82"#define 082F-C079-9E75AAE428B1"/** Audiopuffer, Zeiger und Selektoren */typedef struct { int16_t *buffer; uint8_t buf_ready; uint32_t buf_count; uint32_t n_samples;} inference_t;statisch inference_t inference;statisch vorzeichenbehaftet short sampleBuffer[2048];statisch bool debug_nn =false; // Setzen Sie dies auf true, um z.B. aus dem Rohsignal generierte FunktionenBLEDevice central;BLEService service(BLE_UUID_TEST_SERVICE);BLEStringCharacteristic serviceOutput(BLE_UUID_STRING, BLERead | BLENotify, 200);/** @brief Arduino setup function*/void setup(){ // Geben Sie Ihren Setup-Code hier ein, um einmal ausführen:Serial.begin(115200); while (!Seriell); pinMode (LED_BUILTIN, AUSGANG); if (!BLE.begin()) { Serial.println("Starten von BLE fehlgeschlagen!"); während (1); } BLE.setLocalName("BeeHive"); BLE.setAdvertisedService(Dienst); service.addCharacteristic(serviceOutput); BLE.addService(Dienst); BLE.advertise(); Serial.println ( "Bluetooth-Gerät aktiv, wartet auf Verbindungen ..."); if (! HTS.begin ()) { Serial.println ( "Fehler beim Initialisieren des Feuchtigkeitstemperatursensors!"); während (1); } if (microphone_inference_start(EI_CLASSIFIER_RAW_SAMPLE_COUNT) ==false) { ei_printf("ERR:Audio-Sampling konnte nicht eingerichtet werden\r\n"); Rückkehr; }}/** @brief Arduino-Hauptfunktion. Führt die Inferenzschleife aus.*/void loop(){ central =BLE.central(); if (zentral) {Serial.print ( "Mit der Zentrale verbunden:"); Serial.println (central.address ()); digitalWrite (LED_BUILTIN, HIGH); while (central.connected()) { ei_printf("Inferenz wird in 2 Sekunden gestartet...\n"); Verzögerung (2000); ei_printf("Aufzeichnung...\n"); bool m =mikrofon_inference_record(); if (!m) { ei_printf("ERR:Audioaufnahme fehlgeschlagen...\n"); Rückkehr; } Float-Temperatur =HTS.readTemperature(); Schwebefeuchtigkeit =HTS.readHumidity(); StaticJsonDocument<600> doc; doc["temperatur"] =(rund(temperatur*10)/10.0); doc["Luftfeuchtigkeit"] =(rund(Luftfeuchtigkeit*10)/10.0); doc["Ereignis"] =""; ei_printf("Aufzeichnung fertig\n"); signal_t-Signal; signal.total_length =EI_CLASSIFIER_RAW_SAMPLE_COUNT; signal.get_data =µphone_audio_signal_get_data; ei_impulse_result_t Ergebnis ={ 0 }; EI_IMPULSE_ERROR r =run_classifier(&signal, &result, debug_nn); if (r !=EI_IMPULSE_OK) { ei_printf("ERR:Klassifizierer (%d) konnte nicht ausgeführt werden\n", r); Rückkehr; } // die Vorhersagen ausgeben ei_printf("Vorhersagen"); ei_printf("(DSP:%d ms., Klassifizierung:%d ms., Anomalie:%d ms.)", result.timing.dsp, result.timing.classification, result.timing.anomaly); ei_printf(:\n"); Float-Vorhersagen[3]; for (size_t ix =0; ix 0) {Serial.write (print_buf); }}/** @brief PDM-Puffer vollständiger Rückruf Daten abrufen und Audio-Thread-Rückruf aufrufen*/statisch void pdm_data_ready_inference_callback(void){ int bytesAvailable =PDM.available(); // in den Sample-Puffer einlesen 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; brechen; } } }}/** @brief Init Inferencing struct und setup/start PDM @param[in] n_samples Die n Samples @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; schlussfolgerung.n_samples =n_samples; inference.buf_ready =0; // Datenempfangs-Callback konfigurieren PDM.onReceive(&pdm_data_ready_inference_callback); // optional die Verstärkung einstellen, standardmäßig auf 20 PDM.setGain(80); PDM.setBufferSize(4096); // PDM initialisieren mit:// - einem Kanal (Monomodus) // - einer Abtastrate von 16 kHz if (!PDM.begin(1, EI_CLASSIFIER_FREQUENCY)) { ei_printf("Fehler beim Starten von PDM!"); mikrofon_inferenz_end(); falsch zurückgeben; } return true;}/** @brief Auf neue Daten warten @return True wenn fertig*/static bool microphone_inference_record(void){ inference.buf_ready =0; inference.buf_count =0; Während (inference.buf_ready ==0) {//Verzögerung (10); Verzögerung (2000); } return true;}/** Rohdaten des Audiosignals abrufen*/static int microfon_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 PDM stoppen und Puffer freigeben*/statisch void microphone_inference_end(void){ PDM.end(); free(inference.buffer);}#if !defined(EI_CLASSIFIER_SENSOR) || EI_CLASSIFIER_SENSOR !=EI_CLASSIFIER_SENSOR_MICROPHONE#error "Ungültiges Modell für Stromsensor."#endif
ei-smartbees-arduino-1.0.6.zipC/C++
Bibliothek mit Modell für maschinelles LernenKeine Vorschau (nur Download).
Andorid-Anwendung
https://github.com/TCodingB/BeeMonitor.gitApk-Datei für Android-Gerät
https://github.com/TCodingB/BeeMonitor/tree/main/apk/debugHerstellungsprozess
- Was ist VMC-Bearbeitung?
- Leitfaden zur Laserbeschriftung mit Aluminium
- MIG-Schweißen vs. WIG-Schweißen
- Leitfaden zur Laserbeschriftung
- Überlegungen zur Schweizer Hochproduktionsbearbeitung
- Leitfaden zum CNC-Prototyping
- Den Wellenherstellungsprozess verstehen
- Was ist Faserlasermarkierung?
- Elektropolieren vs. Passivieren
- Was ist eine Edelstahlpassivierung?