2025年7月31日木曜日

ロボットカー サーボモーター操作

【配線図】

 
サーボモーターからの配線をPCA9685の15番に接続します。

サーボモーター(SG-90)のデータシートより
PWMperiod:20ms(50Hz) ←freqencyは50がよさそう
Duty cycle:0.5~2.4ms
Operating speed: 0.12 s/60 degree

 

ライブラリ

adafruit_servokit
kit = adafruit_servokit.ServoKit(channels=16):PCA9685は16ch
kit.servo[15].set_pulse_width_range(500, 2400)
 ※PCA9685の15番ピンに接続したサーボモーター(SG90)のDuty cycleは0.5ms~2.4msなので上記の設定となる。
kit.servo[15].angle = 0 
 ※PCA9685の15番ピンに接続したサーボモーター(SG90)の角度を0°にする。

servo.py備考
import time
import board
import busio
from adafruit_pca9685 import PCA9685
import RPi.GPIO as GPIO

i2c = busio.I2C(board.SCL, board.SDA)
pwm = PCA9685(i2c)
pwm.frequency = 50

GPIO.setmode(GPIO.BCM)

from adafruit_servokit import ServoKit
kit = ServoKit(channels=16)
kit.servo[15].set_pulse_width_range(500, 2400)

kit.servo[15].angle = 0
time.sleep(2)

for i in range(180):
    kit.servo[15].angle = i
    time.sleep(0.01)
for i in range(180):
    x = 180 - i
    kit.servo[15].angle = x
    time.sleep(0.01)

GPIO.cleanup()






I2Cオブジェクトの作成

周波数は50Hz



adafruit_servokitを使用

Duty cycle:0.5~2.4ms

0°にして
2秒待つ

0~180°を
1°ずつ増やす
0.01秒ごとに

180~0°へ
1°ずつ減らす
0.01秒ごとに

ピン解放

adafruit_pca9685でPCA9685.set_pwm()が使えない。
pwm.set_pwm(チャンネル, 0, パルス幅) のように使うらしいが、、

0 件のコメント:

コメントを投稿