前提・実現したいこと
こんばんは、ラズパイ&Python初心者です。
ラズパイ4とサーボモータ(SG92R)と人感センサ(SE-10)を利用して、
人感センサに人の手を近づけるとサーボモータを90度回転しすぐに元に戻す(-90度)
という動きをさせたく、以下プログラムを記述し実行したのですが、
人感センサに関係なくモータが90度回転しすぐに元に戻る動きをしてしまい、
以下ソースコードのどの記述をどのように修正すればよいかわからず教えていただけると助かります。
接続図もおそらく間違っていると思われるため、接続図も添付しますので、アドバイスいただけると幸いです。
お手数ですがよろしくお願いいたします。
発生している問題・エラーメッセージ
人感センサーに関係なくサーボモータが動作してしまう。
該当のソースコード
python
1import RPi.GPIO as GPIO 2from time import sleep 3 4# ポート番号やサーボモータ、人感センサの情報を指定 --- (*1) 5SV_PORT = 18 6SV_FREQ = 50 # 20ms(50Hz) 7SV_DUTY_OFFSET = 0.025 8SV_DUTY_RES = (2.4 - 0.5) / 20 / 180 9SENSOR_PORT = 27 10 11# GPIOの設定 --- (*2) 12GPIO.setmode(GPIO.BCM) 13GPIO.setup(SENSOR_PORT, GPIO.IN) 14GPIO.setup(SV_PORT, GPIO.OUT) 15 16# PWMを利用する準備 --- (*3) 17servo = GPIO.PWM(SV_PORT, SV_FREQ) 18servo.start(0) 19 20# 角度を計算し変更する関数 --- (*4) 21def set_angle(angle): 22 degree = angle + 90 23 duty = (SV_DUTY_OFFSET + SV_DUTY_RES * degree) * 100 24 print("angle=",angle,"duty=", int(duty)) 25 servo.ChangeFrequency(SV_FREQ) 26 servo.ChangeDutyCycle(duty) 27 28# 人感センサが反応したら角度を変える --- (*5) 29while True: 30 v = GPIO.input(SENSOR_PORT) 31 if v == GPIO.HIGH: 32 GPIO.output(SV_PORT, GPIO.HIGH) 33 try: 34 set_angle(90) 35 sleep(1) 36 37 set_angle(-90) 38 sleep(1) 39 except KeyboardInterrupt: 40 break 41 42GPIO.cleanup() 43
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
以下接続図になります。
人感センサの接続方法および以下プログラムの記載に問題があると思っています。人感センサが反応したらサーボモータを90度回転しすぐに元に戻す(-90度)、人感センサが反応しない場合はサーボモータは動作しない、という
プログラムを書きたいです。お手数ですがアドバイスのほうよろしくお願いいたします。
while True:
v = GPIO.input(SENSOR_PORT)
if v == GPIO.HIGH:
GPIO.output(SV_PORT, GPIO.HIGH)
try:
set_angle(90)
sleep(1)
set_angle(-90)
sleep(1)
回答1件
あなたの回答
tips
プレビュー