ArduinoおよびNRF24L01

この短い学習曲線の背後にある理由:

私の息子は他の騒々しい家族から離れて自分の部屋に閉じ込められるのが好きです。 自閉症の兄弟や食事などを手伝うために、彼の母は時々彼の存在を必要とします。彼は、彼を得るために階段を上り下りする母を救う何かを彼の部屋に持っていることについて私に尋ねました。 。 簡単なソリューション。 彼は双方向の何かが欲しかった。 オーディオやビジュアルなど、それ以上の詳細はありません。 NRF24L01は非常に費用対効果が高く、しかも効果的な小さな無線デバイスであると聞いていたので、いくつかの研究を行い、何ができるかを確認することにしました。

ArduinoでNRF24L01無線モジュールを使用する方法を示す多くのInstructablesが利用可能です。 2つのArduinoがまったく同じ方法で通信できる単純なセットアップを見つけるのは難しいことがわかりました。 同じように各送信と受信の両方のセットアップが必要であり、2つのArduinoで両方を行う最も簡単な方法を定義します。 2つのArduinoが相互に通信できるようになると、Arduinoを拡張して他のことを行うための基本的なフレームワークが得られます。

このInstructableは、私の息子が望む製品を生産するのではなく、それと他の多くの単純な双方向アプリケーションのフレームワークを生産します。

ステップ1:NRF24L01モジュール

NRF24L01の主な機能は次のとおりです。

2.4HGz ISMバンドで動作します電源電圧は3.3Vです(これを覚えておくことが非常に重要です)SPIピンは5Vトレラントであり、Arduinoアプリケーションに役立ちます。126の選択可能なチャネル(周波数)があり、同じ周波数を使用している近くのデバイス。 試行錯誤することができます。 1MHz単位で選択可能なチャンネル

モジュールの寸法(約):内蔵アンテナ付きの小さなボード:-30mm X 16mm垂直アンテナマウント付きの小型:-30mm X 16mm水平アンテナマウント付きの大型:-41mm X 16mm(アンテナマウントはさらに7mm突出)

ボードはブレッドボードに対応していないため、メスのデュポンリードに接続する必要があります。 アダプタボードもありますが、これはまだブレッドボードには対応していませんが、VccとGNDを単独で使用してピンを1列に分割します。 アダプタプレートのもう1つの利点は、オンボード3.3vレギュレータ(およびバイパスコンデンサ)を備えていることです。つまり、5v電源を使用できます。

Arduinoから3.3vの電源を使用するだけで、電流サージなどを防ぐためにボードにコンデンサをはんだ付けする必要があるという問題がありました。 アダプタープレートの寸法:-27mm X 19mm。 各ボードの長さに約17mmを追加し、明らかに奥行きも少し大きくします。 オスとメスのピンヘッダーのはんだ付けを解除し、ボードをはんだ付けするだけです。 フットプリントは小さくなりますが、気弱な人には向いていません。

ステップ2:まとめる

パーツリスト:

  • 2 X Arduinos
  • 2 Xブレッドボード
  • 2 X NRF24L01
  • [オプション] NRF24L01用の2 X YL-105ブレイクアウトボード。 これにより、5V接続と簡単な配線が可能になります
  • 2 Xモメンタリスイッチ
  • 2個の赤色LED
  • 2 X黄色LED
  • 4 X 220オームの抵抗器
  • ジャンパー線

特に複数のアイテムが必要な場合は、安いコンポーネントのほぼすべてにAliExpressを使用しています。

彼らは主に中国からの安価なコンポーネントですが、私はまだ単一の悪いコンポーネントを持っていません。

私はArduinoを使うのが大好きなので、私がすることはすべて低電圧であり、安価なコンポーネントは仕事次第です。 ただし、もっとクリティカルなものや高電圧などに移動した場合、他の場所からコンポーネントを調達する可能性が高くなります。

接続:

モジュールはSPIプロトコルを使用して通信します。 シリアルペリフェラルインターフェイスバス

ここで使用されたピン配置は次のとおりです。

NRF24L01 Arduinoピン

VCC 3.3 V YL-105ブレイクアウトボードを使用する場合、Vccリードは5v Arduinoピンに接続できます

GND GND

CS 8(未使用のピンを使用できますが、コードで定義されています)

CE 7(未使用のピンを使用できますが、コードで定義されています)

MOSI 11(SPI MOSIピン11またはICSPピン4でなければなりません)

MISO 12(SPI MISOピン12またはICSPピン1でなければなりません)

SCK 13(SPI SCKピン13またはICSPピン3でなければなりません)

LEDおよびスイッチの配線:

  • Arduinoピン2-黄色LEDロングリード-アノード
  • 黄色の短いリード線-カソードから220オームの抵抗器、次に2番目の抵抗器からGNDへのリード線
  • Arduinoピン3-赤色LEDロングリード-アノード
  • 赤の短いリード線-カソードから220オームの抵抗器、次に2番目の抵抗器からGNDへのリード線
  • Arduinoピン4をスイッチに、スイッチの反対側をGNDに

2つのボードの物理的なビルドは同じです。

それぞれのボードのパイプの読み取りと書き込みには、ソフトウェアのわずかな違いがあります。

ステップ3:コード

両方のArduino用に作成したコードはほぼ同じなので、そのうちの1つだけを示します。

すべてのコードファイルをダウンロードできます。

#include // Arduinoに付属

#include "RF24.h" // IDEで見つけることができます:Sketch / Include Library / Manage Libraries / RF24を検索し、TMRh20でRF24を見つけます/詳細/インストール

//ボタンとLEDを設定します

#defineボタン4

#define confirmLed 2

#define led 3

RF24 NRF24L01(7、8); // NRF24L01というオブジェクトを作成します。 Arduinoで使用されるCEおよびCSNピンを指定する

バイトアドレス[] [6] = {"pipe1"、 "pipe2"}; // 2つのパイプのアドレスを読み書きに設定します

boolean buttonState = false; //送信と受信の両方に使用

void setup(){

// Arduinoピンをセットアップします

pinMode(button、INPUT_PULLUP);

pinMode(confirmLed、OUTPUT); //黄色のLED

pinMode(led、OUTPUT); //赤色LED

NRF24L01.begin(); //ボード1から読み書きするパイプを開きます

NRF24L01.openWritingPipe(address [0]); //アドレスパイプ1への書き込みパイプを開きます

NRF24L01.openReadingPipe(1、address [1]); //アドレスパイプ2から読み取りパイプを開きます

//これは、必要な2つのスケッチの唯一の違いです

//下の2行はボード2のもので、パイプの読み取りと書き込みが逆になっていることに注意してください

// NRF24L01.openReadingPipe(1、address [0]); //アドレスパイプ1から読み取りパイプを開きます

// NRF24L01.openWritingPipe(address [1]); //アドレスパイプ2への書き込みパイプを開く

NRF24L01.setPALevel(RF24_PA_MAX); // RF出力を最小、RF24_PA_MINに設定します(必要に応じてRF24_PA_MAXに変更します)

NRF24L01.setDataRate(RF24_250KBPS); //データレートを250kbpsに設定します

//以下の110の頻度が他のWi-Fiに問題がある場合、OKになるまで1ずつ増加します

//コードの両方のセットが同じ 頻度で なければならないことを忘れないでください

NRF24L01.setChannel(110); //チャネル110に周波数を設定します。

}

void loop(){

//ボタンの変更を他のArduinoに送信します

delay(10);

NRF24L01.stopListening();

buttonState = digitalRead(button); //このボードでボタンが押されたかどうかをテストします

if(buttonState == LOW) //ボタンが引き上げられているので、LOWをテストする

{

NRF24L01.write(&buttonState、sizeof(buttonState)); // LOW状態を他のArduinoボードに送信します

//進行状況を示すために黄色のLEDを点滅させます

digitalWrite(confirmLed、HIGH);

delay(100);

digitalWrite(confirmLed、LOW);

}

buttonState = HIGH; //ボタン状態変数をリセットします


/ /他のArduinoからのボタン変更の受信

delay(10);

NRF24L01.startListening();

if(NRF24L01.available() )//他のArduinoボードからの送信があるか

{

NRF24L01.read(&buttonState、sizeof(buttonState)); //変数を新しい状態に更新します

NRF24L01.stopListening();

}

if(buttonState == HIGH) //他のArduinoのボタンの状態をテストする

{

digitalWrite(led、LOW);

}

そうしないと

{

flashLed(); //ボタンが他のボードで押されたことを示します

}

buttonState = HIGH; //ボタン状態変数をリセットします

}

//赤色のLEDを5回点滅

void flashLed()

{

for(int i = 0; i <5; i ++)

{

digitalWrite(led、HIGH);

delay(200);

digitalWrite(led、LOW);

delay(200);

}

}

ステップ4:Arduinoコードとフリッツファイル

2つのArduinoに別々にコードをアップロードしない限り、2つの異なるCOMポートが選択されていることを確認してください。そうしないと、両方でまったく同じコードが使用されます。

これがあなたにとって興味深く、初心者がNRF24L01を初めて実装する際に役立つことを願っています。

他に何もなければ、それはあなたがあなたが構築できる実用的なフレームワークを提供します。

添付ファイル

  • Arduino_nRF24L01_with_LED.inoダウンロード
  • Arduino_nRF24L01_with_LED_2.inoダウンロード
  • Arduino NRF24L01.fzzダウンロード

ステップ5:考えられる問題に基づいて更新する

私はイタリアのトニーとアンドレアからいくつかのコメントを受けましたが、彼らは両方ともこの回路をArduino Nanoに配線するのに苦労しています。

約1年前に2つのNanoを購入しましたが、使用することはできなかったので、この機会にそれらをはんだ付けして使用しました。

元のビルドを分解していたので、すべてが機能することを確認するために、以前のようにArduino UNOでInstructableから再構築しました。

このビルドのイメージをいくつか追加しました。

配線がわずかに異なっており、見やすい場合があります。

NRF24L01ボードの1つにわずかなグリッチ/遅延がありましたが、それ自体は整理されているように見えました。

UNOを交換してNanoに置き換え、1つのスケッチを1つのNanoにアップロードし、もう1つのスケッチを他のNanoにアップロードしました。問題が発生することを予想していましたが、コードを変更することなくすべて機能しました。

異なるスケッチを2つのArduinoにアップロードすることが重要です。

違いはわずかですが、非常に重要です。

このビルドにもいくつかのイメージを追加しました。

そのため、接続に問題があるか、指示があいまいだった可能性があります。

5vを使用できるように、NRF24L01sにはYL-105ブレイクアウトボードを使用しました。

ブレイクアウトボードを使用していない場合は、3.3vを使用する必要があります。

5vをNRF24L01にプッシュすると、ほとんどの場合死にます。

NRF24L01ボードで使用中の7本のワイヤ

  • GND
  • 正3.3v
  • CSからArduinoピン8(コードで定義)
  • CEからArduinoピン7(コードで定義)
  • MOSIからArduinoピン11(必須)
  • MISOからArduinoピン12(必須)
  • Arduinoピン13へのSCK(必須)
  • IRQは使用されません
  • 黄色のLEDロングリード-アノード、Arduinoピン2
  • 黄色の短いリード線-カソード、220オームの抵抗器、次に2番目の抵抗器はGNDに接続
  • 赤色LEDの長いリード線-アノード、Arduinoピン3へ
  • Arduinoピン4をスイッチに、スイッチの反対側をGNDに

動作していないように見えるビルドがある場合は、それを分解して、特に非常に小さいビルドでやり直します。これにより、以前のミスを排除します。

私がトニーとアンドレアのボードで間違っていると思うことができる唯一のことは、MOSIとMISOが交換されたかもしれないということです。

これが彼らと問題を抱えているかもしれない他の誰にも役立つことを願っています。

ステップ6:ビデオデモンストレーションの追加

セットアップと使用の簡単なデモを提供するためにビデオがアップロードされました。

関連記事