サーボモータを動かそう!
今回は、サーボモータを動かしてみます。
サーボモータは、特定の角度まで動かすことができるモータになります。
ロボットの関節を動かしたり、ラジコンカーのステアリングを動作させるのに活用できます。
今回使用するサーボモータは、こちらのSG90になります。
写真の通り、サーボモータ本体から3色のケーブルがでています。
黄色:PWM(Pulse Width Modulation)c
橙色:Vcc
茶色:GND
橙色には、Raspberry Piの5V電源に接続し、茶色はGNDに接続します。
黄色はGPIOに接続し、サーボの角度を制御します。
サーボは、PWMで制御します。
PWM制御とは、一定の周期の中で、パルス幅のduty cycleを変更することでモータを制御します。
duty cycleの長さでサーボモータが動く長さが変わります。
配線とプログラムはこんな感じになります。
- import RPi.GPIO as GPIO
- import time
- GPIO.setmode(GPIO.BCM)
- GPIO.setup(18,GPIO.OUT)
- servo = GPIO.PWM(18. 50)
- dc = 6
- servo.start(dc)
- try:
- while True:
- servo.start(2)
- time.sleep(1)
- servo.start(6)
- time.sleep(1)
- servo.start(10)
- time.sleep(1)
- except KeyboardInterrupt:
- GPIO.cleanup()
duty cycleの長さを、2 / 6 / 10 の順番で変えています。
次は、タイマー時間を短くして、duty cycleを細かく変動させてみます。
- import RPi.GPIO as GPIO
- import time
- GPIO.setmode(GPIO.BCM)
- GPIO.setup(18,GPIO.OUT)
- servo = GPIO.PWM(18. 50)
- dc = 6
- servo.start(dc)
- try:
- while True:
- while dc <= 9:
- dc = dc + 0.2
- servo.start(dc)
- time.sleep(0.02)
- while dc >= 3:
- dc = dc - 0.2
- servo.start(dc)
- time.sleep(0.02)
- except KeyboardInterrupt:
- GPIO.cleanup()