最近、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を、ぐるぐる巻きにします。
こうすることで、ノイズの侵入を防げるそうです。なるべく、隙間がないように巻くと、さらに良いです。
ここで注意する点は、アルミホイルでショートするのを防ぐために、ビニールテープを巻いてから、アルミホイルを巻いてください。

Arduino Unoなどは、3.3V端子に流せる最大電流が50mAとかなり小さくなっています。よって、電流が不足し動作が不安定になる場合があります。(5V端子は200mA)
このような場合には、別途3.3V電源を用意するか、Arduinoの5V端子に3端子レギュレーターを接続し3.3Vを作り出せば安定動作させることが出来ます。
NRF24l01は、通信速度が速くてとても使いやすいモジュールですが、通信距離が短いのがデメリットでした。
今回の内容のことを実践していただければ、通信距離が格段に伸びると思います。これで、Arduinoで簡単に長距離ラジコンカーを作ることができます。
ぜひ参考にしてみてください!