12
23

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 5 years have passed since last update.

Raspberry Pi 3でPCA9685を使う

Posted at

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

きっかけ

仕事で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

  • この記事は個人的なものです。私の雇用者とは全く関係はありません。(一応つけておきます)
12
23
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
12
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?