5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

サーボモータドライバ(PCA9685)とArduinoを用いて複数(12個)のサーボモータ(mg996r)を動かす

Last updated at Posted at 2020-06-06

用いたデバイス

デバイス名 型番,リンク 個数
サーボモータドライバ [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

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にサーボモータを接続します。

S__27066370.jpg

pca配線.jpg

S__27049994.jpg

プログラミング

実行環境: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)

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?