Project 18.2 サーボをノブで動かす/Servo Knop

前回はサーボの首振りを学びました。

あわせて読みたい
Project 18.1 サーボの首振り/Servo Sweep 前回はモータードライバについて学びました。 https://kaneshige.org/?p=481 今回はサーボの首振りを試してみましょう。 【サーボモーターとは】 サーボモーターは、DC...

今回はポテンションメーターでサーボを動かしてみましょう。

目次

回路図

接続図

コード

/**********************************************************************
  Filename    : Control Servo by Potentiometer
  Description : Use potentiometer to control the rotation of servo motor.
  Auther      : www.freenove.com
  Auther      : www.freenove.com
  Modification: 2022/10/25
**********************************************************************/
#define SERVO_PIN 21  //define the pwm pin
#define SERVO_CHN 0   //define the pwm channel
#define SERVO_FRQ 50  //define the pwm frequency
#define SERVO_BIT 12  //define the pwm precision
#define ADC_PIN   14  //define the adc pin 

void servo_set_pin(int pin);
void servo_set_angle(int angle);

void setup() {
  servo_set_pin(SERVO_PIN);
  Serial.begin(115200);
}

void loop() {
  // read the value of the potentiometer (value between 0 and 4095)
  int potVal = analogRead(ADC_PIN);             
  Serial.printf("potVal_1: %d\t",potVal);
  // scale it to use it with the servo (value between 0 and 180)
  potVal = map(potVal, 0, 4095, 0, 180); 
  // set the servo position according to the scaled value
  servo_set_angle(potVal);                  
  Serial.printf("potVal_2: %d\r\n",potVal);
  delay(15);// wait for the servo to get there
}

void servo_set_pin(int pin) {
  ledcSetup(SERVO_CHN, SERVO_FRQ, SERVO_BIT);
  ledcAttachPin(pin, SERVO_CHN);
}

void servo_set_angle(int angle) {
  if (angle > 180 || angle < 0)
    return;
  long pwm_value = map(angle, 0, 180, 103, 512);
  ledcWrite(SERVO_CHN, pwm_value);
}

コードの解説が必要なところはなさそうですね。
私の好みというレベルですが、27行目のポテンションメーターの値をマップしている行は不要かなと思います。
potVal変数には0~4095の値をそのまま入れておいて、42行目を以下のように書き換えれば計算コストが減ります。
30行目のシリアルモニターで角度を表示したいが故の1回目のマップかなとは思いますが。

  long pwm_value = map(angle, 0, 4095, 103, 512);

次回はステッピングモーターの制御について学びましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

金重総合研究所の主席研究員。
子供の頃から研究者を目指し、ライフワークとして日々様々な研究をしています。
経営・マネジメント・金融・DXあたりが本職です。
私を採用したい人、私と一緒に働きたい人、一緒に知識を肥やしていきたい人はぜひお声がけ下さい。

コメント

コメントする

目次