2024年2月1日木曜日

全方向移動ロボットカー MEGA2560 RemoteXY操作

 2020年に製作した全方向移動ロボットカーをスマホアプリRemoteXYで走行操作してみました。[Module]HC-05(06)Bluetoothを選択しますが、HC-5(06)Bluetoothモジュールは技適製品でありません。代替品にRN-42 Bluetooth無線モジュール技適製品を使いました。



モーターシールド HW-130

●同ブログ関連記事:【RemoteXY使い方】【全方向移動ロボットカー MEGA2560
●RemoteXYは無料でアイテム5個まで利用できますが、それ以上になると30秒しか使用できません。(動作確認には十分です)






動画




RN-42 Bluetooth無線モジュール
販売元:秋月電子通商【https://akizukidenshi.com/catalog/g/g108690/
●RN-42Bluetoothバージョン2.0、1.2、1.1と下位互換
(HC-05(06)Bluetooth バージョン2.0)
●技適製品







通信ボーレートをRemoteXY SERIAL_SPEED 9600に合わせる

抵抗3.3KΩをIO7とVDD(3.3V)に接続する。(115200 → 9600bps)









回路図


























Properties】【Configuration】設定変更
[Connection]Bluetooth
[Board]Arduino MEGA 2560
[Module]HC-05(06)Bluetooth 
【Apply】実行
【Button】をスマホ画面に貼付け形・色・文字を入力
作成したら。
button_1 【↖】
button_2 【G】
button_3 【↗】
button_4 【←】
button_5 【S】
button_6 【→】
button_7 【↙】
button_8 【B】
button_9 【↘】
button_10 【L】
button_11 【R】

【Get source code】実行
コードをArduino IDE エディタ画面に貼付てスケッチを行う。


























プログラム
// RemoteXY select connection mode and include library 
#define REMOTEXY_MODE__SOFTSERIAL
#include <SoftwareSerial.h>

#include <RemoteXY.h>

// RemoteXY connection settings 
#define REMOTEXY_SERIAL_RX 10
#define REMOTEXY_SERIAL_TX 11
#define REMOTEXY_SERIAL_SPEED 9600


// RemoteXY configurate  
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =   // 134 bytes
  { 255,11,0,0,0,127,0,16,168,1,1,3,1,9,18,19,207,31,226,134,
  150,0,1,3,21,9,20,19,204,31,71,0,1,3,43,9,19,19,207,31,
  226,134,151,0,1,3,1,73,18,17,204,31,239,188,172,0,1,3,21,31,
  20,17,204,31,83,0,1,3,43,72,19,17,204,31,82,0,1,3,1,51,
  18,17,206,31,226,134,153,0,1,3,21,51,20,17,204,31,66,0,1,3,
  43,51,19,17,206,31,226,134,152,0,1,3,1,31,18,17,206,31,226,134,
  144,0,1,3,44,31,18,17,206,31,226,134,146,0 };
  
// this structure defines all the variables and events of your control interface 
struct {

    // input variables
  uint8_t button_1; // =1 if button pressed, else =0 
  uint8_t button_2; // =1 if button pressed, else =0 
  uint8_t button_3; // =1 if button pressed, else =0 
  uint8_t button_10; // =1 if button pressed, else =0 
  uint8_t button_5; // =1 if button pressed, else =0 
  uint8_t button_11; // =1 if button pressed, else =0 
  uint8_t button_7; // =1 if button pressed, else =0 
  uint8_t button_8; // =1 if button pressed, else =0 
  uint8_t button_9; // =1 if button pressed, else =0 
  uint8_t button_4; // =1 if button pressed, else =0 
  uint8_t button_6; // =1 if button pressed, else =0 

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0 

} RemoteXY;
#pragma pack(pop)






#include <AFMotor.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

void forward(){
  motor1.run(FORWARD); 
  motor2.run(FORWARD); 
  motor3.run(FORWARD); 
  motor4.run(FORWARD);  
}

void back(){
  motor1.run(BACKWARD); 
  motor2.run(BACKWARD); 
  motor3.run(BACKWARD); 
  motor4.run(BACKWARD);  
}

void stop(){
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);  
}

void R_roll(){
  motor1.run(FORWARD); 
  motor2.run(BACKWARD); 
  motor3.run(FORWARD); 
  motor4.run(BACKWARD); 
}
void L_roll(){
  motor1.run(BACKWARD); 
  motor2.run(FORWARD); 
  motor3.run(BACKWARD); 
  motor4.run(FORWARD); 
}

void R_forward(){
  motor1.run(FORWARD);
  motor2.run(RELEASE);
  motor3.run(FORWARD);
  motor4.run(RELEASE);      
}

void L_forward(){
  motor1.run(RELEASE);
  motor2.run(FORWARD);
  motor3.run(RELEASE);
  motor4.run(FORWARD);      
}

void R_back(){
  motor1.run(RELEASE);
  motor2.run(BACKWARD);
  motor3.run(RELEASE);
  motor4.run(BACKWARD);      
}

void L_back(){
  motor1.run(BACKWARD);
  motor2.run(RELEASE);
  motor3.run(BACKWARD);
  motor4.run(RELEASE);      
}

void right(){
  motor1.run(BACKWARD); 
  motor2.run(BACKWARD); 
  motor3.run(FORWARD); 
  motor4.run(FORWARD);     
}

void left(){
  motor1.run(FORWARD); 
  motor2.run(FORWARD); 
  motor3.run(BACKWARD); 
  motor4.run(BACKWARD);       
}





 

void setup() {
  RemoteXY_Init ();  
  motor1.setSpeed(200);
  motor2.setSpeed(200);
  motor3.setSpeed(200);
  motor4.setSpeed(200);
  stop(); 
  
 
}

void loop() {  
  RemoteXY_Handler ();
  if(RemoteXY.button_1 == 1)L_forward(); 
  if(RemoteXY.button_2 == 1)forward(); 
  if(RemoteXY.button_3 == 1)R_forward(); 
  if(RemoteXY.button_4 == 1)L_roll(); 
  if(RemoteXY.button_5 == 1)stop(); 
  if(RemoteXY.button_6 == 1)R_roll(); 
  if(RemoteXY.button_7 == 1)L_back(); 
  if(RemoteXY.button_8 == 1)back(); 
  if(RemoteXY.button_9 == 1)R_back(); 
  if(RemoteXY.button_10 == 1)left();
  if(RemoteXY.button_11 == 1)right();
}
 


0 件のコメント:

コメントを投稿

Raspberry Pi Donkey Car スマートカー

  2020年に製作したDonkey Car スマートカー について記事にしました。 Donkey CarはRaspberry Pi のカメラからコースを ディープラーニングさせ自動走行を行います。(動画は白線上を自動走行)   動画