前回はunitv2からuartでラズパイのGPIOを制御してLチカしてみました。↓
今回はいよいよサーボモーターを動かす工程に入りたいと思います。(unitv2いらないじゃん、、というツッコミはご容赦願います。。あくまでunitv2からuartを通じて最終的にサーボモーターを動かすのが今回の目的となります。)
動作の流れとしましては
unitv2→uart→ラズパイ→i2c→サーボモータードライバ→サーボモーター
となります。
それでは、初めにサーボモーターを駆動させるための下準備をしておきます。
準備するもの
ハードウェア
・サーボモーター × 4つ
・PCA9685(サーボモータードライバ)
・ジャンピングワイヤー × 適量
ソフトウェア
pythonでpca9685のライブラリを扱えるようにしておきます。詳細は過去記事にてまとめていますので、こちらを参考ねがいます。↓
続いて、ラズパイのpythonプログラムを変更します。
raspberrypi
python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
import time import serial import Adafruit_PCA9685 data3 = 'abc' ser = serial.Serial('/dev/ttyS0', 115200, timeout = 0.5) pwm = Adafruit_PCA9685.PCA9685() pwm.set_pwm_freq(60) #サーボ初期位置設定 pwm.set_pwm(0, 0, 375) pwm.set_pwm(1, 0, 375) pwm.set_pwm(2, 0, 375) pwm.set_pwm(3, 0, 375) while True: #global data3 #コマンドの結果を受信 time.sleep(0.1) data = ser.readline() #区切り文字0x0Aまでのデータを受信 data2 = data.strip().decode('utf-8') print(data2) if data2 == 'hhhhh' or data2 == 'iiii' or data2 == 'kkkk' or data2 =='jjjj': data3 = data2 if data3 == 'hhhhh': pwm.set_pwm(0, 0, 300) time.sleep(1) pwm.set_pwm(0, 0, 450) time.sleep(1) print('ff') elif data3 == 'jjjj': pwm.set_pwm(1, 0, 300) time.sleep(1) pwm.set_pwm(1, 0, 450) time.sleep(1) print("lf") elif data3 == 'kkkk': pwm.set_pwm(2, 0, 300) time.sleep(1) pwm.set_pwm(2, 0, 450) time.sleep(1) print('bk') elif data3 == 'iiii': pwm.set_pwm(3, 0, 300) time.sleep(1) pwm.set_pwm(3, 0, 450) time.sleep(1) print('rt') elif data2 == 'ssss': pwm.set_pwm(0, 0, 375) pwm.set_pwm(1, 0, 375) pwm.set_pwm(2, 0, 375) pwm.set_pwm(3, 0, 375) data3 = 'abc' print('st') |
前回のGPIO操作のプログラム部分ををサーボモーター駆動に変更しただけとなります。
ブラウザから前後左右のボタンをクリックすると、ボタンに紐づいたサーボモーターが駆動するようになっています。
ボタンがOFFの状態になれば、サーボモーターが設定した初期位置に戻るようにしています。
最後に、動作確認してみます。
動作確認
次回はこれを組み立てて、ロボットにしてみたいと思います。