Tải bản đầy đủ (.pdf) (80 trang)

Đồ án tốt nghiệp: Thiết kế, chế tạo phần cứng thiết bị điểm danh lớp thực hành bằng cảm biến vân tay

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.73 MB, 80 trang )

TRƢỜNG ĐẠI HỌC SƢ PHẠM KỸ THUẬT HƢNG YÊN
KHOA ĐIỆN –ĐIỆN TỬ

ĐỒ ÁN TỐT NGHIỆP
TÊN ĐỀ TÀI : Thiết kế, chế tạo phần cứng thiết bị điểm danh lớp
thực hành bằng cảm biến vân tay
Sinh Viên Thực Hiện

: Trần Đình Linh

Lớp
Giảng Viên Hướng Dẫn

: 112182.1
: Nguyễn Thị Thắm

Hưng Yên 2022

package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{


private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );
setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);

}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


LỜI MỞ ĐẦU
LỜI CẢM ƠN
Chương 1 Tổng quan về đề tài ...........................................................................1
1.1 Giới thiệu về đề tài ....................................................................................1
1.2 Mục đính nghiên cứu .................................................................................1
1.3 Giới hạn đề tài ...........................................................................................2
1.4 Phương pháp và phương tiện nghiên cứu ..................................................2
1.4.1 Phương pháp nghiên cứu ....................................................................2
1.4.2 Phương tiện .........................................................................................2
Chương 2 Cơ sở lý thuyết ...................................................................................3
2.1 Giới thiệu về arduino .................................................................................3
2.1.1 Khái niệm về arduino .........................................................................3
2.1.2 Arduino uno R3 .................................................................................3
2.2.2 Năng lượng .........................................................................................6
2.2.3 Bộ nhớ ................................................................................................6
2.2.4 Cơng cụ lập trình ................................................................................6
2.2 Module RFID RC522 ................................................................................8
2.2.1 Tổng quan về RFID RC522 ................................................................8
2.2.2 Chi tiết cấu hình chân RC522 ............................................................9
2.2.3 Các đặc tính RC522 ............................................................................9
2.2.4 Ứng dụng module RFID RC522.......................................................10
2.2.5 Tổ chức vùng nhớ thẻ từ ..................................................................10

2.2.6 Chuẩn giao tiếp spi ...........................................................................10
2.3 Cảm biến vân tay .....................................................................................12
2.3.1 Tổng quan về cảm biến vân tay ........................................................12
2.3.2 Cảm biến As 608 ..............................................................................13
2.4 Mạch chuyển đổi I2C ..............................................................................15
2.5 Stm32f103 ............................................................................................... 16
2.5.1 Giới thiệu về họ stm .........................................................................16
2.5.2 Kit stm32f103 ...................................................................................17
2.6 ESP 8266 .................................................................................................19
2.6.1 Tổng quan về ESP 8266 ..................................................................19
2.6.2 Thông số kĩ thuật ..............................................................................21
2.7 Module ds1307 và chuẩn giao tiếp I2C ...................................................21
package buoi3;

import java.awt.BorderLay out;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{

private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),

down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );
setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {

new
DemoTy peButton().s etVisible(true );
}
}


2.7.1 Module ds1307 .................................................................................21
2.7.2 Giao thức i2c ....................................................................................22
2.8 LCD 20x4 ............................................................................................25
2.9 Chuẩn giao tiếp UART ............................................................................26
2.10 Cấu hình CUBE MX cho mạch ............................................................28
Chương 3 Thiết kế chế tạo.................................................................................33
3.1 Sơ đồ khối hệ thống ................................................................................33
3.2 Nguyên lý mạch .......................................................................................35
3.3 Sơ đồ mạch in và bố trí linh kiện.............................................................36
3.3 Lưu đồ thuật tốn .....................................................................................38
3.4 Hình ảnh hồn thiện ................................................................................41
Chương 4 Kết luận và hướng phát triển………………………………………51
4.1 Kêt luận....................................................................................................42
4.2 Hướng phát triển đề tài ............................................................................42
Tài liệu tham khảo .............................................................................................43
Phụ lục ...............................................................................................................44

package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );
setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new

TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


Danh mục hình ảnh
Hình 2.1 Uno r3 ..................................................................................................3
Hình 2.2 Vi điều khiển trên board uno ................................................................4
Hình 2.3 Giao diện cơng cụ lập trình ..................................................................7
Hình 2.4 Giao diện device manager ....................................................................7
Hình 2.5 Thiết lập board và cổng com cho uno ..................................................8
Hình 2.6 Thẻ từ RFID.........................................................................................8
Hình 2.7 Sơ đồ chân RC522 ................................................................................9
Hình 2.8 Tổ chức vùng nhớ thẻ mifare class .....................................................10
Hình 2.9 Mơ hình giao tiếp spi (stm32 với RC522) ..........................................11
Hình 2.10 Cơ chế truyền và nhận của master slave...........................................12
Hình 2.11 Một số mẫu vân tay ..........................................................................13
Hình 2.12 Cảm biến vân tay ..............................................................................14
Hình 2.13 Mạch chuyển đổi i2c lcd...................................................................15
Hình 2.14 Bảng địa chỉ i2c ................................................................................16
Hình 2.15 Tổng quan về bộ kit ..........................................................................17

Hình 2.16 Sơ đồ chân ........................................................................................20
Hình 2.17 Chíp và kít esp 8266 ........................................................................21
Hình 2.18 Module DS1307 ................................................................................22
Hình 2.19 Giao tiếp i2c 1 master nhiều slave ....................................................23
Hình 2.20 Khung truyền i2c ..............................................................................23
Hình 2.21 Cách giao tiếp với giữa master với slave thông qua địa chỉ slave....24
Hình 2.22 Khởi tạo giao tiếp i2c .......................................................................25
Hình 2.23 Màn hình LCD 20x4 ........................................................................26
Hình 2.24 Kết nối UART ..................................................................................27
Hình 2.25 Khung truyền UART ........................................................................27
Hình 2.26 Cấu hình cho chip stm32 ..................................................................29
Hình 2.27 Sắp xếp thứ tự ngắt cho chip ............................................................29
package buoi3;

import java.awt.BorderLay out;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{

private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),

down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );
setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {

new
DemoTy peButton().s etVisible(true );
}
}


Hình 2.28 Cấu hình clock cho chip ...................................................................30
Hình 2.29 Cấu hình UART1 và 2 ......................................................................30
Hình 2.30 Cấu hình spi ......................................................................................31
Hình 2.31 Cấu hình I2C.....................................................................................31
Hình 3.1 Sơ đồ khối ...........................................................................................33
Hình 3.2 Khối nguồn .........................................................................................33
Hình 3.3 Khối cảm biến.....................................................................................33
Hình 3.4 Khối hiển thị .......................................................................................34
Hình 3.5 Khối xử lý trung tâm ..........................................................................34
Hình 3.6 Sơ đồ nguyên lý ..................................................................................35
Hình 3.7 Sơ đồ mạch in .....................................................................................36
Hình 3.8 Sơ đồ bố trí linh kiện trên mặt board ..................................................37
Hình 3.9 Lưu đồ thuật tốn mạch ......................................................................38
Hình 3.10 Lưu đồ thuật tốn trên google scritp.................................................39
Hình 3.11 Hình ảnh hoàn thiện sản phẩm .........................................................41

package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;

import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );
setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));

lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


LỜI MỞ ĐẦU
Ngày nay, ngành công nghệ kỹ thuật ngày càng phát triển. Các máy móc đều
được tự động hóa đáp ứng nhu cầu con người và đem lại hiểu quả cao cho các doanh
nghiệp trong nhiều lĩnh vực như cơng nghiệp, nơng nghiệp,...Bên cạnh trang thiết bị
máy móc hiện đại, nhân lực cũng là một trong những yếu tố quan trọng quyết định
đến sự tồn tại và phát triển của các doanh nghiệp.
Chính vì nhu cầu nhân lực cao và có nhiều phức tạp nên nhu cầu quản lý địi
hỏi cũng cần phải cải tiến để có thể đáp ứng nhu cầu người dùng một cách tốt nhất.
Hiện nay, có rất nhiều cách để quản lý học sinh sinh viên đi học khác nhau, cụ
thể như điểm danh trực tiếp (hình thức này yêu cầu giáo viên và phải có danh sách
kèm theo bên cạnh, giáo viên thường sẽ gọi tên và đối chiếu với danh sách để kiểm
tra. Hình thức này mất khá nhiều thời gian, lại khơng mang tính chun
nghiệp. Bên cạnh đó u cầu thầy/cơ phải có phương pháp xác định người được điểm
danh là đúng.), điểm danh bằng hình thức làm bài kiểm tra giấy gây mất thời gian và
độ chính xác chưa cao. quản lý kiểm sốt bằng hình thức quẹt thẻ RFID ( hình thức
này khá phổ biến, nhanh, gọn lại có tính chính xác cao, nhưng địi hỏi người dùng
phải mang theo thẻ, nếu khống có thì khơng thể điểm danh được) hay bằng hình thức

quét vân tay (hình thức cũng rất phổ biến trong các doanh nghiệp, công ty hiện nay,
chuyên nghiệp, chính xác, yêu cầu người dùng phải them vân tay trước đó, hay được
áp dụng chấm cơng cho nhân viên). Nhận thấy nhu cầu quản lý thường hay có nhiều
hình thức xảy ra như điểm danh chấm cơng cho nhân viên, hay điểm danh trong
trường hợp đột xuất ( trong các cuộc họp), kiểm sốt khách tham quan cơng ty nên
nhóm quyết định chọn đề tài :
―Thiết kế, chế tạo phần cứng thiết bị điểm danh lớp thực hành bằng cảm
biến vân tay‖ để có thể điểm danh trong nhiều trường hợp khác nhau, và được lưu và
một file excel và được đưa lên server nội bộ của công ty để dễ dàng quản lý từ xa .Tất
cả các thao tác này đều do chip STM32F103C8T6 đảm nhận và thực hiện thơng qua
các chuẩn giao tiếp. Bên cạnh đó, nhóm cũng muốn thơng qua đề tài để tìm hiểu thêm
về ứng dụng của công nghệ vào đời sống đồng thời vận dụng và hiểu sâu hơn về các
kiến thức đã được học.

package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),

right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );
setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new

DemoTy peButton().s etVisible(true );
}
}


LỜI CẢM ƠN
Nhóm sinh viên thực hiện đề tài xin chân thành cảm ơn các thầy cô giáo khoa
Điện – Điện tử trường ĐHSPKT Hưng Yên, đã tận tình chỉ bảo, truyền đạt cho chúng
em những kiến thức, những thành tựu khoa học của xã hội và của nghành điện tử để
chúng em có thể thực hiện đề tài này.
Đặc biệt chúng em xin bày tỏ lòng biết ơn sâu sắc đến cô Nguyễn Thị Thắm là
người đã hướng dẫn và tận tình giúp đỡ, chỉ dạy chúng em để chúng em thực hiện đề
tài này.
Nhóm sinh viên xin chân thành cám ơn những ý kiến đóng góp của quý thầy, cô
giáo và các bạn cho việc thực hiện đề tài này.
Chúng em xin chân thành cảm ơn!

package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{

private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );
setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);

}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


Chƣơng I
Tổng quan về đề tài
1.1 Giới thiệu về đề tài
Ngày nay cùng với sự phát triển mạnh mẽ của các ngành khoa học kỹ thuật,
công nghệ kỹ thuật điện tử mà trong đó là kỹ thuật tự động điều khiển đóng vai trị
quan trọng trong mọi lĩnh vực khoa học kỹ thuật, quản lí, cơng nghiệp, cung cấp thơng
tin... Do đó là một sinh viên chuyên ngành Điện tử, chúng ta phải biết nắm bắt và vận
dụng nó một cách có hiệu quả nhằm góp phần vào sự phát triển nền khoa học kỹ thuật
thế giới nói chung và trong sự phát triển kỹ thuật điện tử nói riêng. Bên cạnh đó cịn là
sự thúc đẩy sự phát triển của nền kinh tế nước nhà.
Như chúng ta cũng đã biết, Trường học là nơi cần được rèn luyện tính kỷ luật
cao bởi sẽ tạo ra những nhân tài của đất nước. Ý thức sinh viên trong môi trường học
tập cần phải nâng cao. Tuy nhiên khơng tránh khỏi tình trạng gian lận trong học
đường như: Nhờ học hộ, điểm danh hộ, thi hộ… làm ảnh hưởng tới chất lượng dạy và
học của ngôi trường.
Một trong những giải pháp được nhiều trường học áp dụng để loại bỏ tình trạng
tiêu cực như trên đó là sử dụng máy điểm danh bằng quẹt thẻ RFID và quét vân tay.
Điều đó sẽ giúp hỗ trợ điểm danh trong mỗi tiết học nhằm giúp giáo viên quản lý và
nắm bắt tình trạng học sinh một cách chính xác nhất. Đặc biệt sử dụng máy điểm
danh vào việc điểm danh cho sinh viên sẽ giúp cho sinh viên có thể chủ động thời
gian học tập và tới lớp của mình theo đúng quy định của nhà trường. Việc điểm danh
tự động nhanh chóng chỉ cần một lần xác nhận vân tay là sinh viên đã điểm danh xong

giúp tiện kiệm thời gian và chính xác nhằm nâng cao tính chuyên nghiệp trong nhà
trường. Từ những yêu cầu thực tế, chúng em đã chọn đề tài: ―Thiết kế và thi công hệ
thống điểm danh sinh viên sử dụng hai phương pháp quẹt thẻ RFID và quét vân tay‖
1.2 Mục đính nghiên cứu
Đồ án được nghiên cứu, khảo sát và thực hiện với mục đích áp dụng những
kiến thức đã được học trong nhà trường để thiết kế, tạo ra một hệ thống điểm danh
sinh viên bằng hai phương pháp quẹt thẻ RFID và quét vân tay.
Hệ thống gồm có:
Module RFID RC522
Module AS 608
Module ESP8266
Module DS1307
package buoi3;

import java.awt.BorderLay out;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{

private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),

down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

1

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );

this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


Mạch điều khiển dùng chip Stm32 và chip Arduino để xử lý
Màn hình LCD 20x4
1.3 Giới hạn đề tài
Trong giới hạn thời gian cho phép của đề tài này kết hợp với những kiến thức
có đươc trong suốt q trình học không cho phép thực hiện được một sản phẩm hồn
thiện nhất. Cho nên nhóm chúng em chỉ tập trung vào những vấn đề sau:
Dùng Board Arduino và Stm32 để làm trung tâm điều khiển toàn bộ hệ thống.
Module RFID RC522 để quẹt thẻ từ
Module AS 608 dùng đề quét vân tay
Module ESP8266 để kết nối mạng để gửi danh sách điểm danh lên gg sheet
Module DS1307 dùng để gửi danh sách điểm danh theo ca
Mạch điều khiển dùng chip Stm32 và chip Arduino để xử lý
Màn hình LCD 20x4 để hiện thị
Mạch chạy ổn định trong toàn bộ quá trình.
1.4 Phƣơng pháp và phƣơng tiện nghiên cứu
1.4.1 Phƣơng pháp nghiên cứu
Kết hợp giữa lý thuyết và thực nghiệm:
Sau khi nhận đề tài, nhóm đã tập trung tìm hiểu các vấn đề liên quan đến đề tài.
Sau đó lập trình mô phỏng, chế tạo mạch để kiểm tra thực tế. Trong quá trình chạy
thực tế kiểm tra lỗi, những hạn chế mắc phải để chỉnh sửa và phát triển thêm các ý
tưởng.

Phương pháp quan sát: khảo sát một số mạch điện thực tế đang có trên thị
trường và tham khảo thêm một số dạng mạch từ mạng Internet.
Phương pháp tham khảo tài liệu: bằng cách thu thập thông tin từ sách, tạp chí
về điện tử và truy cập từ mạng Internet.
1.4.2 Phƣơng tiện
Phần mềm biên dịch chương trình Keilc, IDE arduino, phần mềm thiết lập cơ
bản CUBE MX, phần mềm thiết kế mạch Altium, phần mềm mô phỏng Proteus.
Các giáo trình điện tử đã được học, tài liệu và các thảo luận trên Internet.
1.5 Ý nghĩa thực tiễn
Ý nghĩa thực tiễn của đề tài giúp giáo viên quản lý và nắm bắt tình trạng học
sinh một cách chính xác nhất và sẽ giúp cho sinh viên có thể chủ động thời gian học
tập và tới lớp của mình theo đúng quy định của nhà trường.
package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);

private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

2

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {

new
DemoTy peButton().s etVisible(true );
}
}


Chƣơng II
Cơ sở lý thuyết
2.1 Giới thiệu về Arduino
2.1.1 Khái niệm về arduino
Arduino là một nền tảng mã nguồn mở được sử dụng để xây dựng các dự án
điện tử. Arduino bao gồm cả bảng mạch lập trình (thường được gọi là vi điều khiển)
và một phần mềm hoặc IDE (Mơi trường phát triển tích hợp) chạy trên máy tính, được
sử dụng để viết và tải mã máy tính lên bo mạch.
Nền tảng Arduino giờ đã khá phổ biến với những người mới bắt đầu với thiết
bị điện tử. Không giống như hầu hết các bo mạch lập trình trước đây, Arduino không
cần phần cứng riêng để tải mã mới lên bo mạch - bạn có thể chỉ cần sử dụng cáp USB.
Ngoài ra, Arduino IDE sử dụng phiên bản đơn giản của C++, giúp việc học lập trình
dễ dàng hơn. Arduino cung cấp một mẫu chuẩn giúp dễ tiếp cận các chức năng của bộ
vi điều khiển hơn.
2.1.2 Arduino uno R3

Hình 2.1 Uno r3

package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;

import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

3

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));

this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


Thông số cơ bản:
Vi điều khiển

ATmega328 họ 8bit

Điện áp hoạt động

5V DC (chỉ được cấp qua cổng USB)

Tần số hoạt động

16 MHz


Dòng tiêu thụ

khoảng 30mA

Điện áp vào khuyên dùng

7-12V DC

Điện áp vào giới hạn

6-20V DC

Số chân Digital I/O

14 (6 chân hardware PWM)

Số chân Analog

6 (độ phân giải 10bit)

Dòng tối đa trên mỗi chân
I/O

30 mA

Dòng ra tối đa (5V)

500 mA


Dòng ra tối đa (3.3V)

50 mA

Bộ nhớ flash

32 KB (ATmega328) với 0.5KB dùng bởi bootloader

SRAM

2 KB (ATmega328)

EEPROM

1

KB (ATmega328)

Hình 2.2 Vi điều khiển trên board uno
Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng chỉ có 2
mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA. Ở mỗi chân
đều có các điện trở pull-up từ được cài đặt ngay trong vi điều khiển ATmega328 (mặc
định thì các điện trở này khơng được kết nối).
- Một số chân digital có các chức năng đặc biệt như sau:
package buoi3;

import java.awt.BorderLay out;
import java.awt.FlowLayout;

import javax.swing.JButton;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{

private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

4

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new

JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


-

2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive
– RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông
qua 2 chân này. Kết nối bluetooth thường thấy nói nơm na chính là kết nối

-

Serial khơng dây. Nếu không cần giao tiếp Serial, bạn không nên sử dụng 2

chân này nếu không cần thiết
Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với độ
phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm
analogWrite(). Nói một cách đơn giản, bạn có thể điều chỉnh được điện áp ra ở
chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những
chân khác.

-

Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngồi các
chức năng thơng thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao
thức SPI với các thiết bị khác.

-

LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm

-

nút Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số
13. Khi chân này được người dùng sử dụng, LED sẽ sáng.
Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu
10bit (0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V. Với
chân AREF trên board, bạn có thể để đưa vào điện áp tham chiếu khi sử dụng

các chân analog. Tức là nếu bạn cấp điện áp 2.5V vào chân này thì bạn có thể
dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân
giải vẫn là 10bit.
Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp
I2C/TWI với các thiết bị khác.

Ứng dụng của Arduino Uno R3

Aruino Uno R3 được sử dụng phổ biến trong việc tự thiết kế ra các mạch
điện tử như điều khiển led, gửi dữ liệu lên lcd, điều khiển motor,... hay được gắn
thêm các Shield để kết nối nhiều module cảm biến khác để thực hiện thêm nhiều
chức năng mở rộng như gửi dữ liệu qua wifi.
Ngồi ra, trên thị trường cịn có nhiều biến thể của Arduino Uno để thực
hiện thêm các tính năng chuyên dụng, ví dụ như mCore, Orion trên mBot được
chuyên dụng với việc dễ dàng phân biệt các loại module nào có thể sử dụng cắm
vào trên các cổng để trẻ dễ dàng sử dụng cho nhưng ai không quá mạnh về thiết kế
mạch điện tử.
package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;

public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

5

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new

DemoTy peButton().s etVisible(true );
}
}


2.2.2 Năng lƣợng
Arduino UNO có thể được cấp nguồn 5V thơng qua cổng USB hoặc cấp
nguồn ngồi với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V. Thường thì
cấp nguồn bằng pin vng 9V là hợp lí nhất nếu bạn khơng có sẵn nguồn từ cổng
USB. Nếu cấp nguồn vượt quá ngưỡng giới hạn trên, bạn sẽ làm hỏng Arduino UNO.
- GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi bạn

-

dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những chân này
phải được nối với nhau.
5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA.

-

3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA.

-

Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực

-

dương của nguồn với chân này và cực âm của nguồn với chân GND.
IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể

được đo ở chân này. Và dĩ nhiên nó ln là 5V. Mặc dù vậy bạn không

-

được lấy nguồn 5V từ chân này để sử dụng bởi chức năng của nó khơng
phải là cấp nguồn.
RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương
với việc chân RESET được nối với GND qua 1 điện trở 10KΩ.

2.2.3 Bộ nhớ
Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng:
- 32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ trong bộ
nhớ Flash của vi điều khiển. Thường thì sẽ có khoảng vài KB trong số này sẽ
được dùng cho bootloader nhưng đừng lo, bạn hiếm khi nào cần quá 20KB bộ
nhớ này đâu.
- 2KB cho SRAM (Static Random Access Memory): giá trị các biến bạn khai
báo khi lập trình sẽ lưu ở đây. Bạn khai báo càng nhiều biến thì càng cần nhiều
bộ nhớ RAM. Tuy vậy, thực sự thì cũng hiếm khi nào bộ nhớ RAM lại trở
thành thứ mà bạn phải bận tâm. Khi mất điện, dữ liệu trên SRAM sẽ bị mất.
- 1KB cho EPROM (Electrically Eraseble Programmable Read Only Memory):
đây giống như một chiếc ổ cứng mini – nơi bạn có thể đọc và ghi dữ liệu của
mình vào đây mà khơng phải lo bị mất khi cúp điện giống như dữ liệu trên
SRAM.
2.2.4 Công cụ lập trình
Ở đây chúng ta sử dụng cơng cụ lập trình IDE Arduino
package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

