You are on page 1of 39

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC NÔNG LÂM TP HCM


KHOA CƠ KHÍ - CÔNG NGHỆ

BÁO CÁO TỔNG KẾT


ĐỒ ÁN MÔN KỸ THUẬT VI ĐIỀU KHIỂN

Đồ án:
NGHIÊN CỨU, THIẾT KẾ CHẾ TẠO MÔ HÌNH
CHỐT KHÓA ĐIỆN TỬ TỰ ĐỘNG RFID – SOLENOID

Giáo viên hướng dẫn: Nhóm thực hiện:


ThS. NGUYỄN VÕ NGỌC THẠCH TRẦN DƯƠNG HOAN
NGUYỄN VĂN HOÀNG
ĐINH NHƯ NHÂN
HỨA TIẾN HƯNG

Tp. Hồ Chí Minh, tháng 12 năm 2016


i
NHÓM THỰC HIỆN ĐỒ ÁN

NHỮNG NGƯỜI THAM GIA THỰC HIỆN ĐỒ ÁN

Đơn vị công tác và lĩnh Nội dung nghiên cứu


Họ và tên MSSV
vực chuyên môn cụ thể
ThS. Nguyễn Võ Giảng viên
Giảng viên hướng dẫn
Ngọc Thạch Khoa Cơ khí – Công nghệ
Khảo sát nguyên lý
Trần Dương Lớp DH14CD các linh kiện sẽ sử
14153016
Hoan Khoa Cơ khí – Công nghệ dụng tính toán thông
số cần thiết
Nguyễn Văn Lớp DH14CD Gia công mạch in, hàn
14153088
Hoàng Khoa Cơ khí – Công nghệ mạch
Lớp DH14CD
Hứa Tiến Hưng 14153094 Lên ý tưởng lập trình
Khoa Cơ khí – Công nghệ
Lớp DH14CD
Đinh Như Nhân 14153107 Khảo nghiệm.
Khoa Cơ khí – Công nghệ

Trường Đại học Nông Lâm TRƯỞNG NHÓM


Thành phố Hồ Chí Minh

Trần Dương Hoan

ii
TÓM TẮT

Tên đồ án: Nghiên cứu, thiết kế mô hình chốt khóa điện tử tự động rfid – solenoid.

Trong thực tế đã có những ứng dụng về thẻ từ RFID cụ thể là các bãi giữa xe tự
động, gian hàng tự động, văn phòng, khách sạn... Để hiểu rõ hơn về cách thức hoạt động
của giao tiếp thẻ từ RFID – Solenoid. Bộ xử lý sử dụng vi điều khiển Arduino Nano,
thực hiện truyền tín hiệu đến bộ phận công tác và lưu dữ liệu trên bộ nớ EEPROM của
Arduino – Bộ nhớ không mất đi khi mất nguồn cấp. Từ lý thuyết về nhận tín hiệu từ nút
nhấn, cảm biến, xuất tín hiệu đến bộ phận công tác, ứng dụng điện tử công suất trong
tính toán thiết kế mạch nguồn, xuất thông tin trên LCD và gửi trả dữ liệu về Serial
Monitor trong quá trì phát triển (dev) và gỡ lỗi (debug). Từ đó học đưa kiến thức vào
thực tiễn, giúp sinh viên nắm bắt được kiến thức thực tế, vận dụng và phát triển trong
tương lai.
Tiến hành chế tạo thử nghiệm từ đó khảo nghiệm sơ bộ và đánh giá khả năng làm
việc của thiết bị.

Thời gian thực hiện: 1 tháng, từ tháng 01/12/2016 đến tháng 31/12/2016.

Cấp quản lý: Khoa – Bộ môn

Nhóm trưởng đồ án: Trần Dương Hoan

Lớp: DH14CD. Khoa /Bộ môn: Khoa Cơ khí – Công nghệ/Bộ môn Cơ điện tử

Điện thoại liên lạc: 0932089754 Email: 14153016@st.hcmuaf.edu.vn

Họ và tên giáo viên hướng dẫn (học hàm, học vị): ThS. Nguyễn Võ Ngọc Thạch

Đơn vị chủ trì: Khoa Cơ khí – Công nghệ, Trường Đại học Nông Lâm Tp.HCM

Mục đích: Hiện nay trên thị trường có rất nhiều ứng dụng từ vi điều khiển, thiết kế mô
hình sẽ giúp sinh viên nắm bắt và vận dụng kiến thức đã có trong phát triển kĩ năng và
làm việc thực tế. Từ đó đưa ra các sản phẩm ngày càng hoàng thiện giá thành cho sản
xuất rẻ hơn, thiết bị trở nên nhỏ gọn, dễ lắm đặt.

iii
MỤC LỤC
TÓM TẮT ..................................................................................................................... ii
1. TỔNG QUAN .............................................................................................................1
1.1 Đặt vấn đề ..............................................................................................................1
1.2 Mạch vi điều khiển arduino ...................................................................................1
IC Mega328P AU 1632 ............................................................................................2
Arduino Nano ...........................................................................................................3
1.3 Giới thiê ̣u về Arduino IDE và ngôn ngữ lâ ̣p trình cho Arduino ............................4
1.4 RFID (Radio Frequency Identification) .................................................................5
Cấu trúc hệ thống RFID ............................................................................................5
1.5 Mạch RFID RC522 ................................................................................................ 7
1.6 LCD 16x2 (1602A) – Thư viện LyquidCrystal trong Arduino IDE ......................7
Giới thiê ̣u về LCD 1602A ........................................................................................7
Thư viện LyquidCrystal.h .........................................................................................9
Phương pháp điề u khiể n ma ̣ch hiể n thi ..................................................................
̣ 10
2. THIẾT KẾ VÀ CHẾ TẠO......................................................................................11
2.1 Thiết kế mạch nguồn. ...........................................................................................11
2.1.1 Một số tính năng chính của LM2576 ............................................................. 11
2.1.2 Sơ đồ cấu tạo của LM2576 ............................................................................11
2.1.3 Thông số chính của LM2576 .........................................................................12
2.1.4. Thiết kế layout .............................................................................................. 13
2.2 Thiết kế mạch điều khiển với Arduino, LCD, Relay ...........................................14
2.2.1 Thử nghiệm trên Proteus 8 ............................................................................14
2.2.2 Kết quả thử nghiệm........................................................................................16
2.3 Giải thuật điều khiển mô hình khóa điện sử dụng RFID – Solenoid ...................24
2.4 Bộ nhớ EEPROM .................................................................................................25
3. KẾT QUẢ VÀ KHẢO NGHIỆM ...........................................................................27
3.1 Chế tạp đế nâng mô hình, tránh nhiễu, chập chạp do kim loại rơi vào ................27
4. KẾT LUẬN VÀ KIẾN NGHỊ .................................................................................30
4.1 Kết luận ................................................................................................................30
4.2 Kiến nghị ..............................................................................................................31
Tài liệu tham khảo .......................................................................................................32

iv
DANH MỤC HÌNH

Hình 1: ATMEGA328P ..................................................................................................2


Hình 2: Sơ đồ chân Arduino Nano .................................................................................4
Hình 3: Các thành phần của một hệ thống RFID ...........................................................5
Hình 4: Quản lý ra vào cổng công ty thông qua RFID ...................................................6
Hình 5: Module đọc thẻ từ RC522 .................................................................................7
Hình 6: LCD 1602A xanh dương ...................................................................................7
Hình 7: Các chân nối của LCD 1602A ...........................................................................8
Hình 8: Ví dụ hiển thị đơn giản với Arduino – LCD 1602A .......................................10
Hình 9: Sơ đồ cấu tạo bên trong LM2576 ....................................................................11
Hình 10: Sơ đồ nguyên lý mạch nguồn 5V, 24V cấp cho mạch ..................................12
Hình 11: Sử dụng Proteus PCB để thiết kế layout board mạch....................................13
Hình 12: Mạch in cho board nguồn ..............................................................................13
Hình 13: Hình ảnh thực tế mạch nguồn LM2576T-5V ................................................14
Hình 14: Sơ đồ nguyên lý mạch điều khiển trên Proteus 8.5 .......................................14
Hình 15: Quá trình nạp file chương trình vào Proteus 8 ..............................................16
Hình 16: Kết quả chạy thử đèn Relay đã sáng sau khi nhấn nút thẻ chấp nhận ...........17
Hình 17: Mạch in layout mạch điều khiển chính .........................................................17
Hình 18: Quá trình đo đạc thử nghiệm lại kết quả làm mạch.......................................18
Hình 19: Mạch điều khiển chính sau khi đã gắn vi điều khiển và nạp code ................19
Hình 20: Sơ đồ giải thuật điều khiển mô hình khóa điện sử dụng RFID – Solenoid ...24
Hình 21: Sơ đồ nguyên lý mạch kích Relay .................................................................25
Hình 22: Sản phầm hoàn thiện nhìn từ trên ..................................................................27
Hình 23: Sản phầm hoàn thiện nhìn từ mặt bên ...........................................................28
Hình 24: Ảnh thực tế khi đã quét thẻ chủ .....................................................................28
Hình 25: Ảnh thực tế khi thêm thẻ thành công............................................................. 29
Hình 26: Ảnh thực tế khi xóa thẻ thành công ............................................................... 29
Hình 27: Ảnh thực tế khi quét thẻ không đúng ............................................................ 29
Hình 28: Ảnh thực tế khi quét thẻ thành công, Relay kích ..........................................30
Hình 29: Ảnh thực tế trạng thái Solenoid đóng ............................................................ 30

v
DANH MỤC BẢNG

Bảng 1: Chức năng các chân của LCD ...........................................................................9

vi
1. TỔNG QUAN

1.1 Đặt vấn đề


Ngày nay sự phát triể n của nghành vi điề u khiể n, kỷ thuâ ̣t số và các hê ̣ thố ng
điề u khiể n đã đươ ̣c tự đô ̣ng hoá. Với những kỹ thuâ ̣t tiên tiế n như vi xử lý, vi ma ̣ch số
đươ ̣c ứng du ̣ng vào liñ h vực điề u khiể n, thì các hê ̣ thố ng điề u khiể n cơ khí thô sơ, với
tố c đô ̣ xử lý châ ̣m ít chiń h xác đươ ̣c thay thế bằ ng hê ̣ thố ng điề u khiể n tự đô ̣ng với các
lê ̣nh chương trình đã đươ ̣c thiế t lâ ̣p trước.
Vi điều khiển là thành phần chính nhưng để một cỗ máy vận hành được thì cần
có thiết bị ngoại vi đầu vào và đầu ra như cảm biến, nút nhấn, LCD, màn hình, bàn phím,
van điện,v.v…
Để tìm hiểu kỹ hơn về vi điều khiển từ bản chất đến cách thức hoạt động, bảo
trì, nhóm thực hiện đồ án trên mô hình nhận dạng và khóa cửa tự động thông qua thẻ từ
RFID – dùng khóa điện Solenoid và lưu trữ dữ liệu trên bộ nhớ EEPROM.
Vì sao nhóm lại chọn bộ nhớ EEPROM thay vì sử dụng chíp nhớ ngoài sẽ được
nêu rõ trong quá trình thực hiện đồ án.

1.2 Mạch vi điều khiển arduino


Arduino là mô ̣t bước ngoă ̣c lớn trong ngành cơ điê ̣n tử trên toàn thế giới kể từ khi
nó ra đời. Số lươ ̣ng người dùng cực lớn và đa da ̣ng với triǹ h đô ̣ trải rô ̣ng từ bâ ̣c phổ
thông lên đế n đa ̣i ho ̣c. Arduino là mô ̣t bo ma ̣ch xử lý đươ ̣c dùng để na ̣p tương tác với
̣ n cứng như cảm biế n, đô ̣ng cơ, đèn hoă ̣c các thiế t bi ̣khác. Đă ̣c điể m nổ i
các thiế t bi phầ
bâ ̣t ở Arduino là môi trường phát triể n ứng du ̣ng dễ sử du ̣ng, với mô ̣t ngôn ngữ lâ ̣p trình
có thể tiếp cận mô ̣t cách nhanh chóng. Và điề u này đã làm nên hiê ̣n tươ ̣ng Arduino chính
là mức giá thấ p và tính chấ t nguồ n mở từ phầ n cứng tới phầ n mề m…
̣ n Ivrea thuô ̣c nước Ý và đươ ̣c đă ̣t theo tên của vi ̣vua vào
Arduino ra đời ta ̣i thi trấ
thế kỉ thứ 19 là King Arduin, Arduino chiń h thức đươ ̣c đưa ra giới thiê ̣u vào năm 2005
như là mô ̣t công cu ̣ dành cho các sinh viên. Mă ̣c dù không đươ ̣c tiế p thi gi
̣ ̀ cả, tin tức về
Arduino vẩ n đươ ̣c lan truyề n mô ̣t cách ma ̣nh mẽ với những lời nhận xét tić h cực về
Arduino từ những người đã từng sử du ̣ng qua.

1
IC Mega328P AU 1632
Arduino Nano là board Arduino rất nhỏ, sử dụng IC Mega328 AU 1632, đây
là phầ n quan tro ̣ng nhất trong ma ̣ch Arduino Nano.

Hình 1: ATMEGA328P
+ VCC: cung cấ p điê ̣n áp
+ GND: nố i mass
+ Port B (PB7:0): là một 8-bit bi-directional cổng I / O với điện trở kéo
lên bên trong (được chọn cho mỗi bit)
+ Port C (PC5:0): là một 7-bit bi-directional cổng I / O với điện trở kéo
lên bên trong (được chọn cho mỗi bit).
+ PC6/RESET: Nếu RSTDISBL Fuse được lập trình, PC6 được sử dụng như một
I / O pin. Lưu ý rằng các đặc tính điện của PC6 khác với các chân khác của Port C. Nếu
RSTDISBL Fuse chưa đươ ̣c lâ ̣p triǹ h, PC6 được sử dụng như một đầu vào Reset.
+ Port D: là một 8-bit bi-directional cổng I / O với điện trở kéo lên bên trong
+ AREF: là cổ ng tương tự cho các chuyể n đổ i AD
+ AVCC: AVCC là điện áp cung cấp pin cho chuyể n đổ i AD.
IC Mega328P AU 1632 là chip Atmel 8-bit AVR RISC AVR là chip vi điều khiển
8 bits với cấu trúc tập lệnh đơn giản hóa-RISC(Reduced Instruction Set Computer), một
kiểu cấu trúc đang thể hiện ưu thế trong các bộ xử lí. AVR có nhiều đặc tính hơn hẳn,
hơn cả trong tính ứng dụng (dễ sử dụng) và đặc biệt là về chức năng:
- Không cần mắc thêm bất kỳ linh kiện phụ nào khi sử dụng AVR, thậm chí
không cần nguồn tạo xung clock cho chip (thường là các khối thạch anh).
- Thiết bị lập trình (mạch nạp) cho AVR rất đơn giản, có loại mạch nạp chỉ cần
vài điện trở là có thể làm được. Một số AVR còn hỗ trợ lập trình on – chip bằng
bootloader không cần mạch nạp…
2
- Bên cạnh lập trình bằng ASM, cấu trúc AVR được thiết kế tương thích C.

Arduino Nano
Board Arduino Nano 5V 16MHz mặc định sử dụng nguồn 5V và IC ATmega328
chạy ở xung nhịp 16MHZ. Nhưng trên board có sẵn ngõ vào VIN (RAW) để cấp nguồn
thông qua mạch điều áp. Nguồn vào cho ngõ RAW có thể từ 3.3V - 12V (max 12V)
+ RAW: cấp nguồn thông qua mạch điều áp
+ Vcc: cấp nguồn 5V hoặc 3.3V
Thông số về bô ̣ nhớ
+ Flash: 32k Bytes
+ EEPROM: 1K Bytes
+ RAM: 2K Bytes
Vì sử dụng chung dòng chip ATmega328 nên việc lập trình và thiết kế ứng dụng
hoàn toàn tương tự board Arduino Uno R3. Ngoài ra có 1 sự khác biệt nhỏ là board
Arduino Nano có tới 8 cổng analog.
Khi cần nạp code cho board chỉ cần sử dụng dây nối USB Type B để kết nối với
máy tính vì trên board đã tính hợp sẵn mạch nạp và giao tiếp sang chuẩn Serial UART
để nạp cho board Arduino Nano và sau khi nạp xong, có thể rút dây cáp ra và cấp nguồn
cho board tự hoạt động độc lập. Cách kết nối board Arduino Nano:
Khi sử dụng nguồn ngoài, chúng ta sẽ cấp nguồn 6V – 9V vào chân “RAW” để
cấp nguồn nuôi cho board, chú ý là chân “RAW” chứ không phải là chân “VCC” vì chân
VCC chính là ngõ vào hoặc ra điện áp 5V của mạch, nếu chúng ta cấp nhầm nguồn >
5V vào chân VCC sẽ gây ra cháy Chip Atmega328-AU trên board.
Arduino Nano có 30 cổ ng với:
+ Cổ ng Digital: 2-13
+ Analog: AD0-AD7
+ Chân nguồ n: +9V, +5V, Ground
+ RX, TX
Cũng như board Arduino Pro Mini, board Arduino Nano cũng có thêm 2 chân
Analog là A6 và A7 giúp tăng số chân đọc Analog cho các ứng dụng cần đến nhiều chân
Analog.
Lưu ý: chân A6 và A7 chỉ có thể đọc không thể xuất.

3
Hình 2: Sơ đồ chân Arduino Nano
1.3 Giới thiêụ về Arduino IDE và ngôn ngữ lâ ̣p trin ̀ h cho Arduino
Thiết kế bo ma ̣ch nhỏ gọn, trang bi nhiề
̣ u tính năng thông du ̣ng mang la ̣i nhiề u lơ ̣i
thế cho Arduino, tuy nhiên sức ma ̣nh thực sự của Arduino chính là nằ m ở phầ n mề m.
Môi trường lập trình đơn giản dễ sử du ̣ng, ngôn ngữ lâ ̣p trin
̀ h Wiring dễ hiể u và dựa trên
nền tảng C/c++ rất quen thuộc với người làm kỹ thuâ ̣t. Và quan tro ̣ng là số lươ ̣ng thư
viê ̣n code đươ ̣c viế t sẵn và chia sẻ bởi cô ̣ng đồ ng mở là cực kỳ lớn.
Arduino IDE là phầ n mề m dủng để lâ ̣p triǹ h cho Arduino, môi trường lâ ̣p trình

