質問編集履歴

8

誤記修正

2019/12/23 00:27

投稿

ysk_snn
ysk_snn

スコア21

test CHANGED
File without changes
test CHANGED
@@ -270,9 +270,9 @@
270
270
 
271
271
  しかし、ときどき動作が不安定になります。
272
272
 
273
- MCP3208 の力であるch4.valueをみてみると、スイッチを押したときに大きな力が出てきて良いのですが、
273
+ MCP3208 の力であるch4.valueをみてみると、スイッチを押したときに大きな力が出てきて良いのですが、
274
-
274
+
275
- その後、力が0付近に戻りきらないことがあるようでした。
275
+ その後、力が0付近に戻りきらないことがあるようでした。
276
276
 
277
277
 
278
278
 

7

書式の改善

2019/12/23 00:27

投稿

ysk_snn
ysk_snn

スコア21

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

6

試したこと、追記

2019/12/20 05:39

投稿

ysk_snn
ysk_snn

スコア21

test CHANGED
File without changes
test CHANGED
@@ -255,3 +255,275 @@
255
255
  ```
256
256
 
257
257
  ![イメージ説明](983fb739e2990498c3ed52431ac064da.png)
258
+
259
+
260
+
261
+
262
+
263
+ #2019/12/20_追記
264
+
265
+
266
+
267
+ 以下のようにコードを書き直したら、おおむね良好に動いてくれています。
268
+
269
+
270
+
271
+ しかし、ときどき動作が不安定になります。
272
+
273
+ MCP3208 の出力であるch4.valueをみてみると、スイッチを押したときに大きな出力が出てきて良いのですが、
274
+
275
+ その後、出力が0付近に戻りきらないことがあるようでした。
276
+
277
+
278
+
279
+ そのほかにもラズパイに負荷をかけるようなコードになっているのかもしれません。
280
+
281
+ どなたか教えてくださいませんでしょうか。
282
+
283
+
284
+
285
+ ```python3
286
+
287
+ from gpiozero import MCP3208
288
+
289
+ import RPi.GPIO as GPIO
290
+
291
+ import time
292
+
293
+
294
+
295
+ GPIO.setmode(GPIO.BCM)
296
+
297
+ GPIO.setup(20, GPIO.IN) #output_check
298
+
299
+ GPIO.setup(21, GPIO.OUT) #output
300
+
301
+ GPIO.setup(23, GPIO.OUT) #red_signal
302
+
303
+ GPIO.setup(24, GPIO.OUT) #yellow_signal
304
+
305
+
306
+
307
+ ch0 = MCP3208(channel = 0) #stop_sensor___<0.5_stop
308
+
309
+ ch1 = MCP3208(channel = 1) #ready_sensor
310
+
311
+ ch2 = MCP3208(channel = 2) #trigger_sensor
312
+
313
+ ch3 = MCP3208(channel = 3) #yellow_signal
314
+
315
+ ch4 = MCP3208(channel = 4) #red_signal
316
+
317
+
318
+
319
+ #sensor's_threthold
320
+
321
+ ch1th = 0.1
322
+
323
+ ch2th = 0.1
324
+
325
+
326
+
327
+ def CurrentStatus(st):#st = 0, 1
328
+
329
+ status = {0:'waiting',1:'sensing'}
330
+
331
+ return status[st]
332
+
333
+
334
+
335
+ def YellowSignal():
336
+
337
+ if ch3.value > 0.2:
338
+
339
+ global CS
340
+
341
+ print('sensing')
342
+
343
+ CS = CurrentStatus(1)#to_sense
344
+
345
+ else:
346
+
347
+ pass
348
+
349
+
350
+
351
+ def RedSignal():
352
+
353
+ if ch4.value > 0.2:
354
+
355
+ global CS
356
+
357
+ print('waiting')
358
+
359
+ CS = CurrentStatus(0)#to_wait
360
+
361
+ else:
362
+
363
+ pass
364
+
365
+
366
+
367
+ def SignalSwitch():#continue
368
+
369
+ if CS == 'waiting':
370
+
371
+ YellowSignal()
372
+
373
+ elif CS == 'sensing':
374
+
375
+ RedSignal()
376
+
377
+
378
+
379
+ def ControlOutput():
380
+
381
+ global t1,t2,tsub
382
+
383
+ #outputting_or_waiting
384
+
385
+ #outputting
386
+
387
+ if GPIO.input(20) == GPIO.HIGH:
388
+
389
+ if ch0.value > 0.5:
390
+
391
+ GPIO.output(21,GPIO.LOW)
392
+
393
+ else:
394
+
395
+ pass
396
+
397
+ #waiting
398
+
399
+ elif GPIO.input(20) == GPIO.LOW:
400
+
401
+ try:
402
+
403
+ #ready_sensor
404
+
405
+ if ch1.value > ch1th and ch2.value < ch2th:
406
+
407
+ t1 = time.time()
408
+
409
+ else:
410
+
411
+ pass
412
+
413
+ #trigger_sensor
414
+
415
+ if ch1.value < ch1th and ch2.value > ch2th:
416
+
417
+ t2 = time.time()
418
+
419
+ tsub = t2- t1
420
+
421
+ if 0.0001 < tsub < 0.1:
422
+
423
+ print('start_injectioning___' + str(tsub))
424
+
425
+ GPIO.output(21,GPIO.HIGH)
426
+
427
+ del t1,t2,tsub
428
+
429
+ else:
430
+
431
+ time.sleep(0.1)
432
+
433
+ print('out_of_range_error___' + str(tsub))
434
+
435
+ print('reset,_now_not_ready')
436
+
437
+ del t1,t2,tsub
438
+
439
+ #neither_sensor_is_on__or_each_sensor_is_on
440
+
441
+ else:
442
+
443
+ pass
444
+
445
+ except NameError:
446
+
447
+ pass
448
+
449
+
450
+
451
+ def WorkSwitch():#continue
452
+
453
+ if CS == 'waiting':
454
+
455
+ pass
456
+
457
+ elif CS == 'sensing':
458
+
459
+ ControlOutput()
460
+
461
+
462
+
463
+ def GPIOSwitch():#once
464
+
465
+ #print(CS)
466
+
467
+ if CS == 'waiting':
468
+
469
+ GPIO.output(23,GPIO.LOW)#RedLED
470
+
471
+ GPIO.output(21,GPIO.LOW)#output
472
+
473
+ time.sleep(0.0001)#buffer
474
+
475
+ GPIO.output(24,GPIO.HIGH)#YellowLED
476
+
477
+ elif CS == 'sensing':
478
+
479
+ GPIO.output(24,GPIO.LOW)
480
+
481
+ time.sleep(0.0001)#buffer
482
+
483
+ GPIO.output(23,GPIO.HIGH)
484
+
485
+
486
+
487
+ if __name__ == '__main__':
488
+
489
+ #initial
490
+
491
+ CS = CurrentStatus(0)
492
+
493
+
494
+
495
+ while True:
496
+
497
+ try:
498
+
499
+ if CS == 'waiting':
500
+
501
+ GPIOSwitch()
502
+
503
+ print('switch_wait')
504
+
505
+ while CS == 'waiting':
506
+
507
+ SignalSwitch()
508
+
509
+ WorkSwitch()
510
+
511
+ elif CS == 'sensing':
512
+
513
+ GPIOSwitch()
514
+
515
+ print('switch_sense')
516
+
517
+ while CS == 'sensing':
518
+
519
+ SignalSwitch()
520
+
521
+ WorkSwitch()
522
+
523
+ except KeyboardInterrupt:
524
+
525
+ GPIO.cleanup()
526
+
527
+ print('cleanup')
528
+
529
+ ```

5

書式の改善

2019/12/20 05:37

投稿

ysk_snn
ysk_snn

スコア21

test CHANGED
File without changes
test CHANGED
@@ -20,23 +20,27 @@
20
20
 
21
21
 
22
22
 
23
- **・ロックを示す黄LEDと、出力を示す緑LEDとが同時に点灯する_(本来は黄LEDのみ)**
23
+ ・ロックを示す黄LEDと、出力を示す緑LEDとが同時に点灯する_(本来は黄LEDのみ)
24
-
24
+
25
- **・ロック解除のトグルスイッチを押すと、黄LEDが消えるが、ロック解除を示す赤LEDが点灯しないときがある**
25
+ ・ロック解除のトグルスイッチを押すと、黄LEDが消えるが、ロック解除を示す赤LEDが点灯しないときがある
26
-
26
+
27
- ** →しかし、ready・triggerセンサ、stopセンサは反応して出力が切り替わる**
27
+  →しかし、ready・triggerセンサ、stopセンサは反応して出力が切り替わる
28
-
28
+
29
- **・出力時にロックをかけようとすると、無視される_(本来は出力中にロックをかけると、出力もオフ)**
29
+ ・出力時にロックをかけようとすると、無視される_(本来は出力中にロックをかけると、出力もオフ)
30
+
31
+  →これは頻発します
30
32
 
31
33
 
32
34
 
33
35
  のような状態が発生します。
34
36
 
37
+ **しかし、このような状態は発生したりしなかったりです。**
38
+
35
39
 
36
40
 
37
41
  **コードが間違っているのか、回路が間違っているのか分かりません。**
38
42
 
39
- **GPIO.outputが内包されているJobSwitch()をwhile Trueで動かしている辺りが怪しいと思っているのですが...**
43
+ __**GPIO.outputが内包されているJobSwitch()をwhile Trueで動かしている辺りが怪しいと思っているのですが...**__
40
44
 
41
45
 
42
46
 

4

書式の改善

2019/12/20 01:04

投稿

ysk_snn
ysk_snn

スコア21

test CHANGED
@@ -1 +1 @@
1
- ラズパイ_電子工作_意図しない出力の発生_コードか回路か問題点が分りません。
1
+ [ラズパイ電子工作_意図しない出力の発生]_while True内にGPIO.outputがあるのが問題でしょう...??
test CHANGED
@@ -36,6 +36,8 @@
36
36
 
37
37
  **コードが間違っているのか、回路が間違っているのか分かりません。**
38
38
 
39
+ **GPIO.outputが内包されているJobSwitch()をwhile Trueで動かしている辺りが怪しいと思っているのですが...**
40
+
39
41
 
40
42
 
41
43
  以下、コードと回路です。

3

書式の改善

2019/12/20 01:00

投稿

ysk_snn
ysk_snn

スコア21

test CHANGED
@@ -1 +1 @@
1
- ラズパイを用いたセンサ系の動が安定しないです
1
+ ラズパイ_電子工_意図しない出力の発生_コードか回路か問題点が分かりません。
test CHANGED
@@ -1,12 +1,10 @@
1
1
  プログラム、電子工作ともに初心者です。
2
2
 
3
- オブジェクティブ指向?に憧れていますが、どう取り組んで良いか分からない、というところです。
4
-
5
3
 
6
4
 
7
5
  1つの出力のオンオフを、3つのセンサ(ready, trigger, stop)で管理しようと考えています。
8
6
 
9
- 出力をオンにするためには、readyセンサ→triggerセンサの順に短時間で反応させる必要があり、
7
+ 出力をオンにするためには、[readyセンサ triggerセンサ] の順に短時間で反応させる必要があり、
10
8
 
11
9
  出力をオフにするためには、stopセンサを反応させる必要があります。
12
10
 
@@ -20,27 +18,29 @@
20
18
 
21
19
  プログラムを作動させると、
22
20
 
21
+
22
+
23
- ・ロックを示す黄LEDと、出力を示す緑LEDとが同時に点灯する_(出力オフでスタートさせているつもりなですが、、、)
23
+ **・ロックを示す黄LEDと、出力を示す緑LEDとが同時に点灯する_(本来は黄LED)**
24
-
24
+
25
- ・ロック解除のトグルスイッチを押すと、黄LEDが消えるが、ロック解除を示す赤LEDが点灯しない
25
+ **・ロック解除のトグルスイッチを押すと、黄LEDが消えるが、ロック解除を示す赤LEDが点灯しないときがある**
26
-
26
+
27
-  →しかし、ready・triggerセンサ、stopセンサは反応して出力が切り替わる
27
+ ** →しかし、ready・triggerセンサ、stopセンサは反応して出力が切り替わる**
28
-
28
+
29
- ・出力時にロックをかけようとすると、無視される_(出力中にロックをかけると、出力オフになってロックをかけているつもりです)
29
+ **・出力時にロックをかけようとすると、無視される_(本来は出力中にロックをかけると、出力オフ)**
30
-
31
- ・ロック解除時に赤LEDが点いたり消えたりする
30
+
31
+
32
32
 
33
33
  のような状態が発生します。
34
34
 
35
+
36
+
35
- ...書き上げと問題点やたらと多ですね
37
+ **コードが間違っのか、回路間違ってるのか分かりません**
36
-
37
-
38
-
38
+
39
+
40
+
39
- 以下コードです。
41
+ 以下コードと回路です。
40
-
42
+
41
- どうかお助けくださ...
43
+ どうかよろしくいたします。
42
-
43
- 綺麗なコードの書き方等も教えていただけたらなお嬉しいです...
44
44
 
45
45
 
46
46
 

2

誤記修正

2019/12/20 00:23

投稿

ysk_snn
ysk_snn

スコア21

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

1

誤記修正

2019/12/19 07:39

投稿

ysk_snn
ysk_snn

スコア21

test CHANGED
File without changes
test CHANGED
@@ -238,8 +238,6 @@
238
238
 
239
239
  try:
240
240
 
241
- time.sleep(0.001)
242
-
243
241
  JobSwitch()
244
242
 
245
243
  except KeyboardInterrupt: