今回はRaspberryPiに「RPi.GPIO」をインポートしてサーボモータ(MG996R)を動かしてみましたので、そのときの情報を記載しておきます。
使用しているサーボはMG996Rです。今回は下記の範囲で設定していきます。
詳しくはこちらをご参照ください。
***************************************
・周期:20[ms]、周波数:50[Hz]
・パルス幅:0.5~2.4[ms]
・Duty:2.5~12[%](パルス幅/周期×100)
***************************************
今回はこちらの記事で紹介されていたものを少し変更して実行してみたいと思います。
以下のような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 |
#!/usr/bin/python # coding: utf-8 import RPi.GPIO as GPIO import time import sys # GPIO 16番を使用 PIN = 16 GPIO.setmode(GPIO.BCM) GPIO.setup(PIN, GPIO.OUT) servo = GPIO.PWM(PIN, 50) # GPIO.PWM(PIN, [周波数(Hz)]) # duty = [0.5~2.4(ms)/20(ms)*100] [デューティー比=パルス幅/周期] duty = [2.5,3.6875,4.875,6.0625,7.25,8.4375,9.625,10.8125,12] if __name__ == '__main__': try: servo.start(0.0) servo.ChangeDutyCycle(duty[3]) time.sleep(1.0) servo.ChangeDutyCycle(duty[5]) time.sleep(1.0) servo.ChangeDutyCycle(duty[3]) time.sleep(1.0) while True: for i, dutycycle in enumerate(duty): servo.ChangeDutyCycle(dutycycle) print("Angle:" + str(i*22.5)+" duty = %.4f" % dutycycle) time.sleep(1.0) for i, dutycycle in enumerate( reversed(duty) ): servo.ChangeDutyCycle(dutycycle) print("Angle:" + str(180 - i*22.5)+" duty = %.4f" % dutycycle) time.sleep(1.0) except KeyboardInterrupt: pass servo.ChangeDutyCycle(duty[4]) time.sleep(1.5) servo.stop() GPIO.cleanup() |
動いている様子はこちら。
RPi.GPIOでサーボモータ(MG996R)を動かす その1 pic.twitter.com/aCkU3p7C2l
— Kazuki@ロボット作り (@RoomKazuki) 2019年7月19日
コメントを残す