4
Arduino IDE có thể cha ̣y trên ba nề n tảng phổ biế n nhấ t hiê ̣n nay là Window, Mac và
Linux. Do có tinh chấ t nguồ n mở nên môi trường lâ ̣p trin
̀ h này hoàn toàn miể n phí và
có thể mở rô ̣ng thêm bởi người dùng có kinh nghiê ̣m.
Ngôn ngữ lâ ̣p triǹ h có thể đươ ̣c mở rô ̣ng thông qua các thư viê ̣n C++. Và ngôn ngữ
lâ ̣p trình này dựa trên nề n tảng ngôn ngữ C của AVR nên người dùng hoàn toàn có thể
nhúng code viế t bẳ ng AVR vào chương triǹ h. Hiê ̣n ta ̣i, Arduino IDE có thể tải từ trang
chủ (http://arduino.cc/) bao gồ m nhiề u phiên bản khác nhau kèm theo những tin
́ h năng
bổ sung.

1.4 RFID (Radio Frequency Identification)


RFID (Radio Frequency Identification) là công nghệ nhận dạng đối tượng bằng
sóng vô tuyến. Công nghệ này cho phép nhận biết các đối tượng thông qua hệ thống
thu phát sóng radio, từ đó có thể giám sát, quản lý hoặc lưu vết từng đối tượng. Như
trường hợp trên, bạn đi siêu thị, bỏ hàng vào xe đẩy và chỉ đơn giản đẩy thẳng xe qua
cổng giám sát. Một thiết bị tự động nhận dạng từng món hàng bạn mua và tự động trừ
vào tài khoản thanh toán của bạn. Nhanh và tiện lợi biết bao! Đó chỉ là một trong rất
nhiều ứng dụng tiện ích của công nghệ RFID.

Hình 3: Các thành phần của một hệ thống RFID

Cấu trúc hệ thống RFID

Hệ thống RFID gồm hai thành phần chính: thẻ RFID (RFID tag) và đầu đọc
(reader). Thẻ RFID có gắn chip silicon và ăng ten radio dùng để gắn vào đối tượng quản

5
lý như sản phẩm, hàng hóa, động vật hoặc ngay cả con người… Thẻ RFID có kích thước
rất nhỏ, cỡ vài cm. Bộ nhớ của con chip có thể chứa từ 96 đến 512 bit dữ liệu. Đầu đọc
reader cho phép giao tiếp với thẻ RFID qua sóng radio ở khoảng cách trung bình từ 0,5-
30 mét, từ đó truyền dữ liệu về hệ thống máy tính trung tâm.
Công nghệ RFID được ứng dụng rộng rãi trong nhiều lĩnh vực, nhất là trong quản
lý và tồn trữ hàng hóa. Ví dụ, dùng những thẻ RFID theo dõi nhiệt độ gắn lên hàng hóa
có thể giúp nhà sản xuất theo dõi nhiệt độ trong kho lạnh. Những thẻ này sẽ truyền dữ
liệu qua đầu đọc, đầu đọc liên tục truyền dữ liệu thu được từ các thẻ để truyền về máy
tính trung tâm và lưu lại dữ liệu thu được. Từ đó, nhà sản xuất có thể truy cập vào
internet từ bất cứ nơi nào cũng có thể theo dõi được dữ liệu bảo quản hàng hóa của mình
trong các kho lạnh.

Hình 4: Quản lý ra vào cổng công ty thông qua RFID

Ngoài ra còn có thể sử dụng thẻ RFID cấy vào vật nuôi để nhận dạng nguồn gốc
và theo dõi vật nuôi tránh thất lạc và bị đánh cắp. Trong thư viện, các thẻ RFID được
gắn với các cuốn sách giúp giảm thời gian tìm kiếm và kiểm kê, chống được tình trạng
ăn trộm sách. Một số lĩnh vực có khả năng sử dụng một số lượng lớn các thẻ RFID như
thẻ thông minh, chứng minh nhân dân, hộ chiếu điện tử, hàng hóa trong siêu thị, quản
lý hành lý trong hàng không, hệ thống giao thông công cộng, các ngành may mặc, giày
dép...

6
1.5 Mạch RFID RC522

Hình 5: Module đọc thẻ từ RC522

Module đọc thẻ RC522 có thể đọc được các loại thẻ có kết nối không dây như
NFC, thẻ từ... Module có các thông số chính như:
Điện áp nuôi: 3.3V;
Dòng điện nuôi :13-26mA
Tần số hoạt động: 13.56MHz
Khoảng cách hoạt động: 0 ~ 60 мм
Cổng giao tiếp: SPI, tốc độ tối đa 10Мbps
Kích thước: 40мм х 60мм
Có khả năng đọc và ghi.
Sử dụng giao tiếp ISP

1.6 LCD 16x2 (1602A) – Thư viện LyquidCrystal trong Arduino IDE
Giới thiêụ về LCD 1602A

Hình 6: LCD 1602A xanh dương

7
Ngày nay, thiết bị hiển thị LCD (Liquid Crystal Display) được sử dụng trong rất
nhiều các ứng dụng của VĐK. LCD có rất nhiều ưu điểm so với các dạng hiển thị khác:
Nó có khả năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí tự đồ họa), dễ dàng đưa
vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau, tốn rất ít tài nguyên hệ
thống và giá thành rẽ…
Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên hình 7
là loại LCD thông dụng.
Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển bên trong lớp vỏ và
chỉ đưa các chân giao tiếp cần thiết. Các chân này được đánh số thứ tự và đặt tên như
Hình 6:

Hình 7: Các chân nối của LCD 1602A


Chân Mô tả
hiệu
Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với
1 Vss
GND của mạch điều khiển
Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với
2 VDD
VCC=5V của mạch điều khiển
3 VEE Điều chỉnh độ tương phản của LCD.
Chân chọn thanh ghi (Register select). Nối chân RS với logic “0”
(GND) hoặc logic “1” (VCC) để chọn thanh ghi.
4 RS + Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD
(ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở
chế độ “đọc” - read)

8
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên
trong LCD.
Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với logic
5 R/W “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để
LCD ở chế độ đọc.
Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus
DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép
của chân E.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp
6 E nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low
transition) của tín hiệu chân E.
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát
hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ
ở bus đến khi nào chân E xuống mức thấp.
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU.
Có 2 chế độ sử dụng 8 đường bus này :
DB0 - + Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB
7 - 14
DB7 là bit DB7.
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới
DB7, bit MSB là DB7
15 - Nguồn dương cho đèn nền
16 - GND cho đèn nền

Bảng 1: Chức năng các chân của LCD

*Ghi chú: Ở chế độ “đọc”, nghĩa là MPU sẽ đọc thông tin từ LCD thông qua các
chân DBx. Còn khi ở chế độ “ghi”, nghĩa là MPU xuất thông tin điều khiển cho LCD
thông qua các chân DBx.
Đối với Arduino với thư viện có sẵn ta chỉ cần tìm hiểu đến dây mà không cần
quan tâm đến chi tiết về cách thức hoạt động của các thanh ghi dịch trên LCD mà chỉ
cần quan tâm cách thực hiện thư viện LyquidCrystal.h trên Arduino IDE.

Thư viện LyquidCrystal.h

Thư viện LiquidCrystal là thư viện điều khiển LCD trên Arduino, nó được xây
dựng để cho các bạn có thể lập trình điều khiển các module LCD ô vuông một cách
nhanh chóng mà không cần phải lập trình nhiều. Thư viện này được viết để phù hợp với
con IC HD44780 (con điều khiển module LCD), tuy nhiên, trên thị trường mình toàn
thấy các con LCD của Trung Quốc và thư viện này vẫn hoạt động tốt. Nghĩa là, bạn chỉ
9
cần mua module LCD về và gắn vào Arduino, nạp code là chạy được, không cần quan
tâm đến IC điều khiển LCD.

Phương pháp điề u khiể n ma ̣ch hiể n thi ̣

Module LCD có thể được điều khiển ở chế độ: 4-bit điều khiển và 8-bit điều
khiển. Với cách dùng ở chế độ 4-bit, bạn cần 7 chân ở Arduino, và nếu muốn dùng hết
khả năng của LCD thì bạn cần 7 + 4 = 11 chân ở Arduino (không cần thiết sử dụng cách
này). Ngoài ra, hầu hết các hàm trong thư viện LiquidCrystal của Arudino ở chế độ 4-
bit thì mọi thứ đều hoạt động tốt. Vì vậy, chúng ta sẽ mắc mạch ở chế độ 4-bit điều khiển
và thực hiện theo phương án này.

Ví dụ 1: Ví dụ hiển thị đơn giản với LCD 1602A – Arduino Nano

//Thêm thư viện LiquitCrystal - có sẵn, không cần cài thêm


