Posted at

Raspberry Pi 3でPCA9685を使う

More than 1 year has passed since last update.

最近、プログラミングができていないのですが、仕事で必要になったので、メモしておきます。


きっかけ

仕事でRaspberryPi 3を使って、サーボモータをたくさん動かさないといけなくなったのですが、標準だとPWMが出せるピンが1本しかないために仕方なく、サーボモータドライバのPCA9685を使うことにしました。

本当はGoでやりたいところですが、GPIOを使った部分のところがPythonが信頼度が高そうなので、ひとまず、Python教に入信しようと思いますw


i2cのセットアップ

Raspberry Pi標準だとi2cが無効になっているため、Raspi-Configで有効にします。


Raspi-Config


コマンド

$ sudo raspi-config


Interfacing Optionsを選択する。(jessieより前だと、Advanced Optionsにあったみたい?)

raspiconfig1.png

I2Cを選択する。

raspiconfig2.png

はいを選択する。(いいえを選択すると無効になる…)

raspiconfig3.png


/boot/config.txtに通信速度の設定を追加


コマンド

$ sudo vi /boot/config.txt


初期値は100000ですが、通信速度が早すぎてエラーメッセージが出力されるので、最下行か、i2c関連の設定付近に以下を追記する。

dtparam=i2c_baudrate=10000


モータドライバのライブラリのセットアップ


Adafruitの公式リポジトリからソースコードをダウンロード


コマンド

$ git clone https://github.com/adafruit/Adafruit_Python_PCA9685.git

$ git clone https://github.com/adafruit/Adafruit_Python_GPIO.git

$ git clone https://github.com/adafruit/Adafruit_Python_PureIO.git


PCA9685のライブラリだけをダウンロードすれば使えるのかと思っていましたが、ファイルがないというエラーメッセージが出ました。


インストール

それぞれのライブラリで以下のコマンドを実行する。


コマンド

$ cd Adafruit_Python_PCA9685

$ sudo python setup.py install
$ cd ../Adafruit_Python_GPIO
$ sudo python setup.py install
$ cd ../Adafruit_Python_PureIO
$ sudo python setup.py install


動作確認


コマンドで動作確認

まだ、意味はわかっていないのですが、i2cのポートの動作確認ができるようです。


コマンド

$ sudo i2cdetect -y 1



Pythonで動作確認

できれば、Python3が使いたかった…。

ポート1とポート2にサーボモータ(SG92R)を挿して動作確認しました。ブレッドボードにボタンを2個付けて、それぞれを押すと動作しました。


sample.py

#!/usr/bin/python


import RPi.GPIO as GPIO
import time
import Adafruit_PCA9685

GPIO.setmode(GPIO.BOARD)

GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(60)

try:
while True:
sw1 = GPIO.input(16)
sw2 = GPIO.input(18)

if sw1 == 1:
pwm.set_pwm(1, 0, 600)
else:
pwm.set_pwm(1, 0, 375)

if sw2 == 1:
pwm.set_pwm(2, 0, 600)
else:
pwm.set_pwm(2, 0, 375)

except KeyboardInterrupt:
pass



参考サイト


Disclaimer


  • この記事は個人的なものです。私の雇用者とは全く関係はありません。(一応つけておきます)