Tư vấn: 0979.466.469 / 0938.128.290

MENU

Giao tiếp đầu đọc RFID với Arduino

Gia cong pcb 600*150px
Giao tiếp đầu đọc RFID với Arduino, đầu đọc sẽ đọc dữ liệu từ RFID và đưa cho Arduino xử lý

GIAO TIẾP GIỮA RFID VỚI ARDUINO

   Trong bài viết này, chúng ta sẽ thực hiện việc kết nối một đầu đọc RFID với Arduino, đầu đọc có thể đọc dữ liệu thẻ RFID sau đó đưa cho Arduino xử lý. RFID là viết tắt của  Radio Frequency Identification (nhận dạng tần số vô tuyến). Một đầu đọc RFID được sử dụng để đọc các thẻ RFID (chứa dữ liệu được lưu trữ trong chip). Một đầu đọc RFID và thẻ RFID, cả hai đều có cấu tạo gồm một cuộn dây bao quanh chúng. Khi thẻ RFID được hiển thị gần đầu đọc RFID, đầu đọc sẽ thu thập dữ liệu từ thẻ RFID. Chúng ta sẽ tự hỏi thẻ RFID lấy nguồn cấp từ đâu để hoạt động. Đơn giản thôi, điều này được thực hiện thông qua cảm ứng điện từ. Bây giờ khi thẻ RFID được để gần đầu đọc, 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ừ này và xuất ra dữ liệu đó. Mỗi đầu đọc RFID sẽ được thiết kế thêm chân ngõ ra số. Chúng ta có thể thu thập dữ liệu đọc được thông qua các chân ngõ ra số này bằng cách sử dụng Arduino hoặc các vi điều khiển.

Làm sao để giao tiếp RFID với Arduino?

Bạn có thể quan sát sơ đồ mạch được đưa ra dưới đây

- Lưu ý 1: Yêu cầu cung cấp điện cho đầu đọc thẻ RFID khác nhau tùy theo từng sản phẩm. Đầu đọc RFID ta sử dụng trong hướng dẫn này là loại 12 Volts. Có phiên bản 5 Volts và 9 Volts có sẵn trên thị trường.

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

- Lưu ý 3: Đầu đọc RFID có thể có 2 đầu ra. Một là đầu ra tương thích RS232 và một là đầu ra tương thích TTL. Một chân đầu ra kiểu tương thích TTL có thể được kết nối trực tiếp với Arduino. Trong khi đó, một đầu ra kiểu tương thích 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)

- Lưu ý 4: Chân GND của đầu đọc phải được nối với chân GND của Arduino

Chúng ta sử dụng Thư viện SoftwareSerial của phần mềm Arduino, cho phép các chân kỹ thuật số được sử dụng trong giao tiếp số (Serial communication). Ta đã sử dụng chân số 9 làm chân Rx của Arduino. (Bạn cũng có thể sử dụng chân Rx là chân phần cứng của Arduino uno - đó là chân 0

Lập trình

 #include

 

SoftwareSerial mySerial(9, 10);

void setup()

{

  mySerial.begin(9600); // Đặt tốc độ truyền/nhận dữ liệu (baud rate) qua cổng giao tiếp với Arduino

  Serial.begin(9600);  //Đặt tốc độ baud rate cho Serial Monitor

 }void loop()

{

    

 if(mySerial.available()>0)

  {

  Serial.write(mySerial.read());

  } }

mySerial.available () - kiểm tra mọi dữ liệu truyền từ đầu đọc RFID thông qua chân 9. Trả về số byte có sẵn để đọc dữ liệu từ chân truyền dữ liệu. Trả về giá trị -1 nếu không có dữ liệu để đọc.

 

mySerial.read () - Đọc dữ liệu truyền tới từ chân truyền dữ liệu (Chân Tx của đầu đọc).

 

Serial.write () - In dữ liệu ra màn hình. Vì vậy, hàm Serial.write (mySerial.read ()) - in dữ liệu được thu thập từ đầu đọc ra màn hình. Hãy quan sát hình dưới để dễ hình dung

 

 

Nói thêm

1) Mỗi thẻ RFID được phân biệt với nhau bởi một mã độc nhất gồm 12 ký tự. Chúng ta đọc 12 ký tự này bằng cách sử dụng Arduino.

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

  Dưới đây là chương trình lưu tối đa 10 Thẻ RFID trong một mảng 2 chiều. Chương trình thu thập từng số thẻ RFID và lưu trữ chúng trong một mảng [10] [12] (10 hàng và 12 cột). Những dữ liệu thẻ RFID này sau đó được in trên trên Serial Monitor (bảng giám sát dữ liệu) :

#include

SoftwareSerial mySerial(9,10);

int read_count=0,tag_count=0;

int j=0,k=0;

char data_temp, RFID_data[12], data_store[10][12];

