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

質問編集履歴

8

誤記修正

2019/12/23 00:27

投稿

ysk_snn
ysk_snn

スコア21

title CHANGED
File without changes
body CHANGED
@@ -134,8 +134,8 @@
134
134
  以下のようにコードを書き直したら、おおむね良好に動いてくれています。
135
135
 
136
136
  しかし、ときどき動作が不安定になります。
137
- MCP3208 の力であるch4.valueをみてみると、スイッチを押したときに大きな力が出てきて良いのですが、
137
+ MCP3208 の力であるch4.valueをみてみると、スイッチを押したときに大きな力が出てきて良いのですが、
138
- その後、力が0付近に戻りきらないことがあるようでした。
138
+ その後、力が0付近に戻りきらないことがあるようでした。
139
139
 
140
140
  そのほかにもラズパイに負荷をかけるようなコードになっているのかもしれません。
141
141
  どなたか教えてくださいませんでしょうか。

7

書式の改善

2019/12/23 00:27

投稿

ysk_snn
ysk_snn

スコア21

title CHANGED
@@ -1,1 +1,1 @@
1
- [ラズパイ電子工作_意図しない出力の発生]_while True内GPIO.outputるのが問題でしょうか...??
1
+ [ラズパイ電子工作]_ラズパイ負荷かかり過ぎているのでしょうか...?
body CHANGED
File without changes

6

試したこと、追記

2019/12/20 05:39

投稿

ysk_snn
ysk_snn

スコア21

title CHANGED
File without changes
body CHANGED
@@ -126,4 +126,140 @@
126
126
  GPIO.cleanup()
127
127
  print('cleanup')
128
128
  ```
129
- ![イメージ説明](983fb739e2990498c3ed52431ac064da.png)
129
+ ![イメージ説明](983fb739e2990498c3ed52431ac064da.png)
130
+
131
+
132
+ #2019/12/20_追記
133
+
134
+ 以下のようにコードを書き直したら、おおむね良好に動いてくれています。
135
+
136
+ しかし、ときどき動作が不安定になります。
137
+ MCP3208 の出力であるch4.valueをみてみると、スイッチを押したときに大きな出力が出てきて良いのですが、
138
+ その後、出力が0付近に戻りきらないことがあるようでした。
139
+
140
+ そのほかにもラズパイに負荷をかけるようなコードになっているのかもしれません。
141
+ どなたか教えてくださいませんでしょうか。
142
+
143
+ ```python3
144
+ from gpiozero import MCP3208
145
+ import RPi.GPIO as GPIO
146
+ import time
147
+
148
+ GPIO.setmode(GPIO.BCM)
149
+ GPIO.setup(20, GPIO.IN) #output_check
150
+ GPIO.setup(21, GPIO.OUT) #output
151
+ GPIO.setup(23, GPIO.OUT) #red_signal
152
+ GPIO.setup(24, GPIO.OUT) #yellow_signal
153
+
154
+ ch0 = MCP3208(channel = 0) #stop_sensor___<0.5_stop
155
+ ch1 = MCP3208(channel = 1) #ready_sensor
156
+ ch2 = MCP3208(channel = 2) #trigger_sensor
157
+ ch3 = MCP3208(channel = 3) #yellow_signal
158
+ ch4 = MCP3208(channel = 4) #red_signal
159
+
160
+ #sensor's_threthold
161
+ ch1th = 0.1
162
+ ch2th = 0.1
163
+
164
+ def CurrentStatus(st):#st = 0, 1
165
+ status = {0:'waiting',1:'sensing'}
166
+ return status[st]
167
+
168
+ def YellowSignal():
169
+ if ch3.value > 0.2:
170
+ global CS
171
+ print('sensing')
172
+ CS = CurrentStatus(1)#to_sense
173
+ else:
174
+ pass
175
+
176
+ def RedSignal():
177
+ if ch4.value > 0.2:
178
+ global CS
179
+ print('waiting')
180
+ CS = CurrentStatus(0)#to_wait
181
+ else:
182
+ pass
183
+
184
+ def SignalSwitch():#continue
185
+ if CS == 'waiting':
186
+ YellowSignal()
187
+ elif CS == 'sensing':
188
+ RedSignal()
189
+
190
+ def ControlOutput():
191
+ global t1,t2,tsub
192
+ #outputting_or_waiting
193
+ #outputting
194
+ if GPIO.input(20) == GPIO.HIGH:
195
+ if ch0.value > 0.5:
196
+ GPIO.output(21,GPIO.LOW)
197
+ else:
198
+ pass
199
+ #waiting
200
+ elif GPIO.input(20) == GPIO.LOW:
201
+ try:
202
+ #ready_sensor
203
+ if ch1.value > ch1th and ch2.value < ch2th:
204
+ t1 = time.time()
205
+ else:
206
+ pass
207
+ #trigger_sensor
208
+ if ch1.value < ch1th and ch2.value > ch2th:
209
+ t2 = time.time()
210
+ tsub = t2- t1
211
+ if 0.0001 < tsub < 0.1:
212
+ print('start_injectioning___' + str(tsub))
213
+ GPIO.output(21,GPIO.HIGH)
214
+ del t1,t2,tsub
215
+ else:
216
+ time.sleep(0.1)
217
+ print('out_of_range_error___' + str(tsub))
218
+ print('reset,_now_not_ready')
219
+ del t1,t2,tsub
220
+ #neither_sensor_is_on__or_each_sensor_is_on
221
+ else:
222
+ pass
223
+ except NameError:
224
+ pass
225
+
226
+ def WorkSwitch():#continue
227
+ if CS == 'waiting':
228
+ pass
229
+ elif CS == 'sensing':
230
+ ControlOutput()
231
+
232
+ def GPIOSwitch():#once
233
+ #print(CS)
234
+ if CS == 'waiting':
235
+ GPIO.output(23,GPIO.LOW)#RedLED
236
+ GPIO.output(21,GPIO.LOW)#output
237
+ time.sleep(0.0001)#buffer
238
+ GPIO.output(24,GPIO.HIGH)#YellowLED
239
+ elif CS == 'sensing':
240
+ GPIO.output(24,GPIO.LOW)
241
+ time.sleep(0.0001)#buffer
242
+ GPIO.output(23,GPIO.HIGH)
243
+
244
+ if __name__ == '__main__':
245
+ #initial
246
+ CS = CurrentStatus(0)
247
+
248
+ while True:
249
+ try:
250
+ if CS == 'waiting':
251
+ GPIOSwitch()
252
+ print('switch_wait')
253
+ while CS == 'waiting':
254
+ SignalSwitch()
255
+ WorkSwitch()
256
+ elif CS == 'sensing':
257
+ GPIOSwitch()
258
+ print('switch_sense')
259
+ while CS == 'sensing':
260
+ SignalSwitch()
261
+ WorkSwitch()
262
+ except KeyboardInterrupt:
263
+ GPIO.cleanup()
264
+ print('cleanup')
265
+ ```

5

書式の改善

2019/12/20 05:37

投稿

ysk_snn
ysk_snn

スコア21

title CHANGED
File without changes
body CHANGED
@@ -9,15 +9,17 @@
9
9
 
10
10
  プログラムを作動させると、
11
11
 
12
- **・ロックを示す黄LEDと、出力を示す緑LEDとが同時に点灯する_(本来は黄LEDのみ)**
12
+ ・ロックを示す黄LEDと、出力を示す緑LEDとが同時に点灯する_(本来は黄LEDのみ)
13
- **・ロック解除のトグルスイッチを押すと、黄LEDが消えるが、ロック解除を示す赤LEDが点灯しないときがある**
13
+ ・ロック解除のトグルスイッチを押すと、黄LEDが消えるが、ロック解除を示す赤LEDが点灯しないときがある
14
- ** →しかし、ready・triggerセンサ、stopセンサは反応して出力が切り替わる**
14
+  →しかし、ready・triggerセンサ、stopセンサは反応して出力が切り替わる
15
- **・出力時にロックをかけようとすると、無視される_(本来は出力中にロックをかけると、出力もオフ)**
15
+ ・出力時にロックをかけようとすると、無視される_(本来は出力中にロックをかけると、出力もオフ)
16
+  →これは頻発します
16
17
 
17
18
  のような状態が発生します。
19
+ **しかし、このような状態は発生したりしなかったりです。**
18
20
 
19
21
  **コードが間違っているのか、回路が間違っているのか分かりません。**
20
- **GPIO.outputが内包されているJobSwitch()をwhile Trueで動かしている辺りが怪しいと思っているのですが...**
22
+ __**GPIO.outputが内包されているJobSwitch()をwhile Trueで動かしている辺りが怪しいと思っているのですが...**__
21
23
 
22
24
  以下、コードと回路です。
23
25
  どうかよろしくお願いいたします。

4

書式の改善

2019/12/20 01:04

投稿

ysk_snn
ysk_snn

スコア21

title CHANGED
@@ -1,1 +1,1 @@
1
- ラズパイ_電子工作_意図しない出力の発生_コードか回路か問題点が分りません。
1
+ [ラズパイ電子工作_意図しない出力の発生]_while True内にGPIO.outputがあるのが問題でしょう...??
body CHANGED
@@ -17,6 +17,7 @@
17
17
  のような状態が発生します。
18
18
 
19
19
  **コードが間違っているのか、回路が間違っているのか分かりません。**
20
+ **GPIO.outputが内包されているJobSwitch()をwhile Trueで動かしている辺りが怪しいと思っているのですが...**
20
21
 
21
22
  以下、コードと回路です。
22
23
  どうかよろしくお願いいたします。

3

書式の改善

2019/12/20 01:00

投稿

ysk_snn
ysk_snn

スコア21

title CHANGED
@@ -1,1 +1,1 @@
1
- ラズパイを用いたセンサ系の動が安定しないです
1
+ ラズパイ_電子工_意図しない出力の発生_コードか回路か問題点が分かりません。
body CHANGED
@@ -1,26 +1,26 @@
1
1
  プログラム、電子工作ともに初心者です。
2
- オブジェクティブ指向?に憧れていますが、どう取り組んで良いか分からない、というところです。
3
2
 
4
3
  1つの出力のオンオフを、3つのセンサ(ready, trigger, stop)で管理しようと考えています。
5
- 出力をオンにするためには、readyセンサ→triggerセンサの順に短時間で反応させる必要があり、
4
+ 出力をオンにするためには、[readyセンサ triggerセンサ] の順に短時間で反応させる必要があり、
6
5
  出力をオフにするためには、stopセンサを反応させる必要があります。
7
6
  現在は出力の代わりに緑LEDを点灯させます。
8
7
  また、不意の誤作動を防ぐために、2つのスイッチによってロック・ロック解除を行います。
9
8
  現在はロック時は黄LED、ロック解除時は赤LEDを点灯させます。
10
9
 
11
10
  プログラムを作動させると、
11
+
12
- ・ロックを示す黄LEDと、出力を示す緑LEDとが同時に点灯する_(出力オフでスタートさせているつもりなですが、、、)
12
+ **・ロックを示す黄LEDと、出力を示す緑LEDとが同時に点灯する_(本来は黄LED)**
13
- ・ロック解除のトグルスイッチを押すと、黄LEDが消えるが、ロック解除を示す赤LEDが点灯しない
13
+ **・ロック解除のトグルスイッチを押すと、黄LEDが消えるが、ロック解除を示す赤LEDが点灯しないときがある**
14
-  →しかし、ready・triggerセンサ、stopセンサは反応して出力が切り替わる
14
+ ** →しかし、ready・triggerセンサ、stopセンサは反応して出力が切り替わる**
15
- ・出力時にロックをかけようとすると、無視される_(出力中にロックをかけると、出力オフになってロックをかけているつもりです)
15
+ **・出力時にロックをかけようとすると、無視される_(本来は出力中にロックをかけると、出力オフ)**
16
- ・ロック解除時に赤LEDが点いたり消えたりする
16
+
17
17
  のような状態が発生します。
18
- ...書き上げてみると問題点がやたらと多いですね。
19
18
 
20
- 以下コードです。
21
- どうかお助けください...
22
- 綺麗なコードの書き方等も教えていただけたらなお嬉しいです...
19
+ **コードが間違っているか、回路が間違っているのか分かりません。**
23
20
 
21
+ 以下、コードと回路です。
22
+ どうかよろしくお願いいたします。
23
+
24
24
  ```python3
25
25
  from gpiozero import MCP3208
26
26
  import RPi.GPIO as GPIO

2

誤記修正

2019/12/20 00:23

投稿

ysk_snn
ysk_snn

スコア21

title CHANGED
@@ -1,1 +1,1 @@
1
- センサ系の動作が安定しないです
1
+ ラズパイを用いたセンサ系の動作が安定しないです
body CHANGED
File without changes

1

誤記修正

2019/12/19 07:39

投稿

ysk_snn
ysk_snn

スコア21

title CHANGED
File without changes
body CHANGED
@@ -118,7 +118,6 @@
118
118
 
119
119
  while True:
120
120
  try:
121
- time.sleep(0.001)
122
121
  JobSwitch()
123
122
  except KeyboardInterrupt:
124
123
  GPIO.cleanup()