#include <LiquidCrystal.h>
//Khởi tạo với các chân
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
//Thông báo đây là LCD 1602A (16 cột, 2 hàng)
lcd.begin(16, 2);
//In ra màn hình lcd dòng chữ HOC VDK
lcd.print("HOC VDK");
}
void loop() {
// Đặt con trỏ vào cột 0, dòng 1
// Lưu ý: dòng 1 là dòng thứ 2, lòng 0 là dòng thứ 1.
lcd.setCursor(0, 1);
// In ra dòng chữ DH14CD
lcd.print("DH14CD");
}

Hình 8: Ví dụ hiển thị đơn giản với Arduino – LCD 1602A

10
2. THIẾT KẾ VÀ CHẾ TẠO
2.1 Thiết kế mạch nguồn.

Đầu tiên điện lưới quốc gia thông qua biến áp biến đổi về nguồn 24V sau đó
thông qua diode cầu nắn thành một chiều thông qua LM2576-5V để biến đổi dòng điện
thành 5V cấp cho mạch điều khiển, LCD và Relay 5V hoạt động, do cấp cho nhiều linh
kiện nên đòi hỏi dòng phải cao và điều đó khiến nhóm quyết định không sử dụng IC
7805 trong trường hợp này, dòng max của 7805 chỉ ở 1A và rất nóng, tổn hao trên điện
trở nhiều. Đó cũng là nhược điểm của IC nguồn tuyến tính. Thay vào đó sử dụng
LM2576-5V lắp mạch nguồn xung theo nguyên lý nguồn Buck, với dòng điện định mức
lên đến 3A ra tải.

2.1.1 Một số tính năng chính của LM2576


+ Điện áp đầu ra của các Serial là 3.3V, 5V, 12V, 15V và điện áp điều chỉnh
+ Điện áp điều chỉnh được từ 1.25V đến 37V. Với điện áp đầu vào là lớn nhất
+ Dòng đầu ra định mức là 3A
+ Điện áp đầu vào định mức là 40V có thể lớn 60V tùy từng dòng Serial
+ Chỉ giao tiếp với 5 chân đầu vào ra
+ Tần số đóng cắt chuẩn 52Khz[separator]
+ Hiệu suất cao
+ Bảo vệ quá dòng và quá nhiệt
2.1.2 Sơ đồ cấu tạo của LM2576

Hình 9: Sơ đồ cấu tạo bên trong LM2576

Ở trên là sơ đồ cấu tạo bên trong của LM2576. Nguyên tắc dựa theo nguồn xung

11
(Nguồn Buck). Điện áp đầu ra được điều chỉnh liên tục để đảm bảo cho điện áp đầu ra
luôn giữa ở một giá trị cố định. Trong sơ đồ cấu tạo thì LM2576 gồm khối : So sánh,
tạo dao động, công suất, quá dòng...

+ Chân 1 (Vin) : Chân nguồn đầu vào


+ Chân 2 (Vout) : Chân điện áp đầu ra. Tùy thuộc dòng LM2576 mà chân này có
điện áp ra ổn định khác nhau.
+ Chân 3 (GND) : Chân nguồn chung
+ Chân 4 (Feedback) : Chân đưa tín hiệu phản hồi từ đầu ra về đầu vào. Đưa vào
bộ so sánh để điều chỉnh ổn định điện áp
+ Chân 5 (On/Off) : Chân đóng mở. Thường để GND

2.1.3 Thông số chính của LM2576


- Điện áp đầu vào :
+ LM2576 : 45V
+ LM2576HV : 60V
- Dòng điện đầu ra : 3A
- Giải nhiệt độ hoạt động là : −65˚C to +150˚C
- Điện áp ổn định đầu ra :
+ LM2576HVS-3.3 : 3.3V
+ LM2576HVS-5.0 : 5V
+ LM2576HVS-12 : 12V
+ LM2576HVS-15 : 15V
+ LM2576HVS-ADJ : ADJ (1.25V ~ 37V)

Hình 10: Sơ đồ nguyên lý mạch nguồn 5V, 24V cấp cho mạch

12
Tụ lọc đầu vào các bạn có thể lắp theo datasheet tuy nhiên linh kiện ở Việt Nam
không tốt, thông thường ta dùng tụ 1000uF, còn điện áp thì theo giá trị đầu vào. Ở đây
sử dụng tụ 34V 1000uF. Sau đó lắp thêm 1 con 104 ở sau con 1000uF này.
Đối với diode sử dụng loại 1N5822, ngoài con này hiện nay còn có có thể thay
khác, chỉ cần diode xung và có tần số đáp ứng được là có thể thay thế
Cuộn cảm 100uH là theo tiêu chuẩn, tuy nhiên nên dùng từ 220uH đến 330uF.
Cặp tụ lọc đằng sau cũng vậy. Nên ghép 1 con tụ hóa và 1 tụ 104 để lọc nguồn phía sau.
Ở đây sử dụng tụ 2000uF và một tụ gốm 104.

2.1.4. Thiết kế layout

Hình 11: Sử dụng Proteus PCB để thiết kế layout board mạch


Sau khi hoàn tất ta được mạch in như sau, tiến hành ủi mạch và hàn để được board
hoàn chỉnh, trên thực tế hoàn thành sản phẩm như hình 12 và 13.

Hình 12: Mạch in cho board nguồn


13
Hình 13: Hình ảnh thực tế mạch nguồn LM2576T-5V

2.2 Thiết kế mạch điều khiển với Arduino, LCD, Relay


2.2.1 Thử nghiệm trên Proteus 8

Hình 14: Sơ đồ nguyên lý mạch điều khiển trên Proteus 8.5


Ban đầu thực hiện các khối LCD, khối Led hiển thị, Loa báo hiệu và Khối Relay.
Vì trong proteus không có phần tử RFID nên bắt buộc tiến hành thử bằng 2 nút nhấn

14
“thẻ đúng” và “thẻ sai” để tiến hành chạy thử, khảo sát các khối trên đã hoạt động tốt
hay chưa.
Thực hiện viết code và nạp vào “SIMULINO NANO”
Bằng cách kích đúp vào phần tử “SIMULINO NANO” sau đó chọn đường dẫn
đến file .HEX xuất ra từ Arduino IDE tại mục Program File.
Code test trên Proteus
//Khai báo thư viện LCD
#include <LiquidCrystal.h>
//Gán biến lcd
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

void granted(){
digitalWrite(A3, HIGH);
delay(3000);
digitalWrite(A3, LOW);
}//Chương trình con cho relay đóng trong 3s sau đó mở

void reset(){
lcd.clear();
lcd.print("Da xoa du lieu..");
delay(500);
setup();
loop();
}//Chương trình con khi thực hiên nhấn nút reset dữ liệu