6

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new

JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


Về giao diện:

Hình 2.3 Giao diện cơng cụ lập trình
Bước 1: Chúng ta cắm kit Uno r3 vào máy tính để máy tính có thể nhận cổng
com trên máy tính. Chúng ta mở cửa số window tìm kiếm Device manager để kiểm
tra máy có nhận cổng com hay khơng Trường hợp máy tính chưa nhận driver chúng ta
phải tải driver về máy (thường là ch340 là chủ yếu, có một số khác do người dùng tự
thiết kế lại có thể khác về driver). Và kiểm tra ở mục com&port xem máy đã nhận
cổng hay chưa.

Hình 2.4 Giao diện device manager

Bước 2: Chúng ta vào giao diện của trình biên dịch arduino tại đây chúng ta
thiết lập cổng cho uno r3 bằng cách chúng ta vào tool /port( cổng của arduino uno
r3).Sau đó chúng ta thiết lập boar cho mạch bằng cách vào tool/board/arduino avr
board/ arduino uno.
package buoi3;

import java.awt.BorderLay out;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{

private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"

setSize(45 0, 350 );

7

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}



Hình 2.5 Thiết lập board và cổng com cho uno
Bước 3: Tại đây bạn có thể lấy các ví dụ mà IDE có sẵn để làm quen với board
hoặc bạn có thể lập trình ngay lập tức. Tiếp theo là đến compiler chương trình, nếu
chương trình compiler khơng xảy ra lỗi thì chúng ta sẽ nạp code vào trong board
thơng qua cáp bằng cách ấn upload và đợi done uploading
2.2 Module RFID RC522
2.2.1 Tổng quan về RFID RC522
RC522 là Module RFID đa giao tiếp với Arduino và vi điều khiển RC522 còn
gọi là MFRC-522 sản xuất bởi hãng vi điều khiển bán dẫn NFX. Module cho phép các
nhà phát triển giao tiếp với các vi điều khiển dựa trên giao thức SPI, I2C và UART
Module RC522 hoạt động ở tần số 13.56 MHz và đọc và ghi thẻ UID /
RFID. Các thẻ RFID giao tiếp được với module ở khoảng cách ngắn với tần số vô
tuyến nhờ cảm ứng điện từ lẫn nhau.
Trong các thiết bị bảo mật và thương mại, module rất phù hợp vì có thể phát
hiện được các trạng thái và thơng tin của thẻ RFID.
Có thẻ giao tiếp bằng uart, i2c hoặc spi tuỳ theo mục đích sử dụng

Hình 2.6 Thẻ từ RFID
package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;

import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

8

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));

lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


2.2.2 Chi tiết cấu hình chân RC522

-

Hình 2.7 Sơ đồ chân RC522
Chân reset có chức năng reset khi về mức 0
Chân 3.3v chân nguồn của module

-

Chân sda, sck, mosi, miso là các chân giao tiếp với module

-

GND chân âm nguồn module

-


-

-

-

-

2.2.3 Các đặc tính RC522
RFID RC522 sử dụng cảm ứng điện từ để kích hoạt thẻ và có tần số 13,56MHz
để truyền dữ liệu.
Thẻ RFID có thể sử dụng được với cả hai mặt của module khoảng cách tối đa
5cm.
Điện áp 3.3V được yêu cầu để hoạt động.
Chế độ ngủ tự động giúp module tiêu thụ ít điện năng hơn.
Module có ba loại giao tiếp (UART, SPI, I2C). Do đó, có thể sử dụng được với
hầu hết mọi vi điều khiển.
Có thể truyền dữ liệu lên đến 10Mb/s.
Các lựa chọn khác để thay thế:
PN532
SM130
Module RFID RDM630

package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;

import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

9

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));

this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


-

-

2.2.4 Ứng dụng module RFID RC522
RFID sử dụng như một thiết bị bảo mật.
Ở một số công ty, các thiết bị được sử dụng trong các mặt hàng mua sắm.
Một số sân bay cũng bắt đầu sử dụng RFID để xác định và kiểm tra túi xách và
các vật dụng khác.
Hệ thống chấm công hoặc bãi đậu xe cũng sử dụng RFID.

2.2.5 Tổ chức vùng nhớ thẻ từ

Thẻ MIFARE Classic là một thiết bị lưu trữ bộ nhớ. Bộ nhớ được chia thành
các cung, cũng được chia thành các khối 16 byte.
Thẻ MIFARE Classic 1K có 16 sector, mỗi sector được chia thành bốn
khối. Nếu chúng ta làm phép toán, chúng ta có thể tìm ra cấu trúc bộ nhớ sẽ như thế
nào: 16 byte (1 khối) * 4 khối * 16 sector = 1024 byte.

