PCA9685 と Arduino で 多数のサーボモータを制御する

複数のサーボモータをPCA9685で動かす Arduino

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個まで接続して動きます。すべてのサーボモータがそれぞれ独立した動きになっていることが確認できました。

コメント

タイトルとURLをコピーしました