M5Stackで16チャンネルサーボドライバPCA9685を使ってみる
- 2018/09/22
- 16:17
M5StackでPCA9685 16チャネルPWMサーボモータドライバを
こんにちはRoboTakaoです。
以前、定番のPCA9685を使用した16チャンネルPWMサーボドライバをArduinoで使ってみた記事を投稿しました。
今回はM5StackでPCA9685を使ってみました。


結線

PCA9685
+5V バッテリのプラス
OE 未接続
SCL M5StackのSCL (22pin)
SDA M5StackのSDA (21pin)
GND M5StackのGND およびバッテリーのマイナス
VCC M5Stack oの3.3V (5VでもOK)
M5Stackでの利用
今回は秋月の同等製品のArduinoライブラリを使ってみます。
取扱説明書
PCA9685データシート
Arduinoライブラリ
ライブラリーをダウンロードしてArduino IDEで読み込みます。
スケッチ→ライブラリをインクルード→.ZIP形式のライブラリをインストール

これでスケッチ例からサンプルスケッチを開けるようになります。
スケッチ
サンプルから少し変更しています。
まずサンプルは2個のPCA9685を使用していますが今回は1つなので2つ目の部分は削除しています。
また一般的なサーボの設定ということで60Hzの周期で最小パルス幅150と最大パルス幅600としていますが、以前の投稿でも書いたように今回使うGWSのMicro2BBMGのパルス幅の範囲を超えてしまうことがオシロスコープを見て分かりましたので変更しました。(最小と最大パルス幅の単位がよくわかりませんが)
PWM周期 60 → 50
最小パルス幅 150 そのまま
最大パルス幅 600 → 500
あと微妙に角度を変えました。
このサンプルスケッチは180から0度を10度刻みで回転させて0になったら180度に戻します。
M5Stackで使用する場合はM5Stack.hをインクルードするだけで使えます。
超簡単です。
動作確認
サーボが期待通りに動くことが確認できました。
スケッチ
#include
#include
#include//PCA9685用ヘッダーファイル
PCA9685 pwm = PCA9685(0x40); //PCA9685のアドレス指定(アドレスジャンパ未接続時)
#define SERVOMIN 150 //最小パルス幅 (GWS Micro2BBMG)
#define SERVOMAX 500 //最大パルス幅 (GWS Micro2BBMG)
void setup() {
pwm.begin(); //初期設定 (アドレス0x40用)
pwm.setPWMFreq(50); //PWM周期を50Hzに設定 (アドレス0x40用)
}
int n=0;
void loop() {
//サンプルソース 16chすべてのチャンネルより0度~180度の移動を繰り返します。
for(int i=0; i<16; i++)
servo_write(i,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);
}
それでは今回はこの辺で失礼します!ありがとうございます。
M5Stack関連投稿
1)M5StackとりあえずArduinoIDEで使う初期設定した。(macOS)
2)M5Stack Arduino IDE のサンプルスケッチを試してみた
3)M5Stack アバターを試してみた(Arduino IDE) Avatar
4)M5Stack とりあえずLチカ
5)M5Stack サーボ動かしてみた
スポンサードリンク