void setup() {
//Khai báo các chân OUT/INPUT sẽ sử dụng
pinMode(A3, OUTPUT);
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
pinMode(A0, OUTPUT);
pinMode(A1, INPUT);
pinMode(12, INPUT);
pinMode(13, INPUT);
digitalWrite(A3,LOW);
digitalWrite(A4,HIGH);
digitalWrite(A5,LOW);
Serial.begin(9600);
lcd.begin(16,2);
//Cho viết lên Monitor và LCD
Serial.println(F("VDK HKI/16-17"));
lcd.print(F("VDK HKI/16-17"));
//Thực hiện cho còi kêu 3 tiếng beep khi khởi động
digitalWrite(A3, LOW);
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
delay(100);
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
delay(300);
digitalWrite(A0, HIGH);
delay(800);
digitalWrite(A0, LOW);
delay(1000);
Serial.println(F("ALL READY"));
lcd.setCursor(0,1);

15
lcd.print(F("All Ready..."));
delay(300);
}

void loop() {
if (digitalRead(A1)) reset(); //Kiểm tra xem có nhấn nút reset không
if (digitalRead(12)){ //Kiểm tra nếu nhấn nút thẻ đúng
Serial.println(F("The chap nhan! "));
lcd.clear();
lcd.print(F("The chap nhan! "));
digitalWrite(A4, LOW);
digitalWrite(A0, HIGH);
delay(300);
digitalWrite(A0, LOW);
digitalWrite(A4, HIGH);
granted();
}
if (digitalRead(13)){ //Kiểm tra nếu nhấn nút thẻ sai
Serial.println(F("Khong dung the "));
lcd.clear();
lcd.print(F("Khong dung the! "));
digitalWrite(A4, LOW);
digitalWrite(A0, HIGH);
delay(300);
digitalWrite(A0, LOW);
digitalWrite(A4, HIGH);
}
}

Hình 15: Quá trình nạp file chương trình vào Proteus 8
2.2.2 Kết quả thử nghiệm
Sau khi tiến hành chạy thử thì ta được kết quả như mong muốn; nhấn reset thì
LCD khởi động lại, nhấn đúng thẻ hiển thị trên LCD và Relay đã đóng, nhấn sai thì hiển
thị LCD và Relay không hiện tượng.

16
Hình 16: Kết quả chạy thử đèn Relay đã sáng sau khi nhấn nút thẻ chấp nhận
Từ đây ta có thể tiếp tục đến với bước tiếp theo là thiết kế layout cho mạch dựa
vào sơ đồ nguyên lý có sẵn và tạo thêm kết nối với mạch RFID RC522.

Hình 17: Mạch in layout mạch điều khiển chính


Sau khi thiết kế mạch layout tiến hành in ủi mạch, rửa mạch, hàn ta được thành
phẩm tiến hành dùng VOM đo đạc lại các chân nối và tiến hành khảo sát không vi điều

17
khiển bằng cách nối các chân tín hiệu vào áp +5V.

Hình 18: Quá trình đo đạc thử nghiệm lại kết quả làm mạch
18
Cuối cùng là kết nối vi điều khiển Arduino Nano và nạp chương trình, hoàn
thiện mạch điều khiển chính.

Hình 19: Mạch điều khiển chính sau khi đã gắn vi điều khiển và nạp code
Code Arduino hoàn thiện
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

boolean programMode = false;


int successRead;
byte readCard[4];
byte Max_ROM = 126;

void RemoveID(byte idReadCard[4]) {


for (int id = 2; id <= 126; id++){
int startid = (id-1)*4+1;
if (EEPROM.read(startid) == idReadCard[0] && EEPROM.read(startid+1) ==
idReadCard[1] && EEPROM.read(startid+2) == idReadCard[2] &&
EEPROM.read(startid+3) == idReadCard[3]){
EEPROM.write(startid,0);
EEPROM.write(startid+1,0);
EEPROM.write(startid+2,0);
EEPROM.write(startid+3,0);
return true;
}
}
return false;
}

19
void granted(){
digitalWrite(A3, HIGH);
delay(3000);
digitalWrite(A3, LOW);
}

int getID() {
if (digitalRead(A1)) reset();
if (!mfrc522.PICC_IsNewCardPresent()) {
return 0;
}
if (!mfrc522.PICC_ReadCardSerial()) {
return 0;
}
Serial.println(F("Tim kiem PICC's UID:"));
for (int i = 0; i < 4; i++){
readCard[i] = mfrc522.uid.uidByte[i];
Serial.print(readCard[i],HEX);
Serial.print("");
}
Serial.println("");
mfrc522.PICC_HaltA();
return 1;
}
bool ReadROM(byte idReadCard[4]){
for (int id = 2; id <= 126; id++){
int startid = (id-1)*4+1;
if (EEPROM.read(startid) == idReadCard[0] && EEPROM.read(startid+1) ==
idReadCard[1] && EEPROM.read(startid+2) == idReadCard[2] &&
EEPROM.read(startid+3) == idReadCard[3]) return true;
}
return false;
}
void WriteROM(byte idReadCard[4]){
for (int id = 1; id <= 126; id++){
int startid = (id-1)*4+1;
if (EEPROM.read(startid) == 0 && EEPROM.read(startid+1) == 0 &&
EEPROM.read(startid+2) == 0 && EEPROM.read(startid+3) == 0){
EEPROM.write(startid,idReadCard[0]);
EEPROM.write(startid+1,idReadCard[1]);
EEPROM.write(startid+2,idReadCard[2]);
EEPROM.write(startid+3,idReadCard[3]);
return true;
}
}
return false;
}
void checkMaster() {
lcd.clear();
if (EEPROM.read(1) != 0 || EEPROM.read(2) != 0 || EEPROM.read(3) != 0 ||
EEPROM.read(4) != 0){
Serial.print(F("UID The chu: "));
lcd.print(F("UID The chu:"));
lcd.setCursor(0,1);
for (int i = 1; i < 5; i++) {
Serial.print(EEPROM.read(i),HEX);
lcd.print(EEPROM.read(i),HEX);
}
Serial.println("");
}else{
Serial.println(F("Quet the de them"));
lcd.print(F("Chua co the chu"));
lcd.setCursor(0,1);
Serial.println(F("Quet the de them"));

20
lcd.print(F("Quet the de them"));
do{
successRead = getID();
}
while (!successRead);
digitalWrite(A4, LOW);
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
lcd.clear();
Serial.println(F("Dang them..."));
lcd.print(F("Dang them..."));
WriteROM(readCard);
lcd.clear();
Serial.println(F("Da them The chu"));
lcd.print(F("Da them The chu"));
lcd.setCursor(0,1);
Serial.println(F("Thanh cong!"));
lcd.print(F("Thanh cong!"));
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
digitalWrite(A4, HIGH);
}
}

void ShowReaderDetails() {
byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);
if (v == 0x91 || v == 0x92)
Serial.print(F("Dau doc the san sang"));
else
Serial.println(F(" (unknown)"));
if ((v == 0x00) || (v == 0xFF)) {
Serial.println(F("Kiem tra lai ket noi"));
while (true);
}
}

void reset(){
//Xóa toàn bộ biến nhớ hiện thời
for (int id = 0; id <= 1024; id++){
EEPROM.write(id,0);
}
lcd.clear();
lcd.print("Da xoa du lieu..");
setup();
loop();
}