Hình 2.8 Tổ chức vùng nhớ thẻ mifare class
Trong đó CSN ở đây là nơi lưu địa chỉ UID ở đây còn tuỳ thuộc vào 1 số loại
thẻ có thể chỉnh sửa UID và có 1 số loại không thể thay dổi. Ở đây chúng ta sử dụng
thẻ có thể thay dổi UID , block số 3 là tổng của các block 0, 1, 2, 3 trên ở đây chúng
ta lưu site key là 0xff, thẻ được chia làm 2 vùng nhớ là vùng a va b. Vùng a từ đầu đến
hết sector số 9, vùng b là vùng còn lại
Dựa vào đây chúng ta có thể lưu data tại các ơ nhớ cho phép lưu data và key
của thẻ nhằm tăng tính bảo mật của thẻ
Tại đây chúng ta cũng có thể đọc/ghi thẻ thơng qua điên thoại có hỗ trợ nfc và
máy tính thông qua các phần mềm của hãng mifcare class tool
2.2.6 Chuẩn giao tiếp spi
SPI – Serial Peripheral Interface – hay còn gọi là giao diện ngoại vi nối tiếp,
được phát triển bởi hãng Motorola.
Chuẩn đồng bộ nối truyền dữ liệu ở chế độ full - duplex (hay gọi là "song cơng
tồn phần". Nghĩa là tại 1 thời điểm có thể xảy ra đồng thời quá trình truyền và nhận.
Là giao tiếp đồng bộ, bất cứ quá trình nào cũng đều được đồng bộ với xung
clock sinh ra bởi thiết bị Master không cần phải lo lắng về tốc độ truyền dữ liệu.
package buoi3;

import java.awt.BorderLay out;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JCheckBox;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{

private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

10

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));

this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


SPI thường được sử dụng giao tiếp với bộ nhớ EEPROM, RTC (Đồng hồ thời
gian thực), IC âm thanh, các loại cảm biến như nhiệt độ và áp suất, thẻ nhớ như MMC
hoặc thẻ SD hoặc thậm chí các bộ vi điều khiển khác.

Hình 2.9 Mơ hình giao tiếp spi (stm32 với RC522)
Sử dụng 4 đường giao tiếp nên đôi khi được gọi là chuẩn truyền thông ― 4
dây‖. 4 đường đó là :
SCK (Serial Clock): Thiết bị Master tạo xung tín hiệu SCK và cung cấp cho
Slave. Xung này có chức năng giữ nhịp cho giao tiếp SPI. Mỗi nhịp trên chân SCK
báo 1 bit dữ liệu đến hoặc đi → Q trình ít bị lỗi và tốc độ truyền cao.

MISO (Master Input Slave Output): Tín hiệu tạo bởi thiết bị Slave và nhận bởi
thiết bị Master. Đường MISO phải được kết nối giữa thiết bị Master và Slave.
MOSI (Master Output Slave Input): Tín hiệu tạo bởi thiết bị Master và nhận
bởi thiết bị Slave. Đường MOSI phải được kết nối giữa thiết bị Master và Slave.
SS (Slave Select): Chọn thiết bị Slave cụ thể để giao tiếp. Để chọn Slave giao
tiếp thiết bị Master chủ động kéo đường SS tương ứng xuống mức 0 (Low). Chân này
đôi khi còn được gọi là CS (Chip Select). Chân SS của vi điều khiển (Master) có thể
được người dùng tạo bằng cách cấu hình 1 chân GPIO bất kỳ chế độ Output (chân này
ở RC522 là chân sda).
Mỗi chip Master hay Slave đều có một thanh ghi dữ liệu 8 bits.
Quá trình truyền nhận giữa Master và Slave xảy ra đồng thời sau 8 chu kỳ đồng
hồ, một byte dữ liệu được truyền theo cả 2 hướng

package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),

left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

11

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}

public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


Hình 2.10 Cơ chế truyền và nhận của master slave
Quá trình trao đổi dữ liệu bắt đầu khi Master tạo 1 xung clock từ bộ tạo xung
nhịp (Clock Generator) và kéo đường SS của Slave mà nó truyền dữ liệu xuống mức
Low.
Cứ 1 xung clock, Master sẽ gửi đi 1 bit từ thanh ghi dịch (Shift Register) của
nó đến thanh ghi dịch của Slave thông qua đường MOSI. Đồng thời Slave cũng gửi lại
1 bit đến cho Master qua đường MISO.Như vậy sau 8 chu kỳ clock thì hồn tất việc
truyền và nhận 1 byte dữ liệu.
Dữ liệu của 2 thanh ghi được trao đổi với nhau nên tốc độ trao đổi diễn ra
nhanh và hiệu quả.
 Ưu điểm:
- Dữ liệu được truyền liên tục và khơng gián đoạn, vì khơng có bit Start
và bit Stop.
-

Hệ thống định địa chỉ đơn giản.

Dây MOSI và MISO riêng biệt nên có thể đồng thời nhận và truyền dữ
liệu.
- Tốc độ truyền dữ liệu nhanh và tiết kiệm năng lượng.
 Nhược điểm:
- Sử dụng nhiều dây để kết nối với ngoại vi.
- Không có dấu hiệu nhận biết dữ liệu đã được truyền thành cơng.

- Khơng có hình thức kiểm tra lỗi (như bit chẵn lẻ của UART).
- Khoảng cách các thiết bị truyền nhận bằng SPI rất ngắn.
-

2.3 Cảm biến vân tay
2.3.1 Tổng quan về cảm biến vân tay
Tính tới thời điểm hiện nay, công nghệ sinh trắc mà được sử dụng lâu đời nhất
và phổ biến nhất đó nhận diện dấu vân tay. Mỗi cá nhân con người khi được sinh ra
thì đểu có cho mình dấu vân tay riêng biệt, không ai giống ai, hơn hết tất cả các loại
sinh trắc khác, vân tay là dấu hiệu đặc trưng nhất trên cơ thể của mỗi con người. Đặc
package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {


setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

12

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );

}
}


biệt là dấu vân tay không thể nào làm giả được cho nên nó được ưu tiên hàng đầu cho
việc bảo mật.

