研究室入室管理システムを作った

2020年07月20日

最近研究室の入室記録を取らなければならなくなったので、Slack連携入退室記録システム作りました。入室時と退室時に学生証タッチしたら退室時に記録用チャンネルに投稿されます。詳しくは以下の動画を参照。

こんな感じで置いています。

overview

作り始め

reason 同期くんの一言がきっかけで「気分転換に作ってみるか!」ってなりました。NFCカードリーダーが届いてから2日くらいで作った。スピーディー。

使った技術

大層なことはしていません。PythonでNFCリーダーのデータを受け取ってスピーカーで音を鳴らし、退室ならSlack botが指定したチャンネルにデータを投げるだけです。

1. ハードウェア

Raspberry PiにNFCカードリーダーであるPaSori RC-S380とスピーカーを接続したものです。Raspberry Piのケースは適当に拾ったケースを3Dプリントして使っています。

2. ソフトウェア

大まかな流れ

  • 学生証をNFCリーダーにタッチして学生番号を引っこ抜く
  • entrancesテーブルにtypeを指定してinsertする
  • 作成したentrancesのtypeがleaveならenter/leaveのセットから計算した在室時間をSlackにpostする

Pythonのスクリプトです。nfcpyというライブラリを使ってNFCリーダーを操作しています。簡単です。学生証をタッチすると学生番号が引っ張ってこれるので、学生番号と氏名やSlack IDが書かれたjsonからDB(sqlite3)に入出場情報を保存します。

そして退室の場合はSlackの指定したチャンネルにその日の入退室情報をとbotが投稿します。元気に動いています。

slack

Raspberry Piで音を出す

実は音を出すのに苦労したのでその方法をメモしておきます。/boot/firmware/usercfg.txtdtparam=audio=onと書いて保存し再起動

$ sudo amixer cset numid=3 1
$ amixer -q -D pulse sset Master 500%
$ play entrance-sound.mp3

まとめ

便利なものを作るのは楽しい。