boolean isMaster(byte test[]) {


if (EEPROM.read(1) == test[0] && EEPROM.read(2) == test[1] &&
EEPROM.read(3) == test[2] && EEPROM.read(4) == test[3])
return true;
else
return false;
}

void Fullcheck(){
if (programMode) {
if (isMaster(readCard)) {
Serial.println(F("Da thao the chu"));
Serial.println(F("-----------------------------"));
lcd.clear();

21
lcd.print(F("Da thao the chu!"));
digitalWrite(A4, HIGH);
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
programMode = false;
return;
}else{
if (ReadROM(readCard)) {
lcd.setCursor(0,1);
Serial.println(F("Dang xoa the... "));
lcd.print(F("Dang xoa the... "));
digitalWrite(A4, HIGH);
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
RemoveID(readCard);
Serial.println(F("-----------------------------"));
Serial.println(F("Da xoa the! "));
lcd.setCursor(0,1);
lcd.print(F("Da xoa the! "));
digitalWrite(A4, LOW);
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
}
else {
lcd.setCursor(0,1);
Serial.println(F("Dang them the..."));
lcd.print(F("Dang them the..."));
digitalWrite(A4, HIGH);
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
WriteROM(readCard);
Serial.println(F("-----------------------------"));
Serial.println(F("Da them the! "));
lcd.setCursor(0,1);
lcd.print(F("Da them the! "));
digitalWrite(A4, LOW);
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
}
}
}else{
if (isMaster(readCard)) {
programMode = true;
Serial.println(F("The Master, moi them/xoa the"));
Serial.println(F("-----------------------------"));
lcd.clear();
lcd.print(F("Da gan The chu!"));
lcd.setCursor(0,1);
lcd.print(F("Quet de them/xoa"));
digitalWrite(A4, LOW);
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
}else {
if (ReadROM(readCard)) {
Serial.println(F("The chap nhan! "));
lcd.clear();
lcd.print(F("The chap nhan! "));
digitalWrite(A4, LOW);

22
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
digitalWrite(A4, HIGH);
granted();
}
else {
Serial.println(F("Khong chap nhan!"));
lcd.clear();
lcd.print(F("Khong chap nhan!"));
digitalWrite(A4, LOW);
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
digitalWrite(A4, HIGH);
}
}
}
}

void setup() {
//Định nghĩa các chân được sử dụng INPUT OUTPUT
pinMode(A3, OUTPUT);
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
pinMode(A0, OUTPUT);
pinMode(A1, INPUT);
digitalWrite(A3,LOW);
digitalWrite(A4,HIGH);
digitalWrite(A5,LOW);
Serial.begin(9600); //Khởi động Monitor baud rate 9600bps
lcd.begin(16,2); //Khởi động LCD 16x2
Serial.println(F("VDK HKI/16-17")); //Hiển thị trên Serial Monitor
lcd.print(F("VDK HKI/16-17")); //Hiện thị trên LCD
SPI.begin(); //MFRC522 sử dụng giao tiếp SPI
mfrc522.PCD_Init(); //Cài đặt thông số cho phần cứng MFRC522
digitalWrite(A3, LOW);
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
delay(100);
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
delay(300);
digitalWrite(A0, HIGH);
delay(800);
digitalWrite(A0, LOW);
delay(1000);
ShowReaderDetails(); //Hiện thông số RFID Reader RC552 lên Serial Monitor
Serial.println(F("ALL READY"));
lcd.setCursor(0,1); //Chuyển vị trí con trỏ LCD đến dòng 2 cột 1
lcd.print(F("All Ready..."));
delay(300);
checkMaster(); //Kiểm tra thẻ chủ lưu chưa thông qua hàm checkMaster()
}

void loop() {
successRead = getID(); //Kiểm tra xem có đang quét thẻ
không
if (successRead) Fullcheck(); //Nếu có thẻ thì thực hiện hàm
kiểm tra Fullcheck()
}

23
2.3 Giải thuật điều khiển mô hình khóa điện sử dụng RFID – Solenoid

Hình 20: Sơ đồ giải thuật điều khiển mô hình khóa điện sử dụng RFID – Solenoid
Sự kiện nhấn nút Reset: Tín hiệu được lấy từ chân A1 vào, nếu có thì thực hiện
xóa bộ nhớ EEPROM. Nút này được khóa trong hộp điều khiển, trường hợp mất thẻ
master chủ thẻ có thể mở hộp điều khiển và thực hiện reset.
Sự kiện quẹt thẻ: Thẻ từ thông qua Reader RC522 sẽ truyền tín hiệu qua giao
thức ISP, chương trình chính sẽ thực hiện kiểm tra và thực hiện so sánh đối chiếu theo
sơ đồ thuật toán để đưa ra kết quả như mong muốn.
Cơ sở dữ liêu: Ở đây thực chất là lưu vô các biến nhớ EEPROM. Chi tiết ở phần
sau sẽ giải thích rõ hơn về các biến nhớ này.
Còi, đèn: Ở đây sử dụng còi (Buzzer) 5V nhỏ thông dụng trên thị trường, khi
cấp nguồn 5V sẽ tạo ra tiếng beep, đèn sử dụng loại Bi-LED với 2 màu 3 chân Anot
chung. Thông qua một điện trở R330Ω để hạn dòng, thực hiện chớp nháy thông qua 2
chân tín hiệu A4, A5.
Relay: Sử dụng chân tín hiệu A3 để xuất tín hiệu vào chân Bazơ của transistor
C1815 để thông mạch từ chân Colector xuống Emitor xuống Ground khi đó VCC từ
nguồn sẽ thông qua Relay, trở và led báo hiệu qua trans C1815 và xuống Ground. Đối
với Relay sử dụng trực tiếp nguồn 5V vì cuộn Solenoid đang dùng hoạt động ở hiệu điện

24
thế 24V, nếu chia nguồn sẽ làm mạch trở nên phức tạp, và dòng cấp cho Relay nào cũng
tương đối nhỏ không ảnh hưởng hay gây sụt áp cho mạch điều khiển. Chi tiết mạch kích
Relay như bên dưới.

Hình 21: Sơ đồ nguyên lý mạch kích Relay


