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で購入しました。
結構組み立てに苦労したので、いずれ別記事で紹介したいと思います。

Amazon | DiyStudio 6自由度ロボットアームDIYキットアルミメカニカルアームジョーArduinor MG995サーボドライブバルク(結合する必要があります)は日本語の組み立て説明書を送ることができます | プログラミング・ロボティクス | おもちゃ
DiyStudio 6自由度ロボットアームDIYキットアルミメカニカルアームジョーArduinor MG995サーボドライブバルク(結合する必要があります)は日本語の組み立て説明書を送ることができますがプログラミング・ロボティクスストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、...

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

月虹 – Gecko –

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

参考

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

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

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