質問: 3.5 + (16.0 - 3.5) * (angle + 90) / 180 #角度からデューティ比を求める Servo.ChangeDutyCycle(duty) #デューティ比を変更 time.sleep(0.3) #0.3秒間待つ #while文で無限ループ #サーボモータの角度をデューティ比で制御 #Servo.ChangeDutyCycle(デューティ比[0-100%]) while True: try: servo_angle(20) #サーボモータ 20 print("20") servo_angle(0) #サーボモータ 0 print("0") servo_angle(20) #サーボモータ 20° print("20") servo_angle(0) #サーボモータ 0° print("0") servo_angle(20) #サーボモータ 20° print("20") servo_angle(0) #サーボモータ 0° print("0") except KeyboardInterrupt: #Ctrl+Cキーが押された Servo.stop() #サーボモータをストップ GPIO.cleanup() #GPIOをクリーンアップ print("clean") sys.exit() #プログラムを終了 ``` どちらのサーボで実行しても、エラーは出ず、print()内の文字が出力されます。
回答: 基本的にサーボに与える信号はどのようなサーボでも同じなので、S3001で動くのであれば、S3103でも動くはずです。 * 動かないサーボは壊れていないでしょうか。 サーボテスターなど、対象のラズパイ以外で動作確認してみてください。 少なくとも、接続して電源が通じたときになんらかの動作音がするはずです。 * インターバルを長くしてみてはどうでしょうか。 現状だと、0.1秒保持ですが、ちょっと短かすぎる気がします。1秒程度にのばしてみるとどうでしょうか。