IchigoJam+MixJuice(Wi-fiボード)+赤外線人感センサーで作る、見守りシステムのシミュレーションです。
人感センサーで人間の動きを検知して、ネットでデータを送信。Webサイトで一覧表示します。
ネットを使ったプログラミングの教材を想定しています。
★注意★ 簡単なプログラムなのでセキュリティを一切考えていません。教室を行う時だけサイトを設置して、終わったら削除や移動をするようにしてください。サイトを置きっぱなしにすると、悪意のある人にアクセスされてデータベースを破壊されたり乗っ取られたりする危険性があります。
上記の乗っ取りなどを防ぐために、教室内にサーバーPCとWi-fiルーターを置いて、ローカルネット環境で動かすことをお勧めします。
人感センサー基板
赤外線人感センサーを搭載した拡張基板です。
センサーの受光角度が広いので、黒ビニールテープでフードを付けてみました。
通常のIchigoJam/IchigoDakeのCN4ソケットにも差すことができます。
回路としては、赤外線人感センサーからの出力で、抵抗内蔵トランジスタ・DTC143ELをスイッチングしています。
IchigoJamからはボタン入力(BTN)のON/OFFとして検知できます。
今回は専用基板を作りましたが、簡単な回路なのでブレッドボードでも作れるでしょう。
- Fusion PCB用ガーバーデータ(ZIP)(97×75mm)
*同じ基板を8枚割り付けしています。
*この基板データは、CC BYライセンスとします。どうぞご利用ください。
(C) 2021 Shiro Saito (https://www.ichigojaman.jp)
準備
■MySQLのデータベース、テーブル
phpMyAdminなどを使って、見守りのデータを記録するデータベース(例「mimamori」)を新規に作ります。
その中に「mimamori」テーブルを作成して、「time」列(datetime型)、「userid」列(text型)を作ります。
あらかじめtimeとユーザーIDの内容を埋めたテーブルにしておいてください。
※人数分のデータを初期化するSQLの例
DELETE FROM `mimamori` WHERE 1; INSERT INTO `mimamori`(`time`, `userid`) VALUES ('0','UEDA01'); INSERT INTO `mimamori`(`time`, `userid`) VALUES ('0','UEDA02'); INSERT INTO `mimamori`(`time`, `userid`) VALUES ('0','UEDA03'); INSERT INTO `mimamori`(`time`, `userid`) VALUES ('0','UEDA04'); INSERT INTO `mimamori`(`time`, `userid`) VALUES ('0','UEDA05'); INSERT INTO `mimamori`(`time`, `userid`) VALUES ('0','UEDA06'); INSERT INTO `mimamori`(`time`, `userid`) VALUES ('0','UEDA07'); INSERT INTO `mimamori`(`time`, `userid`) VALUES ('0','UEDA08'); INSERT INTO `mimamori`(`time`, `userid`) VALUES ('0','UEDA09'); INSERT INTO `mimamori`(`time`, `userid`) VALUES ('0','UEDA10');
■ページの設置
www.example.jp/dir/(サイトのアドレス)内に、以下のWebページファイルを設置します。
db_login.php
ログイン情報を入れるファイルです。
dbnameはデータベース名、usernameはデータベースにアクセスするユーザー名、passwordはそのユーザーのパスワードを記述します。
<?php $db_host='localhost'; $db_database='dbname'; $db_username='username'; $db_password='password'; ?>
index.php
見守り結果の一覧表を表示するWebページです。10秒ごとに表示が自動更新されます。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>見守りシステム</title> <link rel="stylesheet" href="styles.css" type="text/css" /> <meta http-equiv="refresh" content="10; URL="> </head> <body> <h1>見守りシステム</h1> <?php // ログイン情報のインクルード include('db_login.php'); // データベースサーバーへ接続 $connection = mysqli_connect($db_host, $db_username, $db_password, $db_database); if (!$connection) { die ("DB接続エラー<br />". mysql_error()); } // === mimamoriテーブルから一覧表 === // 一覧表クエリを作成 $query = "SELECT * FROM mimamori ORDER BY userid"; // クエリを実行 $result = mysqli_query($connection, $query); if (!$result) { die ("DBクエリエラー<br />". mysql_error()); } // 結果から一覧表を表示 echo "<table>\r\n"; echo "<tr><th>ID</th><th>Time</th></tr>\r\n"; $n = 0; foreach ($result as $row) { echo "<tr><td>" . $row['userid'] . "</td><td>" . $row['time'] . "</td></tr>\r\n"; } echo "</table>\r\n"; // === 終了処理 === // データベース接続を閉じる mysqli_close($connection); ?> </body> </html>
styles.css
一覧表ページの見栄えを設定するスタイルシートです。お好みで改造してください。
html { background-color: #FFFFFF; font-family: sans-serif; } body { margin: 20px auto 10px auto; width: 920px; text-align: center; font-size: middle; line-height: 1.3em; color: #000000; } h1 { height: 40px; margin: 0px; padding-left: 10px; font-size: 18pt; line-height: 40px; color: #000000; } table { margin: 10px auto 10px auto; border-style: solid; border: 2px solid #8888ff; } th { text-align: center; font-size: 14pt; padding: 2px; border: 1px solid #8888ff; } td { font-size: 14pt; padding: 2px; border: 1px solid #8888ff; }
mimamori.php
センサー見守りのデータを受信して、データベースに書き込むWebページです。
「receive.log」にアクセスログが出力されます。もしデータベース接続エラーなどが出た場合は、このログを参照してください。
<?php // ログイン情報のインクルード include('db_login.php'); // データ受信 if (isset($_GET['ID'])) { $strParas = $_GET['ID']; $strID = $strParas; // ログファイルの相対パス $strDataFilePath = 'receive.log'; // ログファイルを追記モードでオープン $fp = fopen($strDataFilePath, "a"); // 日付、時刻を取得 date_default_timezone_set('Asia/Tokyo'); $dt = new DateTime(); $strDateTime = $dt->format('Y-m-d H:i:s'); // 受信した値をログファイルに書き込み fwrite($fp, $strDateTime . ',ID=' . $strID . "\r\n"); // データベースサーバーへ接続 $connection = mysqli_connect($db_host, $db_username, $db_password, $db_database); if (!$connection) { fwrite($fp, "DB接続エラー\r\n"); } // === mimamoriテーブルを更新 === // データ変更クエリを作成 $query = "UPDATE mimamori SET time = '$strDateTime' WHERE userid = '$strID'"; // クエリを実行 $result = mysqli_query($connection, $query); if (!$result) { fwrite($fp, "データ更新エラー\r\n"); } // === 終了処理 === // データベース接続を閉じる mysqli_close($connection); // ログファイルポインタをクローズ fclose($fp); } ?>
■ページの動作テスト
PCのブラウザで「www.example.jp/dir/index.php」を開くと、一覧表ページが表示されます。
ブラウザの別ウインドウで、書き換えページへ以下のようにアクセスすると、信号を送信したことになります。
www.example.jp/dir/mimamori.php?ID=UEDA01
「UEDA01」はユーザーIDです。
信号を送信した後、一覧表ページで受信されていることを確認してください。
教室での使い方
(1)IchigoJam+MixJuiceを動かして、Wi-fiアクセスポイントに接続します。
?”MJ APC ssid password”
ssidはWi-fiアクセスポイントのSSID、passwordはパスワードです。ちゃんと接続するまで1分ほど待ってください。
(一度接続するとその設定が記憶され、次回は入力しなくても自動接続されます)
(2)以下の送信プログラムを入力して実行します。
100 B=BTN():?B 110 WAIT 30 120 IF B=0 GOTO 100 130 ?"MJ GET www.example.jp/dir/MIMAMORI.PHP?ID=UEDA01" 140 GOTO 100
130行の「UEDA01」はユーザーIDです。それぞれのIchigoJamで別のIDにしてください。
実行すると、赤外線人感センサーの読み取り値が0.5秒ごとに表示されます。
センサーの前に手をかざすと、値が「1」になり、信号がサーバーへ送信されます。