
Scratchでホームセキュリティを作ってみます。
ホームセキュリティというのは、留守の家に入ってきた人を見つけて通報する仕組みです。
カメラに映った映像に動きがったら通報する仕組みにします。
実際に通報することはできなので、画面に「侵入者あり」と表示することにします。
プログラムの概要
4桁の暗証番号を入力して「設定」ボタンを押します。
一定時間アラームが鳴ったのち、セキュリティーモードになります。
カメラに映った画像に動きがあると、侵入者ありと判断して、一定時間アラームが鳴ります。
アラームが鳴っている間に、設定時に入力した暗証番号を入れて「解除」ボタンを押すと、セキュリティを解除することができます。
入力した暗証番号を入れなおしたい時は「取消し」ボタンを押します。
用意するスプライト
・操作パネル用の背景
・0~9の数字
・操作用のボタン3つ
・暗証番号表示用の隠し文字
暗証番号は「*」や「●」で表示する用のスプライト
・侵入者を検知した時の表示

操作パネル用の背景
ホームセキュリティの操作盤を背景で作ります。
大きな四角で操作盤を作ります。
青枠で薄緑に塗っている部分です。
その中に、小さめの四角を作ります。
暗証番号などを表示するエリア用です。
操作盤用の枠はなくても良いような気がしますが、重要です。
Scratchで動きを検知するためには、背景やスプライトの近くで動きが無いと検知しないようです。
したがって、画面全体で動きを検知するために大きな四角を作って色を塗ることで検知できるエリアを広げています。

暗証番号用の数字スプライト
Scratchで用意されているサンプルの中から0~9のスプライトを用意します。

設定ボタン
セキュリティを設定する用のボタンです。
サンプルのボタンスプライトの上に「設定」という文字を書いて作ります。

解除ボタン
セキュリティを解除する用のボタンです。
サンプルのボタンスプライトの上に「解除」という文字を書いて作ります。

取消しボタン
入力した暗証番号を取消しするためのボタンです。
サンプルのボタンスプライトの上に「取消し」という文字を書いて作ります。

1文字目~4文字目のスプライト
暗証番号を入力した時に、伏字(*や●で表示されることが多い)にして表示するためのスプライトです。
1文字目用~4文字目用の4つを用意します。
Scratchで用意されているサンプルイメージを利用します。

侵入者表示のスプライト
侵入者を感知した時に表示する用の文字をスプライトで作っておきます。

プログラム
スプライトの配置はこのようになります。
位置は大まかでいいです。

背景
背景にはホームセキュリティの主要なプログラムを集めて作ります。
他のスプライトはイベントを発生させたり、変数に値を入れたり補助的な機能にしています。
まずは背景を作ります。
大きな青四角を作り薄黄緑色で塗りつぶします。
その上に、黄色の四角を作ります。
色はお好みでどうぞ。

プログラムの全体像です。
色々な機能を持たせているので、一つずつ解説していきます。
主な機能は、
・初期化
・セキュリティ設定
・セキュリティ解除
・入力内容の取り消し
・カメラで動きを感知する
という機能になります。

変数作成
以下の変数を作成します。
・モード
セキュリティ中かどうかの状態を設定します。
・暗証番号
設定時に入力された暗証番号を持っておきます。
・入力番号
入力された数字を一時的に持ちます。
・文字数
入力した暗証番号が何文字目かを持ちます。

プログラムの開始
プログラムの開始処理です。
メッセージで「初期化」を送っています。
このブロックで初期化の処理をしてもいいのですが、他のスプライトでも一斉に初期化をしたいので同じような形にしました。

初期化
変数などを初期化します。
変数「入力番号」を作成し

設定を受け取ったとき
「設定スプライト」が押されたとき「設定」メッセージが送られてくるので、それをきっかけに動くプログラムです。
※設定スプライトでは変数「暗証番号」に入力した4桁の数字を登録しています。
まず、暗証番号が設定されたので、変数「入力番号」と「文字数」は中身を消しておきます。
ポンとは「入力番号」をカラにしておくことです。
デフォルトだと0が設定されていますが、消しておいてください。
次はセキュリティモードに変えていきますが、少しの間待ちます。
すぐにセキュリティモードにしてしまうと、設定ボタンを押した人を感知してしまいます。
お出かけをするための時間を待ちます。
そこで、短い音をゆっくり10回鳴らして、テンポを早くして20回鳴らすことにします。
変数「モード」を1にします。
モードが1の時はセキュリティ中という判定にします。
そして、カメラを「入」にするとモーションセンサーが動き始めます。

ビデオモーション
ビデオを「入」にするとビデオモーションが動き始めます。
カメラに映った物に動きがあるとこのイベントが発生します。
この数字を小さくするほど敏感に反応するようになります。
”カメラに映った物に動きがあると”と言いましたが、少し違います。
”カメラに映ったものがこのスプライト(または背景)に触れると”という方が正確です。
今回は背景にビデオモーションのプログラムを設置しましたが、背景が透明だと触れたことにならないので反応しません。
そこで、背景のほぼ全体を黄緑色で塗って触れることが出来るようになっています。
ビデオモーションが動きを感知したら警告音を鳴らします。
警告音が鳴っている間に設定時に入れた暗証番号を入力して「解除」を押せば、セキュリティモードを終了することができます。
警告音は設定と同じように鳴らしています。
警告音が鳴り終わるまでに解除できなければ「侵入」のメッセージを送ります。

解除を受け取ったとき
解除のメッセージを受け取ったときのプログラムです。
解除ボタン側で入力した暗証番号が正しいかチェックしています。
正しければ「解除」のメッセージが送られます。
メッセージを受け取ったらセキュリティは解除します。
そのために、いろいろなものを初期化します。
変数「入力番号」を空白にします。
変数「文字数」を0にします。
変数「暗証番号」を空白にします。
ビデオを「切」にします。
モードを「0」にします。
「スプライトの他のスクリプトを止める」をします。
この時、侵入者の発報にむけてカウントダウンをしているプログラムが動いている場合があります。
そのプログラムを止めるためにこのプログラムを実行します。

取り消しを受け取ったとき
取消しメッセージを受け取ったときに起動するプログラムです。
取消ボタンでは、メッセージを送るだけの機能です。
入力途中の番号をクリアーする役割です。
変数「入力番号」を空白にします。
変数「文字数」を0にします。

設定スプライト
セキュリティを設定するときに押すスプライトです。
暗証番号を入力してから設定ボタンを押すとセキュリティモードになります。

プログラム
このスプライトが押されたときのプログラムです。
入力されている暗証番号が4桁の場合のみ動作します。
さらに、変数「モード」が0の時。
つまり、セキュリティモードが解除されている時のみです。
この条件がそろっていれば、変数「暗証番号」に入力された番号を登録します。
そして、メッセージ「設定」を送ってセキュリティモードに移行します。

解除スプライト
セキュリティを解除するときに押すスプライトです。
設定した時を同じ暗証番号を入力して押せば、セキュリティが解除できます。

プログラム
このスプライトが押されたときのプログラムです。
入力された文字数が4文字かチェックしています。
4文字の場合、次のチェックをします。
入力した番号と変数「暗証番号」の数字が同じだったら、暗証番号を初期化して、「解除」メッセージを送ります。

取消しスプライト
入力途中数字を消して、やり直すときに押すボタンです。

プログラム
このスプライトが押されたときに動作するプログラムです。
「取消し」のメッセージを送ります。
プログラムの中身は「背景」に作っています。

数字スプライト
暗証番号を入力するために押すスプライトです。
数字の0~9までのスプライト共通です。
説明は0だけで、他は省略します。

プログラム
数字のスプライトが押されたら動作します。
これまでに入力された文字が4文字未満の場合に数字を押すことができます。
(暗証番号は4文字にしているので、これまで入力された文字が4文字に達していなければ次の番号を入力できます)
変数「入力番号」に、今回入力した数字を追加します。
このスプライトは「0」なので、変数「入力番号」に「0」を追加しています。
1~9のスプライトでは、スプライトの番号に合わせて変更してください。
変数「文字数」を1増やして、入力された文字が1文字増得たことを記録します。
メッセージ「番号入力」を送ります。
番号が入力されると「×スプライト」が動作します。

×スプライト
Scratchのサンプル画像の中から×を使います。
暗証番号を入力すると、たいてい*や●で表示されるのですが、ちょうどいい絵が無かったので×を使いました。
4文字分の四つのスプライトを用意しておきます。
暗証番号が1文字入力されると「1文字目」のスプライトを表示し、2文字目が入力されると「2文字目」を表示していきます。
少し手の込んだ作りにするなら、スプライトを1つにしてクローンで4文字分表示させることも出来そうです。
「1文字目」~「4文字目」は基本的に同じ内容なので説明は省略します。
表示する座標が違うだけです。




プログラム
全容はこちらです。
何かメッセージを受け取ったら、「表示する」か「隠す」かの動きをします。

初期化を受け取ったとき
プログラムが開始した時は、とりあえず非表示にします。

番号入力を受け取ったとき
入力された文字が1文字目の時、「1文字目」のスプライトを表示します。
2文字目のスプライトでは「文字数 = 2」
3文字目のスプライトでは「文字数 = 3」
4文字目のスプライトでは「文字数 = 4」とします。

設定を受け取ったとき
設定を受け取ったときは隠します。
設定を受け取ったときというのは、暗証番号を入力した後なので表示から消す必要があります。

解除を受け取ったとき
解除を受け取ったときは隠します。
この場合も、解除がされた後なので表示を消す必要があります。

取消しを受け取ったとき
取消しを受け取ったときは隠します。
取消の場合は、もう一度1文字目から入力しなおすので表示されている文字は全部消してしまいます。

侵入者スプライト
侵入者があった場合に表示する文字のスプライトです。
カメラがモーションを感知して警告を鳴らしますが、その間に解除が間に合わなかっときはこのスプライトを表示します。
配置場所は背景の黄色い四角の中にします。

このスプライトは手作りします。
テキストツールで「侵入者あり」と入力するだけです。

プログラム
このスプライトもメッセージを受け取って、「表示する」か「隠す」かになります。

初期化を受け取ったとき
初期化を受けっとったとき、つまりプログラムを開始した時は表示する必要が無いので隠しておきます。

侵入を受け取ったとき
侵入者を検知した時は表示します。

解除を受け取ったとき
侵入者を検知した後に、元の状態に戻すときも「解除」を使います。
そのため、解除を受け取っても非表示にします。
(警告中や設定中に解除するときもありますが、この時はもともと非表示の状態です。)

コメント