工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

BeeMonitor

コンポーネントと消耗品

>
Arduino Nano 33 BLE Sense
× 1
USB-A-マイクロUSBケーブル
× 1

アプリとオンラインサービス

>
Arduino IDE
Edge Impulse Studio
Android Studio

このプロジェクトについて

はじめに

養蜂家が蜂蜜やその他の製品を効率的に生産するのに役立つ蜂制御アプリケーションの開発を紹介します。アプリケーションは養蜂の分野をカバーしています。私たちは、養蜂家がミツバチをコントロールし、可能な限り効果的になるのを助けることに動機を見出しています。これにより、養蜂家が個々のじんましんで長時間作業しやすくなります。アイデアは、温度と湿度に基づいて、アプリが特定の巣箱でのミツバチの家族の状態への洞察と群れと呼ばれる特別なイベントの検出を提供するということです。これは、ハチの家族が2つの部分に分かれるイベントです。一方はハイブに留まり、もう一方はハイブを離れて新しい家を見つけます。最初の部分はハイブに残り、新しい女王が孵化するのを待ちますが、後半は古い女王と一緒にハイブを離れます。ここでは、養蜂家がタイムリーな行動を取ることが重要です。彼は、蜂の鳴き声の音声処理に基づいてそのようなイベントを認識する蜂制御アプリケーションによってこれを支援されるでしょう。

解決策

個々の養蜂家は通常、大量の巣箱を持っており、その結果、多くの蜂の巣も持っているため、個々の巣箱を手動で検査するには多くの時間がかかります。私たちのアプリケーションの助けを借りて、養蜂家はモバイル端末とBluetooth接続を介して個々の巣箱に接続し、そこでミツバチの家族の健康状態を確認できます。さらに、アプリケーションは、群れの場合に養蜂家にタイムリーな行動をとることができ、ミツバチが自然に逃げることがないことを警告します。これにより、蜂蜜の生産が減少します。

説明

このシステムは、Arduino Nano BLE 33 Senseマイクロコントローラーで構成されており、プリント回路基板にもマイクが搭載されています。マイクロコントローラーで実行されているアルゴリズムの助けを借りて、コントローラーはミツバチの鳴き声を聞き、学習したモデルの助けを借りて、女王が巣箱にいるときといつのときのミツバチの鳴き声の違いを認識しますそうではない。 Arduinoには、出生検出に加えて、温度および湿度センサーも含まれています。このデータの助けを借りて、私たちは巣箱にいるミツバチの家族の状態や健康状態を判断することができます。目標は低エネルギー消費であったため、システムは1日に数回だけ、またはスワーニングの可能性が最も高い午前10時から午後1時までの時間帯に状態を測定します。その日の残りの時間、デバイスはほとんどアイドル状態であり、エネルギーを消費しません。

機械学習モデル

説明EdgeImpulseプロシージャ

  • マイクを使用してデータをキャプチャする

まず、マイクを使用してミツバチの鳴き声をキャプチャし、学習モデルの基礎となるデータを収集しました。

  • 音のスペクトル分析

次に、スペクトログラムを使用してデータを処理しました。

  • ニューラルネットワークを使用してモデルを構築する

スペクトログラムは、モデルのトレーニングに使用されたニューラルネットワークへの入力でした。長い再計算の結果、モデルの認識パフォーマンスを示すマ​​トリックスで示される結果が得られました。

下のグラフは、キャプチャされたデータに基づいてモデルがどのように機能するかを示しています。

  • ライブラリを作成してArduinoにアップロード

最後に、Arduinoボードにアップロードするライブラリを作成しました。

ハードウェア

  • Arduino Nano BLE33センス
  • バッテリーの電力
  • Androidモバイル端末

接続性

ArduinoからAndroidスマートフォンのアプリケーションにデータを受信するために、Bluetooth接続オプションを使用しました。 Arduino Nano BLE 33 Senseは、回路基板にBluetoothモジュールを提供しています。この通信により、ハイブ内のArduinoに接続し、ハチ刺されのリスクがないハイブから距離を置くことができます。

