タイムレコーダーを5,126円で自作して、9か月動かしています
工場のタイムレコーダーが壊れたことをきっかけに、既製品を買い直さず自作した記録。最初のウェブ画面版が使われなかった理由と、9か月運用するまでに直したことを残します。
工場のタイムレコーダーが壊れました。紙を入れると出勤時間と退勤時間が印字される、どこの工場にもあるタイプです。当然、違うのを買わないといけないのかなと思いました。
ただ、うちは日々データベースをハブにしてデータを貯めることに便利さを感じていたので、今からこの紙のアナログのものを買うのかな、と思ってしまったのです。あの紙は、印字されて終わりです。誰が何時間いたかという情報が、そこから先へ一歩も動きません。それに、技術的には作れるよねと頭の中で思いました。
壊れたその日に作ったものは、不評でした
記録を取るぐらいなら簡単だと思って、その日のうちにNode-REDとNode-REDのダッシュボードで、ウェブの勤怠画面を作りました。かかったのは1時間ほどです。出勤と退勤のボタンを押すと、Node-REDがデータベースへ書き込みます。
ところが、これが従業員さんに不評でした。理由は位置関係です。現場のパソコンは、会社の入り口の真反対側にあります。タブレットも渡してはいましたが、タブレットを持って出勤する人はいません。つまり、出勤するときと帰るときに、ボタンを押せる端末が手元にないのです。
従業員からは、面倒くさい、これは面倒くさすぎる、という意見が出ました。確かにそうだなと思って、数日間はそのままいきましたが、これはちょっと違う仕組みを作りたいなと思いました。
一度あきらめたRFIDを、もう一度
RFID、NFCには、前からすごく可能性を感じていました。実は以前にも作ったことがあります。ただ、そのときは安定性がめちゃくちゃ悪くて、すぐ読み取れなくなる。これは使い物にならないなと思って、あきらめていました。
それから、いろいろなものに詳しくなるにつれて試す引き出しが増えて、この方法だったらどうなのかな、と思う方法が出てきました。試してみると、けっこう安定して使い物になりそうでした。使った部品はこの二つです。
- M5StickC Plus(初代) 4,180円
- M5Stack用WS1850S搭載 RFID 2ユニット 946円
合わせて5,126円です。どちらも購入した当時の価格で、このモデルはすでに販売が終了しており、今は後継のモデルが出ています。NFCカードは別に買っていて、当時一枚10円ほどのものです。

ウェブ画面を取り上げるのではなく、並行して動かす形にして、従業員全員にカードを配りました。反応は、ウェブ画面のときとまったく違いました。ウェブ画面は、しんどい、という感じです。カードは、面白そう、そんなことできるの、社長こんなん作れんの、という感じでした。ピッとかざすと赤いランプが点いて、登録、と表示が出ます。すごーい、と言ってもらえました。
安定しない正体は、書き方でした
最初はM5Stack社が提供しているUIFlowで組みました。ノードをつなげていくような感じで、簡単にプログラムが作れます。ウォッチドッグを入れることもできますし、プログラムとしては本当にシンプルで、フリーズするような要素もありません。それなのに、どうも安定しないのです。
次にMicroPythonでも作りました。それでもダメでした。ESP32なのでArduinoでもやったような気がします。最終的にESP-IDFで組むことによって、飛躍的に安定するようになりました。やっていることは同じなのに、何で書くかで結果が変わる。ここに行き着くまでが長かったです。
現場で使えるようにするまでに直したこと
安定して動いても、そのままでは現場で使えません。
ひとつ目はレスポンスです。当初は、M5StickCからNode-REDへ送って、Node-REDから返ってきたときに赤いランプを点けていました。すると、かざしてからランプが点くまでにタイムラグがあります。その間はカードを当てておかないといけない。利用者からすると、認識していないのかな、と思ってずっとかざし続けることになります。これはレスポンスが悪い。そこで、M5StickCがカードを認識した瞬間に赤いランプを点けるように変えました。そのうえでNode-REDへ送り、返ってきたら登録と表示します。かざしたらすぐ離せて、登録と出たらこれでいいのだと分かります。

ふたつ目は、いちばん困った話です。すごく安定して動いていたのに、どういうわけかデータベースに登録されていない日が続いてしまいました。カードは認識していて、赤いランプも点く。でも、そこから先の書き込みが止まっていたのです。止まったことに誰も気づけない仕組みでした。
従業員の勤怠が取れていない時期ができてしまって、これは大変なことです。そこで、Node-REDから返ってきた段階で登録とするのをやめました。データベースが実際に登録できた状態でNode-REDへ返し、そこで初めて成功と出す。フィードバックを一段階増やしました。
みっつ目は再起動です。ウォッチドッグは当然入れていますが、それとは別に、誰も打刻しない深夜2時に再起動させています。長時間ずっと動かし続けるよりは、その方がいい気がしたからです。
9か月で見えるようになったこと
運用を始めたのは2025年11月12日です。そこから今日まで、トラブルは2回ぐらいです。直近では一度、凍っているわけではないのに登録できないことがありました。おそらくWi-Fiをつかめなかったのだと思いますが、そこはまだよく分かっていません。
ただ、成功にならず失敗と出るので、従業員が、これ登録失敗になります、と言ってくれます。そのときは電源を切って入れ直せば、そのまま使えます。止まらないことより、止まったと分かることのほうが大事でした。
データのほうでは、いま会社に何人いるかが確実に分かるようになりました。17時の定時で帰る人もいれば、2時間残業して19時に帰る人もいます。その人数が正しく分かるので、会社全体のショット数と売上と時間チャージが、ダッシュボードに絶えず表示されるようになりました。今日は良くなかったな、ということが数字で直感的に分かります。ただ、大きな経営判断まで持っていくには、まだデータが足りない状態だと思っています。
労働時間のほうは、昔は紙から残業何時間と計算していたものが、いまは瞬時に出ます。給与計算そのものは給与計算ソフトの仕事なので、そこへ渡すだけです。月末に紙を変える必要もなくなりました。紙変わってませんよ、とよく言われたのですが、それも言われなくなりました。
設備が壊れると、たいていは同じものを買い直します。それがいちばん早いからです。ただ、壊れたときというのは、その設備が何をしていたのかを立ち止まって考えられる、めったにないタイミングでもあります。
その機械は、何のデータを生んでいますか。そして、そのデータはどこかへつながっていますか。うちの場合、答えは、印字して終わり、でした。だから作り直しました。