Raspberry Pi と NFC タグを用いた 出席確認の自動化と高速化

平成 27 年度
卒業研究中間レポート
Raspberry Pi と NFC タグを用いた
出席確認の自動化と高速化
目次
1. 研究の目的と背景
1.1. Raspberry Pi
1.1.1. GPIO
1.1.2. Raspberry Pi Camera Board
1.2. NFC
1.2.1. NFC タグ
2. プログラム
2.1. Python
2.1.1. nfcpi
2.2. MySQL
2.3. PHP
3. 研究経過
4. 研究計画
5. 役割分担
6. 今後の課題
1
1.研究の背景と目的
小学校,中学校,高等学校における授業の出欠の確認は,欠席者が黒板に書かれている,代表
の者が担当教員に伝える,教員が学生の座席表を使い空席の確認をするなどして行われることが
多く学生の出欠確認に掛かる時間は僅かである.しかし大学では講義を受ける人数も多く,学生
によって履修している講義も人によって異なる為,学生の出欠確認が非常に難しい状況となって
いる.教員によって出欠確認の方法は変わり,一人一人点呼し確認,講義の終わりに出すレポー
トで確認,名簿を回し学生が署名する,PC を使う授業であれば PC のログイン状況で確認すると
多岐にわたる.これらの従来の方法では時間が掛かる上,出席している学生が欠席している他の
学生の分も出席した事とする行為や,教員が出欠状況を PC に打ち込む時に入力ミスを起こし出席
していたはずの生徒が欠席扱いになる等の問題がある.
これらの問題を解決する方法として出欠の確認の高速化と授業後に教員が手入力する時に発生
するミスを解決する為に Raspberry Pi による自動化を行い,学生の判別には NFC タグを用いて,
学生が他の学生の分も出席するのを防ぐ為にカメラで撮影すると言う方法を用いる.
1.1 .Raspberry Pi とは
Raspberry Pi とはイギリスの Raspberry Pi 財団が開発したシングルボードコンピュータであ
る.価格は£30.00 で販売されており日本では 5000 円前後で入手することが可能.
サイズは本体のサイズが 86 x 56 x 20 mm ほどと小さい.メモリは 1GB 有り C ドライブとして SD
カードを使用する.
私が Raspberry Pi を使用することに決めた理由として上記に示したように本体価格が安く小型
で電源の供給はモバイルブースターから可能なので置く場所が限定されにくいので設置の為に工
事をすると言った手間が必要なく導入コストが低いと言う点と,Raspberry Pi には GPIO ピンが
付いており様々な物をそこに繋げる事が可能だと言う点で選んだ.
図 1 Raspberry Pi 2 Model B[1]
1.1.1. GPIO
GPIO は General Purpose Input/Output の略語であり,GPIO に接続した他の機器から読み取るこ
とと,他の機器に制御信号を送ることが出来る.接続した機器には 5V か 2V の電圧を供給するこ
とが可能.
2
1.1.2. Raspberry Pi Camera Board
学生を識別する為にカメラで写真を撮るがその時に使用するカメラとして Raspberry Pi Camera
Board を使用する.このカメラは 3000 円前後で購入することが出来るが,この価格よりも安い WEB
カメラは存在するが何故このカメラを選んだかと言うと,Raspberry Pi 本体にカメラシリアルフ
ェイスポートが有る,そこに接続することが出来るのでプログラムでの操作が容易になるという
点とこのカメラが小さく軽いと言う点から使用する.
図 2 Raspberry Pi Camera Board 1[2]
1.2.NFC とは
NFC とは「Near Field Communication」の略称でありソニーとフィリップス(現 NXP セミコン
ダクターズ)が共同開発した近距離無線通信技術である.10cm 以内であれば非接触で通信を行う
ことが出来る.
1.2.1.NFC タグ
NFC タグとは 1.2 で説明した通信技術を用いて様々な機器と通信することができるタグである.
何故 NFC タグを採用する理由として,学生個人を識別する方法としてキーボードから ID と PASS
を入力する方法だと入力に時間がかかるうえ入力ミスを起こす可能性があり,さらに時間が掛か
る可能性があり,これでは出欠確認の自動化ができても高速化ができないと言う理由から,NFC
タグを使用することにした.NFC タグだと事前に学生のデータを入力する必要が有るが,入力ミ
スを起こすことなくタッチするだけで出欠確認を行うことが出来る.それに加え NFC タグは電源
を必要とせず,薄く,多少 NFC タグを曲げても問題が無く機能すると言う点から携帯電話や学生
証等に付けることが出来るので持ち運びが簡単である.
3
2.プログラム
現在の状況(読み込み準備が出来た,読み込みが完了した等)を表す方法を最初画面に文字だけ
表示される I2C 接続小型 LCD モジュールを使用するか TFT モジュールを使用するか,LED 等の光
で表現するかを考えていた.I2C 接続小型 LCD モジュールは文字だけを表示できるが文字だとそ
の表示された文字を読む必要が有るので学生が文字をきちんと読む為に止まるなどして出欠確認
の高速化という点では,少し厳しいと考えた,次に TFT モジュールの場合はカラーの液晶ディス
プレイで普通のディスプレイとして使用でき色で状況を表現したり「○」や「×」と言った図が
表示できるので特に高速化と言う面では問題は無いがカラーモニタの為に多くの電源が必要とな
り,使用するのを止めた.そこで最後に残った LED では有るが LED の色を変えることによって一
目で状況が分かり,電力の使用量は少ないので状況を表現する方法として LED を採用した.
図 3 I2C 接続小型 LCD モジュール[3]
図 4 TFT モジュール [4]
PHP で NFC タグを読み込み,写真を撮る Python で書かれたプログラムを呼び出す.この時使用
する PHP の命令は「exec」と言う物を使いこれは外部のプログラムを使用しそのプログラムの出
力結果を行ごとに配列に格納する.
呼び出された Python のプログラムは NFC タグの読み取り準備が出来ると緑色の LED を光らせる.
次に NFC タグが NFC リーダーの読み取り可能範囲に近づくと緑色の LED を消し,読み取りが失敗
したときは赤色 LED を点灯させ再び読み取り準備が出来ると赤色 LED を消し緑色 LED を光らせ読
み取り準備が出来たことを知らせる.読み取りに成功したときはカメラで写真を撮り青色 LED を
光らせ 2 秒後青色 LED を消し NFC タグから読み取った学生の情報をこのプログラムを呼び出した
PHP のプログラムに返す.Python で書かれたプログラムから受け取った情報に基づいてデータベ
ースを参照し今日の日付と時間と写真を保存する.その後再び NFC タグを読み込み,写真を撮る
4
このプログラムの一部を以下にフローチャートとして表記する.
PHP から Python で書かれた
プログラムを開始させる
赤色 LED 消灯
NFC タグの読み込み準備
赤色 LED 点灯
No
読み込み
成功
Yes
緑色 LED 点灯
青色 LED 点灯
NFC タグから
学生データの読み込
み
学生の写真を撮る
緑色 LED 消灯
青色 LED 点灯
PHP のプログラムに
学生のデータを出力
受け取ったデータ
学生の写真・時刻を
データベースに保存
5
2.1.Python
Python とは
Python ソフトウェア財団が管理しているコンパイルを必要としないスクリプト
言語.今回は NFC タグからのデータの読み込みと言う中心的なプログラムを Python で作った,他
の言語の候補として Ruby,PHP が有った.では何故 Python を選んだかと言うと,Python を含めど
の言語も素のままでは,NFC タグからデータを読み込むことが出来ず,モジュールやライブラリ
と言った物を導入する必要が有った.しかし,NFC タグを読み込む為のライブラリを PHP は見つ
けることが出来なかった,Ruby は windows 用のライブラリしか見つけることができなかったので
Python で作成していくこととした.Python では NFC タグの読み込み以外にカメラでの撮影と LED
の制御を行う.
2.1.1.nfcpy
Python で NFC タグからデータを読み取る為に必要なモジュール.
2.2.MySQL
MySQL とは,オープンソースで公開されている,リレーショナルデータベース管理システム.
オープンソースなので無償で利用することが可能.
今回学生のデータと顔写真を保存するのにデータベースを用いるが主要なデータベースの中で
は使用率が 2 番目で無償のデータベースでは 1 番目である MySQL を使用することにした.
表 1 DB-Engines Ranking [5]
2.3.PHP
PHP とはオープンソースのスクリプト言語である.
当初データベースは MySQL を使用し,その他はすべて Python で作成する予定だったが,Python
から MySQL を扱うにはモジュールが必要だがそのモジュールは複数存在するが全ての最終リリー
ス日が 2012 年で停止していた.Raspberry Pi に導入した MySQL と Python の最終リリース日はど
ちらも 2012 年よりも最近だった.そこで MySQL にデータを保存するのにモジュール等が必要の無
い PHP を使用することにした.この「Raspberry Pi と NFC タグを用いた出席確認の自動化と高速
化」とは別に集めた情報を管理する教員用のページも作成予定なのでそれを作る際には PHP をメ
インにして制作をしていく予定.
6
3.研究経過
研究テーマは Raspberry Pi を使って何かしたいと言う所から考え始めた.
何故 Raspberry Pi で
何か研究をしようと思ったかは,1.1.で書いてある通り Raspberry Pi には GPIO ピンが付いてお
り,そこに LED・サーボモーター・赤外線センサと言った様々な物をつけることが出来るのでそ
れらを使った何か面白い研究が出来るのではないかと思い Raspberry Pi を研究の題材とすること
とした.Raspberry Pi の OS は Linux をベースとした Raspbian と言う独自の OS が Raspberry Pi
財団が配布している.この OS は GUI を搭載されているがファイルの削除やソフトウェアのアップ
デート等をコマンドラインで行う必要が有り,普段 Windows OS を使っているのでコマンドライン
による操作が難しく慣れるまでに時間が掛かった.Raspberry Pi をインターネットに接続する時
に学内無線 LAN なら特に設定はいらないが学籍番号とパスワードを入力する必要が有り,毎回
Raspberry Pi を起動する度に必要で 30 分ネットワークにアクセスが無ければ接続が切れるので
再度学籍番号とパスワードを入力する必要が有った.研究室の無線 LAN はそういった入力の必要
は無かったがプロキシサーバーを経由する為 Raspberry Pi にプロキシの設定をする必要が有った
が中々プロキシの設定の仕方が分からなかった.最初は Raspberry Pi のプロキシの設定の仕方を
検索していたが中々見つからず Raspberry Pi と言うくくりではなく,Linux のプロキシ設定で検
索すると見つけることが出来た.しかし全てがこの方法ではではダメで一部ソフトウェアが
Raspberry Pi 用にカスタマイズされているのが有り日本語のサイトの情報だけでは無理で英語の
サイトやフォーラムを見ながら解決していった.LED や各種センサ等を GPIO ピンに繋いで制御す
る時に,LED やセンサを GPIO ピンに繋ぐだけでは動作しない,なので間に抵抗を設置する必要が
あり,センサによって抵抗を変える必要があり,どの抵抗が必要か等を考える為には知識がまっ
たく無く苦労した.しかし Linux の使い方,GPIO ピンの使い方がある程度分かっているので後は
プログラミング言語の学習をやっている.
4.研究計画
4月
5月
6月
7月
8月
9月
10 月
11 月
12 月
1月
2月
研究テーマを考える
HTML・CSS・JavaScript の学習
Linux の学習
Python の学習
Linux の学習
GPIO ピンの学習
Python の学習
PHP の学習
MySQL の学習
出席確認の自動化システムの見直し
出席確認の自動化システムの作成
出席確認の自動化システムの完成
出席確認の自動化システムを実際(研究室内)に使用してみて改善点を見つける
改善点を踏まえての出席確認の自動化システムの見直し.
出席確認の自動化システムの完成
管理者用のページ作成
設置方法,設置する時の箱等の検討
卒業論文作成
卒業論文作成
卒業研究発表用資料の作成
卒業研究発表の練習.
7
5.役割分担
共同研究では無いが同じ Raspberry Pi を使用している学生と分からないところ教えあっていく.
ランチミーティングの際に様々な IT 関係にこだわらず自分が面白いと思った技術や情報を発表
していく.
6.今後の課題
研究の内容はしっかりと決めているのでプログラミングの面や出欠確認をより早くできるよう
に見直す.ソフト面が完成後にどのように設置すれば学生の顔がよく写真に取れるか,とった学
生の顔写真を個人の認識だけに使うのではなく,何か他のことにも使うことが出来ないのかを考
える.Raspberry Pi には専用のケースが有るがそれでは LED や NFC タグリーダーと言った物を付
けるところが無く新しくケース等を考える必要がある.
8
参考
 Raspberry Pi 2 Model B(RS コンポーネンツ製) - スイッチサイエンス