Hình 2.11 Một số mẫu vân tay
Sử dụng cảm biến vân tay để nhận biết bằng cách đối chiếu hình ảnh vân tay đã
được lưu trữ trước đó trong thư viện, so với các thiết bị nhận biết thế hệ cũ thì cảm
biến vân tay được áp dụng nhiều và phổ biến hơn, giúp ích rất nhiều như trong việc
chấm cơng, quản lý, kiểm sốt dễ dàng, tỉ lệ sai lệch thấp.
Về nguyên lý hoạt động của một cảm biến vân tay, sử dụng ngón tay áp lên bất
kì một thiết bị nhận dạng vân tay nào đó, hình ảnh vân tay sẽ được chụp lại bằng
camera sau đó hình ảnh vân tay sẽ được đối chiếu đặc điểm với các dữ liệu được lưu
trữ từ trước trong hệ thống. Trong quá trình này, dữ liệu hình ảnh sẽ được chuyển
sang dạng dữ liệu số và kết thúc quá trình kết quả sẽ được thơng báo rằng vân tay có
hợp lệ hay khơng để tiếp tục thực hiện các chức năng tiếp theo.
2.3.2 Cảm biến As 608
Cảm biến nhận dạng VÂN TAY AS608 Fingerprint Sensor sử dụng giao tiếp
UART TTL hoặc USB để giao tiếp với Vi điều khiển hoặc kết nối trực tiếp với máy
tính (thơng qua mạch chuyển USB-UART hoặc giao tiếp USB).
Cảm biến nhận dạng VÂN TAYAS608 Fingerprint Sensor được tích hợp nhân xử
lý nhận dạng vân tay phía trong, tự động gán vân tay với 1 chuỗi data và truyền qua
giao tiếp UART ra ngoài nên hồn tồn khơng cần các thao tác xử lý hình ảnh, đơn
giản chỉ là phát lệnh đọc/ghi và so sánh chuỗi UART nên rất dễ sử dụng và lập trình.

package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

13

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new

JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


Hình 2.12 Cảm biến vân tay
Thơng số kỹ thuật AS608:
- Điện áp sử dụng: 3.0~3.6VDC (thường cấp 3.3VDC, lưu ý quan trọng nếu
-

cấp lớn hơn 3.3VDC cảm biến sẽ cháy ngay lập tức).
Dịng tiêu thụ: 30~60mA, trung bình 40mA
Phương thức giao tiếp: USB /UART


-

Tốc độ Baudrate UART: 9600 x N (N từ 1~12), mặc định N=6 baudrate =

-

57600,8,1.
Giao thức USB : 2.0
Kích thước cảm biến (pixel): 256 x 288 pixels
Thời gian xử lý hình ảnh (s): <0.4s
Thời gian tim kiếm (s): <0.3s
FRR (rejection rate) <1%
FAR (recognition rate) <0.001%
Fingerprint storage capacity 300 (ID: 0 ~ 299)

Sơ đồ chân:
- V+: chân cấp nguồn chính VCC 3.3VDC cho cảm biến hoạt động.
- Tx: Chân giao tiếp UART TTL TX
- Rx: Chân giao tiếp UART TTL RX
- GND: Chân cấp nguồn GND (Mass / 0VDC)
- TCH: Chân Output của cảm biến chạm Touch, khi chạm tay vào cảm biến
chân này sẽ xuất ra mức cao High, để sử dụng tính năng này cần cấp nguồn
3.3VDC cho chân Va
package buoi3;

import java.awt.BorderLay out;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JCheckBox;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{

private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

14

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));

this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


-

VA: Chân cấp nguồn 3.3VDC cho Touch Sensor.

-

U+: Chân tín hiệu USB D+
U-: Chân tín hiệu USB D

Để giao tiếp UART ta cần sử dụng các chân:

- V+: Cấp nguồn 3.3VDC cho VÂN TAY AS608
- Tx: nối với RX của Vi điều kiển (mức TTL từ 3.3~5VDC)
-

Rx: nối với TX của Vi điều kiển (mức TTL từ 3.3~5VDC)
GND: Cấp nguồn GND (Mass chung)
Phần mềm do hãng cung cấp

Để giao tiếp USB ta cần sử dụng các chân:
- V+: Cấp nguồn 3.3VDC
-

U+: Chân tín hiệu USB D+
U-: Chân tín hiệu USB D-

-

GND: Cấp nguồn GND (Mass chung).

2.4 Mạch chuyển đổi I2C
Mạch chuyển đổi I2C LCD giúp tiết kiệm dây nối với vi điều khiển cho khả
năng hiển thị nhanh và nhiều chức năng. Thay vì sử dụng tối thiểu 6 chân của vi điều
khiển để kết nối với LCD (RS, EN, D7, D6, D5 và D4) thì với module chuyển đổi ta
chỉ cần sử dụng 2 chân (SCL, SDA) để kết nối. Module chuyển đổi I2C hỗ trợ các loại
LCD sử dụng driver HD44780(LCD 1602, LCD 2004, … ), kết nối với vi điều khiển
thơng qua giao tiếp I2C.

Hình 2.13 Mạch chuyển đổi i2c lcd

package buoi3;

import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

15

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new

JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


 Ƣu điểm
- Tiết kiệm chân cho vi điều khiển
- Dễ dàng kết nối với LCD
-

Mở rộng các chân cho vi điều khiển
Tốc độ cao


 Thông số kĩ thuật
- Điện áp hoạt động: 2.5-6V DC
- Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780)
-

Giao tiếp: I2C
Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân
A0/A1/A2)

-

Kích thước: 41.5mm(L)x19mm(W)x15.3mm(H)
Trọng lượng: 5g

-

Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt
Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD

Hình 2.14 Bảng địa chỉ i2c
2.5 Stm32f103
2.5.1 Giới thiệu về họ stm
STM32 là một trong những dòng chip phổ biến của ST với nhiều họ thông
dụng như F0,F1,F2,F3,F4….. Stm32f103 thuộc họ F1 với lõi là ARM COTEX M3.
STM32F103 là vi điều khiển 32 bit, tốc độ tối đa là 72Mhz. Giá thành cũng khá rẻ so
với các loại vi điều khiển có chức năng tương tự. Mạch nạp cũng như cơng cụ lập
trình khá đa dạng và dễ sử dụng.
Một số ứng dụng chính: dùng cho driver để điều khiển ứng dụng, điều khiển
ứng dụng thông thường, thiết bị cầm tay và thuốc, máy tính và thiết bị ngoại vi chơi

package buoi3;

import java.awt.BorderLay out;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{

private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

16


setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


game, GPS cơ bản, các ứng dụng trong công nghiệp, thiết bị lập trình PLC, biến tần,
máy in, máy quét, hệ thống cảnh báo, thiết bị liên lạc nội bộ…
Phần mềm lập trình: có khá nhiều trình biên dịch cho STM32 như IAR

Embedded Workbench, Keil C…
Thư viện lập trình: có nhiều loại thư viện lập trình cho STM32 như:
STM32snippets, STM32Cube LL, STM32Cube HAL, Standard Peripheral Libraries,
Mbed core. Mỗi thư viện đều có ưu và khuyết điểm riêng.
Mạch nạp: có khá nhiều loại mạch nạp như : ULINK, J-LINK , CMSIS-DAP,
STLINK…
Board để lập trình: có thể mua sẵn 1 số kit ra chân đã có sẵn trên thị trường
hoặc thiết kế 1 cái board dành riêng cho bản thân mình.
2.5.2 Kit stm32f103

-

-

Hình 2.15 Tổng quan về bộ kit
Điện áp cấp 5VDC qua cổng Micro USB sẽ được chuyển đổi thành 3.3VDC
qua IC nguồn và cấp cho Vi điều khiển chính.
Tích hợp sẵn thạch anh 8Mhz.
Tích hợp sẵn thạnh anh 32Khz cho các ứng dụng RTC.
Ra chân đầy đủ tất cả các GPIO và giao tiếp: CAN, I2C, SPI, UART, USB,…
Tích hợp Led trạng thái nguồn, Led PC13, Nút Reset.
Kích thước: 53.34 x 15.24mm
package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;



import javax.swing.JButton;
import javax.swing.JCheckBox;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;

Sử dụng với các mạch nạp:

public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

17

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));

this.add(new
JToggleButton("JToggle Button"));
this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


-

ST-Link Mini

-

J-link
USB TO COM





Kết nối chân khi nạp bằng ST-Link Mini
Nạp theo chuẩn SWD
- TCK — SWCLK
-

TMS — SWDIO
GND — GND
3.3V — 3.3V

 ARM 32-bit Cortex M3 với clock max là 72Mhz.
 Bộ nhớ:
-

64 kbytes bộ nhớ Flash(bộ nhớ lập trình).
20kbytes SRAM.

 Clock, reset và quản lý nguồn.
- Điện áp hoạt động 2.0V -> 3.6V.
-

Power on reset(POR), Power down reset(PDR) và programmable voltage
detector (PVD).
Sử dụng thạch anh ngoài từ 4Mhz -> 20Mhz.
Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40khz.

-


Sử dụng thạch anh ngoài 32.768khz được sử dụng cho RTC.

 Trong trường hợp điện áp thấp:
- Có các mode :ngủ, ngừng hoạt động hoặc hoạt động ở chế độ chờ.
- Cấp nguồn ở chân Vbat bằng pin để hoạt động bộ RTC và sử dụng lưu trữ data
khi mất nguồn cấp chính.

-

2 bộ ADC 12 bit với 9 kênh cho mỗi bộ.
Khoảng giá trị chuyển đổi từ 0 – 3.6V.
Lấy mẫu nhiều kênh hoặc 1 kênh.
Có cảm biến nhiệt độ nội.

-

DMA: bộ chuyển đổi này giúp tăng tốc độ xử lý do khơng có sự can thiệp quá
sâu của CPU.
7 kênh DMA.
Hỗ trợ DMA cho ADC, I2C, SPI, UART.

-

 7 timer
- timer 16 bit hỗ trợ các mode IC/OC/PWM.
package buoi3;
import java.awt.BorderLay out;
import java.awt.FlowLayout;
import javax.swing.JButton;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel ;
import javax.swing.JRadi oButton;
import javax.swing.JToggleButton;
import javax.swing.border.Titled Bor der;
import javax.swing.pla f.basi c. BasicArrow Button;
public class De moTypeButton extends JFrame{
private BasicArrow Button
up = new BasicArrow Button(BasicArrow Button.N ORTH ),
down = new Basi cArrowButton(Basi cArrowButton.SOUTH),
right = new BasicArrow Button(BasicArrow Button.EAST),
left = new Basi cArrowButton(Basi cArrowButton. WEST);
private JPanel lb;
public D emoType Button() {

setLayout (new Flow Layout())
setTitle("De mo Type Button"
setSize(45 0, 350 );

18

setDefault Close Operation(E XIT_ON_CLOSE );
setLocationRelativeTo(null);
setResiza ble(true);
this.add(new
JButton("Jbutton"));
this.add(new
JToggleButton("JToggle Button"));

this.add(new
JCheckBox("JCheck Box"));
this.add(new
JRadioButton("JRa dioButton"));
lb = new JPanel();
lb.setBorder(new
TitledBorder("Drie ctions"));
lb.add(up);
lb.add(dow n);
lb.add(right);
lb.add(left );
this.add(lb);
}
public static void main(String [] args ) {
new
DemoTy peButton().s etVisible(true );
}
}


×