Arduinoへの複数のワイヤレスセンサー

私はArduinoに12個のセンサーをワイヤレス接続する方法に関するアイデアを探しています。センサーはArduinoから約10フィートです。彼らは組織化された方法でArduinoに100ms〜250msごとに1バイトのデータを送る必要があります。

  • MQTTとpubsubclientを調査しましたが、Arduinoをブローカーにする方法が見つからず、アプリケーションには非常に非効率的であると言われました。
  • NRF24L01を見ましたが、データを組織的に受け取るのに6本のパイプしかないようです。
  • Xbeeを調べましたが、データレートに追いつかないと言われました。

他の提案は高く評価されています...ありがとうございます。

1
あなたはNRF24L01を使って、ただ一つのパイプでそれを行うことができます。最も簡単なのは、クエリパケットにノード番号を含めることによって各ノードに積極的にデータを照会することですが、ノード番号で自分自身を識別させたり、わずかに変化したまたはランダムな間隔で送信したり、パケットを送信することができ、2つ以上の送信が重複した場合の衝突を一般的に収容するために、各読み取り値を2回以上送信することができる。
追加された 著者 rossp,
Chris、これを行うためのArduinoのコード例、リファレンスを参照するポインタがあり、クライアント側とサーバー側の両方が表示されますか?これは最も簡単な解決策であるように思えます...私はオリジナルの記事では、各センサーがarduinoに直接配線されているとは特に言及しませんでした。ありがとうございました!
追加された 著者 Ant's,
あなたは仕事をしていましたか?私は探している - どのように512 Hzのデータレート(各センサーと同時に)4つのセンサーからワイヤレスデータを受信するには?ありがとうございました。
追加された 著者 tarastar42,

3 答え

私はnRF24L01をお勧めします。

1つのパイプにつき1つのパイプしか必要としません。

各パイプは実際にはノードが応答するアドレスです - 複数のパイプを持つことは、(エイリアスのように)1つのノードに複数のアドレスを持つことができることを意味します - もちろん、ノードごとに1つのアドレスしか必要としません。

範囲は十分です(アンテナのバージョンは数百メートルもありません)、価格は無視できるほど低くなっています。

2
追加された

WiFi経由でUDPパケットを送信するのが最も簡単かもしれません。 OPEN、ACK/NAK、CLOSEなどの追加のパケットオーバーヘッドはありません。追加バイトの増分コストは非常に小さいので、2バイト、またはさらには100を送信する必要があると判断した場合バイトであれば、スループットにはほとんど影響しません。

バイトを「バッチ」することができれば、それはさらに良いでしょう。たとえば、ノードあたり8バイト、800ms-2000msごとに1回送信できますか?そうでない場合、WiFiの速度は、1バイトのUDPパケットが大きな待ち時間なく通過できるようにする必要があります。受信機がどのような待ち時間に対応できるか知っていますか?バッチパケットでは、ネットワークへのアクセス時間(つまり、空き時間にどれくらい時間がかかりますか)に応じて、平均の遅延が発生する可能性があります。

実際には、生のRFトランスミッタ/レシーバをVirtualWireのようなものと組み合わせて使用​​する方法があります。 「マスタ」からの適切な同期化により、スレーブはそれぞれ独自のタイムスロットを持ち、衝突を回避することができ(ネットワークアクセス時間を低く抑えることができる)

1
追加された
WIFIは、あなたがそれを行うことができる前に、アクセスポイント型のレジスタの設定を耳にしています。おそらくそれを検討する理由は、本来の長所(代替案に比べて非常に不利な点)ではなく、ポスターがArduinoスタイルのファームウェアを実行できるセンサノードとしてのESP8266ボードの準備ができて安価な可用性です。既存のArduinoと連携して、あるいは必要に応じてAPハブとして機能することもできます。
追加された 著者 rossp,

nRF24L01を使用してください。衝突を避けるために、(コメントの中でChrisが示唆したように)センサーに照会することができます。 セットアップは次のようになります。 各センサーは固有のアドレスを持ちます。中央ユニットは要求を送信し、センサノードはそれに応答する。セントラルユニットは異なるアドレスを持ち、すべてのセンサーはそのアドレスに送信します。また、ackのデータを使用してレスポンスをパックすることもできます。

  • Central node (Addr0) -> Sensor 1 (Addr1): Request
  • Sensor 1 (Addr1) -> Central node (Addr0): Response, sensor data
  • Central node (Addr0) -> Sensor 2 (Addr2): Request
  • Sensor 2 (Addr2) -> Central node (Addr0): Response, sensor data
  • Central node (Addr0) -> Sensor 3 (Addr3): Request
  • Sensor 3 (Addr3) -> Central node (Addr0): Response, sensor data
  • ...
1
追加された
本質的にここで起こっているのは、一対一のコミュニケーションだけです。ハブが各ノードと交互に交換するということだけです。あなたが考えなければならないことの1つは、次のノードを試してみる前に、返事を待つ時間です。
追加された 著者 rossp,
多くの時間があるでしょう、それはそれを使用するための最良の戦略は何かの質問です。
追加された 著者 rossp,
もう一度、ありがとう。私はちょうどArduinoのプログラミングに慣れてきています。これを行うにはArduinoコードのリンクがありますか?私が見つけたすべての例は、1対1のコミュニケーションを示しています。
追加された 著者 Ant's,
ああ...分かった。どのような種類の遅延/待機時間が典型的でしょうか? 250msのデータレートにも対応できるのでしょうか?つまり、250ms以内に、私はすべての12センサーからの読書を取得する必要があります...
追加された 著者 Ant's,
どのようにセンサーを接続するのですか? I2Cを介してnRF24L01トランシーバに直接接続し、マイクロコントローラの終端に別のトランシーバを接続しますか?あなたはそれぞれの端にマイクロコントローラを必要としませんか?
追加された 著者 brianlmerritt,