PCA9685 と Arduino で 多数のサーボモータを制御してみました。
多脚ロボットで多数のサーボモータを独立に動かす必要があります。ArduinoではPWM信号を出せるピンが数個しかなく,足りません。PCA9685を使えば1つのピンだけ使って,16個までのサーボモータを独立に動かすことができます。
早速やってみます。
サーボモータはSG90を使いました。
#include <Wire.h>
#include <PCA9685.h> //PCA9685用ヘッダーファイル(秋月電子通商作成)
PCA9685 pwm = PCA9685(0x40); //PCA9685のアドレス指定(アドレスジャンパ未接続時)
#define SERVOMIN 102 //最小パルス幅
#define SERVOMAX 492 //最大パルス幅
void setup() {
pwm.begin(); //初期設定 (アドレス0x40用)
pwm.setPWMFreq(50); //frequency of PWM for SG90 (アドレス0x40用)
}
int n=0;
void loop() {
n=0;
while (n<=180) {
for(int i=0; i<16; i++){
servo_write(i,n);
delay(40);
}
n=n+20 ;
}
}
void servo_write(int ch, int ang){ //動かすサーボチャンネルと角度を指定
ang = map(ang, 0, 180, SERVOMIN, SERVOMAX); //角度(0~180)をPWMのパルス幅(102~492)に変換
pwm.setPWM(ch, 0, ang);
//delay(1);
}手持ちのSG90が11個だけだったので,とりあえず11個接続しましたが,同じコードで16個まで接続して動きます。すべてのサーボモータがそれぞれ独立した動きになっていることが確認できました。



コメント