今回はRaspberryPiとサーボモータドライバのPCA9685でサーボモータを動かそうとしてみましたが、動かすことができませんでした。

その原因について色々と調査してみましたので、そのときのことを記録しておこうと思います。

今回は以下の構成で実施しています。

・RaspberryPi3 ModelB
・HiLetgo PCA9685 16チャンネル 12-ビット PWM Servo モーター ドライバー

・MG996R(サーボモータ)
・ブレッドボード
・ジャンパーワイヤ
・ACアダプター

原因を調査するにあたり、以下の点を確認してみました。

I2Cが認識できているか?

まずはじめに、以下のコマンドを入力してI2Cが認識できているか確認してみました。ツールは先にインストールしておきます。ツールのインストールはこちら↓

接続を確認するコマンドはこちら↓

結果としては2桁の数値が0列のところに表示されるということなのですが、私の場合は全体的に数値が表示されてしまいました。これは正常に認識できてないっぽいです。

どうやらI2Cを認識できていない?ようです。なぜ認識できていないのか引き続き原因を調べてみました。

Raspberry PiのI2Cを有効にしているか?

こちらについてはRaspberry Piの設定で有効になっていることを確認しました。有効にしていても動きませんでした。

GUIからI2Cを有効にするには以下の手順で行います。
設定→Raspberry Piの設定→インターフェイス→I2Cを「有効」に設定→OK→ラズパイを再起動(念のため)

こちらのサイトが参考になります。
Raspberry PiのI2Cを使って電圧を測定する(2019年3月版)

インストールや設定に間違いはないか?

インストールはこちらのサイトやその他のサイトに記載してあるものを一通り試してみました。これが原因であれば何回か試しているうちに動く動いてくれると思ったのですが、どのパターンでもダメでしたのでインストールや設定は間違えていないと思われます。

(追記)
最終的に動かせるようになったときの手順をこちらの記事にまとめました。
RaspberryPi3B+とサーボモータードライバ(PCA9685)でサーボを動かしてみた

配線に間違いはないか?

こちらについてもその他のサイトを見ながら間違えのないように実施しました。PCA9685とRaspberry Piをつないでいる線は4本しかありませんが、何度も確認しました。こちらについても問題はなさそうです。

サーボモーターが壊れているのではないか?

試しにPCA9685なしで動かしてみたところ、普通に動いてくれたのでサーボモーターは問題なさそうです。

サーボモーターの種類が悪いのではないか?

こちらのサイトに「ACモーターと100% デジタルサーボは動作しない」とあります。…マジで?デジタルサーボは動かないだと。。。恥ずかしながら今まで自分のサーボがアナログかデジタルかを考えたことがありませんでしたので、使っているサーボモータ(MG996R)の表記を確認するとデジタルサーボのようです。たぶん。

つまり、アナログサーボモーターを使ったほうがいいかもしれないので、他の方が使われている「SG90」という小さいサーボを1個購入して試してみる価値はありそうです。

(追記)
「SG90」を購入して試してみました!結果動かすことができませんでした。。サーボの種類は関係なさそうです。

RaspberryPiが壊れているのではないか?

新しく「RaspberryPi3 ModelB」を購入して試してみたところ、新品のほうでは動かすことができました。つまり古いほうが壊れていました。。起動することはできるしGPIOも使うことができる状態なのですが、I2Cの機能が壊れていたようです。RaspberryPiのI2Cが壊れやすいというのは本当でした。(2019/8/1修正)

サーボモータードライバが壊れているのではないか?

新品で購入して一回もサーボを動かせずに壊れているのは嫌なのですが、一度配線を間違えたので可能性はありそうです。また、今回は「PCA9685」の互換品を購入しましたので、スイッチサイエンスから出ている純正品を購入して試してみたいと思います。

スイッチサイエンス
PCA9685搭載16チャネル PWM/サーボ ドライバー (I2C接続)

(追記)
スイッチサイエンスから出ているPCA9685で動かすことができました!RaspberryPiに続いてサーボモータドライバも壊れていたようです。詳細は下記の調査結果をご参照ください。

調査結果

今回の調査で試してみたサーボドライバは以下の3種類です。

①:PCA9685搭載16チャネル PWM/サーボ ドライバー (I2C接続)、スイッチサイエンス

②:PCA9685 16チャンネル 12-ビット PWM Servo モーター ドライバー IIC モジュール Arduinoに対応 サポート Raspberry Pi Zero/Zero W/Zero WH/ 2B/ 3B / 3B+ ロボット 、VivanStar

③:HiLetgo PCA9685 16チャンネル 12-ビット PWM Servo モーター ドライバー IIC モジュール Arduinoに対応 ロボット、HiLetgo JP

表にまとめると以下のようになりました。「✕」はサーボドライバでサーボを動かすことができなかった組み合わせで、「○」はサーボを動かすことができた組み合わせです。「-」については、NOOBS2.4.1が3B+にインストールすることができなかったので対象外としています。

当初は全てのパターンで動かなかった3Bですが、新品と交換することで動かすことができました。③のモータドライバは破損していて動かすことができませんでした。

結果として、「RaspberryPi」と「HiLetgo JPのPCA9685」が破損していたことが分かりました。よって、これらを取り替えることで動かせるようになりました。当初はハードの組み合わせが悪いのかなと思いましたが、ハードの組み合わせは関係ありませんでした。

なお、上記の組み合わせで動かせるようになったときの手順を記事に記載しています。
RaspberryPi3B+とサーボモータードライバ(PCA9685)でサーボを動かしてみた

今回の調査で学んだこと

・Raspberry PiのI2Cは非常に壊れやすいので、間違えがないように配線は3回ぐらいチェックしたほうがいい。

・プログラムのトライアンドエラーはいいけど、配線のトライアンドエラーは厳禁。

・I2Cのチェックがどうしてもうまくいかない場合はハードが壊れていることを疑え。

 

以上、今回はRaspberryPiとPCA9685でサーボモータが動かない原因について調査してみました。