ラズパイ工房

Raspberry Piとの奮闘記

サーボモータを動かそう!

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