https://www.switch-science.com/catalog/2127/
(2015/07/31 アクセス)
 Raspberry Pi 2 Model B - Raspberry Pi Swag
http://swag.raspberrypi.org/collections/frontpage/products/raspberry-pi-2-model-b
(2015/07/31 アクセス)
 マイコン活用基礎:周辺機能を学ぼうー(1)GPIO _ ルネサス エレクトロニクス
http://japan.renesas.com/edge_ol/engineer/16/index.jsp
(2015/07/31 アクセス)
 IT 用語辞典”PHP”
http://e-words.jp/w/PHP.html
(2015/07/31 アクセス)
 IT 用語辞典”MySQL”
http://e-words.jp/w/MySQL.html
(2015/07/31 アクセス)
 IT 用語辞典”Python”
http://e-words.jp/w/Python.html
(2015/07/31 アクセス)
 Python の MySQL ドライバはどれを利用すれば良いのか
http://www.sakito.com/2012/10/python-mysql.html
(2015/07/31 アクセス)
引用
1. Raspberry Pi 2 Model B - Raspberry Pi Swag
http://swag.raspberrypi.org/collections/frontpage/products/raspberry-pi-2-model-b
(2015/07/31 アクセス)
2. Raspberry Pi Camera Board - スイッチサイエンス
https://www.switch-science.com/catalog/1432/
(2015/07/31 アクセス)
3. I2C controlled 8×2LCD Breakout for Raspberry Pi - スイッチサイエンス
https://www.switch-science.com/catalog/1516/
(2015/07/31 アクセス)
4. Raspberry Pi 用 2.2 インチ TFT モニタ特別セット-Physical Computing Lab (Standard)
http://www.amazon.co.jp/Raspberry-Pi%E7%94%A82-2%E3%82%A4%E3%83%B3%E3%83%81%E3%80%
80TFT%E3%83%A2%E3%83%8B%E3%82%BF%E7%89%B9%E5%88%A5%E3%82%BB%E3%83%83%E3%83%88-Phys
ical-Computing-Lab-Standard/dp/B00RHAMWX4/ref=sr_1_6?s=computers&ie=UTF8&qid=14382
30026&sr=1-6&keywords=TFT%E3%83%A2%E3%83%8B%E3%82%BF
(2015/07/31 アクセス)
5. DB-Engines Ranking - Trend Popularity
http://db-engines.com/en/ranking_trend
(2015/07/31 アクセス)
9