Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением

Компоненты и материалы

Компонент Описание Кол-во
Arduino Nano 33 BLE Sense Микроконтроллер с BLE, микрофон, датчики среды 1
USB-A — Micro-USB кабель Для прошивки и питания 1

Приложения и сервисы

О проекте

Введение

Приложение для эффективного пчеловодства: контроль состояния пчелиных семей, раннее обнаружение роя. При рое семья делится: часть остается с новой маточной, часть улетает со старой. Пчеловод должен успеть среагировать, иначе теряется медопродуктивность.

Решение

Пчеловод подключается к ульям через мобильное приложение по Bluetooth. Приложение показывает здоровье семьи и предупреждает о рое. Ручной осмотр множества ульев затратен по времени — система автоматизирует контроль.

Описание системы

Основа — Arduino Nano BLE 33 Sense с встроенным микрофоном. Алгоритм на микроконтроллере анализирует жужжание пчел и классифицирует: маточная в улье / нет маточной / роение. Датчики температуры и влажности (HTS221) оценивают состояние семьи. Для экономии энергии измерения проводятся несколько раз в день (10:00–13:00 — пик роя), остальное время — сон.

Машинное обучение (Edge Impulse)

  1. Сбор данных: запись жужжания через микрофон.
  2. Спектральный анализ: преобразование в спектрограммы.
  3. Обучение нейросети: спектрограммы → классификатор. Матрица ошибок и график точности.
  4. Экспорт библиотеки: загрузка на Arduino.
BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением
BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением
BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением
BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением

Аппаратная часть

BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением
BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением

Связь

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

BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением

Android-приложение

  1. Экран подключения к устройству в улье.
  2. Главный экран: температура, влажность, алерты событий (маточная, нет маточной, роение).
BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением
BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением
BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением

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

BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением

Повтори сам (DIY)

  1. Скачай Arduino IDE, скомпилируй и залей .ino на Nano BLE 33 Sense. Ссылка
  2. Установи .apk на Android (вложение в репозитории).
  3. Установи устройство в улей.
  4. Подключись по Bluetooth.
BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением
BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением

Планы по улучшению

BeeMonitor: Умное пчеловодство — IoT-мониторинг ульев с машинным обучением

Заключение

Проект открыт для участия: записывайте жужжание, улучшайте модель. Вместе сделаем пчеловодство проще и эффективнее!

Код

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-приложение

GitHub репозиторий

APK для установки

Ссылка на debug APK

Производственный процесс

  1. Что такое обработка на ВСО? Экспертный обзор вертикально-шлифовальных центров
  2. Экспертное руководство по лазерной маркировке алюминия: точность, долговечность и отраслевые применения
  3. MIG против TIG сварки: выбор правильной дуговой техники для вашего проекта
  4. Полное руководство по лазерной маркировке: типы, преимущества и применения
  5. Ключевые соображения для высокообъемной швейцарской обработки
  6. Руководство по ЧПУ-прототипированию: точность, скорость и экономичное производство
  7. Экспертное производство валов: точные процессы и индивидуальные решения
  8. Волоконно-лазерная маркировка: точность, скорость и универсальность для современных отраслей
  9. Электролитическое полирование против пассивации: выбор правильной отделки нержавеющей стали
  10. Пассивация нержавеющей стали: усиление коррозионной стойкости и производительности