2.4 Bộ nhớ EEPROM
Có thể nói EEPROM là công nghệ mới nhất của ROM mà điều khác biệt cơ bản
là chúng có khả năng xoá được bằng phương pháp lập trình mà chúng không cần đến
các thiết bị chuyên dụng như các thế hệ trước của nó. Bằng cách sử dụng EEPROM
(hoặc flash ROM) người ta có thể dễ dàng xoá bỏ các chương trình được nạp trên nó
của các bo mạch chủ trong máy tính cá nhân mà không cần thêm một thao tác cơ học
nào khác kể cả tháo vỏ máy tính. EEPROM còn giúp các thiết bị khác (bo mạch mạng,
bo mạch đồ hoạ, wireless access points, bộ định tuyến...hoặc trong điện thoại, thiết bị
giải trí số cá nhân...) có thể nâng cấp firmware mà không cần thay đổi chip nhớ, việc mà
trước kia người ta thường thực hiện gắn chip trên các đế để có thể thay thế sau này bằng
cách gỡ bỏ chúng và thay bằng chip khác.
Arduino sử dụng công nghệ này cho quá trình ghi nạp Flash và thực hiện chạy
bằng bootloader được nạp sẵn trên chíp nên quá trình nạp code rất thuận tiện chỉ cần
25
thông qua giao tiếp UART là có thể nạp được ngay.
Sau đây là thông số EEPROM của một số loại vi điều khiển của mạch Arduino:
- 1024 byte trên ATmega328
- 512 byte trên ATmega168 và ATmega8
- 4 KB trên ATmega1280 và ATmega2560
Arduino Nano sử dụng chíp Atmega328 nên có 1024 byte nhớ. Quá trình ghi
đọc dữ liệu đối với mô hình này như sau:
- Thực hiện ghi dữ liệu đầu tiên cho thẻ Master với 4 ô nhớ 1, 2, 3 và 4. Do mỗi
thẻ có một UID và một UID bao giồm 4 byte. Mỗi byte có giá trị từ 0 – 255 tương ứng
với HEX là 00 – FF. Trừ ô nhớ đầu tiên cho biến nhớ vị trí hiện thời của cửa (Mở/đóng,
nếu xét đến trường hợp quét thẻ một lần để mở, 2 lần để đóng).
- 1024 byte nhớ ta còn lại 1019 byte cho việc lưu trữ UID thẻ con. Các thẻ con
này sẽ được lưu trữ nếu thẻ Master được quét, nếu trường hợp thẻ đã được lưu rồi thì sẽ
kiểm xóa vị trí ô nhớ đó đi. Sau này, khi thẻ mới được thêm sẽ ghi đè vào 4 ô nhớ này.
Tổng số thẻ con có thể lưu trữ tối đa là 1019/4 bằng 254 thẻ. Đáp ứng nhu cầu của một
bãi giữ xe nhỏ hoặc một văn phòng làm việc.
Sự thuận tiện của việc sử dụng EEPROM không chỉ ở việc không cần kết nối
phần cứng rừm rà, chi phí giảm, mà còn ở việc lưu và xóa một cách dễ dàng với cú pháp
lập trình đơn giản:
Cú pháp làm việc với EEPROM
byte giatri = EEPROM.read(vitri); //Đọc ra một giá trị
EEPROM.write(vitri, giatri); //Ghi giá trị vào một byte nhớ

* LƯU Ý: Mỗi ô nhớ trong EEPROM chỉ có thể được ghi hoặc xóa 100.000 lần. Vì vậy,
bạn hãy cẩn thận khi sử dụng nó và chỉ dùng nó khi cần thiết.
Dĩ nhiên không có gì là chỉ có ưu điểm mà không có khuyết điểm. Với giới hạn
trên ta cần cẩn trọng trong việc lưu hoặc xóa một UID, mỗi UID là 4 byte nhớ nó là con
số nhiều trong 1 kbyte hạn hẹp cho phép lưu trữ trên chip nhớ Atmega328. Tuy nhiên
việc lưu một UID người dùng vào người đó dùng sẽ giữ nó trong suốt quá trình làm việc,
hoạt động, hiếm khi mới mất thẻ. Và khi mất thẻ cũng sẽ có kinh phí đền bù nên việc
giới hạn ghi xóa trên là có thể chấp nhận được.

26
3. KẾT QUẢ VÀ KHẢO NGHIỆM
3.1 Chế tạp đế nâng mô hình, tránh nhiễu, chập chạp do kim loại rơi vào
Sau khi board lắp ráp hoàn thành, nhóm tiến hành thiết kế đế nâng mô hình,
tránh chập chạm, sự cố, nhiễu,v.v…
Tận dụng mặt gỗ thực hiện khoan và gắn board lên đế ta được sản phẩm hoàn
thiện đưa vào khảo nghiệm.

Hình 22: Sản phầm hoàn thiện nhìn từ trên

27
Hình 23: Sản phầm hoàn thiện nhìn từ mặt bên
Kích thước thực tế của mô hình có bán kính 280mm. Có thể nạp code nâng cấp
trực tiếp bằng cáp mà không cần tháo Arduino ra. Mạch nguồn, Mạch chính, Solenoid
đã hoạt động sau khi hoàn thiện sản phẩm cuối cùng.
Điện áp đầu vào cho toàn mạch sử dụng điện lưới 220V, biến áp hoạt động tốt.
không kêu, mạch nguồn (LM2576T-5V) không nóng. Relay đá tốt, không nhiễu.
Dưới đây là một số hình ảnh thực tế quá trình thử nghiệm của nhóm:

Hình 24: Ảnh thực tế khi đã quét thẻ chủ

28
Hình 25: Ảnh thực tế khi thêm thẻ thành công

Hình 26: Ảnh thực tế khi xóa thẻ thành công

Hình 27: Ảnh thực tế khi quét thẻ không đúng


29
Hình 28: Ảnh thực tế khi quét thẻ thành công, Relay kích

Hình 29: Ảnh thực tế trạng thái Solenoid đóng


4. KẾT LUẬN VÀ KIẾN NGHỊ
4.1 Kết luận
- Đã thiế t kế và chế tạo thành công mô hình khóa điện tử RFID – Solenoid.
- Trạng thái hoạt động hiể n thi ̣trên màn hình dạng kỹ thuật số.
- Thiết kế mạch điện nguồn bằng LM2576T-5V.
- Thiết lập giải thuật điều khiển mô hình hoạt động tốt, không gặp lỗi nhận

30
dạng sai thẻ, Relay không nhiễu hay đóng ngắn loạn.

Thời gian thực hiện thao tác nhanh chóng thời gian khoảng vài s là vi xử lý
đã xử lý xong.
4.2 Kiến nghị
Vì là mô hình chế tạo mẫu nên không có thể nâng cấp đáp ứng yêu cầu của thương
mại trên thị trường. Do vậy để triển thi kết quả nghiên cứu vào thực tế cần đầu tư vào
công việc thiết kế khuôn mẫu bao che bằng khuôn đúc vật liệu bằng nhựa, kim loại.
Board cần bố trí hợp lý lại, v.v…

31
Tài liệu tham khảo

Tiếng Việt
[1]. Nguyễn Ngọc Cẩn, Kỹ thuật điều khiển tự động, Nhà xuất bản Đại học Quốc
gia Thành Phố Hồ Chí Minh.
[2]. Dương Minh Trí, Linh kiện điện tử, Nhà xuất bản Khoa học và kỹ thuật 2004.
Tiếng nước ngoài
[3]. Theo Michael Margolis, Arduino Cookbook, 2011.

32

You might also like