Androidアプリ

次に、Arduino Nano BLE 33 Senseに接続して、ハチの家族の状態に関するデータとアラートのダウンロードを開始するために必要なAndroidアプリを設計しました。

1.ハイブ内のデバイスに接続する

2.温度と湿度のデータとイベントアラートを表示するメイン画面。

以下に、ArduinoデバイスがAndroidアプリケーションに送信するアラートを示します。

操作の概念

自分でやってください!

システムをテストするための手順。

ステップ1 Arduino ble33センスをプログラミングするための.inoプログラム環境をダウンロードします。コードをコンパイルしてArduinoボードに送信します。

https://www.arduino.cc/en/software

ステップ2 アプリをAndroidデバイスにダウンロードします(添付の.apkファイル)

ステップ3 ハイブにArduinoデバイスをインストールします。

ステップ4 Bluetooth接続でデバイスに接続する

改善点

  • ハチの鳴き声のデータベースを増やすことで機械学習モデルを改善します。
  • Androidアプリに機能を追加する
  • LoraWanネットワーク上にハイブ情報のデータベースを構築することで改善が見られます。このデータベースでは、データをサーバーに送信し、いつでもどこからでもアクセスできます。

結論

私たちは私たちのアイデアを提示し、あなたがあなた自身の環境で試すことができるプロジェクトをあなたと共有することを嬉しく思います。私たちは、養蜂家の仕事をさらに改善してより簡単にするための正しい軌道に乗っていると信じています。ミツバチの話題の記録のデータベースを増やすことで、モデルの改善に貢献することもできます。これにより、システムがより正確になり、干渉の影響を受けにくくなります。ありがとうございます!

コード

  • Arduino Nano ble33センス
  • ei-smartbees-arduino-1.0.6.zip
