タクトスイッチでサーボモータをコントロールする
タクトスイッチの読み込んでPWMのヂューティーを変化させると、サーボモータの角度が変化するのを見てみよう
import RPi.GPIO as GPIO from time import sleep SV_PORT = 18 SW1_PORT = 20 SW2_PORT = 21 SV_FREQ = 50 # 20ms(50Hz) SV_DUTY_OFFSET = 0.025 SV_DUTY_RES = (2.4 - 0.5) / 20 / 180 GPIO.setmode(GPIO.BCM) GPIO.setup(SV_PORT, GPIO.OUT) GPIO.setup([SW1_PORT, SW2_PORT], GPIO.IN, pull_up_down=GPIO.PUD_DOWN) servo = GPIO.PWM(SV_PORT, SV_FREQ) servo.start(0) sleep(0.3) def set_angle(angle): if angle < -90: angle = -90 if angle > 90: angle = 90 degree = (angle + 90) duty = (SV_DUTY_OFFSET + SV_DUTY_RES * degree ) * 100 print("angle=", angle,"duty=", int(duty)) servo.ChangeFrequency(SV_FREQ) servo.ChangeDutyCycle(duty) #実際に角度を変えてみる angle = 0 set_angle(angle) while True: try: if GPIO.input(SW1_PORT) == GPIO.HIGH: angle -= 10 set_angle(angle) if GPIO.input(SW2_PORT) == GPIO.HIGH: angle += 10 set_angle(angle) sleep(0.1) except KeyboardInterrupt: break GPIO.cleanup()
このサーボモータの角度の精度はそれほどでもないのです