TRƯỜNG ĐẠI HỌC KỸ THUẬT – CÔNG NGHỆ CẦN THƠ
KHOA CƠ KHÍ
ĐỒ ÁN VI ĐIỀU KHIỂN
TẠO HIỆU ỨNG CHẠY CHỮ
TRÊN LED MA TRẬN P10
CÁN BỘ HƯỚNG DẪN
SINH VIÊN THỰC HIỆN
Ths. Đường Khánh Sơn
Hồ Đắc Đặng Thông (1350322)
Nguyễn Hữu Khánh (1800213)
Phạm Trọng Nguyên (1800022)
Ngành: ĐKTĐ0118
Cần Thơ – 2020
TRƯỜNG ĐẠI HỌC KỸ THUẬT – CÔNG NGHỆ CẦN THƠ
KHOA CƠ KHÍ
ĐỒ ÁN VI ĐIỀU KHIỂN
TẠO HIỆU ỨNG CHẠY CHỮ
TRÊN LED MA TRẬN P10
CÁN BỘ HƯỚNG DẪN
SINH VIÊN THỰC HIỆN
Ths. Đường Khánh Sơn
Hồ Đắc Đặng Thông (1350322)
Nguyễn Hữu Khánh (1800213)
Phạm Trọng Nguyên (1800022)
Ngành: ĐKTĐ0118
Cần Thơ – 2020
MỤC LỤC
CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI NGHIÊN CỨU
1.1 Đặt vấn đề . . . . . . . . . . . . . . . . .
1.2 Nội dung đề tài . . . . . . . . . . . . .
1.3 Đối tượng nghiên cứu . . . . . . . . .
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
2.1 LED ma trận và phương pháp qu
2.1.1
2.1.2
2.2 Led ma trận P10 . . . . . . . . . . . . .
2.2.1
2.2.2
2.2.3
2.3 Giao thức SPI . . . . . . . . . . . . . .
2.4 Vi điều khiển Arduino Uno . . . .
2.4.1
2.4.2
2.5 Ngơn ngữ lập trình Arduino . . .
CHƯƠNG 3 KẾT QUẢ THỰC HIỆN
3.1 Sơ đồ khối . . . . . . . . . . . . . . . . .
3.2 Kết nối phần cứng . . . . . . . . . . .
3.2.1
3.2.2
3.3 Viết chương trình trên Arduino U
3.3.1
3.3.2
i
CHƯƠNG 4 KẾT LUẬN VÀ HƯỚNG PHÁP TRIỂN
4.1 Kết luận . . . . . . . . . . . . . . . . . . .
4.1.1
4.1.2
4.2 Hướng pháp triển . . . . . . . . . . . .
TÀI LIỆU THAM KHẢO
ii
DANH SÁCH HÌNH ẢNH
2.1 Sơ đồ chân của IC ghi dịch . . . . . . . . . . . . . . . . . . . . . . .
2.2 Giao tiếp SPI ở chế độ Master – Slave . . . . . . . . . . . . . .
2.3 Sơ đồ chân của Arduino Uno . . . . . . . . . . . . . . . . . . . . . .
3.1 Sơ đồ khối . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Sơ đồ kết nối module LED P10 với Arduino Uno (Nguồn: c
com) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
iii
DANH SÁCH BẢNG
2.1 Thông tin cơ bản về phần cứng của Arduino Uno . . . . . . . . . . . .
iv
CHƯƠNG 1
TỔNG QUAN VỀ ĐỀ TÀI NGHIÊN CỨU
1.1 Đặt vấn đề
Thông tin liên lạc là vấn đề được quan tâm trong xã hội. Ngay từ ngày xưa, con
người đã biết vận dụng những gì đã có sẵn để truyền tin như lửa, âm thanh, các dấu
hiệu,…
Ngày nay, với sự phát triển của xã hội thì ngày càng có nhiều cách tiếp cận với
những thơng tin mới. Ta có thể biết được thơng tin qua báo chí, truyền hình, mạng
internet, qua các pano, áp phích… Thơng tin cần phải được truyền đi nhanh chóng,
kịp thời và phổ biến rộng rãi trong tồn xã hội. Và việc thu thập thơng tin kịp thời,
chính xác là yếu tố hết sức quan trọng trong sự thành công của mọi lĩnh vực. Các
thiết bị tựđộng được điều khiển từ xa qua một thiết bị chủ hoặc được điều khiển trực
tiếp qua hệ thống máy tính.
Việc sử dụng vi điều khiển để điều khiển hiển thị có rất nhiều ưu điểm mà các
phương pháp truyền thống như panơ, áp phích khơng có được như việc điều chỉnh
thơng tin một cách nhanh chóng bằng cách thay đổi phần mềm. Với những lý do
trên, nhóm thực hiện đề tài đưa ra một cách thức nữa phục vụ thông tin là dùng
quang báo. Nội dung nghiên cứu của đề tài chính là tạo ra một bảng quang báo ứng
dụng trong việc hiển thị truyền thông ở các nơi công cộng như công ty, nhà xưởng,
các ngã tư báo hiệu,…
Thế giới ngày càng phát triển thì lĩnh vực điều khiển cần phải được mở rộng
hơn. Việc ứng dụng mạng truyền thông công nghiệp vào sản xuất mang lại nhiều
thuận lợi cho xã hội lồi người, thơng tin được cập nhật nhanh chóng và được điều
khiển một cách chính xác.
1.2 Nội dung đề tài
• Nghiên cứu và tìm phương án điều khiển và xử lý dữ liệu cho bảng led ma
trận hiển thị.
• Thi cơng bảng quang báo hiển thị kích thước 16x32 điểm ảnh.
• Viết chương trình chạy chữ trên led ma trận.
1.3 Đối tượng nghiên cứu
• Phương pháp quét led và lập trình vi điều khiển.
1
• Led ma trận P10.
• Vi điều khiển Arduino Uno.
2
CHƯƠNG 2
CƠ SỞ LÝ THUYẾT
2.1 LED ma trận và phương pháp quét LED
2.1.1 LED ma trận
LED ma trận là một bảng LED gồm m × n LED, trong đó cực âm của các LED
được nối chung với nhau, cực dương của các LED được nối chung với nhau.
2.1.2 Phương pháp quét LED
• Đầu tiên điều khiển tất cả các số LED ở một hàng hoặc một cột đầu tiên, rồi
OFF tất cả các LED này đi.
• Tiếp tục điều khiển tất cả các số LED ở một hàng hoặc một cột tiếp theo, rồi
OFF tất cả các LED này đi.
• Lặp lại quá trình này cho đến hết các hàng hoặc các cột.
• Do tốc độ bật tắt rất nhanh và mắc người có sự lưu ảnh nên tạo ra một hình
ảnh hồn chỉnh.
2.2 Led ma trận P10
2.2.1 Cấu tạo của module LED P10
Module LED P10 có cấu tạo gồm:
• 10 IC ghi dịch 74HC595.
• 2 IC điệm dịng HM3214.
• 4 IC giải mã 74HC138.
• 1 Connector đầu vào và 1 Connector đầu ra.
2.2.2 IC ghi dịch 75HC595
Nguyên lý hoạt động của IC ghi dịch 74HC595:
• Mơ tả chức năng các chân:
– Input: chân DS: đầu vào dữ liệu nối tiếp. Tại mỗi thời điểm chỉ đưa vào 1
bit.
3
Hình 2.1: Sơ đồ chân của IC ghi dịch
– Output: từ chân Q0 − Q7. Xuất dữ liệu khi chân OE tích cực ở mức thấp
và có một xung tích cực ở sườn âm tại chân chốt ST_CP.
– Output – Enable: chân OE: chân cho phép tích cực ở mức thấp. Khi nó ở
mức cao thì khơng đầu ra nào được cho phép.
′
– SQH: chân Q7 : chân dữ liệu nối tiếp. Dùng để nối tiếp với IC 75HC595
khác, dữ liệu sẽ truyền cho IC tiếp theo khi nó đã nhận đủ được 8 bit.
– Shift clock: chân SH_CP: khi có một xung clock tích cực ở sườn dương
thì 1 bit được dịch vào IC.
– Latch clock: chân ST_CP: xung chốt dữ liệu. Khi có một xung clock tích
cực ở sườn dương thì cho phép xuất dữ liệu.
– Chiều dịch bit: từ Q0 → Q7.
– Reset: chân MR: chân này ở mức thấp thì dữ liệu sẽ bị xóa.
• Ngun lý hoạt động:
– Khi 1 bit được đưa vào chân DS, muốn đẩy bit này vào thanh ghi thì phải
kích một xung vào chân SH_CP (xung sườn dương từ 0 lên 1). Làm như
vậy, cho đến khi thanh ghi đủ 8 bit.
– Dữ liệu 8 bit trong thanh ghi vẫn chưa thể xuất ra được, cần tạo một
xung lên chân ST_CP (xung sườn dương từ 0 lên 1).
4
′
– Khi dữ liệu quá 8 bit thì số bit còn dư sẽ đươc đưa đến chân Q7 . Kết nối
′
chân Q7 với chân DS của IC tiếp theo để mở rộng chân.
2.2.3 Phương pháp điều khiển LED P10
• Chân CLK: đưa data vào chân IC ghi dịch.
• Chân LAT: Chân chốt data (đẩy data lưu trong IC ghi dịch ra ngồi LED).
• Chân OE: Chân cho phép bảng LED sáng (OE = 0 thì bảng LED được phép
sáng), OE = 1 thì bảng LED tắt.
• Chân A, B: chân dùng để điều khiển quét LED.
2.3 Giao thức SPI
SPI (Serial Peripheral Bus) là một chuẩn truyền thông nối tiếp tốc độ cao do
hãng Motorola đề xuất. Đây là kiểu truyền thơng Master – Slave, trong đó có 1 chip
Master điều phối q trình tuyền thơng và các chip Slaves được điều khiển bởi
Master vì thế truyền thơng chỉ xảy ra giữa Master và Slave. SPI là một cách truyền
song công (full duplex) nghĩa là tại cùng một thời điểm quá trình truyền và nhận có
thể xảy ra đồng thời. SPI đôi khi được gọi là chuẩn truyền thông “4 dây” vì có 4
đường giao tiếp trong chuẩn này đó là SCK (Serial Clock), MISO (Master Input
Slave Output), MOSI (Master Ouput Slave Input) và SS (Slave Select). Hình 1 thể
hiện một kết SPI giữa một chip Master và 3 chip Slave thơng qua 4 đường.
Hình 2.2: Giao tiếp SPI ở chế độ Master – Slave
• SCK: Xung giữ nhịp cho giao tiếp SPI, vì SPI là chuẩn truyền đồng bộ nên cần 1
đường giữ nhịp, mỗi nhịp trên chân SCK báo 1 bit dữ liệu đến hoặc đi. Đây là
điểm khác biệt với truyền thông không đồng bộ mà chúng ta đã biết trong chuẩn
UART. Sự tồn tại của chân SCK giúp q trình tuyền ít bị lỗi và vì thế tốc độ
truyền của SPI có thể đạt rất cao. Xung nhịp chỉ được tạo ra bởi chip Master.
5
• MISO – Master Input/Slave Output: nếu là chip Master thì đây là đường Input
cịn nếu là chip Slave thì MISO lại là Output. MISO của Master và các Slaves
được nối trực tiếp với nhau.
• MOSI – Master Output/Slave Input: nếu là chip Master thì đây là đường
Output cịn nếu là chip Slave thì MOSI là Input. MOSI của Master và các
Slaves được nối trực tiếp với nhau.
• SS – Slave Select: SS là đường chọn Slave cần giap tiếp, trên các chip Slave
đường SS sẽ ở mức cao khi không làm việc. Nếu chip Master kéo đường SS
của một Slave nào đó xuống mức thấp thì việc giao tiếp sẽ xảy ra giữa Master
và Slave đó. Chỉ có 1 đường SS trên mỗi Slave nhưng có thể có nhiều đường
điều khiển SS trên Master, tùy thuộc vào thiết kế của người dùng.
2.4 Vi điều khiển Arduino Uno
2.4.1 Giới thiệu vi điều khiển Arduino
Arduino là một bo mạch vi xử lý được dùng để lập trình tương tác với các thiết
bị phần cứng như cảm biến, động cơ, đèn hoặc các thiết bị khác. Arduino cung cấp
môi trường phát triển ứng dụng dễ sử dụng với ngơn ngữ lập trình có thể học nhanh
chóng, giá thành thấp và tính chất nguồn mở từ phần cứng tới phần mềm.
2.4.2 Sơ đồ chân của Arduino Uno
Sơ đồ chân Arduino Uno: Hình 2.3.
Arduino Uno sử dụng vi điều khiển Atmega328. Vi điều khiển Arduino Nano có
14 chân dùng xử lý tín hiệu số, 8 chân xử lý tín hiệu analog, thạch anh dao động
16MHz (Bảng 2.1).
2.5 Ngơn ngữ lập trình Arduino
Sử dụng ngơn ngữ lập trình C/C++ để viết chương trình cho Arduino. Sử dụng
cơng cụ lập trình VSCode và PlatformIO để viết, biên dịch và nạp chương trình cho
Arduino.
Cấu trúc của một chương trình Arduino gồm các thành phần sau:
• Thư viện, được thêm vào chương trình bằng cú pháp:
1
#include <Library.h>
2
#include "Library.h"
6
Hình 2.3: Sơ đồ chân của Arduino Uno (Nguồn tham khảo hshop.vn)
• Phần khai báo hằng, khai báo biến:
3
#define PI 3.14
const PI = 3.14;
int counter = 0;
4
float number = 1.0;
1
2
• Phần cài đặt (chỉ chạy một lần khi chương trình khởi động):
1
void setup() {
2
3
}
• Phần chương trình chính (vịng lặp vô tận).
1
void loop() {
2
3
}
7
Bảng 2.1: Thông tin cơ bản về phần cứng của Arduino Uno
Vi điều khiển
Điện áp nguồn
Điện áp đầu vào
Số chân Digital I/O
Số chân Analog
Bộ nhớ Flash
SRAM
EEPROM
Xung nhịp
• Các chương trình con:
1
void my_function_1() {
2
3
}
4
5
void my_function_2() {
6
7
}
Khi tạo project thành công với PlatformIO, chúng ta sẽ có một file tên
platformio.ini, nội dung của file:
1 [env:uno]
2 platform = atmelavr
3board
= uno
4framework
= arduino
8
CHƯƠNG 3
KẾT QUẢ THỰC HIỆN
3.1 Sơ đồ khối
Thiết kế mạch Led chạy chữ gồm có 3 thành phần chính (Hình 3.1):
• Nguồn cấp cho mạch: sử dụng bộ nguồn tổ ong có dịng ra lớn để cấp nguồn
cho vi điều khiển và module LED P10 hoạt động.
• Vi điều khiển Arduino Uno: điều khiển module Led P10 qua giao tiếp SPI.
• Module LED P10: hiển thị nội dung nhận được từ vi điều khiển.
Module LED P10
Hình 3.1: Sơ đồ khối
3.2 Kết nối phần cứng
3.2.1 Phần cứng
• Nguồn 5VDC/5A cấp nguồn cho module LED P10.
(a) Nguồn tổ ong 5VDC
9
• Module LED P10.
(a) Mặt trước của module LED P10
(b) Mặt sau của module LED P10
• Vi điều khiển Arduino Uno.
(a) Vi điều khiển Arduino Uno
• Dây nguồn, header nối nối giữa module LED P10 và Arduino Uno.
10
3.2.2 Kết nối module LED P10 với Arduino Uno
(a)
Module LED P10
GND
A
B
CLK
SCKL
DATA
(b)
Hình 3.2: Sơ đồ kết nối module LED P10 với Arduino Uno (Nguồn:
circuitdigest.com)
Lưu ý, kết nối theo thứ tự các chân được khai báo trên Bảng 3.2b để khi sử
dụng thư viện freetronics/DMD không cần chỉnh sửa thư viện.
3.3 Viết chương trình trên Arduino Uno điều khiển chạy chữ trên LED P10
Giao tiếp với module LED P10 thông qua giao thức SPI và kỹ thuật quét LED.
3.3.1 Thư viện
Sử dụng hai thư viện sau để điều khiển LED P10 bằng Arduino:
1
2
/> />
11
3.3.2 Chương trình điều khiển LED P10 trên Arduino Uno
– Thay đổi font: thư viện DMD hỗ trợ các một số font sau:
• Chương trình điều khiển chạy chữ:
* System5x7
#include <Arduino.h>
1
* Arial_14
#include <Arial_Black_16_ISO_8859_1.h> 3
#include <DMD.h>
2
4
#include <SPI.h>
5
#include <TimerOne.h>
* Arial_Black_16
* Arial_Black_16_ISO_8859_1
6
7
#define ROW 1
8
#define COLUMN 1
9
10
#define FONT Arial_Black_16_ISO_8859_1
#define TIME_SPEED 45
– Tốc độ chạy chữ:
11
12
const char *TEXT = "Display Text On Module LED P10
With Arduino Uno";
1 #define TIME_SPEED 45
13
14
DMD led_module(ROW, COLUMN);
15
16
void scan_module() { led_module.scanDisplayBySPI(); }
17
18
void setup() {
19
Timer1.initialize(2000);
20
Timer1.attachInterrupt(scan_module);
21
led_module.clearScreen(true);
22
}
23
24
25
void loop() {
led_module.selectFont(FONT);
led_module.drawMarquee(TEXT, strlen(TEXT), 32 *
ROW, 0); unsigned long start = millis();
26
27
29
unsigned long timming =
start; boolean flag = false;
30
while (!flag) {
28
if (timming + TIME_SPEED < millis())
{ flag = led_module.stepMarquee(-1,
0); timming = millis();
31
32
33
}
34
}
35
36
}
• Một số tùy chỉnh:
– Nội dung hiển thị:
12
1 const char *TEXT = "Display Text On P10 LED module
With Arduino Uno";
13
CHƯƠNG 4
KẾT LUẬN VÀ HƯỚNG PHÁP TRIỂN
4.1 Kết luận
4.1.1 Kết quả đạt được
• Biết cách lập trình cho vi điều khiển Arduino Uno.
• Tạo hiệu ứng chạy chữ trên module LED ma trận P10.
• Sử dụng các thư viện có sẳn của cộng đồng Arduino để phát triển ứng dụng.
4.1.2 Hạn chế
Chưa hiển thị được ngôn ngữ tiếng Việt lên LED ma trận (thư viện
freetronics/DMD chưa hỗ trợ).
4.2 Hướng pháp triển
• Xây dựng bộ mã hiển thị ngơn ngữ tiếng Việt lên LED ma trận tích hợp vào
thư viện freetronics/DMD.
• Mở rộng thêm nhiều module LED ma trận để hiển thị được nhiều hình ảnh
khác, phức tạp hơn.
14
TÀI LIỆU THAM KHẢO
1. Đường Khánh Sơn – Giáo trình Vi điều khiển, ĐH Kỹ Thuật – Công nghệ
Cần Thơ.
2. Đào Nguyện – Tìm hiểu module LED ma trận P10 – Tự học iot, lập trình nhúng.
3. Cộng đồng Arduino Việt Name – Ngơn ngữ lập trình Arduino
15