Kết nối RFID với Arduino

Trong bài hướng dẫn này, chúng tôi sẽ giới thiệu cho bạn một kỹ thuật giao tiếp khác. Lần này chúng ta sẽ sử dụng Arduino để kết nối với một đầu đọc RFID.

Kết nối RFID với Arduino – Cách đọc thẻ RFID bằng Arduino

 Trong bài hướng dẫn này, chúng tôi sẽ giới thiệu cho bạn một kỹ thuật giao tiếp khác. Lần này chúng ta sẽ sử dụng Arduino để kết nối với một đầu đọc RFID. RFID (viết tắt thuật ngữ tiếng Anh : Radio Frequency Identification), hay Nhận dạng qua tần số vô tuyến. Các thẻ RFID được sử dụng sẽ các chứa dữ liệu duy nhất và được lưu trữ trong chip. Cả đầu đọc RFID và thẻ RFID đều có một cuộn dây bên trong bao quanh. Khi thẻ RFID được để gần đầu đọc RFID, nó sẽ nhận được dữ liệu trong thẻ (gồm các chữ số và ký tự). Bạn sẽ tự hỏi làm thế nào để chip bên trong thẻ RFID có điện và hoạt động thế nào? Điều này được thực hiện thông qua cảm ứng điện từ. Tôi đã nói với bạn, cả đầu đọc RFID và thẻ RFID đều có một cuộn dây bên trong. Chúng ta cấp nguồn cho đầu đọc RFID, khi thẻ RFID được để gần đầu đọc, hiện tượng cảm ứng điện từ sẽ diễn ra giữa các cuộn dây và điều này cung cấp năng lượng cho chip bên trong thẻ. Con chip này sẽ gửi dữ liệu điện từ đến đầu đọc. Đầu đọc sẽ nhận được dữ liệu được truyền bằng điện từ và xuất ra dữ liệu đó. Mọi đầu đọc RFID đều có các chân đầu ra nối tiếp. Chúng có thể thu thập dữ liệu đọc thông qua các chân nối tiếp này bằng cách sử dụng arduino hoặc bất kỳ bộ điều khiển nào khác. Vì vậy, ở đây chúng tôi sẽ hướng dẫn các bạn về sự giao tiếp giữa RFID và Arduino.

 

Cách giao tiếp giữa Arduino và đầu đọc RFID

 Trước khi đến với sơ đồ mạch, chúng ta nên lưu ý:

Lưu ý 1: – Các đầu đọc RFID khác nhau sẽ sử dụng nguồn khác nhau. Ở bài viết này, đầu đọc RFID được sử dụng là loại 12V.

Lưu ý 2: – Bạn nên kiểm tra và đảm bảo đầu đọc và Thẻ RFID tương thích tần số với nhau. Thông thường các thẻ sẽ có tần số 125Khz.

Lưu ý 3: – Đầu đọc RFID có 2 ngõ ra, một là đầu ra tương thích với RS232 và một là đầu ra tương thích với TTL. Chân đầu ra tương thích với TTL có thể được kết nối trực tiếp với Arduino. Và chân đầu ra tương thích với RS232 phải được chuyển đổi sang TTL bằng cách sử dụng bộ chuyển đổi RS232 sang TTL (Bạn có thể tự thiết kế bộ này bằng IC MAX 232)

Bây giờ chúng ta sẽ đến với sơ đồ mạch!

 Đầu tiên bạn hãy tải về thư viện SoftwareSerial của Arduino để cho phép các chân kỹ thuật số được sử dụng trong giao tiếp nối tiếp. Chân 9 sẽ có chức nănglà chân Rx của Arduino. (Bạn cũng có thể sử dụng trực tiếp chân Rx của Arduino uno – đó là chân 0).

#include

SoftwareSerial mySerial(9, 10);

void setup()

{

  mySerial.begin(9600); // Setting the baud rate of Software Serial Library  

  Serial.begin(9600);  //Setting the baud rate of Serial Monitor

 }void loop()

{

    

 if(mySerial.available()>0)

  {

  Serial.write(mySerial.read());

  }

}

Module điện tử 932*50

mySerial.available() – kiểm tra mọi dữ liệu đến từ mô đun đầu đọc RFID thông qua chân SoftwareSerial 9. Trả về số byte có sẵn để đọc từ cổng nối tiếp phần mềm. Trả về -1 nếu không có dữ liệu để đọc.

