前回の記事で遮断棒を上下させる動きは実現することができましたので、今回はセンサーを使って列車が来たときに遮断棒が下りる動きを作りたいと思います。
まず、何らかのトリガー(きっかけ)によって遮断棒が下り始める処理を作成します。前回、メインループ遮断棒の角度を制御する方法を作成しましたが、普段は止まっていてトリガーがあったときに動くようなプログラムにします。
遮断棒が動作する角度の上限(上がりきったときの角度)と、下限(下がりきったときの角度)で止められるようにすれば、遮断棒の「状態」は
0=上昇中・上がりきって止まっている(何もない)
1=下降中・下がりきって止まっている(列車が来た)
の2種類で表すことができます。
そうすると、何もない状態で待機しているときにトリガーが発生したら状態1(下降中)にしてやれば良いわけです。
まずはトリガーとして、タクトスイッチの入力を上昇と下降の切替にしてみることにしました。青いボタンを押すと下降(状態1)になり、赤いボタンを押すと上昇(状態2)になります。動画を見ていただくと分かる通り、下降中でも赤いボタンを押すとそこから上昇します。
さて、踏切を自動的に動作させるために、以前作ったArduino踏切のときと同様に、今回もCDSセルを使います。CDSセルというのはフォトレジスタの一種で、あたっている光の強さに応じて抵抗の強さが変わるというものです。暗くなったときに勝手に点灯する街灯などでも使われているそうです。(下の画像の左側、頭に円盤状の部品がついているのがCDSです)
CDSからの入力はアナログ値になります。動作を確認するためにArduinoに接続してみます。CDSの片方の足をArduinoのGNDピンに接続し、もう片方はA0と、抵抗を介して5Vに接続します。
ソースコードは下記のように入力します。
void setup() { Serial.begin(9600); } void loop() { int val = analogRead(A0); Serial.println(val); }
Arduinoに書き込んで実行させたら、シリアルコンソールを開きます。シリアルコンソールにドバーッと数値が表示されますが、CDSセルを手で覆い隠したりして明るさを変えてやると数値が変わることが確認できます。
実際に列車が通ったときの暗さを表す数値が特定できればよいのですが、開発している机とプラレールレイアウトでは実際の明るさが違うため、あとで調節できるよう可変抵抗を使って反応する明るさを調整できるようにしました。
メイキングの動画はこちらからどうぞ。
