通過信号機の試作
以前から気になって、以前テストした信号機もどきを使える様にしようと思います。
参考しているのは、こちらの記事です。
車両の通過を検知する~信号機~
Arduino/Arduino互換マイコンを使って、信号機を作る記事です。
実際にテストしてみると、列車の通過後に、信号が赤、黄、青と順番に点灯し、最後は、青のままになります。
これはこれで良いのですが、問題は長い編成の場合です。
現在のスケッチでは、編成が通過中にも関わらず、
信号が赤から黄、青と変わってしまいます。
これは、車両の通過開始のみを検知している事により起きています。
そこで、このスケッチを改造して、列車が通過中は、信号が赤のままとなる様にしたいと思います。
このスケッチは、
以下の様な仕組みで車両の通過開始を検知しています。
赤外線LED(D12)を点灯して、
D13でセンサーが検知するのを待ちます。
遮蔽物がない場合は、センサーは検知しませんが、
自然光などでも、D13センサーが検知してしまうことがある様です。
そこで、D13センサーが検知したら、すなわち列車の通過を検知したら
dの値を1にして、D12をLOW(消灯)にします。
2msc待ってからD13センサーを確認し、
D12が消えているのにD13検知センサーがHIGHだったら
dの値を0にしてループを抜けます。
この場合は、自然光でD13センサーが検知してしまった可能性があるため。
再びD12をHIGHにして
2msc待ち、D13センサーを確認、
今度はD13センサーがLOWだったら
dの値を0にしてループを抜けます。
この場合は、一瞬だけD13センサーで検知したと思われるので、
列車の通過ではないと判断する
この処理を5回繰り返し、
すべてクリアした(dが1のまま)の場合は
LEDの点滅処理に移ります。
現在のスケッチは、
ここで、通過を検知すると、
LEDの点滅処理に入ってしまい、
LEDは、赤、黄、青の順に点灯して、消灯します。
そして、Loop処理は終了し、
Loopの最初に戻って、
青が点灯し、
赤外線LED(D12)を点灯状態にします。
問題は、通過を検知してから、
LEDの点滅処理に移る間に隙間時間がないこと。
すなわち、
LEDの点滅処理に移る前に
「列車の通過が完了した」という
判断を行う処理が必要ということです。
列車がいないという判断は、以下の手順でできるはずです。
D12をHIGHにして
2msc待ってからD13センサーを確認し、
D13検知センサーがHIGHだったら
列車は通過中。
D12をLOW(消灯)にします。
再び D12をHIGHにして
2msc待ち、D13センサーを確認、
D13センサーがLOWだったら
列車はいない。
dの値を2にして、D12をLOW(消灯)にします。
繰り返し処理から抜ける
この処理を繰り返し、
dが2のままで繰り返しを抜けた場合は
LEDの点滅処理に移ります。
なお、理論上は、これでOKだと思いますが、
センサーのチェックタイミングによっては、
通過中を通過完了と判断してしまう可能性があります。
そのあたりの工夫は実際に試してみることが必要かと思います。
ブログ村に参加しています。
下のバナーのクリックをお願いします。
![]()
にほんブログ村
« アウトレットセールでの購入品 | トップページ | 通過信号機の試作 その2 »
「電子工作(Arduino)」カテゴリの記事
- Arduinoジャンパワイヤオーガナイザーを印刷(2026.05.26)
- Arduinoの在庫確認(2026.05.22)
- Arduino ケースの作成(2026.05.21)
- フォトリフレクタでの進行方向判定 その2(2025.09.10)
- フォトリフレクタでの進行方向判定(2025.09.09)



コメント