工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ジョイスティック制御のRCカー

コンポーネントと消耗品

>
Arduino UNO
× 1
ArduinoUSBホストシールド
× 1
XBOX360ワイヤレスコントローラー
× 1
XBOX360レシーバー
× 1
1L293Dモータードライバー
× 1
7812
× 1
78S12
× 1
切り替え
× 1
ヒートシンク
× 1
電源プラグ
× 1
9Vバッテリープラグ付き8個の1v5AAバッテリー用バッテリーコネクター
× 1

このプロジェクトについて

1.車に乗ってください!

まず、古いRCカーが必要です。幸いなことに、私はモンスタートラックを見つけました。これは非常に興味深いものになる可能性があります!

2つのモーターを制御するためのケーブルを除くすべての電子機器を取り外します。

<図>

2.Arduinoとシールド

Arduinoボード(私はArduino UNOを選択しました)を取り、USBホストシールドを接続します。

<図>

3.Arduinoを車に取り付けます

ArduinoUNOとUSBHostシールドの上にシールドを差し込み、車にねじ込みます。古い電子回路用の穴の1つを使用しました。

<図>

4.回路を作る

ブレッドボードで作成しましたが、パフォーマンスボードで作成することもできます。基本的に、回路は2つのドライバ(L293DまたはSN754410)と2つの電圧安定器で構成されています。電圧安定器は、バッテリーからの電圧を制限するために使用されます。実際、最大電圧を15〜18 Vにして、RCカーで遊ぶ時間を増やすために、10〜12本のAA1.5V電池を使用することをお勧めします。モーターには大量の電流が必要なため、車を静止位置(約2A)から動かすには、78S12のような強力な電圧安定器が必要です。

ドライバーの動作について詳しく知りたい場合は、こちらをご覧ください!

<図>

5.回路を車に取り付けます

あなたがサーキットを置くことができたなら、RCカーの空いている場所を見つけてください。私が持っているモンスタートラックには、たくさんのスペースがあります。配置したら、回路を2つのモーターに接続します。最後に、ワイヤレスレシーバーをUSBホストシールドに接続します。

<図>

6.コード

このコードは、Circuits @homeのKristianLauszusによってGitHubでホストされているUSBHost Library2.0の例に基づいています

