ESP-32 Anarog Servo Controller


ESP-32のアナログサーボコントローラーです。

ESP-32モーターシールドを作成しましたが、アナログコントールしたい、ボタンが欲しいという要望にお答えしたものです。

恒例ではありますが、電力は外部入力対応でServoへ5V出力可能です。
今回は大容量コンデンサを搭載可能にした上、SDカードを搭載可能です。(正し、設計ミスで15ピンが使用できなくなります)

可変抵抗の後ろにはジョイスティック用ピンがあり、2個のジョイスティックを使用可能です。
ここも、設計ミスで、ジョイスティックの入力ピンと、ジャンパーの位置が前後逆です。
可変抵抗は3V入力です。
ボタンは、0,4,25,26,27ピンを使用しています。

サーボは、12,13,14,15,16,17,22,21とし
19,18,23,5については、SDカードと兼用です。

以下はMJRoBot.orgのコードを改造したもので可変抵抗に合わせてサーボが動きます。
動作はYoutbeにアップしました。
https://youtu.be/QFtjK33J8-E

/*****************************************************
  ESP32 Analog Servo Control
  MJRoBot.org 6Sept17
  2019-2-25改造
*****************************************************/
//Analog Input
//#define ANALOG_PIN_0 37
//#define ANALOG_PIN_1 36
#define ANALOG_PIN_2 34
#define ANALOG_PIN_3 35
#define ANALOG_PIN_4 32
#define ANALOG_PIN_5 33

//int analog_value_0 = 0;
//int analog_value_1 = 0;
int analog_value_2 = 0;
int analog_value_3 = 0;
int analog_value_4 = 0;
int analog_value_5 = 0;

// PMW SERVO
#define SERVO_PIN_0 15
#define SERVO_PIN_1 14
#define SERVO_PIN_2 13
#define SERVO_PIN_3 12
#define SERVO_PIN_4 17
#define SERVO_PIN_5 21

int freq = 50;
int channel = 0;
int resolution = 8;
//int dutyCycle_0 = 21;
//int dutyCycle_1 = 21;
int dutyCycle_2 = 21;
int dutyCycle_3 = 21;
int dutyCycle_4 = 21;
int dutyCycle_5 = 21;

void setup()
{
  Serial.begin(115200);
  delay(1000); // give me time to bring up serial monitor
  Serial.println("ESP32 Servo Control");

 // ledcSetup(0, freq, resolution);
 // ledcAttachPin(SERVO_PIN_0, 0);
 // ledcWrite(0, dutyCycle_0);

 // ledcSetup(1, freq, resolution);
 // ledcAttachPin(SERVO_PIN_1, 1);
 // ledcWrite(1, dutyCycle_1);

  ledcSetup(2, freq, resolution);
  ledcAttachPin(SERVO_PIN_2, 2);
  ledcWrite(2, dutyCycle_2);

  ledcSetup(3, freq, resolution);
  ledcAttachPin(SERVO_PIN_3, 3);
  ledcWrite(3, dutyCycle_3);

  ledcSetup(4, freq, resolution);
  ledcAttachPin(SERVO_PIN_4, 4);
  ledcWrite(4, dutyCycle_4);

  ledcSetup(5, freq, resolution);
  ledcAttachPin(SERVO_PIN_5, 5);
  ledcWrite(5, dutyCycle_5);
}

void loop()
{
  // analog_value_0 = analogRead(ANALOG_PIN_0);
  // analog_value_1 = analogRead(ANALOG_PIN_1);
  analog_value_2 = analogRead(ANALOG_PIN_2);
  analog_value_3 = analogRead(ANALOG_PIN_3);
  analog_value_4 = analogRead(ANALOG_PIN_4);
  analog_value_5 = analogRead(ANALOG_PIN_5);

  //  Serial.println("Pin37:");
  //  Serial.println(analog_value_0);
  //  Serial.print(" Duty Cycle0 ==> ");
  //  Serial.println(dutyCycle_0);


  //  Serial.println("Pin36:");
  //  Serial.println(analog_value_1);
  //  Serial.print(" Duty Cycle1 ==> ");
  //  Serial.println(dutyCycle_1);

  Serial.println("Pin34:");
  Serial.println(analog_value_2);
  Serial.print(" Duty Cycle2 ==> ");
  Serial.println(dutyCycle_2);

  Serial.println("Pin35:");
  Serial.println(analog_value_3);
  Serial.print(" Duty Cycle3 ==> ");
  Serial.println(dutyCycle_3);

  Serial.println("Pin32:");
  Serial.println(analog_value_4);
  Serial.print(" Duty Cycle4 ==> ");
  Serial.println(dutyCycle_4);

  Serial.println("Pin33:");
  Serial.println(analog_value_5);
  Serial.print(" Duty Cycle5 ==> ");
  Serial.println(dutyCycle_5);


//  dutyCycle_0 = map(analog_value_0, 0, 4095, 10, 33);
//  dutyCycle_1 = map(analog_value_1, 0, 4095, 10, 33);
  dutyCycle_2 = map(analog_value_2, 0, 4095, 10, 33);
  dutyCycle_3 = map(analog_value_3, 0, 4095, 10, 33);
  dutyCycle_4 = map(analog_value_4, 0, 4095, 10, 33);
  dutyCycle_5 = map(analog_value_5, 0, 4095, 10, 33);
//  ledcWrite(0, dutyCycle_0);
//  ledcWrite(1, dutyCycle_1);
  ledcWrite(2, dutyCycle_2);
  ledcWrite(3, dutyCycle_3);
  ledcWrite(4, dutyCycle_4);
  ledcWrite(5, dutyCycle_5);
  delay(50);
}