質問するログイン新規登録

質問編集履歴

1

ご指摘された点を含め、プログラムを修正してみました。センサー反応後にモーターを止めるところまでは成功しました。

2021/12/09 07:40

投稿

ryu-12
ryu-12

スコア2

title CHANGED
File without changes
body CHANGED
@@ -51,5 +51,65 @@
51
51
  GPIO.cleanup()
52
52
  sys.exit()
53
53
  ```
54
+ ### 追記
55
+ 回答者様から頂いたプログラムを付け加えてみました。問題視していた「センサーの状態を無視する」という点は解決しましたが、停止から3秒後のモーターの再始動がうまくいかず、再始動時に本来なら回転させたいところですが一瞬だけ(1~5°程度)動いて、その後は停止した状態になってしまいます。
56
+ 間違っている部分があれば、ご指摘よろしくお願いします。
57
+ ```Python3
58
+ import RPi.GPIO as GPIO
59
+ import time
60
+ import sys
61
+ import datetime
62
+ GPIO.setwarnings(False)
63
+ GPIO.setmode(GPIO.BOARD)
64
+
65
+ motor1speed=15
66
+ motor1Direction=21
67
+ SENSOR_PORT = 24
68
+ LED = 35
69
+
70
+
71
+ GPIO.setup(19,GPIO.OUT)
72
+ GPIO.setup(motor1speed,GPIO.OUT)
73
+ GPIO.setup(motor1Direction,GPIO.OUT)
74
+ GPIO.setup(SENSOR_PORT, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
75
+ GPIO.setup(LED, GPIO.OUT)
76
+
77
+ #モーター制御
78
+ def motorstart():
79
+ pwm = GPIO.PWM(19, 100)
80
+ pwm.start(0)
81
+ GPIO.output(motor1Direction, 0)
82
+ pwm.ChangeDutyCycle(40)
83
+ pwmR = GPIO.PWM(motor1speed, 100)
84
+ pwmR.start(0)
85
+ GPIO.output(motor1speed, 1)
86
+ pwmR.ChangeDutyCycle(23)
87
+
88
+ def motorstop():
89
+ GPIO.output(motor1speed, 0)
90
+ GPIO.output(motor1Direction, 0)
91
+
92
+ motorstart()
93
+
94
+ restart_flag = False
95
+ while True:
96
+ try:
97
+ if restart_flag:
98
+ continue
99
+ if(GPIO.input(SENSOR_PORT) == 0):
100
+ motorstart()
101
+ GPIO.output(LED, GPIO.LOW)
102
+
103
+ else:
104
+ GPIO.output(LED, GPIO.HIGH)
105
+ motorstop()
106
+ time.sleep(3)
107
+ motorstart()
108
+ restart_flag = True
109
+
110
+ except KeyboardInterrupt:
111
+ GPIO.cleanup()
112
+ sys.exit()
113
+ ```
54
114
  ### 補足情報(FW/ツールのバージョンなど)
55
115
  Python 3.7.2