mySerial.read() – Đọc dữ liệu được gửi đến thông qua cổng nối tiếp phần mềm.

Serial.write() – In dữ liệu lên cửa sổ serial monitor của arduino. Vì vậy, hàm Serial.write (mySerial.read ()) – in dữ liệu được nhận được từ cổng nối tiếp phần mềm sang cửa sổ serial monitor của arduino.

 

Đọc mã thẻ RFID và hiển thị trên cửa sổ serial monitor của arduino

1) Mỗi thẻ RFID khác nhau sẽ có 12 ký tự khác nhau. 12 ký tự này sẽ được đọc bằng Arduino.

2) Chúng ta cần một mảng hai chiều để lưu trữ nhiều mã thẻ RFID. Ví dụ để lưu trữ 10 thẻ RFID, chúng ta cần một mảng hai chiều gồm 10 hàng và 12 cột.

 

Chương Trình / Code

https://drive.google.com/file/d/16D1IzMxXMneCovhak9DnbmaGXA9UrIc3/view?usp=sharing

 

Giải thích chương trình

read_count – là biến được sử dụng để đếm 12 ký tự của thẻ RFID. Biến này được ban đầu được đặt thành 0 và được lặp lại bên trong hàm RecieveData. Khi biến này tăng đến giá trị 12, chương trình con StoreData() sẽ được thực hiện. Bên trong hàm StoreData(), mỗi dữ liệu của thẻ RFID (được lưu trong mảng một chiều RFID_data) sẽ được lưu trữ vào mảng 2 chiều data_store. Sau khi đọc xong một thẻ RFID, biến read_count sẽ được đặt về 0 một lần nữa bên trong hàm StoreData() để thoát khỏi hàm này và tiếp tục đọc dữ liệu thẻ tiếp theo.

tag_count – là biến để đếm số lượng thẻ RFID. Biến này được lặp bên trong hàm StoreData(). Dữ liệu thẻ chỉ được lưu trữ khi nó được đọc hoàn toàn. Sau khi đọc xong 1 thẻ, biến tag_count sẽ tăng thêm 1 để tiếp tục đọc thẻ tiếp theo.

data_temp – là biến để giữ từng ký tự đơn (trong số 12 ký tự) của Thẻ RFID. Biến này là một biến lưu trữ tạm thời.

RFID_data – là mảng một chiều để chứa hoàn toàn dữ liệu thẻ RFID. 12 ký tự của thẻ RFID được  lấy từ biến data_temp và đưa vào từng vị trí trong mảng RFID_data.

data_store – là mảng 2 chiều để lưu trữ toàn bộ dữ liệu của 10 thẻ RFID. Nó được khai báo là data_store [10] [12] – có nghĩa là nó có thể chứa 10 hàng 12 cột. Mỗi dữ liệu thẻ RFID được lưu trữ trong một hàng.

dist_control – là một biến boolean được sử dụng để kiểm soát số lần điều khiển chương trình thực thi hàm PrintData(). Dữ liệu của thẻ RFID sẽ được hiển thị trên cửa sổ serial monitor.

Toàn bộ chương trình được chia thành 3 phần – RecieveData() – Nhận dữ liệu, StoreData() – Lưu dữ liệu và PrintData() – Hiển thị dữ liệu

RecieveData() – Như chúng ta biết, nó đọc từng ký tự của thẻ RFID từ biến data_temp và lưu vào mảng RFID_data. Biến read_count sẽ tăng thêm 1 mỗi khi một ký tự được lưu vào mảng RFID_data.

 

StoreData() – có chức năng lưu trữ dữ liệu thẻ RFID vào mảng 2 chiều data_store. Khi một thẻ được đọc xong bởi hàm RecieveData(), biến read_count của sẽ có giá trị = 12. Vì vậy, chúng tối viết một điều kiện if chỉ cho phép lưu trữ dữ liệu thẻ vào mảng 2 chiều nếu biến read_count==12. Khi dữ liệu thẻ được lưu vào mảng 2 chiều, chúng tôi đặt lại biến read_count thành 0 để chuẩn bị cho lần đọc tiếp theo.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *