XBeeのRSSI、dBm(受信信号強度、電波強度)をArduinoから取得してみました。
いろいろ調べていたらXBeeの6pinから受信強度(RSSI)に合わせたPWM波形が出力されているとのこと。詳しい情報があまり見つからなかったので、PWM出力を実測してみて受信強度を確認してみました。
概要
RSSI、dBmとは信号の強さ、信号強度を示してます。RSSIは相対的な指標で、dBmは絶対値で表現される指標のようです。
でXBeeにはもともと dBmを 取得することが可能で、通信中にその信号強度を確認することができるようです。ATコマンドで確認することもできますし、X-CTUを使用すれば、ビジュアルでリアルタイムに信号強度を確認することができます。
▼X-CTUで信号強度取得▼
2台のXBeeを隣に置いて測定しているところです。 dBm 単位で信号強度がリアルタイムで確認できます。
さらに、XBee本体の6pinからはデフォルトでRSSIに合わせたPWM出力がされているようで、その波形を確認すればArduinoなどからも割と手軽に信号強度が確認できそう・・。ということで今回はこの6pinから出力されている信号をArduino等で処理して信号強度を確認してみたいと思います。
まずはX-CTUでdBm(信号強度)の確認
X-CTUにツールが準備されているため、そのツールを利用して信号強度の確認を確認してみたいと思います。
使い方は割と簡単で、2台のXBeeをペアリングした状態で、一台をパソコンへ接続、X-CTUで認識させます。
▼で「tool」-「RangeTest」を起動させます▼
起動した画面で、「START***」をクリックすると信号強度の計測を開始します。
▼信号強度計測中▼
パケットを送受信してその信号強度と信号損失を表示しています。グラフ化も同時に行ってくれてパケット損失も見れるようです。
すぐとなりどうしにXBee2台を置いて計測しているので「-46dBm」と非常に強い信号強度となってます・・。X-CTU利用すれば簡単に信号強度を確認することが可能です。
XBeeの6pinから信号強度(PWM波形)を確認
つぎに本題です。XBeeの6番pinから出力しているというRSSIの信号強度を拾って見たいと思います。
調べてもあまり情報が出てこなかったので(良く解らなかったので)PWM波形をロジアナ使用して確認してみました。ここら辺の内容がわかれば6pinの出力内容をArduinoなどのマイコンから情報処理して、信号強度が確認できると思います。
で2台のXBeeを適当に離しながら、X-CTUで「dBm」を、6pinからはPWM出力を確認して比較を行ってみました。
▼「-63dBm」時のPWM▼
X-CTUで「-63dBm」程を示しているときの6pinからの出力です。かろうじて読み取れたマニュアルからPWM周期は200μsとのこと・・。確かにきっちり200μs周期となってます。恐らく(当然)、信号強度によってデューティー比が変わるはずです。
6pinからのPWM波形を実測
確認したところ、信号強度強⇒HIGH時間長い、信号強度弱⇒HIGH時間短いとなっているようです。
信号強度とPWMデューティー比の関係を調べるため、少しずつXBeeを離していって「dBm」と「デューティー比」を計測してみました。
▼実測結果▼
横軸に「dBm」、縦軸に「PWMのHIGH時間(μs)」としてます。
信号強度「dBm」とデューティー比はある程度比例関係にあるようです。
ですので6pinから出力されるHIGH時間をArduinoなどで計測すれば信号強度は確認できますね。pulseIn関数やtimer使用すればそれほど難しくないかと思います。
ただ信号強度がおよそ「-30dBm」以上の場合、6pinからはずっとHIGHが出てるようなのでpulseIn関数使用する場合はtimeoutを200μsで設定しておくと無駄な計測時間を使わなくていいかと思います。
記事タイトルで「Arduinoで取得する」とありますが、肝心なその部分があまり説明なくてすみません・・。需要があれば方法追記します。
コメント