自動ドアのしくみをプログラミングで考える|人を検知した後にいつ閉めるのか

自動ドアは、人が近づくと開きます。通り過ぎると、しばらくして閉じます。

開くきっかけは分かりやすいでしょう。人を見つけたからです。では、ドアは「いつ閉めてよい」と判断しているのでしょうか。

この記事では、自動ドアの動きを観察しながら、見えないところで行われている「検知」「条件分岐」「くり返し」を、できるだけ単純な形で考えてみます。

自動ドアの動きを観察する

まずは、利用する人から見える動きを順番に見てみます。

自動でドアが開く

入口に近づくと、こちらがボタンを押さなくてもドアが開きます。利用する側から見ると、「人が近づく」と「ドアが開く」が自然につながっているように見えます。

自動でドアが閉まる

ドアは、人が通った直後に閉まるわけではありません。人が近くにいる間は開いた状態を保ち、人がいなくなってから、しばらくして閉じます。

ここで大切なのは、単に「開いてから何秒たったか」だけでは決められないことです。ドアの近くに人がいるなら、時間がたっても閉じてはいけません。

自動ドアは何をきっかけに動く?

実際の自動ドアでは、用途の異なる複数のセンサーが使われることがあります。この記事ではしくみを考えやすくするため、人を検知するセンサーをまとめて「人感センサー」として扱います。

人感センサーは、人が近づいたことやドアの近くに人がいることを、プログラムが扱える情報として伝えます。プログラムはその情報を使って、「開く」「まだ閉じない」「閉じる」を判断します。

つまり、自動ドアの「自動」は、周囲の状態を検知するところから始まります。

自動ドアのプログラムを考える

ここからは、見えている動きをプログラムの処理に置き換えて考えます。

ドアが閉じているときは何をしているか

ドアが閉じているときは、何もしていないように見えます。しかしプログラムは、人が来ていないかを確認し続けています。

人を検知していなければ確認をくり返し、検知したらドアを開きます。見た目の「待っている」時間にも、同じ処理が何度も行われています。

ドアが開いているときは何をしているか

ドアを開いたあとも、人感センサーによる確認は続きます。人が近くにいる間は閉じず、人がいなくなった状態が一定時間続いたときに閉じる、と考えます。

この記事ではしくみを単純にするため、最後に人を検知してから8秒間、新たな検知がなければドアを閉じるものとします。途中で再び人を検知したら、8秒を最初から数え直します。

「8秒」は説明のための仮の値です。実際の自動ドアでは、製品や設定によって待ち時間や安全のための条件が異なります。

自動ドアのプログラムのフロー図を考える

ここまで考えた処理を、フロー図で整理します。

文章では順番に説明してきましたが、フロー図にすると、「人を検知したか」という条件で処理が分かれ、確認をくり返していることが一目で分かります。ドアを開いたあとも、人を検知すれば待ち時間を数え直し、新たな検知がないまま8秒たったときに閉じます。

フロー図の役割は、文章をそのまま置き換えることではありません。利用者には見えない「確認」「分岐」「くり返し」の関係を、ひとつの流れとして見えるようにすることです。

Scratchで自動ドアを作ってみよう

ここまで考えた動きを、Scratchでプログラミングしてみましょう。素材は当サイトで用意しています。

自動ドア|初級

自動ドア|中級・上級

完成コードは掲載していません。どんな条件や命令が必要かを考え、動かしながら調整してみてください。

あとがき

自動ドアは、外から見ると「人が来たら開き、通り過ぎたら閉じる」だけに見えます。しかし、その裏では人を検知し、条件を確かめながら、開く・待つ・閉じるという動きを決めています。

今回考えたのは、「人を検知した後に、いつ閉めるのか」です。単純化したモデルでは、「最後に人を検知してから一定時間、新たな検知がなかったとき」を閉じる条件にしました。

身の回りの「自動」も、何をきっかけに動き、次の動作までに何を確認しているのかを考えると、プログラムの姿が見えやすくなります。

この記事を書いた人

Flowz

身の回りのしくみをプログラミングや数学の視点で読み解く「Flowz」を運営しています。答えを覚えるだけではなく、「なぜそうなるのか」を考える学びを大切にしています。