Raspberry Pi とNFCタグリーダを使い勤怠管理。出退勤打刻装置を作成(第2回:NG処理とwav音源再生処理の追加)


はじめに

前回の、「第1回:まずは完成させる」を改良したので、その変更点をまとめました。

改良箇所

① OK時とNG時にそれぞれ異なったWAV音源を鳴らすようにしました。

打刻した際に圧電ブザーを鳴らしていたものを改良しました。
wav音源の再生はRaspberry Pi zero では簡単にできないので簡単に実現できる Raspberry Pi 2を使用しました。
aplayコマンドを使用しています。

② OK時とNG時に専用のLEDを点灯するようにしました。

よりわかりやすくするためOK時にはグリーン、NG時にレッドのLEDが点灯するようにしました。
OKはGPIO_04、NGはGPIO_27を使用。

③ ヘルスチェックを追加してシステムが異常時の検知ができるようにしました。

インターネットに接続しているかどうかと、処理プロセスが実行しているかのヘルスチェックを追加しました。
異常の場合はNG(ALM)用のレッドLEDが点灯します

インターネットへのヘルスチェックはgethostbyname()を使用しています。
メインループ中では実施間隔は以下のように調整しています。

    for (;;) {
        usleep(100000);    //100ms

        nLoopCnt++;
        if(nLoopCnt>50){
            if(gethostbyname("yahoo.co.jp") == 0){  //インターネット接続しているか
                digitalWrite(GPIO_04, HIGH);    //ALM(発生)
            }
            else{
                digitalWrite(GPIO_04, LOW);    //ALM
            }
            nLoopCnt=0;
        }
       .
       .
       .
    }

プロセスのチェックは
毎分のcron で以下の処理を実施しています

#! /bin/bash
line=`/bin/ps -elf | /bin/grep  tact | /bin/grep -v grep | /bin/grep -v chkProsess.sh | /usr/bin/wc -l`
if [ $line -ne 2 ]; then
    echo 2 > /tmp/alm.tmp
fi

処理構成

打刻装置回路図

コード(GitHub)

使用してみて

一か月ほど使用していますが、特に不具合なく動作しています。
何回かプロセスが止まっていてALMのLED点灯しましたが、電源OFF/ONにて復旧することができるので想定内です。

次にやること

外部のUSBスピーカから音を出しているので、配線を含めごちゃごちゃしていて醜いのでどうにかしたいです。
小型のアンプ+スピーカを使い筐体内に収めるとか、bluetoothスピーカへ飛ばすとかを考えています。
利用者の使い勝手を向上させるために切り替えスイッチを廃止することも考えています。(例えばNFSリーダを4つ用意するとか)

続きはここ

第3回:オーディオアンプ+スピーカを含め筐体内に実装