You are here

ESP32-DEVC-MOTOR

ESP32-DEVC-MOTORの概要

準備中

ESP32-DEVC-MOTORの組み立て例(別売りパーツを含む)

ESP32-DevKitCにDCモーターやRCサーボを接続できるようにする拡張ボードです。
ESP-WROOM-32をWebサーバーとして構成したり、Blynkを利用することにより、スマートフォンなどから操作できる車やロボットの作成に利用することができます。


  • ESP32-DevKitC相当品(別売り)を搭載できます。
  • DCモーター2個を接続できます。
  • RCサーボ8個を接続できます。(NeoPixel/WS2812を接続することもできます)
  • 3個のタクトスイッチを搭載しています。
  • 圧電サウンダーを搭載しています。
  • LEDを搭載しています。
  • MPU6050/MPU9250加速度・ジャイロセンサー(別売り)を搭載できます。
  • OLEDディスプレイ(別売り)を搭載できます。
  • I2Cの接続端子を装備しています。


ESP32-DEVC-MOTORの利用例

DCモータードライバーには、L9110を使用しています。


  • DCモーター駆動用の電源電圧は、2.5V~9Vを使用してください。
  • DCモーター電流は、継続的には800mAまで、瞬間的には1.5Aを流すことができます。
  • DCモーターは、正転、反転の制御ができます。

例えば、マブチモーターのFA-130RAを使用する場合には、DCモーター駆動用の電源は3V-6Vを接続するとよいでしょう。
ただし、FA-130RAの適正電圧は1.5V、利用電圧範囲は1.5V~3Vとなっているので、3V以上の電源を接続する場合には、PWM機能を利用して、実効電力を適切な範囲に制限するなどの配慮をしてください。


オプション

ESP32-DEVC-MOTORには、以下の2種類のESP32ボードを搭載できます。
https://store.shopping.yahoo.co.jp/microfan/esp32-devkitc.html
https://store.shopping.yahoo.co.jp/microfan/esp-32s-1v1.html

ESP32-DEVC-MOTORに以下の加速度センサーを搭載することにより、ロボット等の姿勢を考慮したプログラムを開発することができるようになります。
https://store.shopping.yahoo.co.jp/microfan/gy-521.html
https://store.shopping.yahoo.co.jp/microfan/gy-9250.html

ESP32-DEVC-MOTORに以下のOLEDディスプレイを搭載することにより、PCのシリアルモニタがなくても、各種の動作情報を表示させることができます。
https://store.shopping.yahoo.co.jp/microfan/oled096-128x64-i2c-blue.html


スケッチ例

ESP32-DEVC-MOTORにDCモータを2個接続して正転と反転を繰り返すスケッチです。

#define MOTOR1A 12
#define MOTOR1B 13
#define MOTOR2A 14
#define MOTOR2B 15

// CH:0-7はサーボで使用
#define LEDC_CHANNEL_MOTOR1A 8
#define LEDC_CHANNEL_MOTOR1B 9
#define LEDC_CHANNEL_MOTOR2A 10
#define LEDC_CHANNEL_MOTOR2B 11

#define LEDC_TIMER_8_BIT  8
#define MAX_PWM_VALUE ((1 << LEDC_TIMER_8_BIT) - 1)
#define LEDC_MOTOR_PWM_FREQ     10000

#define DURATION 2000

#define PWMPOWER 255

void motor1(int value)
{
  if (value > MAX_PWM_VALUE)
    value = MAX_PWM_VALUE ;
  else if (value < -MAX_PWM_VALUE)
    value = -MAX_PWM_VALUE ;
    
  if (value >= 0) {
    ledcWrite(LEDC_CHANNEL_MOTOR1B, 0) ;
    ledcWrite(LEDC_CHANNEL_MOTOR1A, value) ;
  } else {
    ledcWrite(LEDC_CHANNEL_MOTOR1A, 0) ;
    ledcWrite(LEDC_CHANNEL_MOTOR1B, -value) ;
  }
}

