Arduinoでロボットアーム製作03

今回はサーボモーターを複数動かすためにpca9685というボードを追加します。Arduinoだけでも動かせるようですがモーターの数が多くなっていくと行き詰るためあらかじめボードを使います。
pca9685ボード1枚で16個のサーボモーターを制御できます。

4つのポテンショメータで4つのサーボを動かすテストです。




接続はこんな感じです。ブレッドボード上で接続しています。サーボ用電源で単三乾電池を4つ使っています。Arduinoから5V流しているはポテンショメータとpca9685ボードの電源です。




プログラムです。pca9685で動かすためAdafruit_PWMServoDriverをライブラリに追加しないといけません。ライブラリ検索で「Adafruit」というキーワードで見つけてください。

// Include Wire Library for I2C Communications
#include <Wire.h>
// Include Adafruit PWM Library
#include <Adafruit_PWMServoDriver.h>

#define MIN_PULSE_WIDTH       650
#define MAX_PULSE_WIDTH       2350
#define FREQUENCY             50
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

//Arduinoのポテンショメータ入力の定義
int intCtrl1 = A0;
int intCtrl2 = A1;
int intCtrl3 = A2;
int intCtrl4 = A3;

//PCA9685のモーター出力を定義
int intMotr1 = 0;
int intMotr2 = 1;
int intMotr3 = 2;
int intMotr4 = 3;

void setup() {
  pwm.begin();
  pwm.setPWMFreq(FREQUENCY); 
}

void moveMotor(int intIn, int intOut)
{
  int intWide;
  int intWidth;
  int intVal;
  //ポテンショメータから値を読み取る
  intVal = analogRead(intIn);
  //パルス幅に変換
  intWide = map(intVal, 0, 1023, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);
  intWidth = int(float(intWide) / 1000000 * FREQUENCY * 4096);
  //モーター制御
  pwm.setPWM(intOut, 0, intWidth);
 
}
 
void loop() {
 
  moveMotor(intCtrl1, intMotr1);
  moveMotor(intCtrl2, intMotr2);
  moveMotor(intCtrl3, intMotr3);
  moveMotor(intCtrl4, intMotr4);
 
}



結果
GIFファイルが大きくなるので1個だけツマミを動かす動画です。ブレッドボード上で不安定なので操作しにくいんですよね。一応全部のツマミで動作することを確認しています。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です