工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Python連携で信頼性向上: Arduino RFID勤怠管理システム

必要な部品と材料

部品数量備考
Arduino UNO1
RFIDリーダー RC522 (タグ付き)113.56MHz, SPI接続
ジャンパーワイヤー1式
PC (Windows/Linux/Raspberry Pi)1Python実行環境用

プロジェクト概要

RFID-RC522をArduinoで読み取り、シリアル通信でPCに送信、Pythonスクリプトがデータを受信してphpMyAdmin (MySQL) データベースに記録する勤怠管理システムです。Ethernetシールド不要で、PC接続のみで動作。Raspberry Pi接続ならポータブル運用も可能です。

使用ソフトウェア

  1. Arduino IDE: 公式サイト から最新版をダウンロード
  2. XAMPP (Windows) / LAMP (Linux): Apache + MySQL + PHP環境
    • Windows: XAMPPダウンロード
    • Ubuntu/Linux: sudo apt-get install apache2 mysql-server php libapache2-mod-php phpmyadmin
  3. Python IDLE: Python公式 からダウンロード (3.x推奨)
  4. Pythonライブラリ: pyserial (シリアル通信), mysqlclient または pymysql (DB接続)
    pip install pyserial mysqlclient
    

ハードウェア接続

Python連携で信頼性向上: Arduino RFID勤怠管理システム

RFID-RC522 – Arduino UNO 接続 (SPI)

RC522ピンArduino UNOArduino Mega
RST99
SDA (SS)10 (または4)53 (または4)
MOSI1151
MISO1250
SCK1352
VCC3.3V3.3V
GNDGNDGND
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とタイムスタンプが記録されているのが確認できます。

発展アイデア

参考資料

製造プロセス

  1. QR・RFID・体温検知統合アクセス制御システム(Raspberry Piベース)
  2. Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
  3. Raspberry Pi と Python でロボットを構築:完全ガイド
  4. ArduinoとRC522で作るセキュアなRFIDドアロック(MIFARE 13.56MHz)
  5. Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
  6. Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
  7. u-blox LEA-6H 02 GPSモジュール: Arduino & Python 統合ガイド
  8. Arduino NanoとRDA5807Mで作るコンパクトFMラジオ
  9. ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム
  10. Arduino×Python×Kerasで実現する高精度雨予報システムの構築
  11. Arduinoで作るポータブルRFIDドアロック - ステップバイステップガイド