スマートフォンWebブラウザからWi-Fiブルドーザーをコントロールしていましたが、2023年下記サイトに回路・プログラム等が載っていません。今回スマホアプリ[RemoteXY]のジョイスティック使って走行操作しました。
●同ブログ関連記事:【RemoteXY使い方】
動画
制御基板
●秋月通商:ESP8266(技適製品)【https://akizukidenshi.com/catalog/g/g112236/】●DRV8835搭載デュアルモータードライバシールド(Pololu社製)【https://www.switch-science.com/products/1907】
●リチウムポリマー電池 3.7V(モーター・ESP8266共用電源)モータに負荷を変えるとWIFIが切れることがあります。
回路図
RemoteXY設定
【Properties】【Configuration】設定変更
[Connection]WiFi access point
[Board]ESP8266 based board
[Module]WiFi on chip
【Apply】実行
【joystick】をスマホ画面に貼付け形・色・文字を入力
作成したら。
【Get source code】実行
コードをArduino IDE エディタ画面に貼付てスケッチを行う。
Arduino IDE
プログラム
// RemoteXY select connection mode and include library
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>
#include <RemoteXY.h>
// RemoteXY connection settings
#define REMOTEXY_WIFI_SSID "RemoteXY"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377
// DRV8835
// GPIO
#define PIN_AIN1 5 // Right Motor Blue
#define PIN_AIN2 4 // Right Motor Yellow
#define PIN_BIN1 13 // Left Motor Yellow
#define PIN_BIN2 12 // Left Motor Blue
// PWN
#define PWN_FREQ 1000 // PWM frequency: 1000Hz(1kHz)
#define PWN_RANGE 100 // PWN range: 100
// ABS Function
int setABS(int pwn_value) {
pwn_value = abs(pwn_value);
if (pwn_value > 100) {
pwn_value = 100;
}
return pwn_value;
}
// RemoteXY configurate
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] = // 19 bytes
{ 255,2,0,0,0,12,0,16,3,1,5,0,7,15,51,51,21,205,31 };
// this structure defines all the variables and events of your control interface
struct {
// input variables
int8_t joystick_1_x; // from -100 to 100
int8_t joystick_1_y; // from -100 to 100
// other variable
uint8_t connect_flag; // =1 if wire connected, else =0
} RemoteXY;
#pragma pack(pop)
void RemoteXY_Receive() {
RemoteXY_Handler ();
int x = RemoteXY.joystick_1_x; // Joystick x
int y = RemoteXY.joystick_1_y; // Joystick y
int mr_pwn; // Right motor speed
int ml_pwn; // Left motor speed
// Forward or Reverse ?
if (y > 0 ) {
mr_pwn = y + x;
ml_pwn = y - x;
} else {
mr_pwn = y - x;
ml_pwn = y + x;
}
// Right Motor
if (mr_pwn > 0) {
// CW Forward
analogWrite(PIN_AIN1, setABS(mr_pwn));
analogWrite(PIN_AIN2, 0);
} else {
// CCW Reverse
analogWrite(PIN_AIN1, 0);
analogWrite(PIN_AIN2, setABS(mr_pwn));
}
// Left Motor
if (ml_pwn > 0) {
// CW Forward
analogWrite(PIN_BIN1, setABS(ml_pwn));
analogWrite(PIN_BIN2, 0);
} else {
// CCW Reverse
analogWrite(PIN_BIN1, 0);
analogWrite(PIN_BIN2, setABS(ml_pwn));
}
}
void setup() {
RemoteXY_Init ();
delay(10);
// Initialize GPIO mode
pinMode(PIN_AIN1, OUTPUT);
pinMode(PIN_AIN2, OUTPUT);
pinMode(PIN_BIN1, OUTPUT);
pinMode(PIN_BIN2, OUTPUT);
// Initialize PWN
analogWriteFreq(PWN_FREQ);
analogWriteRange(PWN_RANGE);
}
void loop() {
RemoteXY_Receive();
}
0 件のコメント:
コメントを投稿