2020年に製作した全方向移動ロボットカーをスマホアプリRemoteXYで走行操作してみました。[Module]HC-05(06)Bluetoothを選択しますが、HC-5(06)Bluetoothモジュールは技適製品でありません。代替品にRN-42 Bluetooth無線モジュール技適製品を使いました。
●参考サイトhiramine.com:【https://www.hiramine.com/physicalcomputing/arduino/bluetooth_rn42.html】
モーターシールド 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 件のコメント:
コメントを投稿