void motor2(int value)
{
  if (value > MAX_PWM_VALUE)
    value = MAX_PWM_VALUE ;
  else if (value < -MAX_PWM_VALUE)
    value = -MAX_PWM_VALUE ;

  if (value >= 0) {
    ledcWrite(LEDC_CHANNEL_MOTOR2B, 0) ;
    ledcWrite(LEDC_CHANNEL_MOTOR2A, value) ;
  } else {
    ledcWrite(LEDC_CHANNEL_MOTOR2A, 0) ;
    ledcWrite(LEDC_CHANNEL_MOTOR2B, -value) ;
  }
}

void setupMotorPWM(uint8_t pin, uint8_t ch)
{
  ledcSetup(ch, LEDC_MOTOR_PWM_FREQ, LEDC_TIMER_8_BIT) ;
  ledcAttachPin(pin, ch) ;
  ledcWrite(ch, 0) ;
}

void setup()
{
  // モータードライバのPWM出力を初期化
  setupMotorPWM(MOTOR1A, LEDC_CHANNEL_MOTOR1A) ;
  setupMotorPWM(MOTOR1B, LEDC_CHANNEL_MOTOR1B) ;
  setupMotorPWM(MOTOR2A, LEDC_CHANNEL_MOTOR2A) ;
  setupMotorPWM(MOTOR2B, LEDC_CHANNEL_MOTOR2B) ;
}

void loop()
{
  motor1(PWMPOWER) ;
  motor2(PWMPOWER) ;
  delay(DURATION) ;
  
  motor1(-PWMPOWER) ;
  motor2(-PWMPOWER) ;
  delay(DURATION) ;
}

ESP32-DEVC-MOTORにRCサーボを8個接続して正転と反転を繰り返すスケッチです。

#define LEDC_CHANNEL_LED 12

#define LEDC_CHANNEL_SOUNDER 13

#define LEDC_TIMER_16_BIT  16

// サーボ信号の1サイクル 50Hz:20ms
#define LEDC_SERVO_FREQ     50

// サーボによって設定を変える必要がある
//#define SERVO_MIN_WIDTH_MS 0.6
//#define SERVO_MAX_WIDTH_MS 2.4
#define SERVO_MIN_WIDTH_MS 0.8
#define SERVO_MAX_WIDTH_MS 2.2

uint8_t chPin[] = { 16, 17, 18, 19, 23, 27, 32, 33 } ;

int servo_pwm_count(int v)
{
  float vv = (v + 90) / 180.0 ;
  return (int)(65536 * (SERVO_MIN_WIDTH_MS + vv * (SERVO_MAX_WIDTH_MS - SERVO_MIN_WIDTH_MS)) / 20.0) ;
}

uint8_t servoSetup(uint8_t ch)
{
  uint8_t pin ;

  if (ch >= sizeof(chPin))
    return -1 ;

  pin = chPin[ch] ;

  ledcSetup(ch, LEDC_SERVO_FREQ, LEDC_TIMER_16_BIT) ;
  ledcAttachPin(pin, ch) ;
  ledcWrite(ch, servo_pwm_count(0)) ; // ニュートラル

  return pin ;
}

// servoAngle(): t=-90~90
void servoAngle(uint8_t ch, int t)
{
  if (ch >= sizeof(chPin))
    return ;

int v = servo_pwm_count(t) ;
Serial.println(v) ;
  ledcWrite(ch, servo_pwm_count(t)) ;
}

void setup()
{
  Serial.begin(115200) ;

  // RC SERVOの初期化
  for (uint8_t i = 0; i < sizeof(chPin); i++) {
    servoSetup(i) ;
    servoAngle(i, 0) ;
  }
}

int deg = 0 ;
int delta = 5 ;

void loop()
{
  deg += delta ;

  if (deg > 90) {
    deg = 90 ;
    delta = -5 ;
  } else if (deg < -90) {
    deg = -90 ;
    delta = 5 ;
  }

  for (uint8_t i = 0; i < sizeof(chPin); i++)
    servoAngle(i, deg) ;

  delay(100) ;
}

ESP32-DEVC-MOTORの回路図

ESP32-DEVC-MOTORの回路図を示します。

ESP32-DEVC-MOTORの回路図


開発ソフト: 
チップファミリー: 
MCUチップ: