BeeMonitor: Intelligente Imkerei-Verwaltungs-App
Komponenten und Zubehör
| Komponente | Beschreibung | Anzahl |
|---|---|---|
| Arduino Nano 33 BLE Sense | Mikrocontroller mit integriertem Mikrofon, Temperatur-/Feuchtigkeitssensor, Bluetooth | 1 |
| USB-A auf Micro-USB Kabel | Programmierung/Stromversorgung | 1 |
Apps und Online-Dienste
- Arduino IDE
- Edge Impulse Studio (Machine Learning)
- Android Studio (App-Entwicklung)
Über dieses Projekt
Einführung
Wir präsentieren die Entwicklung einer Bienensteuerungsanwendung, die Imkern bei der effizienten Honigproduktion hilft. Basierend auf Temperatur und Feuchtigkeit bietet die App Einblick in den Zustand des Bienenvolks in einem bestimmten Bienenstock und erkennt ein besonderes Ereignis: das Schwärmen. Dabei teilt sich das Bienenvolk in zwei Teile – einer bleibt im Stock, der andere verlässt ihn mit der alten Königin. Der Imker muss rechtzeitig handeln. Die App erkennt dies durch Schallverarbeitung des Bienensummens.
Lösung
Da ein Imker meist viele Stöcke hat, erfordert die manuelle Kontrolle viel Zeit. Mit unserer App verbindet sich der Imker per Mobilgerät und Bluetooth mit einzelnen Stöcken und sieht den Zustand des Bienenvolks. Zudem warnt die App bei Schwärmen, damit der Imker rechtzeitig eingreifen kann und Bienen nicht entweichen, was die Honigproduktion mindern würde.
Beschreibung
Das System besteht aus einem Arduino Nano BLE 33 Sense Mikrocontroller mit integriertem Mikrofon. Ein Algorithmus auf dem Mikrocontroller lauscht dem Bienensummen und erkennt mittels trainiertem Modell den Unterschied im Summen, wenn die Königin im Stock ist oder nicht. Zusätzlich misst der Arduino Temperatur und Feuchtigkeit, um den Zustand des Bienenvolks zu bestimmen. Zur Energieeinsparung misst das System nur wenige Male täglich, vor allem zwischen 10 und 13 Uhr (höchste Schwärmwahrscheinlichkeit). Restlich ist das Gerät im Ruhezustand.
Machine Learning Modell
Edge Impulse Verfahren
- Datenerfassung per Mikrofon: Bienensummen aufnehmen als Basis für Lernmodell.
- Spektralanalyse: Daten per Spektrogramm verarbeiten.
- Modellbau mit neuronalem Netz: Spektrogramm als Input für neuronales Netz zum Training. Ergebnis als Matrix mit Erkennungsleistung.
- Bibliothek erstellen und auf Arduino hochladen.
Bilder zu Datenerfassung, Spektrogramm, Trainingsergebnissen und Bibliothekserstellung sind im Originalprojekt enthalten.
Hardware
- Arduino Nano BLE 33 Sense
- Batteriebetrieb
- Android-Mobilgerät
Hardware-Bilder sind im Originalprojekt enthalten.
Konnektivität
Datenübertragung vom Arduino zur Android-App per Bluetooth. Der Arduino Nano BLE 33 Sense bietet ein Bluetooth-Modul auf der Platine. So kann man sich mit dem Arduino im Stock verbinden und hat Abstand zum Stock (kein Stichenrisiko).
Android App
- Verbinden mit dem Gerät im Stock.
- Hauptbildschirm mit Temperatur-, Feuchtedaten und Ereignisalarmen.
- Alerts, die der Arduino an die Android-App sendet.
Screenshots der App sind im Originalprojekt enthalten.
Betriebskonzept
Animiertes Betriebskonzept ist im Originalprojekt enthalten.
Selbst bauen (DIY)
- Schritt 1: Arduino IDE herunterladen, .ino-Programm für Arduino BLE 33 Sense kompilieren und auf Board laden. Arduino Software
- Schritt 2: App auf Android-Gerät installieren (.apk Datei im Anhang).
- Schritt 3: Arduino-Gerät in den Bienenstock einbauen.
- Schritt 4: Per Bluetooth mit Gerät verbinden.
Verbesserungen
- ML-Modell verbessern durch Erweiterung der Bienensummen-Datenbank.
- Zusätzliche Features für Android-App.
- Datenbank für Stockinformationen im LoRaWAN-Netzwerk, damit Daten an Server gesendet und überall abrufbar sind.
Fazit
Wir freuen uns, unsere Idee zu präsentieren und ein Projekt zu teilen, das Sie in Ihrer Umgebung testen können. Wir glauben, auf dem richtigen Weg zu sein, Imkern die Arbeit zu erleichtern. Sie können zur Modellverbesserung beitragen, indem Sie Bienensumm-Aufnahmen erweitern. Das macht das System genauer und unempfindlicher gegen Störungen. Danke!
Code
Arduino Nano BLE 33 Sense (C/C++)
/* Edge Impulse Arduino examples Copyright (c) 2021 EdgeImpulse Inc. */
#define EIDSP_QUANTIZE_FILTERBANK 0
#include <PDM.h>
#include <smartbees_inference.h>
#include <ArduinoBLE.h>
#include <ArduinoJson.h>
#include <Arduino_HTS221.h>
#define BLE_UUID_STRING "1A3AC131-31EF-758B-BC51-54A61958EF82"
#define BLE_UUID_TEST_SERVICE "9A48ECBA-2E92-082F-C079-9E75AAE428B1"
typedef struct { int16_t *buffer; uint8_t buf_ready; uint32_t buf_count; uint32_t n_samples; } inference_t;
static inference_t inference;
static signed short sampleBuffer[2048];
static bool debug_nn = false;
BLEDevice central;
BLEService service(BLE_UUID_TEST_SERVICE);
BLEStringCharacteristic serviceOutput(BLE_UUID_STRING, BLERead | BLENotify, 200);
void setup() {
Serial.begin(115200);
while (!Serial);
pinMode(LED_BUILTIN, OUTPUT);
if (!BLE.begin()) { Serial.println("starting BLE failed!"); while (1); }
BLE.setLocalName("BeeHive");
BLE.setAdvertisedService(service);
service.addCharacteristic(serviceOutput);
BLE.addService(service);
BLE.advertise();
Serial.println("Bluetooth device active, waiting for connections...");
if (!HTS.begin()) { Serial.println("Failed to initialize humidity temperature sensor!"); while (1); }
if (microphone_inference_start(EI_CLASSIFIER_RAW_SAMPLE_COUNT) == false) {
ei_printf("ERR: Failed to setup audio sampling\r\n"); return;
}
}
void loop() {
central = BLE.central();
if (central) {
Serial.print("Connected to central: "); Serial.println(central.address());
digitalWrite(LED_BUILTIN, HIGH);
while (central.connected()) {
ei_printf("Starting inferencing in 2 seconds...\n");
delay(2000);
ei_printf("Recording...\n");
bool m = microphone_inference_record();
if (!m) { ei_printf("ERR: Failed to record audio...\n"); return; }
float temperature = HTS.readTemperature();
float humidity = HTS.readHumidity();
StaticJsonDocument<600> doc;
doc["temperature"] = (round(temperature*10)/10.0);
doc["humidity"] = (round(humidity*10)/10.0);
doc["event"] = "";
ei_printf("Recording done\n");
signal_t signal;
signal.total_length = EI_CLASSIFIER_RAW_SAMPLE_COUNT;
signal.get_data = µphone_audio_signal_get_data;
ei_impulse_result_t result = { 0 };
EI_IMPULSE_ERROR r = run_classifier(&signal, &result, debug_nn);
if (r != EI_IMPULSE_OK) { ei_printf("ERR: Failed to run classifier (%d)\n", r); return; }
ei_printf("Predictions "); ei_printf("(DSP: %d ms., Classification: %d ms., Anomaly: %d ms.)", result.timing.dsp, result.timing.classification, result.timing.anomaly); ei_printf(": \n");
float predictions[3];
for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
predictions[ix] = (round(result.classification[ix].value * 10) / 10.0);
}
int maximal = 0, index = 0;
for (int i = 0; i < 3; i++) {
if (maximal < predictions[i]) { maximal = predictions[i]; index = i; }
}
switch (index) {
case 0: doc["event"] = "MATICA"; break;
case 1: doc["event"] = "NIMATICE"; break;
case 2: doc["event"] = "ROJENJE"; break;
default: doc["event"] = "ERROR"; break;
}
String json; serializeJson(doc, json);
if (central.connected()) serviceOutput.writeValue(json);
#if EI_CLASSIFIER_HAS_ANOMALY == 1
ei_printf(" anomaly score: %.3f\n", result.anomaly);
#endif
Serial.print("Temperature = "); Serial.print(temperature); Serial.println(" °C");
Serial.print("Humidity = "); Serial.print(humidity); Serial.println(" %");
}
digitalWrite(LED_BUILTIN, LOW);
Serial.print("Disconnected from central: "); Serial.println(central.address());
}
}
// ... Hilfsfunktionen (ei_printf, PDM-Callback, microphone_inference_start/record/end) ...
Weitere Dateien
ei-smartbees-arduino-1.0.6.zip- Bibliothek mit ML-Modell- Android App: GitHub Repository
- APK-Datei: Debug APK
Herstellungsprozess
- Was ist VMC-Bearbeitung? Expertenüberblick über Vertikale Bearbeitungszentren
- Expertenratgeber für Aluminium-Lasermarkierung: Präzision, Langlebigkeit und Industrieanwendungen
- MIG vs. TIG Schweißen: Die richtige Lichtbogen-Schweißtechnik für Ihr Projekt wählen
- Umfassender Leitfaden zur Lasermarkierung: Arten, Vorteile und Anwendungen
- Wichtige Überlegungen für Hochvolumen-Swiss-Drehen
- CNC-Prototyping-Leitfaden: Präzision, Geschwindigkeit und kosteneffiziente Produktion
- Experten-Wellenfertigung: Präzisionsprozesse & kundenspezifische Lösungen
- Faserlaser-Markierung: Präzision, Geschwindigkeit und Vielseitigkeit für moderne Industrien
- Elektropolieren vs. Passivieren: Die richtige Edelstahl-Oberflächenveredelung wählen
- Edelstahl-Passivierung: Korrosionsbeständigkeit & Leistung steigern