NRF24L01で長距離通信に挑戦!

最近、NRF24L01を使ったラジコンカーを作ってみました。

しかし、通信がよく途切れてしまったので、前回安定化モジュールを作ってみました。

このモジュールのおかげで、通信が途切れることは極端に減りました

たしかに、室内で遊ぶ分には全く問題ないのですが、広い公園で使ってみると、通信距離が短いことが気になりました。なので今回は、NRF24L01の通信距離を限界まで延ばすことにチャレンジしてみました。

プログラムを修正する

まずは、NRF24L01の消費電力を設定します。消費電力は、4段階で設定することができます。当然のことですが、消費電力が増えれば増えるほど、通信距離が広くなります。変更するには、以下のコードを追加します。

プログラム通信距離消費電力
radio.setPALevel(RF24_PA_MAX);最長最大
radio.setPALevel(RF24_PA_HIGH);長い大きい
radio.setPALevel(RF24_PA_LOW,);短い小さい
radio.setPALevel(RF24_PA_MIN);最短最小

続いて、NRF24L01の通信速度を設定します。通信速度は、3段階で設定することができます。もちろん、通信速度を速くすればするほど、通信距離が短くなります。変更するには、以下のコードを追加します。

プログラム通信距離通信速度
radio.setDataRate(RF24_250KBPS);最長最遅(250kbps)
radio.setDataRate(RF24_1MBPS);中間中間(1Mbps)
radio.setDataRate(RF24_2MBPS);最短最速(2Mbps)

続いて、NRF24L01の通信周波数を設定します。通信周波数は、2.400 ~ 2.524 GHzに設定することができます。NRF24L01の初期設定では2.4GHzを使用します。

しかし、2.4GHzというのは、Wi-Fiや電子レンジなどでも使われている周波数です。なので、Wi-Fiや電子レンジの電波と干渉しないように、周波数を微妙に変えてやる必要があります。

プログラム周波数
radio.setChannel(0);2.400 GHz
radio.setChannel(1);2.401 GHz
radio.setChannel(124);2.524 GHz
radio.setChannel(125);2.525 GHz

よって、通信距離を最大にしたい場合には以下のようなコードに変更します。

void setup() {
  radio.setPALevel(RF24_PA_MAX);   // 消費電力を最大
  radio.setDataRate(RF24_250KBPS);  // 通信速度を250kbps
  radio.setChannel(125);       // 通信周波数を2.525GHz
}

ただ、このプログラムでは消費電力が大きくなって通信速度が遅くなってしまいます。トレードオフの関係なので、環境に合わせた適切なプログラムにするのが良いと思います。

アンテナ搭載のモジュールを使う

アンテナ搭載モデルのことを”NRF24l01 PA + LNA“というようです。

使い方は、PCBアンテナのNRF24l01と全く同じです。

こちらのモジュールには、信号増幅器なども搭載されているためPCBアンテナよりも、非常に感度が良くなります

ちなみに、電波というのはアンテナの先端から出るのではなく、上の写真のようにアンテナ全体から出てきます。

なので、アンテナは互いに平行になるように設置しましょう

信号線に短いジャンパワイヤーを使う

nRF24L01は、非常にノイズに敏感です。

もし、信号線に長いジャンパワイヤーを使うと、ノイズが増幅(?)されて、通信が不安定になるそうです。

なので、VCCとGND以外には、なるべく短いジャンパワイヤーを使用するようにしましょう。

デカップリングコンデンサを追加

続いても、ノイズ対策です。

電源からのノイズを対策するために、VCC と GND間にデカップリングコンデンサを入れておくのが望ましくなります。

4.7μF〜47μFの静電容量で、電解コンデンサーかセラミックコンデンサーがよく使われています。ただ、いろいろなサイトを見てみると、「10μFが良い」や「100μFが良い」、「8.2 pFが良い」などなど、どの静電容量が最も良いのかよくわかりません。

私は、多数派の10μFのコンデンサーを使用しています。

アルミホイルで巻く

またまた、ノイズ対策です。

今回は、周りから飛んでくる放射ノイズを対策します。そのために、アルミホイルなどでNRF24l01を、ぐるぐる巻きにします。

こうすることで、ノイズの侵入を防げるそうです。なるべく、隙間がないように巻くと、さらに良いです。

ここで注意する点は、アルミホイルでショートするのを防ぐために、ビニールテープを巻いてから、アルミホイルを巻いてください。

3.3V電源の強化

Arduino Unoなどは、3.3V端子に流せる最大電流が50mAとかなり小さくなっています。よって、電流が不足し動作が不安定になる場合があります。(5V端子は200mA)

このような場合には、別途3.3V電源を用意するか、Arduinoの5V端子に3端子レギュレーターを接続し3.3Vを作り出せば安定動作させることが出来ます。

まとめ!

NRF24l01は、通信速度が速くてとても使いやすいモジュールですが、通信距離が短いのがデメリットでした。

今回の内容のことを実践していただければ、通信距離が格段に伸びると思います。これで、Arduinoで簡単に長距離ラジコンカーを作ることができます。

ぜひ参考にしてみてください!