Tác giả: Thợ điện vô duyên - Phạm minh liêm
Hé lô anh em, Vô Duyên lại lên đây!
Bữa nay anh em mình lại tỉ tê chuyện nghề ha.
Anh em muốn tui viết bài thứ mười sáu trong chuyên mục "Vô Duyên - Hỏi Đáp Về Smart Home" với chủ đề "Tự học vi điều khiển" đúng không?
Vụ này thì tui khoái nè, vì nó là cái "cần câu cơm" của tui mà.
Ở mấy bài trước, anh em mình đã biết cách điều khiển các thiết bị từ xa bằng remote.
Giờ mình học một cái hay ho nữa, đó là cách làm một cái khóa cửa thông minh.
Cái này giống như anh em mình có thể mở cửa chỉ bằng một cái thẻ từ hoặc một cái móc khóa mà không cần dùng chìa khóa cơ.
Thôi, không nói nhiều nữa, anh em mình bắt đầu thôi.
Bài 16: Sử dụng Module RFID để làm khóa cửa thông minh
1. Module RFID là gì?
Nói thẳng luôn, RFID (Radio-Frequency Identification) giống như một cái hệ thống nhận dạng không dây vậy đó.
Nó gồm hai phần chính:
Mắt đọc (Reader):
- Chính là cái Module RC522.
- Nó có nhiệm vụ phát ra sóng radio để đọc mã số từ cái thẻ.
Thẻ (Tag):
- Chính là cái thẻ từ hoặc cái móc khóa nhỏ nhỏ mà anh em mình hay thấy ở mấy bãi giữ xe, chung cư.
- Bên trong nó có một con chip nhỏ và một cái ăng-ten, lưu trữ một cái mã số riêng, không giống ai.
👉Khi anh em mình đưa cái thẻ lại gần cái mắt đọc, nó sẽ đọc cái mã số đó và gửi về cho thằng Arduino xử lý.
2. Chuẩn bị "đồ nghề"
Để làm bài này, anh em mình cần có:
- Một bo Arduino Uno.
- Một cái Module RFID-RC522 kèm theo một cái thẻ và một cái móc khóa.
- Một cái đèn LED và một điện trở 220 Ohm (để làm đèn báo).
- Vài sợi dây nối.
3. Đấu dây (Mạch điện)
Nói thiệt, cái này quan trọng lắm, anh em làm theo cho kỹ.
Module RC522 có 8 chân, anh em phải nối cho đúng nha.
- Chân 3.3V:
- Nối vào chân 3.3V của Arduino.
- Chân RST:
- Nối vào chân 9 của Arduino.
- Chân GND:
- Nối vào chân GND của Arduino.
- Chân IRQ:
- Để trống.
- Chân MISO:
- Nối vào chân 12 của Arduino.
- Chân MOSI:
- Nối vào chân 11 của Arduino.
- Chân SCK:
- Nối vào chân 13 của Arduino.
- Chân SDA:
- Nối vào chân 10 của Arduino.
Ngoài ra, anh em mình nối thêm cái đèn LED vào chân số 7, để mình thử nghiệm cho dễ.
4. Lập trình và giải thích
Để thằng Arduino nó đọc được thẻ, anh em mình phải cài thêm cái "từ điển" cho nó.
Cái "từ điển" này trong lập trình gọi là thư viện (library).
Bước 1: Cài đặt thư viện.
- Anh em mở Arduino IDE, vào Sketch -\> Include Library -\> Manage Libraries...
- Gõ "MFRC522" vào ô tìm kiếm,
- rồi tìm thư viện tên là "MFRC522 by GithubCommunity".
- Bấm "Install" để cài đặt.
Bước 2: Tìm mã số của thẻ.
- Mỗi cái thẻ có một cái mã số riêng, gọi là UID (Unique ID).
- Anh em phải tìm ra cái mã đó thì mới lập trình được.
- Anh em copy đoạn code dưới đây vào, rồi nạp vào bo Arduino.
- Sau đó mở Serial Monitor lên (biểu tượng kính lúp).
- Anh em đưa cái thẻ lại gần cái mắt đọc, anh em sẽ thấy một dãy số hiện lên.
- Đó chính là mã của cái thẻ. Anh em mình ghi lại cái mã đó.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
Serial.println("Dua the RFID lai gan de doc ma so...");
}
void loop() {
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
Serial.print("Ma so (UID) cua the: ");
for (byte i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
}
Bước 3: Viết chương trình khóa cửa.
- Giờ anh em mình đã có cái mã số rồi, thì mình bắt đầu viết chương trình.
- Ví dụ, tui lấy mã thẻ là "3F D5 D2 9E".
- Anh em mình sửa lại mã số cho phù hợp với thẻ của mình nha.
- Tui sẽ làm cho cái đèn LED sáng lên khi thẻ đúng.
- Anh em mình có thể thay cái đèn LED bằng một cái module relay để điều khiển khóa cửa.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
#define LED_PIN 7
MFRC522 rfid(SS_PIN, RST_PIN);
// Ma so (UID) cua the hop le
byte maSoHopLe[4] = {0x3F, 0xD5, 0xD2, 0x9E};
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(LED_PIN, OUTPUT);
Serial.println("He thong khoa cua da san sang...");
}
void loop() {
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
// So sanh ma so cua the hien tai voi ma so hop le
if (soSanhMaSo(rfid.uid.uidByte, maSoHopLe)) {
Serial.println("Mo khoa! The hop le.");
digitalWrite(LED_PIN, HIGH);
delay(2000); // Mo khoa trong 2 giay
digitalWrite(LED_PIN, LOW);
} else {
Serial.println("The khong hop le!");
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
}
// Ham so sanh ma so
boolean soSanhMaSo(byte* maSo1, byte* maSo2) {
for (byte i = 0; i < 4; i++) {
if (maSo1[i] != maSo2[i]) {
return false;
}
}
return true;
}
Tổng kết
Tóm lại, bài này anh em mình đã biết cách sử dụng module RFID để làm một cái khóa cửa thông minh.
Cái này rất hay, nó sẽ giúp anh em mình làm mấy cái hệ thống quản lý ra vào, hay là một cái két sắt điện tử.
Đây là một ứng dụng rất phổ biến trong các giải pháp smart home thực tế.
Nói nhiêu đó đủ rồi.
Hẹn anh em ở bài viết tiếp theo, mình sẽ học cách giao tiếp với Module Bluetooth và điều khiển thiết bị qua điện thoại\!

Đăng nhận xét
Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.