用いたデバイス
デバイス名 | 型番,リンク | 個数 |
---|---|---|
サーボモータドライバ | [pca9685] (https://www.amazon.co.jp/gp/product/B07SLRG5J1/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1) | 1 |
マイコンボード | Arduino mega | 1 |
サーボモータ | mg996r | 12 |
ACアダプター | 5V 4A 最大出力20W 5.5mm×2.1mm | 1 |
DC電源コネクタ ジャック | 5.5mmx2.1mm | 1 |
pca9685(サーボモータドライバ)
・簡単に
I2Cで入力しPWM出力します。
単体で16個のサーボモータを、複数使うことで最大992個のPWM出力を制御することができるものです。
mg996r(サーボモータ)
MG996Rを動かすには500mAから900mA(6V時)の電流が必要です。
Arduinoの5V電源では電流不足で回転しません。
ACアダプタ類
以下二つをもちいてコンセントから5V,4Aの直流電源を得ます。
ACアダプタ
DC電源コネクタ ジャック
あくまで接続の例です。
回路
電源
・Arduinoはプログラムの書き込みに使用したPCからUSBでとっています。
何でもいいです。
・モータドライバの外部電源はACアダプタから5V,4A取っています。
mg996r12個動かすには、5V、4Aくらいあった方がよさそうです。
乾電池4本(6V)では電流が足りなく3つしか動きませんでした。
5V,4Aを用いるのに参考にした記事
またpca9685は電源をピンヘッダまたはターミナルブロックから、どちらからも取ることができます。
違いとしては、ターミナルブロックには逆極性保護がついています。
今回は上記の理由とケーブルの安定感からターミナルブロックから電力を得ます。
配線
PCA9685
GND ArduinoのGND(V+に電源のプラスを指している場合はここに電源のGNDも繋げます)
OE 未接続
SCL ArduinoのSCL表記のあるところ
SDA ArduinoのSDA表記のあるところ
VCC Arduinoの5V
V+ 外部電源をターミナルブロックから得るため、今回は未接続
各0-15chにサーボモータを接続します。
プログラミング
実行環境:ArduinoIDE
PCA9682のライブラリ
PCA9682のライブラリを導入する必要があります。
Arduinoライブラリ導入
#include <PCA9685.h> //PCA9685用ヘッダーファイル
PCA9685 pwm = PCA9685(0x40); //PCA9685のアドレス指定
#define SERVOMIN 150 //最小パルス幅
#define SERVOMAX 600 //最大パルス幅
void setup() {
pwm.begin(); //初期設定 (アドレス0x40用)
pwm.setPWMFreq(50); //PWM周期を50Hzに設定 (アドレス0x40用)
}
int n=0;
void loop() {
//12chすべてのチャンネルより0度~180度の移動を繰り返します。
for(int i=0; i<12; 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);
}
[このコードを動かした動画]
(https://youtu.be/IWw4JM8pN-E)