サーボモータSG90を使って0度-90度-180度を制御する
接続は黄色−GPIO18 赤−5V 茶色−GND
5Vは別電源がベータだがSG90はraspberrypiの5Vを使用する
データシートを見ると
20ms(50Hz) PWMサイクル:1/0.02=50Hz
Position “0” (1.45 ms pulse) is middle 垂直位置の事
“90” (~2.4 ms pulse) is all the way to the righ
“-90” (~ 0.5 ms pulse) is all the way left.
つまり
1.45x50/1000=0.075 =7.5で垂直
2.4x50/1000=0.122 12.5で右90
0.5x50/1000=0.025 2.5で左90度
GPIOを使う方法とPIGPIOに関数があるのでそちらを使う方法の2種類
GPIOの例 2.5で0度水平 7.5で90度垂直 12.0で180度水平
0.0で停止
サーボモータはパルスの幅で角度を調整している
個体差があるので角度は一定とは限らない
rapsberrypi4の場合に動作が不安定である
GPIOをおすすめする
import RPi.GPIO as GPIO
import time
PIN = 18
FREQ = 50
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(PIN, GPIO.OUT)
servo = GPIO.PWM(PIN, FREQ)
#init
servo.start(0.0)
i=0
while True:
i=i+1
if i>3:
break
servo.ChangeDutyCycle(2.5)
time.sleep(1)
servo.ChangeDutyCycle(7.5)
time.sleep(1)
servo.ChangeDutyCycle(12.0)
time.sleep(1)
servo.ChangeDutyCycle(2.5)
time.sleep(1)
servo.ChangeDutyCycle(7.5)
time.sleep(1)
servo.ChangeDutyCycle(12.0)
time.sleep(1)
GPIO.cleanup()
PIGPIOにはサーボモータ制御関数がある
pi.set_servo_pulsewidth
pulsewidth:= 0 (off),
500 (most anti-clockwise) – 2500 (most clockwise)
0度水平 500 180度水平2500 ストップ 0
ソースは
直接msを送り込んでいる
Position “0” (1.45 ms pulse) is middle 垂直位置の事
“90” (~2.4 ms pulse) is all the way to the righ
“-90” (~ 0.5 ms pulse) is all the way left.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pigpio
import time
pi = pigpio.pi()
pi.set_PWM_frequency(12,50)
pi.set_servo_pulsewidth(12, 0)
time.sleep(1)
#ここで-90
pi.set_servo_pulsewidth(12, 500)
time.sleep(1)
#ここで0
pi.set_servo_pulsewidth(12, 1500)
time.sleep(1)
#ここで90
pi.set_servo_pulsewidth(12, 2500)
pi.stop()
このサーボー以外にFSR90のようなローテションサーボモータがある
これは、SG90のように特定の角度で停止でなく、左右回転と回転速度および
停止信号で制御する。
停止信号は1500
右回転は700-1500未満
左回転は2300-1500超え それぞれ700または2300に近づくほど速度が早くなる