boolean disp_control;

 

void setup()

{

mySerial.begin(9600);

Serial.begin(9600);

}

 

void loop()

{

RecieveData();

StoreData();

PrintData();

}

 

void RecieveData()

{

if(mySerial.available()>0)

{

Module điện tử 932*50

data_temp=mySerial.read();

RFID_data[read_count]=data_temp;

read_count++;

}

}

 

void StoreData()

{

 

if(read_count==12)

{

disp_control=true;  

for(k=tag_count;k<=tag_count;k++)

{

for(j=0;j<12;j++)

{

data_store[k][j]=RFID_data[j];

}

}

read_count=0;

tag_count++;

}

}

 

void PrintData()

{

if(disp_control==true)

{

  for(k=0;k<=tag_count;k++)

{

    for(j=0;j<12;j++)

  {

    Serial.write(data_store[k][j]);

  }

  Serial.println();

}

disp_control=false;

}

}

read_count - là biến được sử dụng để đếm 12 ký tự của thẻ RFID. Biến này ban đầu được đặt thành 0 và được lặp lại bên trong hàm RecieveData. Khi biến này lặp lại đủ 12 lần, chương trình sẽ nhập hàm StoreData (). Bên trong hàm StoreData () này, mỗi dữ liệu thẻ RFID (được thu thập trong mảng một chiều RFID_data) sẽ được lưu trữ vào kho dữ liệu mảng 2 chiều. Biến này sau đó được đặt về 0 một lần nữa bên trong hàm StoreData () này với mục đích là thoát khỏi hàm này và thu thập 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 dữ liệu đó được đọc hết. Điều này có nghĩa là số lần điều khiển chương trình thực hiện chức năng StoreData () bằng với số lượng thẻ RFID đã được đọc mã.

 

data_temp - là biến để lưu giữ từng ký tự đơn (trong số 12 ký tự) của Thẻ RFID từ bộ đệm serial (bộ đệm dữ liệu số).

 

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 đưa vào từng mảng một từ dữ liệu biến tạm data_temp.

 

data_store - là mảng 2 chiều của chúng tôi để chứa từng dữ liệu thẻ. Nó được khai báo là [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. Có khả năng 10 dữ liệu thẻ RFID được lưu trữ trong 10 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 (). Chúng ta chỉ in dữ liệu thẻ RFID trên Serial Monitor khi đọc thẻ mới.

 

 

Toàn bộ chương trình có 3 chức năng - RecieveData (), StoreData () và PrintData ()!

 

Như chúng ta biết, Arduino thực hiện bất cứ điều gì bên trong hàm loop () của nó liên tục, chúng tôi đã sử dụng các biến thông minh để lưu trữ dữ liệu RFID và in chúng theo mong muốn của chúng tôi (bạn đã hiểu điều này từ các giải thích biến của tôi)!

RecieveData () - Như chúng ta biết, nó đọc từng ký tự của thẻ RFID từ bộ đệm nối tiếp. Chúng ta lưu giữ từng ký tự từ bộ đệm dữ liệu số trong biến data_temp và lưu từng ký tự một vào mảng RFID_data. Chúng ta lặp lại biến read_count mỗi khi một ký tự được lưu vào mảng RFID_data.

 

StoreData () - là chức năng lưu trữ dữ liệu thẻ RFID vào data_store (là mảng 2 chiều). Bạn thấy đấy, chúng ta chỉ cần lưu vào mảng 2 chiều khi thẻ được đọc mã hoàn toàn. Khi một thẻ được đọc hoàn toàn bởi hàm RecieveData (), biến read_count của chúng ta sẽ có giá trị = 12. Vì vậy, chúng ta mang đến một điều kiện if và 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 ta đặt lại biến read_count về 0, để điều khiển chương trình sẽ không ghi vượt quá mức dữ liệu được lưu trữ trong mảng 2 chiều. Việc đặt lại này cũng buộc chương trình đọc tiếp dữ liệu thẻ tiếp theo.

 

Gia công pcb 932*150
Sản phẩm nổi bật
Sale 0%
121000 /Cái
/ Cái

Code: M-7006-040 Còn hàng

Lưu xem sau
Sale 0%
85000 /Cái
/ Cái

Code: 7204-243 Còn hàng

Lưu xem sau
Sale 0%
35000 /Bộ
/ Bộ

Code: 7007-030 Còn hàng

Lưu xem sau
Sale 0%
26000 /Cái
/ Cái

Code: 7203-014 Còn hàng

Lưu xem sau
Hỗ trợ liên kết
0979466469
0899909838
0938128290
0899909838
Khiếu nại: 0964238397
0979466469
0868565469
0868565469

Hotline: 0979 466 469

Loading
0964238397
Bạn cần linh kiện mẫu ? 7-11 ngày