高度RFID出席管理システム v2.0:Ethernet不要のソリューション
必要な部品と材料
| 部品 | 数量 |
|---|---|
| Arduino UNO | 1 |
| ジャンパーワイヤ(汎用) | 1セット |
| RFID RC522モジュール | 1 |
必要なアプリとオンラインサービス
- addRFIDTagsProg.zip(Windows専用)
- markAttendanceWin64.zip(Windows専用)
プロジェクト概要
第1版の「EthernetなしオンラインRFID出席管理システム」は、プログラミングスキルのないホビイストには少し複雑でした。バージョン2.0では、コーディング部分を完全に排除し、配線するだけで独自のオンライン出席管理システムを構築できるようになりました。
このバージョンでは、実用的な出席管理システムに必要なすべての機能を搭載しています。LCDディスプレイによる表示機能も追加されています。
仕組み
回路接続

接続に迷った場合は、回路図セクションのピン接続図を参照してください。
LCD画面の接続:
- ピン3 → 220Ω抵抗経由でGND
- LCD RSピン → デジタルピン A0
- LCD Enableピン → デジタルピン A1
- LCD D4ピン → デジタルピン 5
- LCD D5ピン → デジタルピン 4
- LCD D6ピン → デジタルピン 3
- LCD D7ピン → デジタルピン 2
- LCD R/Wピン → GND
- LCD VSSピン → GND
- LCD VCCピン → 5V
- 10kΩ可変抵抗:両端を+5VとGND、中間端子をLCD VOピン(ピン3)に接続
RFID回路: 典型的なピン配置(MFRC522ライブラリの例に準拠)
| 信号 | Arduino Uno | Arduino Mega | Arduino Nano v3 | Leonardo/Micro | Pro Micro |
|---|---|---|---|---|---|
| RST/Reset | 9 | 5 | D9 | RESET/ICSP-5 | RST |
| SPI SS (SDA) | 10 | 53 | D10 | 10 | 10 |
| SPI MOSI | 11 / ICSP-4 | 51 | D11 | ICSP-4 | 16 |
| SPI MISO | 12 / ICSP-1 | 50 | D12 | ICSP-1 | 14 |
| SPI SCK | 13 / ICSP-3 | 52 | D13 | ICSP-3 | 15 |
セットアップ手順
ステップ1:出席ユーザーグループの作成と検証キーの生成
以下のURLにアクセスし、出席ユーザーグループを作成して無料の検証キーを生成してください。この検証キーは大切に保管してください。
URL: https://www.parikshacrack.com/gadgetProgrammers/user_group.html
ステップ2:必要なデスクトップアプリケーションのダウンロード
ArduinoとWebアプリケーションを同期するために必要なファイルを以下からダウンロードし、解凍してください(Windows 32/64ビットに合わせて選択)。
※ 現在はWindows OSのみ対応。他のOSへの対応も開発中です。
ステップ3:ArduinoとRFIDリーダーをPCに接続
ステップ4:Arduinoコードのアップロード
コードセクションのArduinoコードをArduino IDEにコピーし、検証・アップロードしてください。
ステップ5:ユーザー登録アプリ「addRFIDTagsProg」の実行
解凍したフォルダ内の「addRFIDTagsProg」を実行します。正しく接続されていれば、ポート選択画面が表示されます。使用可能なCOMポートを選択してください。
ポート選択後、ステップ1で生成した検証キーを入力し、「Validate Key」ボタンを押します。検証成功後、ユーザー登録画面が表示されます。
ユーザー登録時は、RFIDカードをRC522にかざすとUIDが自動表示されます。ユーザー名を入力して登録ボタンを押せば完了です。登録成功メッセージが表示され、Webパネルで確認できます。
WebパネルURL: https://www.parikshacrack.com/gadgetProgrammers/index.php
ステップ6:Webアプリケーションでユーザー管理
上記URLにログインし、「Users」タブ → 「Pending User List」から、RFIDタグを従業員・学生に割り当てます。
ステップ7:出席記録アプリ「markOnlineAttendance」の実行
「markattendancewin64.zip」フォルダ内の「markOnlineAttendance」を実行します。「Status: connected」と表示されれば準備完了です。RFIDタグをリーダーにかざすと、該当ユーザーの出席が記録されます。
ステップ8:出席データの確認
Webパネルの「Attendance Controls」タブ → 「View Attendance」で、月と年を選択して「Show」ボタンを押すと、全員の出席記録が表示されます。
ソースコード
Arduinoコード
/* -------------------------------------------------------------------------------------------------------------------- * MFRC522ライブラリの例: PICCから新しいNUIDを読み取りシリアル出力 * 詳細: https://github.com/miguelbalboa/rfid * * Arduino SPIインターフェースでMFRC522ベースのRFIDリーダーからデータを読み取る例 * 回路接続は上記のピン配置表を参照 * * 出力確認: Arduino IDEのシリアルモニタ (Ctrl+Shift+M) * PICC(RFIDタグ/カード)をリーダーにかざすと、タイプとNUIDが表示される * 注: PICCを早めに離すと「Timeout in communication」メッセージが出ることがある * @license パブリックドメイン * -------------------------------------------------------------------------------------------------------------------- */ #include#include #include // LCDピン定義 const int rs = A0, en = A1, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); #define SS_PIN 10 #define RST_PIN 9 int writeVal; int greenLedPin = A2; int redLedPin = A3; int orangeLedPin = 6; int buzzerPin = A4; boolean chkConn = false; MFRC522 rfid(SS_PIN, RST_PIN); MFRC522::MIFARE_Key key; byte nuidPICC[4]; boolean isValidating = false; void setup() { Serial.begin(9600); SPI.begin(); rfid.PCD_Init(); pinMode(greenLedPin, OUTPUT); pinMode(redLedPin, OUTPUT); pinMode(buzzerPin, OUTPUT); // デフォルトキー設定 for (byte i = 0; i < 6; i++) { key.keyByte[i] = 0xFF; } lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("GadgetProgrammer"); delay(100); lcd.setCursor(0, 1); lcd.print(" Not Connected! "); establishConnection(); } void loop() { lcd.setCursor(0, 1); char retOutput; // シリアル通信からのコマンド受信 if (Serial.available() > 0) { retOutput = Serial.read(); lcd.blink(); if (retOutput == 'A') { chkConn = true; analogWrite(orangeLedPin, 0); lcd.print("Swipe Your Card!"); } if (retOutput == 'V') { analogWrite(orangeLedPin, 1000); lcd.print("Validating Group"); isValidating = true; delay(1000); } if (retOutput == 'S') { lcd.print("Validation Done!"); glowGreenLed(1000); isValidating = false; delay(1000); } } // 接続確立後、かつ検証プロセス中でない場合の処理 if (chkConn && !isValidating) { if (retOutput == '1') { lcd.print("Attendance Done!"); glowGreenLed(1000); delay(4000); } else if (retOutput == '0') { lcd.print("Network Error !"); glowRedLed(1000); delay(4000); } else if (retOutput == '2') { lcd.print("User Not Found!"); glowRedLed(1000); delay(4000); } else if (retOutput == '5') { lcd.print("Network Error!"); glowRedLed(1000); delay(4000); } lcd.setCursor(0, 1); analogWrite(orangeLedPin, 0); lcd.print("Swipe Your Card!"); } // 新しいカードの検出 if (!rfid.PICC_IsNewCardPresent()) return; // NUIDの読み取り if (!rfid.PICC_ReadCardSerial()) return; MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); // MIFARE Classicタイプのみ対応 if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { return; } // UIDを配列に格納 for (byte i = 0; i < 4; i++) { nuidPICC[i] = rfid.uid.uidByte[i]; } // UIDを16進数でシリアル出力 printHex(rfid.uid.uidByte, rfid.uid.size); Serial.println(); lcd.setCursor(0, 1); lcd.print("Reading Card...!"); // カード通信終了 rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); delay(1000); } // バイト配列を16進数でシリアル出力 void printHex(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? "0" : ""); Serial.print(buffer[i], HEX); } } // バイト配列を10進数でシリアル出力 void printDec(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? "0" : ""); Serial.print(buffer[i], DEC); } } // 緑LED点灯(成功時) void glowGreenLed(int delaytime) { digitalWrite(orangeLedPin, LOW); digitalWrite(greenLedPin, HIGH); digitalWrite(redLedPin, LOW); tone(buzzerPin, 5000, 300); if (delaytime > 0) { delay(delaytime); digitalWrite(greenLedPin, LOW); noTone(buzzerPin); } } // 赤LED点灯(エラー時) void glowRedLed(int delaytime) { digitalWrite(orangeLedPin, LOW); digitalWrite(greenLedPin, LOW); digitalWrite(redLedPin, HIGH); digitalWrite(buzzerPin, HIGH); delay(1000); tone(buzzerPin, 5000); if (delaytime > 0) { delay(delaytime); digitalWrite(redLedPin, LOW); noTone(buzzerPin); } } // オレンジLED点滅(接続待機中) void glowOrangeLed() { analogWrite(orangeLedPin, 100); delay(100); } // PCとの接続確立('A'を送信し続ける) void establishConnection() { while (Serial.available() <= 0 && !chkConn) { Serial.println("A"); glowOrangeLed(); delay(200); } } void printLcdMsg(String msg, int col, int row) { if (msg.equals("") || row < 0 || col < 0) { row = 0; col = 1; } lcd.setCursor(col, row); lcd.print(msg); }
回路図
- ArduinoとLCDのピン接続図
- ArduinoとRFIDのピン接続図
詳細な接続図は画像ファイルを参照してください。
製造プロセス
- ローラーピン:エトルリア起源から現代の職人技へ
- 現代ボウリングピンの進化と職人技
- ソーラー暖房システム:パッシブからアクティブまで、持続可能な住宅暖房ソリューション
- 古代フィビュラから現代製造へ:安全ピン完全解説
- Primal Display:Raspberry Pi LCD温度モニターの構築
- Python連携で信頼性向上: Arduino RFID勤怠管理システム
- ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム
- コンベアシステム完全ガイド:仕組み、種類、導入メリット
- 車両サスペンションシステム徹底解剖:愛車を守り乗り心地を高めるメカニズム
- 2種熱電材料で能動・受動両モード冷却、CPU・バッテリー熱対策に革新
- エルケム・シリコーンズ、LSRセレクト発表:低温硬化とカスタム処方でサイクルタイム50%短縮