Arduino 4WDRCカー
コンポーネントと消耗品
> ![]() |
| × | 2 | |||
![]() |
| × | 2 | |||
| × | 1 | ||||
![]() |
| × | 2 | |||
| × | 1 | ||||
![]() |
| × | 3 | |||
![]() |
| × | 2 | |||
![]() |
| × | 2 | |||
| × | 2 | ||||
| × | 1 | ||||
![]() |
| × | 1 |
必要なツールとマシン
> ![]() |
|
アプリとオンラインサービス
> ![]() |
|
このプロジェクトについて
ストーリー
皆さんこんにちは!これは私の次のプロジェクトです-ジョイスティックコントローラーを備えたArduino4WD RCカー、またはアナログジョイスティックを備えたArduino4WDスマートカーの制御がいかに簡単か。
このRCジョイスティック制御車は、送信機と受信機としてNRF24l01を使用しています。オープンスペースで最大1キロメートルの範囲があります。また、非常にシンプルで簡単に作成できます。
1.ジョイスティックコントローラー
ジョイスティックのコンポーネント:
<図>
<図>

ジョイスティックシールドはArduinoの上にあり、シンプルなコントローラーになります。 7つの瞬間的なプッシュボタン(4つの大きなボタン、2つの小さなボタン、およびジョイスティック選択ボタン)と2軸のサムジョイスティックは、古い任天堂コントローラーのレベルでArduinoの機能を提供します。このユニットは、Nokia 5110LCDおよびnRF24L01インターフェースも提供します。
特徴:
- nRF24L01インターフェース
- Nokia 5110LCDインターフェース
- Bluetoothインターフェース
- I2Cインターフェース
- Arduinoと互換性があります
- 動作電圧3.5Vまたは5V



実際には、BTE16-49-nRF24L01 + RFX2401C + PA + LNAワイヤレス通信モジュール、アンテナシールドケース2.4GHz 20dbm1000mとラベル付けされています。
販売者が指定した特性:
- 2.4GHzグローバルオープンISMバンド、ライセンス免除使用
- 2Mbpsの最大動作速度、効率的なGFSK変調、オーディオ、ビデオの送信
- マルチポイント通信と周波数ホッピング通信のニーズを満たすための125チャネル
- 組み込みのハードウェアCRCエラー検出およびポイントツーマルチポイント通信制御のアドレス
- 動作電圧3.0〜3.6V、送信電力20dBm(VDD =3.3V)
- 外部2.4GHzアンテナ
- 2.54mmピッチのピン、アンプモジュールインターフェイスなしで完全に互換性があり、交換が簡単で距離が長くなります
- 最大1000mの伝送距離

2.ジョイスティックコントローラー <図>


ジョイスティックシールドには、4つの大きなボタン+2つの小さなボタン+ジョイスティック選択ボタンと2軸のサムジョイスティック(0から1023までのX軸、0から1023までのY軸)があります。シールドはArduinoの上にあり、次のようになります。シンプルなコントローラー。私のスケッチでは、ボタンアップはブザー(ホーン)、ボタン右-フロントライト(LED +抵抗200オーム)、ボタン左-バックライト(LED +抵抗200オーム)用です。他のボタンは使用されません。
ジョイスティックのテスト:
<図>


アイドル状態:X =499、Y =502、Up =1、Right =1、Down =1、Left =1
<図>
<図>







3. Arduino 4WDRCカー
<図>









<図>

上の配線図の画像のように接続します。
注:コードをアップロードする前に、Arduino Unoボード(ピン0、1)からジャンパー線を外す必要があります。
すべてのステップを適切に実行したら、車は準備ができています!
Arduino CarとJoystickコントローラーに電力を供給した後、ジョイスティックを使用して車を制御できます。ジョイスティックを前後に動かすと、車は前後方向に移動し、ジョイスティックを左右に動かすと、車は左右に回転します。
乞うご期待!
コード
- Car_nRF24.ino
- Joystick_nRF24.ino
Car_nRF24.ino Arduino
ArduinoRCカーのコード/ * JoyStickモジュールレシーバーコード-接続:nRF24L01モジュール参照:1-GND 2-VCC 3.3V !!! NOT 5V 3-CEからArduinoピン64-CSNからArduinoピン85-SCKからArduinoピン136-MOSIからArduinoピン117-MISOからArduinoピン128-未使用* /// -----(必要なライブラリをインポートします)-----#include#include #include / * -----(定数とピン番号を宣言します)----- * /#define CE_PIN 6#define CSN_PIN 8 //注:定数の最後の「LL」は「LongLong」typeconst uint64_t pipe =0xE8E8F0F0E1LL; //送信パイプを定義します#definelight_Front18 // Arduino Uno用のLEDフロントライトピンA4#define light_Back 19 // Arduino Uno用のLEDバックライトピンA5#define horn_Buzz 7 #define ENA_m1 3 //モーターフロントライトを有効/高速化します#define ENB_m1 5 //モーターを有効/高速化する右後方#defineENA_m2 9 //モーターを有効化/高速化する前方左#defineENB_m2 10 //モーターを有効化/高速化後方左#defineIN_11 0 // L298N#1 in1モーター前面右#define IN_12 1 // L298N#1 in 2モーターフロントライト#defineIN_13 2 // L298N#1 in 3モーターバックライト#defineIN_14 4 // L298N#1 in 4モーターバックライト#defineIN_21 14 // L298N# 2 in 1モーターフロントレフト#defineIN_22 15 // L298N#2 in 2モーターフロントレフト#define IN_23 16 // L298N#2 in 3モーターバックレフト#defineIN_24 17 // L298N#2 in4モーターバックレフト/ * -----(オブジェクトを宣言します)----- * / RF24 radio(CE_PIN、CSN_PIN); //ラジオを作成します/ * -----(変数を宣言します)----- * / int joystick [6]; //ジョイスティックの読み取り値を保持する6要素配列intspeedRight =0; int speedLeft =0; int xAxis、yAxis; // joystickの4つのボタン変数intbuttonUp; int buttonRight; int buttonDown; int buttonLeft; void setup(){pinMode(light_Front、出力); pinMode(light_Back、OUTPUT); pinMode(horn_Buzz、OUTPUT); pinMode(ENA_m1、OUTPUT); pinMode(ENB_m1、OUTPUT); pinMode(ENA_m2、OUTPUT); pinMode(ENB_m2、OUTPUT); pinMode(IN_11、OUTPUT); pinMode(IN_12、OUTPUT); pinMode(IN_13、OUTPUT); pinMode(IN_14、OUTPUT); pinMode(IN_21、OUTPUT); pinMode(IN_22、OUTPUT); pinMode(IN_23、OUTPUT); pinMode(IN_24、OUTPUT); / * Serial.begin(9600); Serial.println( "Nrf24L01レシーバー開始"); * / radio.begin(); radio.openReadingPipe(1、pipe); radio.startListening();} void loop(){if(radio.available()){radio.read(joystick、sizeof(joystick)); xAxis =ジョイスティック[0]; yAxis =ジョイスティック[1]; //ジョイスティック配列の4つのボタン変数intbuttonUp =joystick [2]; int buttonRight =ジョイスティック[3]; int buttonDown =ジョイスティック[4]; int buttonLeft =ジョイスティック[5]; //Serial.println(); //デバッグ用//データペイロードをフェッチします-以下のデバッグコードif(buttonUp ==HIGH){digitalWrite(horn_Buzz、LOW);} else {digitalWrite(horn_Buzz、HIGH);} if(buttonRight ==HIGH){digitalWrite( light_Front、LOW);} else {digitalWrite(light_Front、HIGH);} if(buttonLeft ==HIGH){digitalWrite(light_Back、LOW);} else {digitalWrite(light_Back、HIGH);} //前方に使用されるY軸および後方制御if(yAxis <470){//右モーターを後方に設定digitalWrite(IN_11、LOW); digitalWrite(IN_12、HIGH); digitalWrite(IN_13、HIGH); digitalWrite(IN_14、LOW); //左モーターを後方に設定digitalWrite(IN_21、HIGH); digitalWrite(IN_22、LOW); digitalWrite(IN_23、LOW); digitalWrite(IN_24、HIGH); //モーター速度を上げるためのPWM信号の470から0に戻るための減少するY軸の読み取り値を0から255の値に変換しますRight =map(yAxis、470、0、0、255); speedLeft =map(yAxis、470、0、0、255); } else if(yAxis> 550){//右モーターを前方に設定digitalWrite(IN_11、HIGH); digitalWrite(IN_12、LOW); digitalWrite(IN_13、LOW); digitalWrite(IN_14、HIGH); //左モーターを前方に設定digitalWrite(IN_21、LOW); digitalWrite(IN_22、HIGH); digitalWrite(IN_23、HIGH); digitalWrite(IN_24、LOW); // 550から1023に進むための増加するY軸の読み取り値を、モーター速度を上げるためのPWM信号の0から255の値に変換しますRight =map(yAxis、550、1023、0、255); speedLeft =map(yAxis、550、1023、0、255); } //ジョイスティックが真ん中にある場合、モーターは動いていませんelse {speedRight =0; speedLeft =0; } //左右の制御に使用されるX軸if(xAxis <470){//減少するX軸の読み取り値を470から0に変換して0から255の値に変換するint xMapped =map(xAxis、470、0、0 、255); //左に移動-左のモーター速度を下げ、右のモーター速度を上げるspeedLeft =speedLeft-xMapped; speedRight =speedRight + xMapped; //範囲を0から255に制限しますif(speedLeft <0){speedLeft =0; } if(speedRight> 255){speedRight =255; }} if(xAxis> 550){//増加するX軸の読み取り値を550から1023に変換して0から255の値に変換しますint xMapped =map(xAxis、550、1023、0、255); //右に移動-右のモーター速度を下げ、左のモーター速度を上げるspeedLeft =speedLeft + xMapped; speedRight =speedRight-xMapped; //範囲を0から255に制限しますif(speedLeft> 255){speedLeft =255; } if(speedRight <0){speedRight =0; }} //低速でのブーンという音を防ぎます(モーターに応じて調整します。PWM値が70の値を下回ると、モーターが動き始めませんでした)if(speedLeft <70){speedLeft =0; } if(speedRight <70){speedRight =0; } analogWrite(ENA_m1、speedRight); // PWM信号をモーターAに送信しますanalogWrite(ENB_m1、speedRight); analogWrite(ENA_m2、speedLeft); // PWM信号をモーターBに送信しますanalogWrite(ENB_m2、speedLeft); / * Serial.print( "X ="); Serial.print(xAxis); Serial.print( "Y ="); Serial.print(yAxis); Serial.print( "Up ="); Serial.print(ジョイスティック[2]); Serial.print( "Right ="); Serial.print(ジョイスティック[3]); Serial.print( "Down ="); Serial.print(ジョイスティック[4]); Serial.print( "左="); Serial.println(ジョイスティック[5]); * /}}
Joystick_nRF24.ino Arduino
ジョイスティックコントローラーのコード/ * JoyStickモジュールトランシーバーコード-接続:nRF24L01モジュール参照:1-GND 2-VCC 3.3V !!! NOT 5V 3-CEからArduinoピン94-CSNからArduinoピン105-SCKからArduinoピン136-MOSIからArduinoピン117-MISOからArduinoピン128-未使用デフォルトボタンピン:上-ピン2右-ピン3下-ピン4左-ピン5-アナログジョイスティックモジュールGNDからArduinoGNDVCCからArduino + 5VXポットからArduinoA0YポットからArduinoA1 / * -----(必要なライブラリをインポート)----- * /#include#include "nRF24L01.h" #include "RF24.h" #define CE_PIN 9#define CSN_PIN 10#define xAxis 14 // Arduinoの場合はA0UNO#define yAxis 15 // Arduinoの場合はA1 UNO //注:定数の最後の「LL」は「LongLong」typeconst uint64_t pipe =0xE8E8F0F0E1LL; //送信パイプを定義します/ * -----(オブジェクトを宣言します)----- * / RF24 radio(CE_PIN、CSN_PIN); //ラジオを作成します/ * -----(変数を宣言します)----- * / int joystick [6]; //ジョイスティックの読み取り値と4つのボタンを保持する6つの要素配列intbuttonUp =2; int buttonRight =3; int buttonDown =4; int buttonLeft =5; void setup(){Serial.begin(9600); radio.begin(); radio.openWritingPipe(pipe); radio.stopListening(); //すべてのボタンのpinModeと初期状態を宣言しますpinMode(buttonUp、INPUT_PULLUP); pinMode(buttonRight、INPUT_PULLUP); pinMode(buttonDown、INPUT_PULLUP); pinMode(buttonLeft、INPUT_PULLUP); digitalWrite(buttonUp、LOW); digitalWrite(buttonRight、LOW); digitalWrite(buttonDown、LOW); digitalWrite(buttonLeft、LOW);} void loop(){joystick [0] =analogRead(xAxis);ジョイスティック[1] =analogRead(yAxis);ジョイスティック[2] =digitalRead(buttonUp);ジョイスティック[3] =digitalRead(buttonRight);ジョイスティック[4] =digitalRead(buttonDown);ジョイスティック[5] =digitalRead(buttonLeft); radio.write(ジョイスティック、sizeof(ジョイスティック)); delay(20); Serial.print( "X ="); Serial.print(analogRead(xAxis)); Serial.print( "Y ="); Serial.print(analogRead(yAxis)); Serial.print( "Up ="); Serial.print(digitalRead(buttonUp)); Serial.print( "Right ="); Serial.print(digitalRead(buttonRight)); Serial.print( "Down ="); Serial.print(digitalRead(buttonDown)); Serial.print( "左="); Serial.println(digitalRead(buttonLeft));}
回路図
rc_car_tp3A7JlpYw.fzz 
製造プロセス