IOT入門その7 サーボモータ

サーボモータ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に近づくほど速度が早くなる

カテゴリー iot