Python連携で信頼性向上: Arduino RFID勤怠管理システム
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | |
| RFIDリーダー RC522 (タグ付き) | 1 | 13.56MHz, SPI接続 |
| ジャンパーワイヤー | 1式 | |
| PC (Windows/Linux/Raspberry Pi) | 1 | Python実行環境用 |
プロジェクト概要
RFID-RC522をArduinoで読み取り、シリアル通信でPCに送信、Pythonスクリプトがデータを受信してphpMyAdmin (MySQL) データベースに記録する勤怠管理システムです。Ethernetシールド不要で、PC接続のみで動作。Raspberry Pi接続ならポータブル運用も可能です。
使用ソフトウェア
- Arduino IDE: 公式サイト から最新版をダウンロード
- XAMPP (Windows) / LAMP (Linux): Apache + MySQL + PHP環境
- Windows: XAMPPダウンロード
- Ubuntu/Linux:
sudo apt-get install apache2 mysql-server php libapache2-mod-php phpmyadmin
- Python IDLE: Python公式 からダウンロード (3.x推奨)
- Pythonライブラリ:
pyserial(シリアル通信),mysqlclientまたはpymysql(DB接続)pip install pyserial mysqlclient
ハードウェア接続

RFID-RC522 – Arduino UNO 接続 (SPI)
| RC522ピン | Arduino UNO | Arduino Mega |
|---|---|---|
| RST | 9 | 9 |
| SDA (SS) | 10 (または4) | 53 (または4) |
| MOSI | 11 | 51 |
| MISO | 12 | 50 |
| SCK | 13 | 52 |
| VCC | 3.3V | 3.3V |
| GND | GND | GND |
| IRQ | 未接続 | 未接続 |
⚠️ VCCは必ず3.3Vに接続してください。5V接続で破損します。
必要なArduinoライブラリ
MFRC522ライブラリ (GitHub: miguelbalboa/rfid) をArduino IDEのライブラリマネージャーからインストール。
システム構成図
[RFIDタグ] → [RC522] → [Arduino UNO] --USB/Serial--> [PC/Raspberry Pi] --Python--> [MySQL/phpMyAdmin]
Arduinoスケッチ (概要)
#include
#include
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
Serial.println("RFID Attendance System Ready");
}
void loop() {
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
// UIDを16進数文字列としてシリアル出力
String uidStr = "";
for (byte i = 0; i < rfid.uid.size; i++) {
uidStr += String(rfid.uid.uidByte[i] < 0x10 ? "0" : "");
uidStr += String(rfid.uid.uidByte[i], HEX);
}
uidStr.toUpperCase();
Serial.println(uidStr); // Python側でこの行を読み取り
rfid.PICC_HaltA();
delay(1000); // 重複読み取り防止
}
}
Pythonスクリプト (概要)
import serial
import mysql.connector
from datetime import datetime
# シリアルポート設定 (環境に合わせて変更)
ser = serial.Serial(port='COM3', baudrate=9600, timeout=1) # Windows: COM3, Linux: /dev/ttyUSB0
# MySQL接続
db = mysql.connector.connect(
host="localhost",
user="root",
password="",
database="attendance_db"
)
cursor = db.cursor()
# テーブル作成 (初回のみ)
cursor.execute("""
CREATE TABLE IF NOT EXISTS attendance (
id INT AUTO_INCREMENT PRIMARY KEY,
uid VARCHAR(20) NOT NULL,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
)
""")
print("Listening for RFID tags...")
while True:
if ser.in_waiting > 0:
line = ser.readline().decode('utf-8').strip()
if line: # UID受信
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
sql = "INSERT INTO attendance (uid, timestamp) VALUES (%s, %s)"
cursor.execute(sql, (line, timestamp))
db.commit()
print(f"Recorded: {line} at {timestamp}")
データベース確認
ブラウザで https://localhost/phpmyadmin にアクセスし、attendance_db データベースの attendance テーブルを開くと、タグIDとタイムスタンプが記録されているのが確認できます。
発展アイデア
- ユーザー名とUIDを紐付けるマスターテーブル追加
- 入室/退室の種別判定 (最後の記録からトグル)
- Webダッシュボードでリアルタイム表示 (PHP/Chart.js等)
- Raspberry Pi + バッテリーで完全ポータブル化
- ブザー/LEDで読み取り成功をフィードバック
参考資料
- 完全なソースコード: GitHubリポジトリ
- 詳細解説動画: プロジェクトページの動画を参照
- Facebookページ: Embedotronics Technologies
製造プロセス
- QR・RFID・体温検知統合アクセス制御システム(Raspberry Piベース)
- Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
- Raspberry Pi と Python でロボットを構築:完全ガイド
- ArduinoとRC522で作るセキュアなRFIDドアロック(MIFARE 13.56MHz)
- Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- u-blox LEA-6H 02 GPSモジュール: Arduino & Python 統合ガイド
- Arduino NanoとRDA5807Mで作るコンパクトFMラジオ
- ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム
- Arduino×Python×Kerasで実現する高精度雨予報システムの構築
- Arduinoで作るポータブルRFIDドアロック - ステップバイステップガイド