Arduino Nano ble33センス C / C ++
 / * Edge Impulse Arduinoの例Copyright(c)2021 EdgeImpulse Inc.これにより、このソフトウェアおよび関連するドキュメントファイル(「ソフトウェア」)のコピーを入手するすべての人に、ソフトウェアのコピーを使用、コピー、変更、マージ、公開、配布、サブライセンス、および/または販売する権利を含むがこれらに限定されない、制限のないソフトウェア。以下の条件:上記の著作権通知およびこの許可通知は、本ソフトウェアのすべてのコピーまたは実質的な部分に含まれるものとします。本ソフトウェアは「現状有姿」で提供され、商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、明示または黙示を問わず、いかなる種類の保証もありません。いかなる場合も、作者または著作権所有者は、契約、不法行為、またはその他の行為にかかわらず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因する、または関連する、いかなる請求、損害、またはその他の責任についても責任を負わないものとします。ソフトウェア。* ///ターゲットのメモリが制限されている場合は、このマクロを削除して10Kを節約しますRAM#define EIDSP_QUANTIZE_FILTERBANK 0 / *インクルード----------------------- ----------------------------------------- * /#include  #include  #include  #include  #include  #define BLE_UUID_STRING "1A3AC131-31EF-758B-BC51-54A61958EF82" #define BLE_UUID_TEST_SERVICE "9A48 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; //これをtrueに設定すると、例が表示されます。生のsignalBLEDevicecentralから生成された機能; BLEServiceservice(BLE_UUID_TEST_SERVICE); BLEStringCharacteristic serviceOutput(BLE_UUID_STRING、BLERead | BLENotify、200); / ** @briefArduinoセットアップ関数* / voidsetup(){//セットアップコードをここに配置します1回実行:Serial.begin(115200); while(!Serial); pinMode(LED_BUILTIN、OUTPUT); if(!BLE.begin()){Serial.println( "BLEの開始に失敗しました!"); while(1); } BLE.setLocalName( "BeeHive"); BLE.setAdvertisedService(service); service.addCharacteristic(serviceOutput); BLE.addService(service); BLE.advertise(); Serial.println( "Bluetoothデバイスがアクティブで、接続を待機しています..."); if(!HTS.begin()){Serial.println( "湿度温度センサーの初期化に失敗しました!"); while(1); } if(microphone_inference_start(EI_CLASSIFIER_RAW_SAMPLE_COUNT)==false){ei_printf( "ERR:オーディオサンプリングのセットアップに失敗しました\ r \ n");戻る; }} / ** @briefArduinoのメイン関数。推論ループを実行します。* / voidloop(){central =BLE.central(); if(central){Serial.print( "Centralに接続:"); Serial.println(central.address()); digitalWrite(LED_BUILTIN、HIGH); while(central.connected()){ei_printf( "2秒で推論を開始しています... \ n"); delay(2000); ei_printf( "記録中... \ n"); bool m =Microkey_inference_record(); if(!m){ei_printf( "ERR:オーディオの録音に失敗しました... \ n");戻る; }フロート温度=HTS.readTemperature();フロート湿度=HTS.readHumidity(); StaticJsonDocument <600>ドキュメント; doc ["temperature"] =(round(temperature * 10)/10.0); doc ["humidity"] =(round(humidity * 10)/10.0); doc ["event"] =""; ei_printf( "記録が完了しました\ n"); signal_tシグナル; signal.total_length =EI_CLASSIFIER_RAW_SAMPLE_COUNT; signal.get_data =&microphone_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:分類子(%d)の実行に失敗しました\ n"、r);戻る; } //予測を出力しますei_printf( "Predictions"); ei_printf( "(DSP:%d ms。、分類:%d ms。、異常:%d ms。)"、result.timing.dsp、result.timing.classification、result.timing.anomaly); ei_printf( ":\ n");フロート予測[3]; for(size_t ix =0; ix  0){Serial.write(print_buf); }} / ** @briefPDMバッファフルコールバックデータを取得してオーディオスレッドコールバックを呼び出す* / static void pdm_data_ready_inference_callback(void){int bytesAvailable =PDM.available(); //サンプルバッファに読み込まれますintbytesRead =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;壊す; }}}} / ** @brief Init inferencing struct and setup / start PDM @param [in] n_samples n samples @return {description_of_the_return_value} * / static boolmicrophone_inference_start(uint32_t n_samples){inference.buffer =(int16_t *)malloc (n_samples * sizeof(int16_t)); if(inference.buffer ==NULL){falseを返す; } 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を次のように初期化します://-1つのチャネル(モノモード)//-16 kHzのサンプルレートif(!PDM.begin(1、EI_CLASSIFIER_FREQUENCY)){ei_printf( "Failed to start PDM!"); mikey_inference_end(); falseを返します。 } return true;} / ** @ brief新しいデータを待つ@return終了したらTrue * / static bool Mike_inference_record(void){inference.buf_ready =0; inference.buf_count =0; while(inference.buf_ready ==0){// delay(10); delay(2000); } return true;} / **生のオーディオ信号データを取得します* / staticintmicrophone_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を停止し、バッファを解放します* / static voidmicrophone_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 ++
機械学習モデルを備えたライブラリ
プレビューなし(ダウンロードのみ)。
Androidアプリケーション
https://github.com/TCodingB/BeeMonitor.git
Androidデバイス用のAPKファイル
https://github.com/TCodingB/BeeMonitor/tree/main/apk/debug

製造プロセス

  1. VMCマシニングとは何ですか?
  2. アルミニウムレーザーマーキングガイド
  3. MIG溶接とTIG溶接
  4. レーザーマーキングガイド
  5. 高生産スイス加工に関する考慮事項
  6. CNCプロトタイピングガイド
  7. シャフト製造プロセスを理解する
  8. ファイバーレーザーマーキングとは何ですか?
  9. 電解研磨と不動態化
  10. ステンレス鋼の不動態化とは何ですか?
  11. 会社の時間に釣り道具を設計および設計する方法