오늘날 대부분의 자동차에는 열쇠가없는 입구 및 누름 버튼 점화 시스템이 함께 제공됩니다.이 시스템에서는 주머니에 열쇠를 넣고 차 문을 열려면 도어 핸들의 정전 용량 센서에 손가락을 대기만하면됩니다. 이 프로젝트에서는 RFID 및 지문 센서를 사용하여이 시스템에 몇 가지 보안 기능을 추가하고 있습니다. RFID 센서는 사용자의 라이선스를 확인하고 지문 센서는 차량에 승인 된 사람 만 허용합니다.
이 지문 기반 자동차 점화 시스템 을 위해 우리는 R305 지문 센서와 EM18 RFID 리더와 함께 Arduino를 사용 하고 있습니다.
사용 된 재료
- Arduino Nano
- R305 지문 센서
- EM18 RFID 리더
- 16 * 2 영숫자 LCD
- DC 모터
- L293D 모터 드라이버 IC
- Veroboard 또는 Breadboard (사용 가능)
- 전선 연결
- 12V DC 배터리
EM18 RFID 리더 모듈
RFID는 무선 주파수 식별을 의미합니다. 디지털 데이터를 RFID 태그로 인코딩하고 전파를 사용하여 RFID 리더로 디코딩 할 수있는 기술을 말합니다. RFID는 태그의 데이터가 장치에 의해 디코딩되는 바코드와 유사합니다. RFID 기술은 보안 시스템, 직원 출석 시스템, RFID 도어락, RFID 기반 투표기, 통행료 징수 시스템 등과 같은 다양한 애플리케이션에 사용됩니다.
EM18 Reader 는 RFID 태그에 저장된 ID 정보를 읽을 수있는 모듈입니다. RFID 태그는 태그가 리더와 함께 범위 내에 들어올 때 EM18 리더 모듈에서 디코딩 할 수있는 12 자리 고유 번호를 저장합니다. 이 모듈은 안테나가 내장 된 125kHz의 주파수에서 작동하며 5V DC 전원 공급 장치를 사용하여 작동합니다.
직렬 데이터 출력을 제공하며 범위는 8-12cm입니다. 직렬 통신 매개 변수는 8 데이터 비트, 1 정지 비트 및 9600 전송 속도입니다.
EM18 특징:
- 작동 전압: + 4.5V ~ + 5.5V DC
- 소비 전류: 50mA
- 동작 주파수: 125KHZ
- 작동 온도: 0-80 섭씨
- 통신 보드 율: 9600
- 독서 거리: 8-12 cm
- 안테나: 내장
EM18 핀아웃:
핀 설명:
VCC: 4.5-5V DC 전압 입력
GND: 접지 핀
부저: 부저 또는 LED 핀
TX: RS232 용 EM18의 직렬 데이터 송신기 핀 (출력)
SEL: RS232를 사용하려면 HIGH 여야합니다 (WEIGAND를 사용하는 경우 LOW).
데이터 0: WEIGAND 데이터 0
데이터 1: WEIGAND 데이터 1
RFID 및 태그에 대해 자세히 알아 보려면 이전 RFID 기반 프로젝트를 확인하십시오.
Arduino를 사용하여 RFID 태그 고유 12 자리 코드 찾기
Arduino 자동차 점화 시스템 용 Arduino를 프로그래밍하기 전에 먼저 12 자리 RFID 태그 고유 코드를 찾아야합니다. 앞서 논의했듯이 RFID 태그에는 12 자리 고유 코드가 포함되어 있으며 RFID 리더를 사용하여 디코딩 할 수 있습니다. 리더 근처에서 RFID 태그를 스 와이프하면 리더가 출력 직렬 포트를 통해 고유 한 코드를 제공합니다. 먼저 회로도에 따라 Arduino를 RFID 리더에 연결 한 다음 주어진 코드를 Arduino에 업로드하십시오.
정수 개수 = 0; char card_no; void setup () {Serial.begin (9600); } void loop () {if (Serial.available ()) {count = 0; while (Serial.available () && count <12) {card_no = Serial.read (); count ++; 지연 (5); } Serial.print (card_no); }}
코드를 성공적으로 업로드 한 후 직렬 모니터를 열고 전송 속도를 9600으로 설정합니다. 그런 다음 리더 근처에서 카드를 밉니다. 그러면 12 자리 코드가 직렬 모니터에 표시되기 시작합니다. 사용 된 모든 RFID 태그에 대해이 프로세스를 수행하고 향후 참조를 위해 기록해 둡니다.
회로도
이 지문 기반 점화 시스템의 회로도 는 다음과 같습니다.
제 경우에는 아래와 같이 성능 기판에 전체 회로를 납땜했습니다.
지문 센서 모듈
지문 센서 모듈 또는 지문 스캐너 는 지문 이미지를 캡처 한 다음 해당 템플릿으로 변환하여 Arduino가 선택한 ID (위치)의 메모리에 저장하는 모듈입니다. 여기서 모든 프로세스는 Arduino에서 지문 이미지를 찍고 템플릿으로 변환하고 위치를 저장하는 등의 명령을 내립니다.
이전에 동일한 R305 센서를 사용하여 투표기, 출석 시스템, 보안 시스템 등을 구축했습니다. 여기에서 모든 지문 기반 프로젝트를 확인할 수 있습니다.
센서에 지문 등록:
프로그램을 진행하기 전에 지문 센서에 필요한 라이브러리를 설치해야합니다. 여기서는 R305 지문 센서를 사용하기 위해 “ Adafruit_Fingerprint.h ”를 사용했습니다. 따라서 먼저 아래 링크를 사용하여 라이브러리를 다운로드하십시오.
- Adafruit 지문 센서 라이브러리
성공적으로 다운로드 한 후 Arduino IDE에서 파일 > 도구> 라이브러리 포함>.zip 라이브러리 추가 로 이동 한 다음 zip 파일 위치를 선택하여 라이브러리를 설치합니다.
라이브러리를 성공적으로 설치 한 후 아래 단계에 따라 센서 메모리에 새 지문을 등록하십시오.
1. Arduino IDE에서 파일 > 예 > Adafruit 지문 센서 라이브러리 > 등록으로 이동합니다.
2. Arduino에 코드를 업로드하고 9600의 전송 속도로 직렬 모니터를 엽니 다.
중요: 프로그램의 소프트웨어 직렬 핀을 SoftwareSerial mySerial (12, 11)로 변경하십시오.
3. 지문을 저장할 지문의 ID를 입력해야합니다. 첫 번째 지문이므로 왼쪽 상단 모서리에 1을 입력 한 다음 보내기 버튼을 클릭 합니다.
4. 그런 다음 지문 센서의 표시등이 깜박이면서 센서에 손가락을 대고 등록이 성공했음을 인식 할 때까지 직렬 모니터에 표시되는 단계를 따릅니다.
RFID 키리스 점화 프로그래밍
이 생체 인식 점화 시스템에 대한 전체 코드 는 자습서 끝에 제공됩니다. 여기서 우리는 코드의 몇 가지 중요한 부분을 설명합니다.
첫 번째는 필요한 모든 라이브러리를 포함하는 것입니다. 여기에서는 R305 지문 센서를 사용하기 위해 " Adafruit_Fingerprint.h "를 포함했습니다. 그런 다음 지문 센서를 연결할 직렬 포트를 구성합니다. 제 경우에는 12를 RX 핀으로, 11을 TX 핀으로 선언했습니다.
# 포함 # 포함
다음 단계에서는 코드 전체에서 사용될 모든 변수를 선언합니다. 그런 다음 Arduino를 사용하여 LCD 연결 핀을 정의한 다음 LiquidCrystal 클래스 의 개체를 선언합니다.
문자 입력; 정수 개수 = 0; int a = 0; const int rs = 6, en = 7, d4 = 2, d5 = 3, d6 = 4, d7 = 5; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
다음으로 loop () 내부에 RFID 태그의 고유 한 12 자리 코드를 가져 오는 코드가 작성되고 배열에 저장됩니다. 여기서 배열의 요소는 인증 된 사람 세부 정보를 얻기 위해 메모리에 저장된 고유 코드와 일치합니다.
카운트 = 0; while (Serial.available () && count <12) { input = Serial.read (); count ++; 지연 (5); }
그런 다음 수신 된 배열을 저장된 태그 코드와 비교합니다. 코드가 일치하면 라이센스가 유효한 것으로 간주되어 사용자가 유효한 지문을 입력 할 수 있습니다. 그렇지 않으면 유효하지 않은 라이센스가 표시됩니다.
if ((strncmp (input, "3F009590566C", 12) == 0) && (a == 0)) { lcd.setCursor (0, 0); lcd.print ("유효한 라이센스"); lcd.setCursor (0, 1); lcd.print ("환영합니다"); 지연 (1000); a = 1; 지문(); }
다음 단계에서는 이미 등록 된 지문에 대해 유효한 지문 ID를 반환 하는 함수 getFingerprintID 가 작성됩니다.
int getFingerprintID () { uint8_t p = finger.getImage (); if (p! = FINGERPRINT_OK) return -1; p = finger.image2Tz (); if (p! = FINGERPRINT_OK) return -1; p = finger.fingerFastSearch (); if (p! = FINGERPRINT_OK) return -1; return finger.fingerID; }
내부 기능 지문 () , 성공적인 RFID 경기 후라고, getFingerprintID의 기능은 유효한 지문 ID를 얻기 위해 호출된다. 그런 다음 if-else 루프 를 사용하여 인증 된 개인 데이터에 대한 정보를 가져오고 데이터가 일치하면 차량이 점화되고 그렇지 않으면 잘못된 지문을 입력하라는 메시지가 표시됩니다.
int 지문 ID = getFingerprintID (); 지연 (50); if (fingerprintID == 1) { lcd.setCursor (0, 0); lcd.print ("액세스 허가 됨"); lcd.setCursor (0, 1); lcd.print ("차량 시작됨"); digitalWrite (9, HIGH); digitalWrite (10, LOW); while (1); }
이것이 바로이 RFID 자동차 점화 시스템이 작동하는 방식으로, 자동차에 두 가지 보안 계층을 추가합니다.
전체 코드와 데모 비디오 가 아래에 제공됩니다.