USB_Host_Shield_2.0
  / * Xbox WirelessReciverライブラリのスケッチ例-KristianLauszusが開発ワイヤレスで最大4つのコントローラーをサポート詳細については、ブログ投稿を参照してください:http://blog.tkjelectronics.dk/2012/12 / xbox-360-receiver-added-to-the-usb-host-library /または電子メールを送ってください:[email protected] * /#include  // IDEを満足させてください。 inoのインクルードステートメント。#ifdef dobogusinclude#include  #endifUSB Usb; XBOXRECV Xbox(&Usb); #define motorPinOne 5 //選択したピンにはPWMが必要PWM#define motor2PinOne 4 #define motor2PinTwo 7#define BRAKE 2 / *モーターの回転速度を定義します。 0から255の間でなければなりません。* / intパルス=0; intフォワード=0; intブレーキオン=0; void setup(){TCCR1B =TCCR1B&0b11111000 | 0x02; Serial.begin(115200); if(Usb.Init()==-1){Serial.print(F( "\ r \ nOSCが開始しませんでした")); while(1); // motors_stop();を停止します中心(); } Serial.print(F( "\ r \ nXboxワイヤレスレシーバーライブラリが開始されました")); pinMode(motorPinOne、OUTPUT); pinMode(motorPinTwo、OUTPUT); pinMode(motor2PinOne、OUTPUT); pinMode(motor2PinTwo、OUTPUT); pinMode(BRAKE、OUTPUT); digitalWrite(BRAKE、LOW);} void loop(){Usb.Task(); if(Xbox.XboxReceiverConnected){for(uint8_t i =0; i <4; i ++){if(Xbox.getButtonPress(L2、i)){Serial.print( "L2:"); Serial.print(Xbox.getButtonPress(L2、i));パルス=Xbox.getButtonPress(L2、i);フォワード=0;時計回り(); } if(Xbox.getButtonPress(R2、i)){Serial.print( "R2:"); Serial.println(Xbox.getButtonPress(R2、i));パルス=Xbox.getButtonPress(R2、i);フォワード=1; counterClockwise(); } if(Xbox.getAnalogHat(LeftHatX、i)> 7500 || Xbox.getAnalogHat(LeftHatX、i)<-7500 || Xbox.getAnalogHat(LeftHatY、i)> 7500 || Xbox.getAnalogHat(LeftHatY、i)<- 7500 || Xbox.getAnalogHat(RightHatX、i)> 7500 || Xbox.getAnalogHat(RightHatX、i)<-7500 || Xbox.getAnalogHat(RightHatY、i)> 7500 || Xbox.getAnalogHat(RightHatY、i)<- 7500){if(Xbox.getAnalogHat(LeftHatX、i)> 7500){Serial.print(F( "LeftHatX:")); Serial.print(Xbox.getAnalogHat(LeftHatX、i)); Serial.print( "\ t"); if(Xbox.getAnalogHat(LeftHatX、i)> 26000)turn_right(); else center(); } if(Xbox.getAnalogHat(LeftHatX、i)<-7500){Serial.print(F( "LeftHatX:")); Serial.print(Xbox.getAnalogHat(LeftHatX、i)); Serial.print( "\ t"); if(Xbox.getAnalogHat(LeftHatX、i)<-26000)turn_left(); else center(); } if(Xbox.getAnalogHat(LeftHatY、i)> 7500 || Xbox.getAnalogHat(LeftHatY、i)<-7500){Serial.print(F( "LeftHatY:")); Serial.print(Xbox.getAnalogHat(LeftHatY、i)); Serial.print( "\ t"); } if(Xbox.getAnalogHat(RightHatX、i)> 7500){Serial.print(F( "RightHatX:")); Serial.print(Xbox.getAnalogHat(RightHatX、i)); Serial.print( "\ t"); } if(Xbox.getAnalogHat(RightHatX、i)<-7500){Serial.print(F( "RightHatX:")); Serial.print(Xbox.getAnalogHat(RightHatX、i)); Serial.print( "\ t"); } if(Xbox.getAnalogHat(RightHatY、i)> 7500 || Xbox.getAnalogHat(RightHatY、i)<-7500){Serial.print(F( "RightHatY:")); Serial.print(Xbox.getAnalogHat(RightHatY、i)); } Serial.println(); } if(Xbox.getButtonClick(UP、i)){Serial.println(F( "Up")); } if(Xbox.getButtonClick(DOWN、i)){Serial.println(F( "Down")); } if(Xbox.getButtonClick(LEFT、i)){Serial.println(F( "Left")); } if(Xbox.getButtonClick(RIGHT、i)){Serial.println(F( "Right")); } if(Xbox.getButtonClick(START、i)){Serial.println(F( "Start")); } if(Xbox.getButtonClick(BACK、i)){Serial.println(F( "Back")); } if(Xbox.getButtonClick(L3、i))Serial.println(F( "L3")); if(Xbox.getButtonClick(R3、i))Serial.println(F( "R3")); if(Xbox.getButtonClick(L1、i))Serial.println(F( "L1")); if(Xbox.getButtonClick(R1、i))Serial.println(F( "R1")); if(Xbox.getButtonClick(XBOX、i)){Xbox.setLedMode(ROTATING、i); Serial.println(F( "Xbox")); } if(Xbox.getButtonClick(A、i)){Serial.println(F( "A")); } if(Xbox.getButtonClick(B、i)){Serial.println(F( "B")); digitalWrite(BRAKE、HIGH); broken_on =1;パルス=100; if(前方)clockly();そうでなければcounterClockwise(); } if(Xbox.getButtonClick(X、i))Serial.println(F( "X")); if(Xbox.getButtonClick(Y、i)){Serial.println(F( "Y")); motors_stop(); }}} delay(1);} void clockly(){Serial.print( "回転は時計回りで速度は"); Serial.println(pulse); analogWrite(motorPinOne、pulse); // Hブリッジのレッグ1を低く設定しますanalogWrite(motorPinTwo、0); if(brake_on){delay(600); digitalWrite(BRAKE、LOW);ブレーキオン=0;パルス=0; }} void counterClockwise(){Serial.print( "回転は反時計回りで、速度は"); Serial.println(pulse); analogWrite(motorPinOne、0); // Hブリッジのレッグ1を低く設定しますanalogWrite(motorPinTwo、pulse); if(brake_on){delay(600); digitalWrite(BRAKE、LOW);ブレーキオン=0;パルス=0; }} void turn_left(){digitalWrite(motor2PinOne、HIGH); // Hブリッジのレッグ1を低く設定しますdigitalWrite(motor2PinTwo、LOW);} void turn_right(){digitalWrite(motor2PinOne、LOW); // Hブリッジのレッグ1を低く設定しますdigitalWrite(motor2PinTwo、HIGH);} void motors_stop(){analogWrite(motorPinOne、0); analogWrite(motorPinTwo、0);パルス=0;} void center(){digitalWrite(motor2PinOne、LOW); digitalWrite(motor2PinTwo、LOW);}  

