物理とテクニカルな部分
多くの方がいじくり回すことが好きだとご存知です。それで、興味を持ち、意欲のある学生のために、さらなる情報とDIYソフトウェアに関する情報をこちらに提供します。
BLE広告情報
注意: 説明を改善するための提案がある場合は、詳細をお知らせください。
自分でデータ収集機器を作成する覚悟のある勇敢な方々のために、BroodMinderが使用しているBLE広告プロトコルに関する情報を提供します。実際、当社独自のBroodMinder-CELL、WiFi、および-SubHubは、広告を使用してデバイスを盗聴し、そのデータを直接MyBroodMinder.comに転送します。
いくつかの優れたBLEエクスプローラープログラムがあります。お気に入りは次のとおりです:
- Android&iOS – Nordic SemiconductorのnrfConnect。Android版が最適ですが、私たちは常に両方を使用しています。信号レベルのグラフ表示機能が優れています。
- PC – MicrosoftのBluetooth LE Explorer。残念ながら、このプログラムには広告データが表示されません。
- Mac – BlueSee – このアプリはうまく機能し、広告パケット内の製造データを表示します。
デバイスIDの最初の3バイトは常に06:09:16で、その後に特定のデバイスIDが続きますが、一部のデバイス(iOSおよびMac)は実際のIDを隠していますので、拡張広告パケットの名前フィールドにもそれを含めています。
BroodMinder用の広告パケットの構成
BLEからの広告パケットを読むと、以下を見ることでBroodMinder製品を識別することができます。
データは以下のようになります。– この例はデバイス43:30:07からのものです。
GAPスキャンレスポンスイベント------------------------------------------------------------------------------------
ble_evt_gap_scan_response: rssi=-77, packet_type=0, sender=[ 07 30 43 80 07 00 ], address_type=0, bond=255, data=[ 02 01 06 02 0a 03 18 ff 8d 02 2b 15 02 00 02 21 00 d0 62 00 ff 7f 05 80 37 07 30 43 00 00 00 ]
注意: 値が16進数でない場合を除き、値は10進数です。
1) "Manufacturer Specific Data"フラグを確認します バイト6、7 = 0x18、0xff
2) 製造元としてIF, LLCを確認します バイト8、9 = 0x8d、0x02
バイト10-29は以下に詳述されているように、BroodMinderからのデータです。 DeviceModelIFllc_1 = 0x2b(43d = スケール) DeviceVersionMinor_1 = 0x15(21d) DeviceVersionMajor_1 = 0x02(FW 2.21) Elapsed_2V2 = 0x21(33d) Temperature_2V2 = 0x62d0 WeightL_2V2 = 0x7FFF WeightR_2V2 = 0x8005
各モデルのマッピングは次のページにあります
PRIMARY | ||||
---|---|---|---|---|
Byte | Type | Value | Parameter | |
0 | Ad field Length | 02 | ||
1 | Field Type | 01 | Connectible | |
2 | Value | 06 | LE General Discovery, Connectible, Single Mode Device | |
3 | Ad field Length | 02 | ||
4 | Field Type | 0A | Xmit Power | |
5 | Value | 03 | Power in DB | |
6 | Ad field Length | 24 | ||
7 | Field Type | FF | Manufacturer data | |
8 | Value | 8d | IF, LLC = 0x028d, 653 | |
9 | Value | 02 | IF, LLC = 0x028d, 653 | |
10 | Value | Model | ||
11 | Value | Version Minor | ||
12 | Value | Version Major | ||
13 | Value | Realtime Temp1 | 47/49/56/57/58(SM&XLR) | |
14 | Value | Battery | ||
15 | Value | 経過時間 | ||
16 | 値 | |||
17 | 値 | |||
温度 | 47度以上はセンチセンティグラード+5000 | |||
温度 | ||||
リアルタイム温度2 | 47/49/56/57/58 (SM&XLR) | |||
重量L | ||||
重量L | ||||
重量R | ||||
重量R | ||||
湿度 | 41/47/49/52 では0になります | |||
重量L2/SM_Time0 | 49/57/58 (XLR) | |||
重量L2/SM_Time1 | 49/57/58 (XLR) | |||
重量R2/SM_Time2 | 49/57/58 (XLR) | |||
重量R2/SM_Time3 | 49/57/58 (XLR) | |||
リアルタイム総重量 / 群の状態 | 47/49/56/57/58 (SM&XLR) | |||
リアルタイム総重量 | 47/49/56/57/58 (SM&XLR) | |||
SECONDARY | ||||
拡張広告パケット | ||||
バイト | タイプ | 値 | パラメータ | |
0 | 広告フィールドの長さ | 09 | ||
1 | タイプ | 09 | 完全なローカル名 | |
2 | 4' | ASCII名 | ||
3 | 2' | |||
4 | :' | |||
5 | 0' | |||
6 | 0' | |||
7 | :' | |||
8 | 0' | |||
9 | 0' |
注意: BRM52 BroodMinder-SubHub は以下のように異なります。
ここに式があります
if (ModelNumber == 41 | ModelNumber == 42 | ModelNumber == 43)
{
temperatureDegreesF = e.data[byteNumAdvTemperature_2V2] + (e.data[byteNumAdvTemperature_2V2 + 1] << 8);
temperatureDegreesF = (temperatureDegreesF / Math.Pow(2, 16) * 165 - 40) * 9 / 5 + 32;
}
else
{
double temperatureDegreesC = e.data[byteNumAdvTemperature_2V2] + (e.data[byteNumAdvTemperature_2V2 + 1] << 8);
temperatureDegreesC = (temperatureDegreesC - 5000) / 100;
temperatureDegreesF = temperatureDegreesC * 9 / 5 + 32;
}
humidityPercent = e.data[byteNumAdvHumidity_1V2];
if (ModelNumber == 43)
{
weightL = e.data[byteNumAdvWeightL_2V2 + 1] * 256 + e.data[byteNumAdvWeightL_2V2 + 0] - 32767;
weightScaledL = weightL / 100;
weightR = e.data[byteNumAdvWeightR_2V2 + 1] * 256 + e.data[byteNumAdvWeightR_2V2 + 0] - 32767;
weightScaledR = weightR / 100;
}
else if (ModelNumber == 49 | ModelNumber == 57 | ModelNumber == 58)
{
weightR = e.data[byteNumAdvWeightL_2V2 + 1] * 256 weightScaledR = weightR / 100;
weightScaledL = weightL / 100; weightScaledR2 = weightR2 / 100; weightScaledL2 = weightL2 / 100; } realTimeTemperature = ((float)(e.data[byteNumAdvRealTimeTemperature2] * 256 + e.data[byteNumAdvRealTimeTemperature1] - 5000) / 100) * 9 / 5 + 32;
realTimeWeight = (float)(e.data[byteNumAdvRealTimeWeight2] * 256 + e.data[byteNumAdvRealTimeWeight1] - 32767 ) / 100 ; SM_Timeは、最後の温度イベントのUnix時刻です。Time0 = LSB、Time3 = MSBで、デバイス同期によってデバイスに時間が設定されていない場合、ブート以来の時間になります。
BRM-52 BroodMinder-SubHub
-SubHubはいくつかのトリッキーな広告を行います。広告は5秒ごとに変更され、異なるデバイスを送信します。すべてのデバイス(自体を含む)を順番に巡回し、繰り返します。
これらをモック広告と呼びます。使用しているオペレーティングシステムに応じて、真のデバイスID(たとえば、06:09:16:52:01:23など)を表示できる場合とできない場合(例:iOS)があります。そのため、デバイスIDを拡張広告バイトに配置しています。また、一部のデバイスの拡張広告を読み取るのは難しいこともありますが、その場合、通常は真のデバイスIDを読み取ることができます。
モックIDは、バイト13、19、30に存在します。これにより、プロセスが次のようになります。
- このデバイスが-SubHubであるかどうかをIDで確認します(真のIDまたは拡張広告内のID)。常に52:xx:xxになります。
- "52"デバイスである場合、バイト13/19/30を解析します。たとえば、43/01/23は43:01:23になります。
- モデルバイト(バイト10)に基づいて、デバイスタイプに応じて残りの広告パケットを解析します。
BroodMinder-W物理
ブルードマインダーの巣のスケールは多くの方法で使用でき、全体の巣の重量の一部しか測定しないため、補助支援とブルードマインダースケールの配置は、総巣の重量測定システムの重要な部分となります。一般的に、これに投じられる努力が多ければ多いほど、結果はより良くなります。以下に示す巣の支援システムは、不確実性が最も高いものから最も洗練されたものまで、最も簡単なものから始まります。どのように実施するかは、個々のユーザーが決定します。
注意: 最も一般的なエラーの原因は、スケールの下に適切なサポートがないことです。これにより、巣は太陽や雨、温度などによって膨張や収縮するときにフレックスし、奇妙な振る舞いが生じる可能性があります。平らなサポートを提供することで、結果が向上します。簡単な修正方法は、スケールの下に3/4インチの合板を置くことです。
追加の注意: 蜜の流れだけを見たい場合、適切なサポートは必要ありません。日々の変動は無視する必要がありますが、総合的な重量の変化は観察できます。
a) デフォルトの配置
これは、スケールを巣の前に配置し、補助支持(フラクタム)としてバックに2×4を配置したデフォルトの配置です:
以下は、この設定に関するいくつかの計算です:
仮定
巣の重量Wは均等に分布され、重心は巣の中央にあります。単純化のため、下板の前部のオーバーハングは考慮されません。巣の重量は100%と仮定されます。
計算
バックサポートとして標準の2×4材を使用し、それを巣の後ろに合わせると、スケール上の重量Sから合計巣の重量Wを以下のように計算できます:
したがって、この設定を使用する場合は、アプリでデフォルトの巣スケールファクターとして2.09を使用してください。これは、一度いくつかの重量測定が利用可能になると、微調整が可能です。
次のチャートは、異なるスケールとフルクラム配置のスケール補正ファクターを示しています。X軸は、ハイブの後部からのフルクラムポイントの位置(インチ)を示しています。異なるラインは、ハイブの後部からのスケール中心線の位置(インチ)を表します。矢印は上記の例を示しています。
b) 代替配置1
上記に基づいて、補助支持は、巣の後ろから1インチ離れた場所に配置する必要があります。2×4の上にトリムピースを取り付けることが推奨されています。これにより、補助サポートの正確な配置が容易になります。
等しいモーメントアームEおよびFがあり、巣箱スケール補正係数が2.0になります。これはモバイルアプリのデフォルトです。ただし、サポートシステムの水準のばらつきや2×4の反りなどにより、サポートの実際の支点は巣箱の後ろと補助サポートの前のどこかになる可能性があるため、他の影響要因も見落としてはいけません。
c) 代替配置2
定義された支点を持ち、サポート構造の位置づけに影響を受けない異なるサポートシステムが使用できます:
松かオークの約¾インチ厚で2インチ幅の部品を取ります。長さは巣箱の幅にする必要があります。これに小さな切りこみを入れます。切り込みの深さは、のこぎりの刃の幅と同じである必要があります。この部品を巣箱の底板の裏側に取り付けます。それを背面にフラッシュで合わせます。次に、長さが木のストリップと同じ1インチ×1/8インチの6061または6063のアルミ角の部品をその下に配置して、巣箱を支えます。アルミ角の角が切り込みに乗るようにします。アルミ角と木製の部品の合計高さは、巣箱が水平になるか、巣箱の入り口から水が遠ざかるようにわずかに前に傾くようにするため、スケールの高さと等しくまたはわずかに大きくする必要があります。
d) 横方向のバランス
上記のすべてのサポートシステムは、巣箱が3つ以上のポイントに支えられているため、定義されていない横方向の重量シフトに影響を受けます。巣箱の内側の前面に2つのポイントと巣箱の後ろに直線的な支持点があります。これはスケール内の1つのロードセルに過負荷をかける可能性があり、したがって、巣箱の下のサポートシステムが前後の別々のシンダーブロックである場合、通常は横方向のバランスが必要です。
アプリでリアルタイム表示に切り替えて、各ロードセルの重量を個別に読み取ります。このモードでは、スケールの重量が%左、%右として表示されます。スケールの右側にはデバイス識別ステッカーが貼られています。L/Rの違いが10%未満であれば、追加の手続きは必要ありません。
そうでない場合は、重量測定の低い側でスケールを薄くして、重量の読み取りが一致するようにします。また、低い重量読み取りの反対側の背後のサポートの下にもシムを入れることができます。
e) 3ポイントの巣箱サポート
横方向のバランスを軽減する方法があります。これは本当の3ポイントサポートシステムを導入することです。部品は配置2で使用される部品と似ていますが、1インチの角ではなく、この構成では¾インチの角が必要です。ボードの中央に7/32インチの穴を開け、中央のサポートとして¼インチ×0.5インチのスロット付きマシンネジを使用します。ネジはボードに自分自身のスレッドを作ります。ネジの頭部のスロットは、アルミ角の端に滑り落ちないように配置されているため、1点でアルミ角の端に載せることができます。
アルミ角と木製ボードの間には小さな隙間があります。この隙間が巣箱全体で均等な幅であることを確認する必要があります。中央のネジが唯一の接点であるべきです。これにより、正確な重量が測定され、同時に、巣箱の検査中などに非均等な荷重が発生した場合の「安全ネット」となります。
f) BroodMinderスケールの配置
上記のほとんどは補助サポートに関係しています。ここでは、スケールの配置に焦点を当てましょう。
前のセクションで示されているように、スケールの正面を巣箱の正面と一直線に配置するのが望ましいです。内側に移動させると、精度が向上しますが、巣箱の安定性が損なわれ、外に移動させると、精度が低下しますが、巣箱の安定性はほとんど向上しません。
スケール配置がスケール補正係数に及ぼす影響と、スケールの位置づけの不正確さによって導入されたスケールエラーを示すチャートです。影響は1インチあたり5.6%です。
スケールの位置を巣箱の底板にマーキングするか、機械的なストップを取り付けることをお勧めします。これにより、スケールをバッテリー交換やその他の理由で引き抜いた後でも、同じ場所にスケールを戻すのに役立ちます。