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

高度RFID出席管理システム v2.0:Ethernet不要のソリューション

必要な部品と材料

部品数量
Arduino UNO1
ジャンパーワイヤ(汎用)1セット
RFID RC522モジュール1

必要なアプリとオンラインサービス

プロジェクト概要

第1版の「EthernetなしオンラインRFID出席管理システム」は、プログラミングスキルのないホビイストには少し複雑でした。バージョン2.0では、コーディング部分を完全に排除し、配線するだけで独自のオンライン出席管理システムを構築できるようになりました。

このバージョンでは、実用的な出席管理システムに必要なすべての機能を搭載しています。LCDディスプレイによる表示機能も追加されています。

仕組み

回路接続

高度RFID出席管理システム v2.0:Ethernet不要のソリューション

接続に迷った場合は、回路図セクションのピン接続図を参照してください。

LCD画面の接続:

RFID回路: 典型的なピン配置(MFRC522ライブラリの例に準拠)

信号Arduino UnoArduino MegaArduino Nano v3Leonardo/MicroPro Micro
RST/Reset95D9RESET/ICSP-5RST
SPI SS (SDA)1053D101010
SPI MOSI11 / ICSP-451D11ICSP-416
SPI MISO12 / ICSP-150D12ICSP-114
SPI SCK13 / ICSP-352D13ICSP-315

セットアップ手順

ステップ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);
}

回路図

詳細な接続図は画像ファイルを参照してください。

製造プロセス

  1. ローラーピン:エトルリア起源から現代の職人技へ
  2. 現代ボウリングピンの進化と職人技
  3. ソーラー暖房システム:パッシブからアクティブまで、持続可能な住宅暖房ソリューション
  4. 古代フィビュラから現代製造へ:安全ピン完全解説
  5. Primal Display:Raspberry Pi LCD温度モニターの構築
  6. Python連携で信頼性向上: Arduino RFID勤怠管理システム
  7. ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム
  8. コンベアシステム完全ガイド:仕組み、種類、導入メリット
  9. 車両サスペンションシステム徹底解剖:愛車を守り乗り心地を高めるメカニズム
  10. 2種熱電材料で能動・受動両モード冷却、CPU・バッテリー熱対策に革新
  11. エルケム・シリコーンズ、LSRセレクト発表:低温硬化とカスタム処方でサイクルタイム50%短縮