クラウド連携・指紋認証Arduino勤怠管理システムの構築
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Mega 2560 R3 | 1 | メインマイコン(ピン数多め) |
| ElectroPeak R301T指紋センサー | 1 | 指紋認証用 |
| ElectroPeak Micro SD TFカードアダプター | 1 | ローカルログ保存用 |
| ElectroPeak DS3231 I2C RTCモジュール | 1 | 高精度リアルタイムクロック |
| ElectroPeak 3.5インチ TFTカラーLCDシールド | 1 | 表示・タッチ操作用 |
| ElectroPeak NodeMCU ESP8266 ESP-12E | 1 | Wi-Fi通信・クラウドアップロード用 |
| ElectroPeak オス-メス ジャンパーワイヤー | 1セット | 配線用 |
必要な工具
- レーザーカッター(筐体製作用)
- はんだごて
使用アプリ・オンラインサービス
- Arduino IDE
プロジェクト概要
IoTデバイスの理解が必須となる今日、指紋認証による勤怠管理デバイスをArduinoで構築します。出退勤記録をSDカードに保存し、インターネット接続時にThingSpeakクラウドプラットフォームへ自動アップロード。CSV等の形式でデータをダウンロード可能です。
学べること
- 指紋センサーの扱い方
- NodeMCUを用いたThingSpeakへのデータアップロード
- 指紋センサーとArduinoによる勤怠システムの構築
ThingSpeakとは
IoTプラットフォームの一つで、ライブデータをクラウドで収集・可視化・分析できます。無料アカウントで利用開始可能。

ThingSpeak連携・データアップロード手順
- ThingSpeak.comでアカウント作成
- ログイン後、「My Channels」→「New Channel」でチャネル作成
- フィールド名を設定(日付、名前、出勤、退勤、労働時間等)
- 「API Keys」タブから「Channel ID」と「Write API Key」を控える
- Arduino IDEでThingSpeakライブラリをインストール
- サンプル「WriteMultipleFields」を開き、SSID、パスワード、Channel ID、Write API Keyを設定





注意:ThingSpeakへのデータ送信は最低15秒間隔を空ける必要があります。

勤怠管理システムの構築
指紋認証で出退勤を記録し、日付・氏名・出勤時刻・退勤時刻・労働時間をSDカードに保存。指定時刻にThingSpeakへアップロード。ネット未接続時はデータを保持し、接続復帰時に送信。EEPROMに保存するため停電時もデータ消失なし。
回路図

全モジュール接続後、LCDシールドをArduino Megaに装着します。
Tip:LCDシールドで隠れるピンは、基板裏から配線を引き出して対応可能。
必要ライブラリ
- Adafruit-Fingerprint-Sensor-Library
- Adafruit-GFX-Library
- MCUFRIEND_kbv(TFT LCD用)
- RTClib(RTC用)
メインスケッチ(11名分のデフォルト名登録済み、変更可能)とNodeMCU用アップロードスケッチは添付ファイルからダウンロード可能。
NodeMCU アップロード用コード
#include "ThingSpeak.h"
#include
char ssid[] = "YOUR SSID";
char pass[] = "SSID PASSWORD";
WiFiClient client;
unsigned long myChannelNumber = YOUR CHANNEL ID;
const char * myWriteAPIKey = "YOUR CHANNEL WRITE API KEY";
String Final = "", Date = "", Enter = "", Exit = "", Name = "", WT = "";
void String_Analyze(String input) {
int index1 = input.indexOf('*', 0);
int index2 = input.indexOf('*', index1 + 1);
int index3 = input.indexOf('*', index2 + 1);
int index4 = input.lastIndexOf('*');
Name = input; Date = input; Enter = input; Exit = input; WT = input;
Name.remove(index1);
Date.remove(index2); Date.remove(0, index1 + 1);
Enter.remove(index3); Enter.remove(0, index2 + 1);
Exit.remove(index4); Exit.remove(0, index3 + 1);
WT.remove(0, index4 + 1);
}
void Get_String() {
while (Serial.available()) {
Final = Serial.readString();
}
}
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass);
Serial.print("0"); delay(5000);
}
}
digitalWrite(LED_BUILTIN, LOW);
Get_String();
String_Analyze(Final);
if (!Final.equals("")) {
ThingSpeak.setField(1, Date);
ThingSpeak.setField(2, Name);
ThingSpeak.setField(3, Enter);
ThingSpeak.setField(4, Exit);
ThingSpeak.setField(5, WT);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x == 200) { delay(100); Serial.print("1"); }
else { delay(100); Serial.print("0"); }
delay(17000);
Final = "";
}
}
String_Analyze()関数で「日付*名前*出勤*退勤*労働時間」形式の文字列を分解し、ThingSpeakの各フィールドに格納。アップロード成功なら「1」、失敗なら「0」をArduinoへ返却。
筐体の組み立て
アクリル板やプラスチック板をレーザーカットで加工し、電子部品を収納。カットデータ(DWG形式)は添付ファイルからダウンロード可能。

組み立て後、12Vアダプターを接続するだけで動作開始します。
今後の拡張アイデア
- LCDにアイコンを追加して視認性向上
- RFIDカード認証オプションの追加
- ThingSpeak代わりにGoogleスプレッドシートへ直接書き込み
添付ファイル
- electropeak_attendance_code_q4bsYBzou5.zip(Arduino/NodeMCUスケッチ)
- attendanceboxlasercut_ryMUOo5d7h.dwg(筐体レーザーカットデータ)
製造プロセス
- クラウド×IoTの力を解き放つ:シームレスな接続とデータインサイトの実現
- DVDプレーヤー:歴史、技術、そして未来の革新
- Python連携で信頼性向上: Arduino RFID勤怠管理システム
- ArduinoとInfineon 3D磁気センサーで作る無線磁気データ転送
- SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム
- Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
- DFRobot静電容量式指紋センサーをArduino/ESP8266で使う – 登録・認証・削除の完全ガイド
- ESP32で作るIoT環境モニター:温湿度・気圧・CO2をWebダッシュボードで可視化
- スマート地下室換気システム:Arduinoで湿度制御
- ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム
- モダンビジネスにおけるクラウドストレージの10大メリット