2024年1月1日月曜日

Wi-Fiブルドーザー ESP8266 RemoteXY操作



2018年に製作したWi-Fiブルドーザーについて記事にしました。
スマートフォン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 件のコメント:

コメントを投稿

Raspberry Pi Donkey Car スマートカー

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