コード

  • コードスニペット#1
コードスニペット#1 Arduino
 / * Xbox WirelessReciverライブラリのスケッチ例-KristianLauszusによって開発されました。ワイヤレスで最大4つのコントローラーをサポートします。詳細については、ブログ投稿を参照してください:http://blog.tkjelectronics.dk/2012/12/xbox-360 -receiver-added-to-the-usb-host-library /または電子メールを送ってください:[email protected] * /#include  //インクルードステートメントを確認するだけでよいIDEを満足させるino。#ifdef dobogusinclude#include  #endifUSB Usb; XBOXRECV Xbox(&Usb); #define motorPinOne 5 //選択したピンにはPWM#define motorPinTwo 6 //選択したピンにはPWM#defineが必要motor2PinOne 4 #define motor2PinTwo 7#define BRAKE 2 / *モーターの回転速度を定義します。 0から255の間でなければなりません。* / intパルス=0; intフォワード=0; intブレーキオン=0; void setup(){TCCR1B =TCCR1B&0b11111000 | 0x02; Serial.begin(115200); if(Usb.Init()==-1){Serial.print(F( "\ r \ nOSCが開始しませんでした")); while(1); // motors_stop();を停止します中心(); } Serial.print(F( "\ r \ nXboxワイヤレスレシーバーライブラリが開始されました")); pinMode(motorPinOne、OUTPUT); pinMode(motorPinTwo、OUTPUT); pinMode(motor2PinOne、OUTPUT); pinMode(motor2PinTwo、OUTPUT); pinMode(BRAKE、OUTPUT); digitalWrite(BRAKE、LOW);} void loop(){Usb.Task(); if(Xbox.XboxReceiverConnected){for(uint8_t i =0; i <4; i ++){if(Xbox.getButtonPress(L2、i)){Serial.print( "L2:"); Serial.print(Xbox.getButtonPress(L2、i));パルス=Xbox.getButtonPress(L2、i);フォワード=0;時計回り(); } if(Xbox.getButtonPress(R2、i)){Serial.print( "R2:"); Serial.println(Xbox.getButtonPress(R2、i));パルス=Xbox.getButtonPress(R2、i);フォワード=1; counterClockwise(); } if(Xbox.getAnalogHat(LeftHatX、i)> 7500 || Xbox.getAnalogHat(LeftHatX、i)<-7500 || Xbox.getAnalogHat(LeftHatY、i)> 7500 || Xbox.getAnalogHat(LeftHatY、i)<- 7500 || Xbox.getAnalogHat(RightHatX、i)> 7500 || Xbox.getAnalogHat(RightHatX、i)<-7500 || Xbox.getAnalogHat(RightHatY、i)> 7500 || Xbox.getAnalogHat(RightHatY、i)<- 7500){if(Xbox.getAnalogHat(LeftHatX、i)> 7500){Serial.print(F( "LeftHatX:")); Serial.print(Xbox.getAnalogHat(LeftHatX、i)); Serial.print( "\ t"); if(Xbox.getAnalogHat(LeftHatX、i)> 26000)turn_right(); else center(); } if(Xbox.getAnalogHat(LeftHatX、i)<-7500){Serial.print(F( "LeftHatX:")); Serial.print(Xbox.getAnalogHat(LeftHatX、i)); Serial.print( "\ t"); if(Xbox.getAnalogHat(LeftHatX、i)<-26000)turn_left(); else center(); } if(Xbox.getAnalogHat(LeftHatY、i)> 7500 || Xbox.getAnalogHat(LeftHatY、i)<-7500){Serial.print(F( "LeftHatY:")); Serial.print(Xbox.getAnalogHat(LeftHatY、i)); Serial.print( "\ t"); } if(Xbox.getAnalogHat(RightHatX、i)> 7500){Serial.print(F( "RightHatX:")); Serial.print(Xbox.getAnalogHat(RightHatX、i)); Serial.print( "\ t"); } if(Xbox.getAnalogHat(RightHatX、i)<-7500){Serial.print(F( "RightHatX:")); Serial.print(Xbox.getAnalogHat(RightHatX、i)); Serial.print( "\ t"); } if(Xbox.getAnalogHat(RightHatY、i)> 7500 || Xbox.getAnalogHat(RightHatY、i)<-7500){Serial.print(F( "RightHatY:")); Serial.print(Xbox.getAnalogHat(RightHatY、i)); } Serial.println(); } if(Xbox.getButtonClick(UP、i)){Serial.println(F( "Up")); } if(Xbox.getButtonClick(DOWN、i)){Serial.println(F( "Down")); } if(Xbox.getButtonClick(LEFT、i)){Serial.println(F( "Left")); } if(Xbox.getButtonClick(RIGHT、i)){Serial.println(F( "Right")); } if(Xbox.getButtonClick(START、i)){Serial.println(F( "Start")); } if(Xbox.getButtonClick(BACK、i)){Serial.println(F( "Back")); } if(Xbox.getButtonClick(L3、i))Serial.println(F( "L3")); if(Xbox.getButtonClick(R3、i))Serial.println(F( "R3")); if(Xbox.getButtonClick(L1、i))Serial.println(F( "L1")); if(Xbox.getButtonClick(R1、i))Serial.println(F( "R1")); if(Xbox.getButtonClick(XBOX、i)){Xbox.setLedMode(ROTATING、i); Serial.println(F( "Xbox")); } if(Xbox.getButtonClick(A、i)){Serial.println(F( "A")); } if(Xbox.getButtonClick(B、i)){Serial.println(F( "B")); digitalWrite(BRAKE、HIGH); broken_on =1;パルス=100; if(前方)clockly();そうでなければcounterClockwise(); } if(Xbox.getButtonClick(X、i))Serial.println(F( "X")); if(Xbox.getButtonClick(Y、i)){Serial.println(F( "Y")); motors_stop(); }}} delay(1);} void clockly(){Serial.print( "回転は時計回りで速度は"); Serial.println(pulse); analogWrite(motorPinOne、pulse); // Hブリッジのレッグ1を低く設定しますanalogWrite(motorPinTwo、0); if(brake_on){delay(600); digitalWrite(BRAKE、LOW);ブレーキオン=0;パルス=0; }} void counterClockwise(){Serial.print( "回転は反時計回りで、速度は"); Serial.println(pulse); analogWrite(motorPinOne、0); // Hブリッジのレッグ1を低く設定しますanalogWrite(motorPinTwo、pulse); if(brake_on){delay(600); digitalWrite(BRAKE、LOW);ブレーキオン=0;パルス=0; }} void turn_left(){digitalWrite(motor2PinOne、HIGH); // Hブリッジのレッグ1を低く設定しますdigitalWrite(motor2PinTwo、LOW);} void turn_right(){digitalWrite(motor2PinOne、LOW); // Hブリッジのレッグ1を低く設定しますdigitalWrite(motor2PinTwo、HIGH);} void motors_stop(){analogWrite(motorPinOne、0); analogWrite(motorPinTwo、0); pulse =0;} void center(){digitalWrite(motor2PinOne、LOW); digitalWrite(motor2PinTwo、LOW);} 
Github
https://github.com/felis/USB_Host_Shield_2.0https://github.com/felis/USB_Host_Shield_2.0

製造プロセス

  1. Bluetoothで制御されるRaspberryPi Robot
  2. ジェスチャー制御のインタラクティブテーブルライト
  3. RaspberryPiを介したAlexa制御LED
  4. Nunchuk制御ロボットアーム(Arduino付き)
  5. Arduino Nano:ジョイスティックで2つのステッピングモーターを制御
  6. 音声制御ロボット
  7. Arduino +処理+ PHPを使用したカーカウンター
  8. Arduino制御ピアノロボット:PiBot
  9. Wi-Servo:Wi-Fiブラウザ制御サーボモーター
  10. Arduinoジョイスティック
  11. RCポルシェカー(Arduinoプロジェクト)