【Arduino】PCA9685でサーボモーターを動かす
PCA9685を使うと、多くのサーボモーターを同時制御することができます。
これが、PCA9685です。
2.ソフトウェア
#include <PCA9685.h> //PCA9685用ヘッダーファイル PCA9685 pwm = PCA9685(0x41); //PCA9685のアドレス指定(アドレスジャンパ未接続時) #define SERVOMIN 150 //最小パルス幅 (GWS Micro2BBMG) #define SERVOMAX 500 //最大パルス幅 (GWS Micro2BBMG) #define SERVO_CH 0 void setup() { pwm.begin(); //初期設定 (アドレス0x40用) pwm.setPWMFreq(50); //PWM周期を50Hzに設定 (アドレス0x40用) } int n=0; void loop() { servo_write(SERVO_CH, n); n=n+10; if(n>=180){ n=0; } delay(500); } void servo_write(int ch, int ang){ //動かすサーボチャンネルと角度を指定 ang = map(ang, 0, 180, SERVOMIN, SERVOMAX); //角度(0~180)をPWMのパルス幅(150~500)に変換 pwm.setPWM(ch, 0, ang); }
プログラム解説
ライブラリのインストール
このプログラムは、事前にPCA9685用のライブラリをインストールする必要があります。
プログラム一行目の
PCA9685.h
というライブラリ(ヘッダーファイル)です。
筆者は秋月電子通商のページからダウンロードしました。ライブラリの追加方法は各自で調べてください。
PCA9685のライブラリ:
http://akizukidenshi.com/download/ds/akizuki/PCA9685.zip
アドレス設定について
PCA9685 pwm = PCA9685(0x41);
の「0x41」は、PCA9685のアドレスです。アドレスは、次の図の「Slave address」を指定します
A6=1は固定ですが、 A5~A0 の値は基盤表側のジャンパワイヤを半田付けして接続することで自由に設定できます(何もしない場合は「0」、半田付けをして接続した場合は「1」になります。)
そして、「Slave address」はA6~A0の値を指定します。
この記事の場合、A0を接続したので、アドレスは「b0100001(A6とA0のみ1)」=「0x41」です。なにも接続しなかった場合、「b0100000(A6のみ1)」=「0x40」になります。
http://wiki.sunfounder.cc/index.php?title=PCA9685_16_Channel_12_Bit_PWM_Servo_Driver