どーもこんにちはKeita_Nakamori(´・ω・`)です。
今日は、GPIOでサーボモータを動かして見ようと思います。
デバイス
サーボモータ:SG92R
配線
- サーボの茶をGND(グランド)
- サーボの赤を電源+5V
- サーボのオレンジは制御パルス用なので、今回はGPIO18に接続しました。
ラズパイの電源は5Vバッテリー2.1Aです。
※サーボの挙動がガクガクしています。電源のせいかも・・・
テストスクリプト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# python3 import RPi.GPIO as GPIO # 慣例で省略する import time #time.sleep()用 def pulse(angle): """ pulse(): 角度をサーボ制御パルスに変換する args: angle: 角度をdegで入力する 0〜180 deg 0deg = 2.5 % 180deg =12 % """ delta_x=180 delta_y=12-2.5 return delta_y/delta_x*angle+2.5 # これからは役割ピン番号で指定する BCB = BroadCoM のこと GPIO.setmode(GPIO.BCM) # " GPIO18 " をサーボ制御信号の出力ピンとして設定する gp_num_control = 18 GPIO.setup(gp_num_control, GPIO.OUT) # 今回は使用しないが外部からの入力信号をする場合 gp_num_input = 2 GPIO.setup(gp_num_input,GPIO.IN) #今回は使用しないがピン信号をON/OFFする場合 gp_num_onoff = 5 #GPIO.output(gp_num_onoff,GPIO.HIGH) # ONの場合 #GPIO.output(gp_num_onoff,GPIO.LOW) # OFFの場合 # サーボモータのインスタンスを作成する # PWM制御をする。引数はピン番号と周波数 # SG92R:PWM周波数 = 50Hz = 20ms , 制御パルス:0.5ms〜2.4ms, (=2.5%〜12%) servo_001 = GPIO.PWM(gp_num_control, 50) # サーボ制御パルス出力開始。引数はデューティーサイクル0-100% servo_001.start(0) time.sleep(0.0) for ang in range(180): servo_001.ChangeDutyCycle(pulse(ang)) print(ang) time.sleep(0.1) servo_001.stop() GPIO.cleanup() |