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個だけツマミを動かす動画です。ブレッドボード上で不安定なので操作しにくいんですよね。一応全部のツマミで動作することを確認しています。
