반응형
/*
RFID-RC522 - 아두이노
SDA - D10
SCK - D13
MOSI - D11
MISO - D12
IRQ - X
GND - GND
RST - D9
3.3V - 3.3V
스위치 - 아두이노
SW_IN - D7
SW_OUT - GND
피에조 부저 - 아두이노
+ - D8
- - GND
*/
#include <SPI.h>
#include <MFRC522.h>
#include <EEPROM.h>
#define SW_PIN 7
#define PIEZO_PIN 8
#define RST_PIN 9
#define SS_PIN 10
bool sw_push;
unsigned int sw_push_ms;
String saved_tag_uid, scan_tag_uid;
MFRC522 rfid(SS_PIN, RST_PIN);
void setup() {
// 초기화
Serial.begin(9600);
pinMode(SW_PIN, INPUT_PULLUP);
pinMode(PIEZO_PIN, OUTPUT);
SPI.begin();
rfid.PCD_Init();
Serial.println("초기화 완료");
// ROM에 저장된 태그 UID 읽어오기
EEPROM.get(1, saved_tag_uid);
Serial.print("등록 태그 UID : ");
Serial.println(saved_tag_uid);
}
void loop() {
// 등록된 태그 초기화 요청시(스위치 5초 이상 누르기)
if (digitalRead(SW_PIN) == LOW) {
sw_push = 1;
if (sw_push_ms == 0) sw_push_ms = millis();
}
if (digitalRead(SW_PIN) == HIGH) {
if (sw_push == 1 && millis() - sw_push_ms >= 5000) {
tone(PIEZO_PIN, 1000, 500);
saved_tag_uid = "";
EEPROM.put(1, saved_tag_uid);
Serial.println("등록 태그 초기화 완료");
}
sw_push = 0;
sw_push_ms = 0;
}
// 태그 스캔부
if (!rfid.PICC_IsNewCardPresent()) return;
if (!rfid.PICC_ReadCardSerial()) return;
else {
scan_tag_uid = "";
for (byte i = 0; i < 4; i++) {
scan_tag_uid += String(rfid.uid.uidByte[i], HEX);
}
tone(PIEZO_PIN, 1000, 100);
Serial.print(scan_tag_uid);
// 등록된 태그가 없다면 스캔된 태그 등록
if (saved_tag_uid == "") {
saved_tag_uid = scan_tag_uid;
EEPROM.put(1, saved_tag_uid);
Serial.println(" 태그가 새로 등록 되었습니다.");
} else {
// 등록된 태그와 스캔된 태그가 같다면
if (saved_tag_uid == scan_tag_uid) {
Serial.println(" 태그는 등록된 태그입니다.");
}
// 등록된 태그와 스캔된 태그가 다르다면
else {
Serial.println(" 태그는 등록되지 않은 태그입니다.");
}
}
}
delay(500);
}
지문 인식 모듈을 활용해서 만들어볼게 있었는데 모듈이 아직 배송중이라 RC522와 관련 RFID 라이브러리를 이용하여 태그 인식 예제를 하나 간단히 만들어 보았다. EEPROM을 이용한 태그 값 저장은 자매품.
전원 인가 시 초기화를 하면서 ROM에 저장되어 있는 태그 값을 시리얼 모니터로 알려주고 저장되어 있는 태그 값이 없다면 첫번째로 인식되는 태그의 값을 저장(등록)한다.
이후 스캔 때마다 등록되어 있는 태그인지 판별하고 스위치를 5초 동안 길게 누르면 등록되어 있는 태그 값을 초기화 시켜주는 예제이다.
피에조 부저까지 같이 구성 해보았다.
등록 태그를 여러 개로 만들고 싶으면 배열을 활용하면 된다.
RC522 모듈은 3cm 정도의 거리까지 태그를 인식할 수 있는 것으로 알려져 있다.
태그와 리더기 사이의 장애물이 없다면 자동차 유리 정도의 장애물은 문제없이 인식이 되는 것을 확인하였다.
반응형
'공부 > 아두이노' 카테고리의 다른 글
[아두이노] ICSP핀을 이용하여 USB잭 없이 코드 업로드(ICSP 프로그래머 부트로더 굽기) (0) | 2024.11.29 |
---|---|
[아두이노] MCP2515를 이용한 자동차 CAN 상태 값 가져오기 (0) | 2024.08.04 |
[아두이노] 풀업 풀다운 저항 회로를 이용하여 입력 신호 플로팅 현상 해결 (0) | 2023.12.14 |
[아두이노] EEPROM 라이브러리를 이용한 비휘발성 메모리 저장 (0) | 2023.12.12 |
[아두이노] PWM 라이브러리를 이용한 MG90 서보모터 제어 (0) | 2023.12.12 |