BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением
Компоненты и материалы
| Компонент | Описание | Кол-во |
|---|---|---|
| Arduino Nano 33 BLE Sense | Микроконтроллер с BLE, микрофон, датчики среды | 1 |
| USB-A — Micro-USB кабель | Для прошивки и питания | 1 |
Приложения и сервисы
- Arduino IDE
- Edge Impulse Studio — обучение ML-модели
- Android Studio — разработка мобильного приложения
О проекте
Введение
Приложение для эффективного пчеловодства: контроль состояния пчелиных семей, раннее обнаружение роя. При рое семья делится: часть остается с новой маточной, часть улетает со старой. Пчеловод должен успеть среагировать, иначе теряется медопродуктивность.
Решение
Пчеловод подключается к ульям через мобильное приложение по Bluetooth. Приложение показывает здоровье семьи и предупреждает о рое. Ручной осмотр множества ульев затратен по времени — система автоматизирует контроль.
Описание системы
Основа — Arduino Nano BLE 33 Sense с встроенным микрофоном. Алгоритм на микроконтроллере анализирует жужжание пчел и классифицирует: маточная в улье / нет маточной / роение. Датчики температуры и влажности (HTS221) оценивают состояние семьи. Для экономии энергии измерения проводятся несколько раз в день (10:00–13:00 — пик роя), остальное время — сон.
Машинное обучение (Edge Impulse)
- Сбор данных: запись жужжания через микрофон.
- Спектральный анализ: преобразование в спектрограммы.
- Обучение нейросети: спектрограммы → классификатор. Матрица ошибок и график точности.
- Экспорт библиотеки: загрузка на Arduino.




Аппаратная часть
- Arduino Nano BLE 33 Sense
- Автономное питание (батарея)
- Android-смартфон


Связь
Bluetooth Low Energy — подключение к Arduino внутри улья с безопасного расстояния (нет риска укусов).

Android-приложение
- Экран подключения к устройству в улье.
- Главный экран: температура, влажность, алерты событий (маточная, нет маточной, роение).



Концепция работы

Повтори сам (DIY)
- Скачай Arduino IDE, скомпилируй и залей .ino на Nano BLE 33 Sense. Ссылка
- Установи .apk на Android (вложение в репозитории).
- Установи устройство в улей.
- Подключись по Bluetooth.


Планы по улучшению
- Расширение базы звуков для точности ML.
- Новые функции в приложении.
- LoRaWAN-сеть для удаленного доступа к данным ульев.

Заключение
Проект открыт для участия: записывайте жужжание, улучшайте модель. Вместе сделаем пчеловодство проще и эффективнее!
Код
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());
}
}
// ... вспомогательные функции: ei_printf, PDM callback, inference start/record/get_data/end
Библиотека ML-модели
ei-smartbees-arduino-1.0.6.zip — скачивается отдельно.
Android-приложение
APK для установки
Производственный процесс
- Что такое обработка на ВСО? Экспертный обзор вертикально-шлифовальных центров
- Экспертное руководство по лазерной маркировке алюминия: точность, долговечность и отраслевые применения
- MIG против TIG сварки: выбор правильной дуговой техники для вашего проекта
- Полное руководство по лазерной маркировке: типы, преимущества и применения
- Ключевые соображения для высокообъемной швейцарской обработки
- Руководство по ЧПУ-прототипированию: точность, скорость и экономичное производство
- Экспертное производство валов: точные процессы и индивидуальные решения
- Волоконно-лазерная маркировка: точность, скорость и универсальность для современных отраслей
- Электролитическое полирование против пассивации: выбор правильной отделки нержавеющей стали
- Пассивация нержавеющей стали: усиление коррозионной стойкости и производительности