BeeMonitor
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
| ||||
| ||||
|
Об этом проекте
Введение
Мы представим разработку приложения для борьбы с пчелами, которое помогает пчеловоду эффективно производить мед и другие продукты. Приложение охватывает сферу пчеловодства. Мы видим мотивацию в том, чтобы помочь пчеловоду контролировать пчел и быть максимально эффективными. Это облегчило бы пчеловоду долгие часы работы над отдельными ульями. Идея состоит в том, что на основе температуры и влажности приложение предлагает анализ состояния пчелиной семьи в конкретном улье и обнаружение особого события, называемого роением. Это мероприятие, на котором пчелиная семья делится на две части. Одна часть остается в улье, а другая покидает улей и находит новый дом. Первая часть остается в улье и ждет, пока вылупится новая королева, а вторая половина покидает улей вместе со старой маткой. Здесь важно, чтобы пчеловод принял своевременные меры. В этом ему поможет приложение для борьбы с пчелами, которое распознает такое событие на основе обработки звука жужжания пчел.
Решение
Поскольку у отдельного пчеловода обычно имеется большое количество ульев, а следовательно, и много ульев, ручной осмотр отдельного улья требует много времени. С помощью нашего приложения пчеловод подключается к отдельным ульям через мобильный терминал и соединение Bluetooth, где он может видеть состояние здоровья пчелиной семьи. Кроме того, приложение предупредит пчеловода в случае стая, что он сможет принять своевременные меры и пчелы не ускользнут на природу, что снизит производство меда.
Описание
Система состоит из микроконтроллера Arduino Nano BLE 33 Sense, который также содержит микрофон на своей печатной плате. С помощью алгоритма, работающего на микроконтроллере, контроллер слушает жужжание пчел и с помощью изученной модели распознает разницу в жужжании пчел, когда матка находится в улье и когда Нет. Помимо обнаружения рождения, Arduino также включает датчик температуры и влажности. С помощью этих данных мы можем определить состояние или здоровье пчелиной семьи, находящейся в улье. Поскольку целью было низкое энергопотребление, система измеряет это состояние только несколько раз в день или в периоды времени с 10 до 13 часов, когда вероятность образования скоплений наиболее высока. В остальное время устройство в основном простаивает и не потребляет энергию.
Модель машинного обучения
Описание процедуры EdgeImpulse
- Сбор данных с помощью микрофона.
Во-первых, мы зафиксировали жужжание пчел с помощью микрофона, чтобы собрать данные, которые легли в основу модели обучения.
- Спектральный анализ звуков
Затем данные были обработаны с использованием спектрограммы.
- Построение модели с использованием нейронной сети
Спектрограмма была входом в нейронную сеть, которая использовалась для обучения модели. После долгого пересчета мы получили результаты, которые были представлены в виде матрицы, показывающей качество распознавания модели.
На приведенном ниже графике показано, как модель работает на основе собранных данных.
- Создайте библиотеку и загрузите в Arduino
Наконец, мы создали библиотеку для загрузки на плату Arduino.
Аппаратное обеспечение
- Arduino Nano BLE 33 Sense
- Заряд аккумулятора
- Мобильный терминал Android
Связь
Для получения данных от Arduino в приложение на телефоне Android мы использовали возможность подключения по Bluetooth. Arduino Nano BLE 33 Sense предлагает модуль Bluetooth на своей плате. Это соединение позволяет подключаться к Arduino внутри улья и находиться на таком расстоянии от улья, где нет риска укусов пчел.
Приложение для Android
Затем мы разработали приложение для Android, необходимое для подключения к Arduino Nano BLE 33 Sense и начала загрузки данных и предупреждений о статусе пчелиного семейства.
1. Подключение к устройству в улье
2. Главный экран с данными о температуре и влажности и предупреждениями о событиях.
Ниже вы можете увидеть предупреждения, которые устройство Arduino отправляет в приложение Android.
Концепция работы
Сделай сам!
Инструкция по тестированию нашей системы.
Шаг 1 Скачивание программной среды .ino для программирования Arduino ble 33 sense. Скомпилируйте код и отправьте его на плату Arduino.
https://www.arduino.cc/en/software
Шаг 2 Загрузите приложение на свое устройство Android (файл .apk во вложении)
Шаг 3 Установите устройство Arduino в улей.
Шаг 4 Подключение к устройству через Bluetooth
Улучшения
- Улучшение модели машинного обучения за счет увеличения базы данных по жужжанию пчел.
- Добавьте дополнительные функции в приложение для Android.
- Мы видим улучшения в создании базы данных с информацией о ульях в сети LoraWan, где данные могут быть отправлены на сервер и доступны в любом месте и в любое время.
Заключение
Мы рады представить нашу идею и поделиться с вами проектом, который вы можете попробовать в своей среде. Мы считаем, что идем по правильному пути к тому, чтобы облегчить работу пчеловода с помощью дальнейших улучшений. Вы также можете внести свой вклад в улучшение модели, увеличив базу данных записей жужжания пчел. Это сделает систему более точной и менее чувствительной к помехам. Спасибо!
Код
- Arduino Nano ble 33 sense
- ei-smartbees-arduino-1.0.6.zip
Arduino Nanoble 33 sense C / C ++
/ * Примеры Edge Impulse Arduino Авторские права (c) 2021 EdgeImpulse Inc. Настоящим предоставляется бесплатное разрешение любому лицу, получающему копию этого программного обеспечения и связанных файлов документации («Программное обеспечение»), для работы с Программное обеспечение без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение, публикацию, распространение, сублицензирование и / или продажу копий Программного обеспечения, а также разрешение лицам, которым предоставляется Программное обеспечение, делать это, при условии соблюдения следующие условия:Приведенное выше уведомление об авторских правах и это уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕЗАЩИТЫ ОТ ПРАКТИКИ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ВЛАДЕЛЬЦЫ АВТОРСКИХ ПРАВ НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГИЕ ОТВЕТСТВЕННОСТЬ, ПРОИЗВОДИМЫЕ В РЕЗУЛЬТАТЕ ДОГОВОРА, ПРАКТИКИ ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКАЮЩИМ, ВНУТРЕННИЕ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ ДЕЛАМИ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ. * /// Если ваша цель ограничена в памяти, удалите этот макрос, чтобы сохранить 10 КБ ОЗУ # define EIDSP_QUANTIZE_FILTERBANK 0 / * Включает ----------------------- ----------------------------------------- * / # include#include #include #include #include #define BLE_UUID_STRING "1A3AC131-31EF-758B-BC51-54A61958EFICE" -9U_A61958EFICE "#E_A61958EFICE" 082F-C079-9E75AAE428B1 "/ ** Аудио буферы, указатели и селекторы * / typedef struct {int16_t * buffer; uint8_t buf_ready; uint32_t buf_count; uint32_t n_samples;} inference_t; статический вывод inference_t; статический подписанный короткий sampleBuffer [2048]; статический bool debug_nn =false; // Установите значение true, чтобы увидеть, например, функции, сгенерированные из необработанного сигналаBLEDevice central; BLEService service (BLE_UUID_TEST_SERVICE); BLEStringCharacteristic serviceOutput (BLE_UUID_STRING, BLERead | BLENotify, 200); / ** @brief Arduino setup function * / void setup () {// поместите здесь свой код настройки запустить один раз:Serial.begin (115200); в то время как (! серийный); pinMode (LED_BUILTIN, ВЫХОД); if (! BLE.begin ()) {Serial.println ("не удалось запустить BLE!"); в то время как (1); } BLE.setLocalName ("Пчелиный улей"); BLE.setAdvertisedService (услуга); service.addCharacteristic (serviceOutput); BLE.addService (услуга); BLE.advertise (); Serial.println («Bluetooth-устройство активно, ожидает подключения ...»); if (! HTS.begin ()) {Serial.println («Не удалось инициализировать датчик температуры влажности!»); в то время как (1); } if (mic_inference_start (EI_CLASSIFIER_RAW_SAMPLE_COUNT) ==false) {ei_printf ("ОШИБКА:не удалось настроить выборку звука \ r \ n"); возвращение; }} / ** @brief основная функция Arduino. Запускает цикл вывода. * / Void loop () {central =BLE.central (); if (центральный) {Serial.print ("Подключен к центральному:"); Serial.println (центральный адрес ()); digitalWrite (LED_BUILTIN, HIGH); while (central.connected ()) {ei_printf ("Начало вывода через 2 секунды ... \ n"); задержка (2000); ei_printf ("Запись ... \ n"); bool m =микрофон_inference_record (); if (! m) {ei_printf ("ОШИБКА:не удалось записать звук ... \ n"); возвращение; } температура поплавка =HTS.readTemperature (); влажность поплавка =HTS.readHumidity (); StaticJsonDocument <600> doc; doc ["температура"] =(round (temperature * 10) /10.0); doc ["влажность"] =(круглый (влажность * 10) / 10,0); документ ["событие"] =""; ei_printf ("Запись завершена \ n"); signal_t signal; signal.total_length =EI_CLASSIFIER_RAW_SAMPLE_COUNT; signal.get_data =&микрофон_audio_signal_get_data; ei_impulse_result_t result ={0}; EI_IMPULSE_ERROR r =run_classifier (&сигнал, &результат, debug_nn); if (r! =EI_IMPULSE_OK) {ei_printf ("ERR:Не удалось запустить классификатор (% d) \ n", r); возвращение; } // выводим прогнозы ei_printf ("Predictions"); ei_printf ("(DSP:% d мс., Классификация:% d мс., Аномалия:% d мс.)", result.timing.dsp, result.timing.classification, result.timing.anomaly); ei_printf (":\ п"); прогнозы с плавающей запятой [3]; for (size_t ix =0; ix 0) {Serial.write (print_buf); }} / ** @brief обратный вызов полного буфера PDM Получить данные и вызвать обратный вызов аудиопотока * / static void pdm_data_ready_inference_callback (void) {int bytesAvailable =PDM.available (); // считываем в буфер выборки int bytesRead =PDM.read ((char *) &sampleBuffer [0], bytesAvailable); if (inference.buf_ready ==0) {для (int i =0; i > 1; i ++) {inference.buffer [inference.buf_count ++] =sampleBuffer [i]; если (inference.buf_count> =inference.n_samples) {inference.buf_count =0; inference.buf_ready =1; ломать; }}}} / ** @brief Инициализация структуры вывода и настройка / запуск PDM @param [in] n_samples n образцов @return {description_of_the_return_value} * / static bool mic_inference_start (uint32_t n_samples) {inference.buffer =(int16_t *) malloc (n_samples * sizeof (int16_t)); если (inference.buffer ==NULL) {вернуть ложь; } inference.buf_count =0; inference.n_samples =n_samples; inference.buf_ready =0; // настраиваем обратный вызов приема данных PDM.onReceive (&pdm_data_ready_inference_callback); // необязательно установить усиление, по умолчанию 20 PDM.setGain (80); PDM.setBufferSize (4096); // инициализируем PDM с:// - одним каналом (моно режим) // - частотой дискретизации 16 кГц if (! PDM.begin (1, EI_CLASSIFIER_FREQUENCY)) {ei_printf ("Не удалось запустить PDM!"); микрофон_inference_end (); вернуть ложь; } return true;} / ** @brief Ожидание новых данных @return Истина по завершении * / static bool mic_inference_record (void) {inference.buf_ready =0; inference.buf_count =0; while (inference.buf_ready ==0) {// задержка (10); задержка (2000); } return true;} / ** Получить необработанные данные аудиосигнала * / static int mic_audio_signal_get_data (смещение size_t, длина size_t, float * out_ptr) {numpy ::int16_to_float (&inference.buffer [смещение], out_ptr, length); return 0;} / ** @brief Остановить PDM и освободить буферы * / static void mic_inference_end (void) {PDM.end (); free (inference.buffer);} # if! defined (EI_CLASSIFIER_SENSOR) || EI_CLASSIFIER_SENSOR! =EI_CLASSIFIER_SENSOR_MICROPHONE # error «Неверная модель для текущего датчика.» # Endif
ei-smartbees-arduino-1.0.6.zip C / C ++
Библиотека с моделью машинного обученияБез предварительного просмотра (только загрузка).
Приложение Andorid
https://github.com/TCodingB/BeeMonitor.gitФайл Apk для устройства Android
https://github.com/TCodingB/BeeMonitor/tree/main/apk/debugПроизводственный процесс
- Что такое VMC Machining?
- Руководство по лазерной маркировке алюминия
- Сварка MIG против сварки TIG
- Руководство по лазерной маркировке
- Рекомендации по высокопроизводительной швейцарской обработке
- Руководство по созданию прототипов с ЧПУ
- Понимание процесса изготовления вала
- Что такое маркировка волоконным лазером?
- Электрополировка против пассивации
- Что такое пассивация нержавеющей стали?