ArduinoとRC522で作るセキュアなRFIDドアロック(MIFARE 13.56MHz)
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | メインマイコン |
| RFID RC522モジュール | 1 | MIFARE 13.56MHz対応 |
| TG9eサーボモーター | 1 | 錠前駆動用 |
| Adafruit NeoPixelリング(WS2812 5050 RGB LED) | 1 | ステータス表示用(1ピクセル) |
| RFIDタグ | 2 | 認証用・テスト用 |
プロジェクト概要
Arduino UNOとRFID RC522リーダーを使用し、登録済みのRFIDタグをかざすとサーボモーターが作動して錠を開ける電子ロックシステムを構築します。NeoPixel LEDで認証結果を視覚的に表示します(緑:許可、赤:拒否)。
配線図
回路図を参照してください。主な接続:
- RC522:SPI接続(SS=D10, RST=D9, MOSI=D11, MISO=D12, SCK=D13)
- サーボ:D3
- NeoPixel:A0
ソフトウェア解説
ライブラリのインクルードと初期化
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#include <Adafruit_NeoPixel.h>
#define LED_PIN A0
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(1, LED_PIN, NEO_GRB + NEO_KHZ800);
#define SERVO_PIN 3
Servo myservo;
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
セットアップ
void setup() {
Serial.begin(115200);
SPI.begin();
mfrc522.PCD_Init();
Serial.println("For more: https://geek.adachsoft.com");
Serial.println("Arduino RFID lock");
Serial.println("");
myservo.attach(SERVO_PIN);
myservo.write(0); // 施錠位置
pixels.begin();
pixels.setPixelColor(0, 32, 32, 32); // 白色で起動表示
pixels.show();
delay(500);
pixels.setPixelColor(0, 0, 0, 0);
pixels.show();
}
メインループ:UID読み取りと認証判定
void loop() {
// 新しいカードを検出
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
// UIDを文字列化(例:"77-39-50-39")
String content = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
content.concat(String(mfrc522.uid.uidByte[i], HEX));
if (i < mfrc522.uid.size - 1) content += "-";
}
content.toUpperCase();
Serial.println();
Serial.println("UID tag :'" + content + "'");
// 認証判定(ハードコードされたUIDと比較)
if (content == "77-39-50-39") {
Serial.println("Authorized access");
myservo.write(90); // 開錠
pixels.setPixelColor(0, 0, 32, 0); // 緑
pixels.show();
delay(1000);
myservo.write(0); // 再施錠
pixels.setPixelColor(0, 0, 0, 0);
pixels.show();
} else {
Serial.println("Access denied");
pixels.setPixelColor(0, 32, 0, 0); // 赤
pixels.show();
delay(500);
pixels.setPixelColor(0, 0, 0, 0);
pixels.show();
}
delay(1000);
}
改良のポイント
- 現在のコードでは許可UIDがハードコードされているため、実用時はEEPROM等に複数UIDを登録できるように拡張推奨
- サーボの駆動電流が大きい場合は外部電源を検討
- NeoPixelは1個のみ使用だが、リング全体を使った演出も可能
回路図
配線図を参照してください。
製造プロセス
- Arduinoで作るセキュアなRFIDロック – ステップバイステップガイド
- Python連携で信頼性向上: Arduino RFID勤怠管理システム
- K30 CO2センサで室内空気質をリアルタイム監視する
- 1SheeldとArduinoで盲ろう者のコミュニケーションを支援する
- スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- DFRobot静電容量式指紋センサーをArduino/ESP8266で使う – 登録・認証・削除の完全ガイド
- Arduino MegaとNextion HMIで作る高機能ウェザーステーション
- Arduinoベースのヌンチャク操作6自由度ロボットアームキット
- ハックスペース向けスマート電子チェックインシステム
- Arduino UNOとEthernetシールドで太陽放射を測定する自作ピラノメーター