🏍
Raspberry Pi Zero + PCA9685で複数サーボモーターを動かす
Raspberry Pi Zero + PCA9685 で複数サーボモーターを動かすまでのメモです。
作るもの
この動画のように Raspberry Pi Zero で複数サーボモーターを動かします。
準備物
PCA9685 は 16 チャンネルの PWM 出力ドライバー搭載基板です。I2C でラズパイと接続し、複数のサーボモーターや LED を操作出来ます。
回路図
準備
I2Cの有効化
ラズパイでは I2C 通信がデフォルトで OFF となっているので、raspi-config
で I2C を有効化します。
$ sudo raspi-config
Interfacing Options > P5 I2C > Enabled で OK です。
これで有効化されたので、回路図の通り配線して I2C の番号を確認します。
$ sudo i2cdetect -y 1
以下のような出力が出れば OK です。
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
/boot/config.txtに通信速度の設定を追加
通信速度が早すぎるとエラーが出るのでその対策だそうです(あまり分かってない。.)
$ sudo vi /boot/config.txt
# 末尾に追加
dtparam=i2c_baudrate=10000
モジュールのダウンロード
pip で PCA9685 のライブラリを追加します。
$ sudo pip install adafruit-pca9685
コーディング
任意のディレクトリにservo.py
を作り以下を記述します。
servo.py
#!/usr/bin/python
import Adafruit_PCA9685
import time
def move(pwm, channel):
time.sleep(1)
pwm.set_pwm(channel, 0, 350)
time.sleep(1)
pwm.set_pwm(channel, 0, 600)
pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(60)
move(pwm, 0)
move(pwm, 4)
move(pwm, 11)
実行します。
$ python servo.py
無事それぞれのサーボモーターが動けば完成です 🎉
Discussion