Lorawan™を介して接続されたシンプルなチップバケットレインゲージ。デバイスはバケットチップ/タンブルの回数数を数え、Lorawan™を使用して値を送信します。
レシーバーアプリケーションは降雨量を計算し、必要に応じてカウンターをリセットできます。
降雨計算は、Arduino-Rain-Gauge-Calibration命令に触発されています。
それぞれ11 cm x 5 cmの寸法を備えた傾斜バケットレインゲージが使用されており、55cm²の集水域を提供します。 10ミリリットルの雨のコレクションは、10 ml/55cm²= 0.181818182 cm = 1.81818182 mmの雨です。
チップバケットレインゲージでは、バケツの先端/転倒を10 mL(または1.81 mmの雨)で5回転倒させるため、1つの先端は(10/5)ml = 2ml(または0,3646636364 mm)です。

RFM95ピンの必要なすべてのピンは、RFM95 DIO1を除き、32U4のピンに直接接続された羽にあります。 RFM95の場合、Dio1はArduino Pin 1が外部割り込み#3であるために選択され、羽のDio1の隣にあります。 Adafruit Feather 32U4 RFM95ピンマッピング。
チップバケットには、羽、GND、入力に2つのピンが必要です。入力ピンがArduino Pin 3(外部割り込み0)が選択されているため。
Arduino Pin 3で弱いプルアップを有効にする必要があるため、チップバケットの傾向/転倒が低い信号を検出できます。
Adafruit Feather 32U4 Platformioボードを使用したPlatformioがベースです。 Arduino-LMICライブラリは、Lorawan™サポートを提供します。
ファームウェアは、チップバケットによって行われたヒント/転倒の数のみを数え、Lorawan™を使用して送信します。メッセージには、報告されたバッテリー電圧レベルもあります。
ロラワンの結合シーケンス中に、LEDがフェージングしています。フェードクラスは、Arduino Fading LEDの例からビルドされています。
発電は、2つの主要な状態で行われます。雨モードと雨モードなし。
3番目のモードは、バッテリー電圧が3.5未満の場合、割り込みを有効にすることなくスリープ_foreverモードでデバイスを設定します。これは、放電によってバッテリーが破壊されないようにするためです。
睡眠は8秒間隔で行われ、睡眠の各8秒後にLMIC状態マシンがチェックされ、データが送信される場合はデータがチェックされます。
デフォルトのデータ送信期間は15秒です。
雨が約1時間雨が降っていない場合、デバイスはスリープモードの睡眠を設定し、次に雨が降るときを待っているため、外部の割り込みがデバイスを覚醒させます。
デバイスが起動すると、メッセージが送信され、着信コマンドを取得します。
Thing Networkへの統合を簡素化するために、デコーダーとエンコーダーを使用して、MQTT APIの使用を簡素化できます。
デバイス内の雨カウンターをリセットするMQTTコマンド。パラメーターリセットには、デバイスが受け入れるリセットコマンドの値234 (0xea)があります。
mosquitto_pub -h < Region > .thethings.network -u " <AppID> " -P " <AppKey> " -t ' <AppID>/devices/<DevID>/down ' -m ' {"port":2,"confirmed":true,"payload_fields":{"reset":234}} 'MQTTコマンドを設定して、間隔を15分に設定します。
mosquitto_pub -h < Region > .thethings.network -u " <AppID> " -P " <AppKey> " -t ' <AppID>/devices/<DevID>/down ' -m ' {"port":2,"confirmed":true,"payload_fields":{"multiplexer":15}} ' function Decoder ( bytes , port )
{
// Decode an uplink message from a buffer
// (array) of bytes to an object of fields.
var decoded = { } ;
if ( port === 1 )
{
if ( bytes . length >= 3 )
{
decoded . counts = ( ( ( bytes [ 2 ] & 0x80 ) >> 7 ) << 16 ) | ( bytes [ 1 ] << 8 ) | bytes [ 0 ] ;
decoded . vbat = ( ( bytes [ 2 ] & 0x7F ) + 330 ) / 100.0 ;
}
}
return decoded ;
} function Encoder ( object , port ) {
// Encode downlink messages sent as
// object to an array or buffer of bytes.
var bytes = [ ] ;
if ( port === 1 && ( ( object . multiplexer > 0 ) && ( object . multiplexer < 255 ) ) )
{
bytes [ 0 ] = 1 ;
bytes [ 1 ] = object . multiplexer ;
}
else if ( port === 2 && object . reset === 0xea )
{
bytes [ 0 ] = object . reset ;
}
return bytes ;
}