Make

PCA9685でサーボモーターを動かす(3)

Make
スポンサーリンク

前回はハードウェアを組みましたが、いよいよソフトウェアに突入します。

ソフトウェア

ライブラリ導入

PCA9685を制御するため、今回はAdafruitから提供されているPCA9685用ライブラリをインストールします。

GitHub - adafruit/Adafruit-PWM-Servo-Driver-Library: Adafruit PWM Servo Driver Library
Adafruit PWM Servo Driver Library. Contribute to adafruit/Adafruit-PWM-Servo-Driver-Library development by creating an account on GitHub.

インストールはArduino IDEから簡単にできます。手順は以下の通りです。

  1. Arduino IDEを起動
  2. タブの スケッチ >> ライブラリをインクルード >> ライブラリを管理.. と選択してライブラリマネージャを開く
  3. 検索欄に「adafruit pwm」と入力して、「Adafruit PWM Servo Driver Library」をインストール

無事にインストールされたら準備完了。ソースコードも書き込めるようになります。

ソースコード

では、Arduino用のスケッチ(ソースコード)を見てみましょう。

中の処理を上から順番に開設していきます。
まずはライブラリのインクルードです。ここではAdafruitのライブラリに加え、ArduinoのI2C通信用ライブラリ(Wire.h)を入れています。なお、Wire.hはデフォルトでインストールされています。

次に、定数とPCA9685制御ライブラリのインスタンスを記述します。
定数はI2Cアドレス(SLAVE_ADDRESS)とモーターの数(NUM_SERVO)、PWMのパルス秒数と周波数を定義しています。PWMのパルス秒数は、12bit分解能でのHI状態のパルス数(SERVOMIN/SERVOMAX)とマイクロ秒で直接指定するもの(USMIN/MAX)の2種類があります。
また、Adafruit_PWMServoDriverという型のインスタンスを定義します。スレーブアドレスを引数に初期化するもので、このインスタンスからサーボを制御します。

setup関数で初期設定を行います。

pwm.begin()は、PCA9685とのI2C通信を開始するもので、これを実行しないとサーボモーターの制御ができません。
setOscillatorFrequencyとsetPWMFreqはどちらも周波数の設定で使いますが、前者は内部クロックの周波数、後者はPWM制御の周波数を決めるものです。内部クロックはデフォルトで25MHzと設定されているので、調整が必要なければsetOscillatorFrequencyを呼び出す必要はありません。

そして、メイン処理(loop関数)でモーターの制御を行います。

モーターを動かす関数はsetPWMとwriteMicrosecondsの2種類あります。

  • setPWM(ch, 0, pulse): 指定のピン(ch)のPWM信号を決定します。2番目の引数でONのタイミング、3番目の引数でOFFのタイミングを指定します。今回はすぐにONにして、pulse後にOFFへ変えます。
  • writeMicroseconds(ch, us): 指定のピン(ch)のPWM信号をマイクロ秒(us)で決定します。

今回は2種類を順番に使ってみました。動き方はどちらも一緒(モーターを最小角から最大角まで動かすもの)ですが、writeMicrosecondsのほうがより細かく制御できます。

また、static変数のservonumをインクリメントしていくことで、動かすモーターを順番に切り替えています。

これをArduinoに書き込めばPCA9685でサーボモーターが動かせるようになります。

サンプル

PCA9685を使えば一度にたくさんのサーボモーター(最大662個)を動かすことができます。

デフォルトのServoライブラリでも12個(Arduino UNO)まで同時に動かせますが、IOピンも占有してしまうので、I2C通信ピンだけで数多くのモーターを動かせて、ほかのピンを別の目的に利用できます。

Revetroniqueでは、PCA9685を使ってロボットアームを作っていました。

ちなみに、アーム用の部品はAmazonで購入しました。
結構組み立てに苦労したので、いずれ別記事で紹介したいと思います。

Bitly

さらに応用して、こんな作品も制作したりしてます。

月虹 – Gecko –

サーボモーターをたくさん使いたい方は、ぜひ使ってみてください。

参考

以下のページを参考にしました。

また、公式リファレンスでライブラリの使い方も参照できます。

Adafruit PCA9685 PWM Library: Adafruit_PWMServoDriver Class Reference
タイトルとURLをコピーしました