TRƯỜNG ĐH SPKT TP. HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ----o0o----
Tp. HCM, ngày 13 tháng 7 năm 2018
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
Họ tên sinh viên: Đào Văn Đông MSSV: 14141067
Trương Hữu Thắng MSSV: 14141295
Chuyên ngành: Điện Tử Công Nghiệp Mã ngành: 141
Hệ đào tạo: Đại học chính quy Mã hệ: 1
Khóa: 2014 Lớp: 14141DT2B
I. TÊN ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG QUANG BÁO
II. NHIỆM VỤ
1.
206 trang |
Chia sẻ: huong20 | Ngày: 13/01/2022 | Lượt xem: 366 | Lượt tải: 0
Tóm tắt tài liệu Đồ án Thiết kế, thi công quang báo, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
. Các số liệu ban đầu:
Tiến hành tìm kiếm tài liệu, thông số kỹ thuật liên quan tới hệ thống quang
báo
Tham khảo các mô hình trong thực tế, từ các đề tài nghiên cứu trước
Tìm hiểu và chọn ra các module, ngoại vi thích hợp cho hệ thống
2. Nội dung thực hiện:
Nội dung 1: Nghiên cứu các mô hình thực tế, tìm giải pháp phù hợp với yêu
cầy đặt ra và tính toán các thông số cho hệ thống quang báo.
Nội dung 2: Nghiên cứu các phương pháp điều khiển Led ma trận, tính toán,
chọn lựa các linh kiện phù hợp với yêu cầu đặt ra.
Nội dung 3: Thiết kế sơ đồ hệ thống, sơ đồ nguyên lý, thiết kế mô hình.
Nội dung 4: Viết chương trình điều khiển hệ thống để đạt được các yêu cầu
đặt ra.
Nội dung 5: Lắp ráp mô hình, chạy thử nghiệm sản phẩm.
Nội dung 6: Viết báo cáo các nội dung đã thực hiện.
III. NGÀY GIAO NHIỆM VỤ: 06/03/2018
IV. NGÀY HOÀN THÀNH NHIỆM VỤ: 13/07/2018
V. HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS. Nguyễn Đình Phú
CÁN BỘ HƯỚNG DẪN BM. ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
TRƯỜNG ĐH SPKT TP. HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ----o0o----
Tp. HCM, ngày 13 tháng 3 năm 2018
LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP
Họ tên sinh viên 1: Đào VănĐông Lớp: 14141DT2B MSSV:14141067
Họ tên sinh viên 2: Trương Hữu Thắng Lớp: 14141DT2B MSSV: 14141295
Tên đề tài: THIẾT KẾ VÀ THI CÔNG QUANG BÁO
Xác nhận
Tuần/ngày Nội dung
GVHD
- Gặp GVHD để phổ biến quy định:
thực hiện chọn đề tài, thống nhất
1 tên đề tài, thời gian làm việc.
(19/3 – 25/3)
- Duyệt đề tài.
- Viết đề cương chi tiết.
- Tìm hiểu các kiến thức liên quan tới
thực hiện đề tài.
- Tìm hiểu các hệ thống quang báo
trong thực tế.
2 - Tìm hiểu nguyên lý hoạt động của
(26/3 – 1/4)
các module LED
- Tìm hiểu cách lập trình ứng dụng
trên điện thoại, máy tính, cách thiết
kế web server.
- Thiết kế sơ đồ khối cho sản phầm,
giải thích vai trò và chức năng của
3 các khối.
(2/4 – 8/3)
- Tính toán, lựa chọn linh kiện cho
từng khối.
- Thiết kế sơ đồ nguyên lý, cách bố
4 trí linh kiện và giải thích hoạt động
(9/4 – 15/4)
của mạch.
- Thiết kế, bố trí các module LED,
lắp đặt màn hình LED vào khung
5 đỡ.
(16/4 – 22/4)
- Thi công mạch, xây dụng mô hình
sản phẩm.
- Thi công mạch, xây dụng mô hình
sản phẩm.
- Viết chương trình điều khiển.
6
(23/4 – 29/4) - Lập trình ứng dụng trên windows,
điện thoại.
- Lập trình và thiết kế web server
- Thi công mạch, xây dụng mô hình
sản phẩm.
- Viết chương trình diều khiển.
7 - Viết chương trình, thiết kế web
(30/4 – 6/5)
server.
- Lập trình ứng dụng trên windows,
điện thoại.
- Thi công mạch, xây dụng mô hình
sản phẩm.
8 - Viết chương trình điều khiển.
(7/5 – 13/5)
- Viết chương trình, thiết kế web
server.
- Lắp ghép mô hình.
9 - Tiến hành chạy thử nghiệm, sửa lỗi
(14/4 – 20/5)
chương trình điều khiển.
- Hoàn thiện, kiểm tra và theo dõi
10 hoạt động mô hình sản phẩm.
(21/5 – 27/5)
- sửa lỗi chương trình điều khiển.
- Hoàn thiện, kiểm tra và theo dõi
11 hoạt động mô hình sản phẩm.
(28/5 – 3/6)
- Viết báo cáo.
- Hoàn thiện sản phẩm.
12
(4/6 – 10/6) - Viết báo cáo.
- Chỉnh sửa báo cáo lần cuối trước
13
(11/6 – 17/6) khi gửi cho GVHD.
- Hoàn thiện báo cáo, gửi GVHD
14 xem xét, góp ý.
(18/6 – 24/6)
- In báo cáo.
15 - Nộp báo cáo hoàn thiện.
(25/6 – 1/7 )
GV HƯỚNG DẪN
(Ký và ghi rõ họ và tên)
LỜI CAM ĐOAN
Đề tài này là công trình do bản thân nhóm tự thực hiện dựa vào một số tài liệu
trước đó và dưới sự hướng dẫn của ThS.Nguyễn Đình Phú. Các số liệu trong đề tài
được nhóm thu thập và không sao chép từ tài liệu hay công trình nào khác.
Người thực hiện đề tài:
Trương Hữu Thắng Đào Văn Đông
LỜI CẢM ƠN
Sau hơn một thời gian thực hiện, nhóm đã may mắn hoàn thành được đề tài
“THIẾT KẾ VÀ THI CÔNG QUANG BÁO”, để có thể đạt được thành quả trên ngoài
sự cố gắng của từng thành viên trong nhóm còn có sự giúp đỡ của gia đình, bạn bè,
các thầy cô trong khoa Điện – Điện Tử. Nhóm thực hiện xin chân thành gửi lời cảm
ơn đến:
Thầy Nguyễn Đình Phú là người trực tiếp hướng dẫn nhóm trong suốt quá
trình thực hiện. Cảm ơn Thầy đã giành thời gian quý báu để hướng dẫn nhóm, hỗ trợ
các thiết bị và góp ý đưa ra hướng giải quyết mỗi khi nhóm gặp khó khăn.
Bên cạnh đó, nhóm cũng cảm ơn những kiến thức mà thầy cô đã truyền đạt
trong suốt những năm học tại trường Đại Học Sư Phạm Kỹ Thuật TP.HCM để từ đó
nhóm có cơ sở để vận dụng hoàn thiện nên đồ án tốt nghiệp này.
Cảm ơn gia đình, người thân đã luôn động viên và luôn bên cạnh trong những
lúc khó khăn nhất.
Xin gửi lời cảm ơn đến những người bạn sinh viên khoa Điện-Điện tử đã cùng
đồng hành trong quá trình học tập, đã cùng cố gắng, cùng nhau tạo động lực để nhóm
để có thể hoàn thành tốt đề tài này.
Xin trân trọng cảm ơn!
Những người thực hiện:
Trương Hữu Thắng Đào Văn Đông
MỤC LỤC
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP ........................................................................ i
LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP ........................................... ii
LỜI CAM ĐOAN ...................................................................................................... v
LỜI CẢM ƠN .......................................................................................................... vi
MỤC LỤC ............................................................................................................... vii
LIỆT KÊ HÌNH VẼ ................................................................................................ xi
LIỆT KÊ BẢNG .................................................................................................... xvi
TÓM TẮT ............................................................................................................. xvii
CHƯƠNG 1. TỔNG QUAN ..................................................................................... 1
1.1 ĐẶT VẤN ĐỀ ............................................................................................ 1
1.2 MỤC TIÊU ................................................................................................. 1
1.3 NỘI DUNG NGHIÊN CỨU ...................................................................... 2
1.4 GIỚI HẠN .................................................................................................. 2
1.5 BỐ CỤC ..................................................................................................... 2
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT ......................................................................... 6
2.1 PANEL LED RGB ..................................................................................... 6
2.1.1 Giới Thiệu ................................................................................................... 6
2.1.2 Nguyên Lý Hoạt Động ............................................................................... 7
2.1.3 LED RGB ................................................................................................... 8
2.1.4 Cổng Kết Nối .............................................................................................. 8
2.1.5 Kết Nối Giữa Các Ic Trong Module Led RGB ........................................ 11
2.2 IC 74HC245 .............................................................................................. 13
2.3 IC 74HC138 .............................................................................................. 14
2.3.1 Hoạt Động Của IC 74HC138 ................................................................... 15
2.4 IC TLC5926 .............................................................................................. 16
2.5 IC SSF4953 .............................................................................................. 17
2.5.1 Giới Thiệu IC SSF4953 ............................................................................ 17
2.5.2 Nguyên Lý Hoạt Động ............................................................................. 18
2.6 TÌM HIỂU KIT RASPBERRY PI 3 ......................................................... 18
2.6.1 Giới Thiệu ................................................................................................. 18
2.6.2 Phần Cứng Raspberry Pi3 ........................................................................ 19
2.7 ARDUINO MEGA 2560 .......................................................................... 22
2.7.1 Giới Thiệu Arduino .................................................................................. 22
2.7.2 Arduino Mega 2560 .................................................................................. 23
2.8 MODULE ESP-12E NODEMCU ............................................................ 23
2.8.1 Giới Thiệu Module Esp-12E Nodemcu .................................................... 23
2.8.2 Cấu Tạo Module Esp-12E Nodemcu ........................................................ 24
2.9 CẢM BIẾN NHIỆT ĐỘ, ĐỘ ẨM ............................................................ 24
2.10 THIẾT BỊ THỜI GIAN THỰC ................................................................ 26
2.10.1 Giới Thiệu Các Loại IC Thời Gian Thực ................................................. 26
2.10.2 Module Thời Gian Thực DS1307 ............................................................. 29
2.11 MODULE SIM 900A ............................................................................... 30
2.11.1 Giới Thiệu ................................................................................................. 30
2.12 MODULE BLUETOOTH ........................................................................ 31
2.12.1 Giới Thiệu ................................................................................................. 31
2.13 CHUẨN GIAO TIẾP UART ................................................................... 33
2.13.1 Giới Thiệu Uart ........................................................................................ 33
2.13.2 Các Thông Số Uart ................................................................................... 34
2.14 CHUẨN TRUYỀN I2C ............................................................................ 35
2.14.1 Giới Thiệu I2C .......................................................................................... 35
2.15 CHUẨN GIAO TIẾP MỘT DÂY ............................................................ 36
2.15.1 Giới Thiệu ................................................................................................. 36
2.15.2 Nguyên Lý Hoạt Động ............................................................................. 36
2.16 LÝ THUYẾT VỀ ẢNH ............................................................................ 38
2.16.1 Điểm Ảnh ................................................................................................. 38
2.16.2 PIXEL FORMAT ..................................................................................... 39
2.16.3 FRAMEBUFFER ..................................................................................... 40
2.16.4 Mặt Phẳng Bit (Bit Plane) ........................................................................ 42
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ ......................................................... 43
3.1 GIỚI THIỆU ............................................................................................. 43
3.2 CÁC HỆ THỐNG MÀN HÌNH TRONG THỰC TẾ .............................. 43
3.3 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG ............................................. 49
3.3.1 Thiết Kế Sơ Đồ Khối Hệ Thống ............................................................... 49
3.3.2 Tính Toán Và Thiết Kế Mạch .................................................................. 50
CHƯƠNG 4: THI CÔNG HỆ THỐNG ................................................................ 71
4.1 GIỚI THIỆU ............................................................................................. 71
4.2 THI CÔNG HỆ THỐNG .......................................................................... 71
4.2.1 Thi Công Bo Mạch ................................................................................... 71
4.2.2 Lắp Ráp Và Kiểm Tra .............................................................................. 75
4.3 ĐÓNG GÓI VÀ THI CÔNG MÔ HÌNH ................................................. 77
4.3.1 Đóng Gói Sản Phẩm ................................................................................. 77
4.4 LẬP TRÌNH HỆ THỐNG ........................................................................ 79
4.4.1 Lưu Đồ Giải Thuật ................................................................................... 79
4.4.2 Phần Mềm Lập Trình Vi Điều Khiển ....................................................... 91
4.4.3 Cài Đặt Hệ Điều Hành Cho Raspberry Pi3 .............................................. 98
4.5 LẬP TRÌNH MÔ PHỎNG .....................................................................111
4.5.1 Một Số Hàm Trong Thư Viện Led Matrix .............................................111
4.5.2 Chương Trình Hiển Thị Hình Ảnh .........................................................116
4.5.3 Chương Trình Con Đọc Ảnh ..................................................................119
4.5.4 Chương Trình Con Nạp Ảnh Vào Canvas .............................................120
4.4.5 Chương Trình Con Khởi Tạo Canvas ....................................................121
4.5.6 Chương Trình Con Hiển Thị Ảnh Ra Màn Hình Led ............................122
4.5.7 Chương Trình Hiển Thị Video ...............................................................122
4.6 TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC .............................124
4.6.1 Tài Liệu Hướng Dẫn Sử Dụng ...............................................................124
CHƯƠNG 5. KẾT QUẢ, NHẬN XÉT, ĐÁNH GIÁ ..........................................128
5.1 KẾT QUẢ ...............................................................................................128
5.2 KẾT QUẢ ĐẠT ĐƯỢC .........................................................................128
5.2.1 Giao Diện Web .......................................................................................128
5.2.2 Giao Diện App Windows .......................................................................136
5.2.3 Giao Diện App Android .........................................................................138
5.2.4 Kết Quả Mạch Thực Tế ..........................................................................141
5.3 NHẬN XÉT VÀ ĐÁNH GIÁ ................................................................145
5.3.1 Nhận Xét Kết Quả Đạt Được .................................................................145
5.3.2 Đánh Giá Kết Quả ..................................................................................146
CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN....................................147
6.1 KẾT LUẬN ............................................................................................147
6.2 HƯỚNG PHÁT TRIỂN .........................................................................148
TÀI LIỆU THAM KHẢO ....................................................................................149
PHỤ LỤC ...............................................................................................................150
LIỆT KÊ HÌNH VẼ
Hình Trang
Hình 2. 1: LED panel P5. ............................................................................................ 7
Hình 2. 2: LED RGB loại dán. .................................................................................... 8
Hình 2. 3: Hình ảnh thực tế HuB LED panel P5. ........................................................ 9
Hình 2. 4: Sơ đồ chân Hub LED Panel P5. ................................................................. 9
Hình 2. 5: Sơ đồ bố trí các IC trên panel LED P5. ................................................... 11
Hình 2. 6: Sơ đồ nguyên lý module LED RGB P5. .................................................. 12
Hình 2. 7: IC 74HC245. ............................................................................................ 13
Hình 2. 8: IC giải mã 74HC138. ............................................................................... 14
Hình 2. 9: IC TLC5926. ............................................................................................ 16
Hình 2. 10: Giản đồ xung của IC TLC5926. ............................................................. 17
Hình 2. 11: IC SSF4953. ........................................................................................... 18
Hình 2. 12: Mosfet kênh P. ....................................................................................... 18
Hình 2. 13: Cấu tạo bên trong IC SSF4953. ............................................................. 18
Hình 2. 14: Kit Raspberry Pi 3 model. ...................................................................... 19
Hình 2. 15: Raspberry Pi 3 model B. ........................................................................ 20
Hình 2. 16: Chip BMC43438 Broadcom (Wireless radio). ...................................... 20
Hình 2. 17: Chíp hệ thống Broadcom BCM2837 (SoC). .......................................... 21
Hình 2. 18: Chíp USB SMSC LAN9514. ................................................................. 21
Hình 2. 19: Cấu tạo GPIO Raspberry pi 3. ............................................................... 22
Hình 2. 20: Arduino Mega 2560. .............................................................................. 23
Hình 2. 21: Sơ đồ chân ESP8266 NODEMCU......................................................... 24
Hình 2. 22: Sơ đồ chân của cảm biến DHT11. ......................................................... 25
Hình 2. 23: Hình ảnh module DHT11 thực tế. .......................................................... 25
Hình 2. 24: Sơ ĐỒ chân IC DS1307. ........................................................................ 27
Hình 2. 25: Cấu trúc bên trong DS13B07. ................................................................ 28
Hình 2. 26: Tổ chức thanh ghi thời gian và bộ nhớ DS13B07. ................................ 28
Hình 2. 27: RTC DS13B07 tích hợp chuẩn I2C. ...................................................... 30
Hình 2. 28: Sơ đồ chân module RTC DS13B07. ...................................................... 30
Hình 2. 29: Module SIM900A. ................................................................................. 31
Hình 2. 30: Kết nối giữa module Sim900A và vi điều khiển. .................................. 31
Hình 2. 31: Sơ đồ chân module Bluetooth HC-05/HC-06. ....................................... 32
Hình 2. 32: Kết nối module Bluetooth với vi điều khiển. ......................................... 33
Hình 2. 33: Hệ thống truyền dữ liệu bất đồng bộ. .................................................... 33
Hình 2. 34: Khung truyền dữ liệu của chuẩn giao tiếp UART. ................................ 34
Hình 2. 35: Hệ thống các thiết bị giao tiếp theo chuẩn I2C. ..................................... 35
Hình 2. 36: Giản đồ truyền nhận I2C. ....................................................................... 36
Hình 2. 37: Sơ đồ kết nối dây theo chuẩn truyền một dây. ....................................... 37
Hình 2. 38: Tạo xung reset và kiểm tra sự hiện diện của cảm biến. ......................... 37
Hình 2. 39: Đọc giá trị bit 0. ..................................................................................... 38
Hình 2. 40: Đọc giá trị bit 1. ..................................................................................... 38
Hình 2. 41: Số lượng điểm ảnh trong một diện tích.................................................. 39
Hình 2. 42: Frame Buffer 8 bit. ................................................................................. 40
Hình 2. 43: Frame Buffer 24 bit màu. ....................................................................... 41
Hình 2. 44: Mô hình của mặt phẳng bit. ................................................................... 42
Hình 3. 1: Hệ thống màn hình LED trong nhà. ......................................................... 45
Hình 3. 2: Hệ thống màn hình LED ngoài trời. ........................................................ 45
Hình 3. 3: Hệ thống màn hình LED lvp909. ............................................................. 46
Hình 3. 4: Sơ đồ khối hệ thống màn hình LED trong thực tế. .................................. 46
Hình 3. 5: Hệ thống màn hình LED tối thiểu. ........................................................... 47
Hình 3. 6: Card điều khiển Mrv330. ......................................................................... 48
Hình 3. 7: Giao diện phần mềm LEDSHOW............................................................ 49
Hình 3. 8: Sơ đồ khối hệ thống. ................................................................................ 50
Hình 3. 9: Cách bố trí màn hình chữ nhật. ................................................................ 52
Hình 3. 10: Cách bố trí màn hình vuông. .................................................................. 52
Hình 3. 11: Sơ đồ chân kết nối ngõ vào/ra của module LED P5. ............................. 53
Hình 3. 12: Sơ đồ dịch chuyển dữ liệu trên màn hình. ............................................. 53
Hình 3. 13: Sơ đồ kết nối Raspberry Pi3. ................................................................. 54
Hình 3. 14: Mạch đệm ngõ ra cho Raspberry Pi3. .................................................... 56
Hình 3. 15: Arduino mega 2560. ............................................................................... 57
Hình 3. 16: ESP8266 NODEMCU. .......................................................................... 58
Hình 3. 17: Module thời gian thực RTC DS1307. .................................................... 59
Hình 3. 18: Sơ đồ nguyên lý module RTC DS1307. ................................................ 60
Hình 3. 19: Sơ đồ kết nối vi điều khiển ESP8266 và DS1307. ................................ 60
Hình 3. 20: Sơ đồ chân cảm biến DHT11. ................................................................ 61
Hình 3. 21: Giao tiếp giữa cảm biến DHT11 và vi điều khiển. ................................ 61
Hình 3. 22: Sơ đồ kết nối arduino mega và module bluetooth HC-06. .................... 63
Hình 3. 23: Sơ đồ chân module SIM900A. ............................................................... 64
Hình 3. 24: Kết nối arduino mega và module SIM900A. ......................................... 64
Hình 3. 25: Giao tiếp giữa Arduino Mega và ESP8266. ........................................... 66
Hình 3. 26: Sơ đồ nguyên lý khối thu thập và xử lý dữ liệu. .................................... 67
Hình 3. 27: Sơ đồ chân AMS1117. ........................................................................... 68
Hình 3. 28: Sơ đồ kết nối IC AMS1117. ................................................................... 69
Hình 3. 29: Nguồn tổ ong 5VDC - 40A. ................................................................... 69
Hình 3. 30: Sơ đồ nguyên lý toàn mạch. ................................................................... 70
Hình 4. 1: Sơ đồ đi dây đã phủ đồng khối thu thập và xử lý dữ liệu. ....................... 72
Hình 4. 2: Hình dạng 3D khối thu thập và xử lý dữ liệu. ......................................... 72
Hình 4. 3: Sơ đồ đi dây mạch đệm ngõ ra. ................................................................ 73
Hình 4. 4: Sơ đồ 3D mạch đệm ngõ ra. ..................................................................... 73
Hình 4. 5: Kích thước khung đỡ................................................................................ 74
Hình 4. 6: Bố trí các khối ở mặt sau khung. ............................................................. 75
Hình 4. 7: Lắp ráp các module lên bo mạch khối thu thập và xử lý dữ liệu. ........... 76
Hình 4. 8: Lắp ráp mạch đệm. ................................................................................... 76
Hình 4. 9: Các khối được cố định trên tấm mica. ..................................................... 77
Hình 4. 10: Mặt trước của sản phẩm. ........................................................................ 78
Hình 4. 11: Mặt sau của sản phẩm. ........................................................................... 78
Hình 4. 12: Lưu đồ truyền nhận dữ liệu trong esp8266. ........................................... 81
Hình 4. 13: Lưu đồ nhận dữ liệu từ esp trên server. ................................................. 82
Hình 4. 14: Lưu đồ truyền, nhận dữ liệu từ arduino mega 2560. ............................. 84
Hình 4. 15: Lưu đồ các chức năng quản lý tin nhắn. ................................................ 85
Hình 4. 16: Lưu đồ chương trình con thêm tin nhắn. ............................................... 86
Hình 4. 17: Lưu đồ chức năng xóa tin nhắn. ............................................................. 87
Hình 4. 18: Lưu đồ chức năng sửa tin nhắn. ............................................................. 88
Hình 4. 19: Lưu đồ chức năng hiển thị nội dung từ web lên màn hình. ................... 89
Hình 4. 20: Lưu đồ chức năng cài đặt. ...................................................................... 90
Hình 4. 21: Quy trình làm việc của aruduino. ........................................................... 91
Hình 4. 22: Giao diện phần mềm arduino IDE. ........................................................ 92
Hình 4. 23: Các vùng làm việc của arduino IDE. ..................................................... 92
Hình 4. 24: Cách chọn board arduino mega 2560 từ menu Tools. ........................... 93
Hình 4. 25: Giao diện hệ điều hành Raspbian........................................................... 99
Hình 4. 26: Giao diện hệ điều hành ubunt mate......................................................100
Hình 4. 27: Giao diện hệ điều hành ubuntu snappy. ...............................................100
Hình 4. 28: Các phần cứng cần thiết để cài hệ điều hành cho Raspberry. ..............101
Hình 4. 29: Gói phần mềm NOOBS trước và sau khi giải nén. ..............................101
Hình 4. 30: Giao diện phần mềm SD Formater. .....................................................102
Hình 4. 31: Giao diện cài đặt hệ điều hành Raspbian. ............................................102
Hình 4. 32: Quá trình cài đặt Raspbian. ..................................................................103
Hình 4. 33: Giao diện đầu tiên khi cài đặt thành công Raspbian. ...........................103
Hình 4. 34: Tải thư viện LED-Matrix từ cửa sổ terminal. ......................................104
Hình 4. 35: Cài đặt Apache Web Server thông qua cửa sổ terminal. .....................105
Hình 4. 36: Cài đặt thành công Apache Web Server. .............................................105
Hình 4. 37: Cài đặt php qua cửa sổ terminal. ..........................................................106
Hình 4. 38: Kiểm tra hoạt động của php. ................................................................106
Hình 4. 39: Cài đặt mysql qua cửa sổ terminal. ......................................................107
Hình 4. 40: Đăng ký tài khoản 000webhost. ...........................................................109
Hình 4. 41: Giao diện đăng ký tài khoản 000webhost. ...........................................109
Hình 4. 42: Xác nhận đăng ký tài khoản trên 000webhost. ....................................110
Hình 4. 43: Đăng nhập vào trang quản lý file 000webhost. ...................................110
Hình 4. 44: Giao diện quản lý file trên 000webhost. ..............................................111
Hình 4. 45: Mô tả sơ đồ khối của hàm SetPixel......................................................115
Hình 4. 46: Trình tự đọc giá trị trong ô nhớ. ...........................................................116
Hình 4. 47: Phương pháp dùng canvas. ..................................................................118
Hình 4. 48: Chương trình hiển thị hình ảnh. ...........................................................118
Hình 4. 49: Lưu đồ chương trình con đọc ảnh. .......................................................119
Hình 4. 50: Lưu đồ chương trình con nạp ảnh vào canvas. ....................................121
Hình 4. 51: Lưu đồ chương trình con khởi tạo canvas. ..........................................122
Hình 4. 52: Lưu đồ xử lý video. ..............................................................................123
Hình 4. 53: Giao diện trang web điều khiển. ..........................................................125
Hình 4. 54: Giao diện chính ứng dụng Android. ....................................................126
Hình 4. 55: Giao diện nhập tin nhắn ứng dụng android. .........................................126
Hình 4. 56: Giao diện ứng dụng trên windows. ......................................................127
Hình 5. 1: Giao diện đầu tiên sau khi truy cập. .......................................................129
Hình 5. 2: Giao diện quản ký tin nhắn. ...................................................................130
Hình 5. 3: Tin nhẵn mới được lưu vào cơ sở dữ liệu. .............................................131
Hình 5. 4: Xóa một tin nhắn. ............................................................
Nhiệt độ 0-50ºC. -40 - 80 ℃
Sai số độ ẩm ±5% ± 2%
Sai số nhiệt độ ±2 ºC ± 0.5 ºC
Giá thành Thấp hơn Cao hơn
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 25
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.10 THIẾT BỊ THỜI GIAN THỰC
2.10.1 Giới Thiệu Các Loại IC Thời Gian Thực
a) IC DS12C887
IC thời gian thực DS12C887 thiết kế để thay thế trực tiếp cho DS1287.
DS12C887 tạo ra đồng hồ về thời gian và lịch, bộ nhớ 113 bytes, điều chỉnh cho
những năm nhuận, chọn chế độ hiển thị 12 giờ hay 24 giờ.
Bảng 2. 6: Thông số kỹ thuật của DS12C887.
Loại Clock/calenda
Đặc tính Alarm, Daylight Savings, Leap Year,
NVSRAM, Square Wave Output
Kích thước bộ nhớ 113 Bytes
Dịnh dạng giờ HH: MM: SS (12/24 hr)
Định dạng ngày YY-MM-DD-dd
Giao tiếp Parallel
Nguồn cung cấp 4.5V ÷ 5.5V
Nguồn pin 2.5 V ÷ 4V
Nhiệt độ hoạt động 00C ÷ 700C
Package 24-DIP
b) IC DS13B02
IC DS13B02 là một IC đồng hồ thời gian với 31 byte RAM tĩnh. Nó giao tiếp
với vi điều khiển thông qua một giao diện nối tiếp đơn giản. Đồng hồ thời gian thực
cung cấp giây, phút, giờ, ngày, ngày, tháng, năm và thông tin. Ngày tháng được tự
động điều chỉnh cho tháng có ít hơn 31 ngày, bao gồm cả điều chỉnh cho năm nhuận.
Thời gian có thể hoạt động theo kiểu 24h hoặc 12h với chỉ số AM/PM.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 26
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Bảng 2. 7: Thông số kỹ thuật của DS13B02.
Điện áp hoạt động 2.0 – 5.5 V
Dòng tiêu hao (ở 2.0V) max 300nA
Số đường dây giao tiếp 2
Bộ nhớ lưu trữ 31 x 8 RAM
Dải nhiệt độ làm việc -400C ÷ +850C
Kiểu vỏ 8-DIP
c) IC DS1307
DS13B07 là IC đồng hồ thời gian thực của Dallas SemiConductor. DS1307
có 64 ô nhớ, trong đó 8 ô nhớ 8-bit chứa thời gian là: giây, phút, giờ, thứ (trong tuần),
ngày, tháng, năm và thanh ghi điều khiển ngõ ra, vùng nhớ còn lại là 56 dùng để lưu
dữ liệu.
Hình 2. 24: Sơ ĐỒ chân IC DS1307.
DS1307 có 8 chân, chức năng của các chân được mô tả như sau:
X1 và X2 là đầu vào dao động cho DS1307. Cần dao động thạch anh
32.768Khz.
Vbat là nguồn nuôi cho chip. Nguồn này từ (2V- 3.5V) lấy pin có nguồn 3V.
Đây là nguồn cho chip hoạt động liên tục khi không có nguồn Vcc mà DS1307
vẫn hoạt động theo thời gian.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 27
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Vcc là nguồn cho giao tiếp I2C. Điện áp cung cấp là 5V chuẩn và được dùng
chung với vi xử lý. Nếu mà Vcc không có mà Vbat có thì DS1307 vẫn hoạt
động bình thường nhưng mà không ghi và đọc được dữ liệu.
GND là nguồn Mass chung cho cả Vcc và Vbat
SQW/OUT là một ngõ ra phụ tạo xung dao động (xung vuông).
SCL và SDA là hai bus dữ liệu của DS1307. Thông tin truyền và ghi đều được
truyền qua 2 đường truyền này theo chuẩn I2C.
Hình 2. 25: Cấu trúc bên trong DS13B07.
Hình 2. 26: Tổ chức thanh ghi thời gian và bộ nhớ DS13B07.
Trong bộ nhớ của DS1307 có tất cả 64 thanh ghi địa chỉ từ 0 đến 63 và được
bắt đầu từ 0x00 đến 0x3F nhưng trong đó chỉ có 8 thanh ghi đầu là thanh ghi thời
gian thực. Địa chỉ và chức năng các thanh ghi này được ghi trong bảng sau:
Chức năng cụ thể của các thanh ghi như sau:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 28
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Thanh ghi giây (0x00): Bit 0 đến bit 3 dùng để mã hóa số BCD hàng đơn vị,
bit 4 đến bit 6 dùng để mã hóa BCD hàng chục của giây. Bit thứ 7 có tên là
“CH”, bit này mà được đưa xuống 0 để đông hồ hoạt động.
Thanh ghi phút (0x01): Bit 0 đến bit 3 dùng để mã hóa số BCD hàng đơn vị,
bit 4 đến bit 6 dùng để mã hóa BCD hàng chục của phút. Bit 7 mặc định là 0.
Thanh ghi giờ (0x02): Bit 0 đến bit 3 nó dùng để mã hóa BCD của chữ số hàng
đơn vị của giờ. Bit 6 chọn chế độ, bit 4,5 mã hóa BCD hàng chục của giờ. Bit
5 có thể là AM/PM khi. Bit 6 = 1.
Thanh ghi thứ (0x03): Dùng số để chỉ thứ trong tuần nên do đó chỉ lấy từ 1
đến 7 tương đương từ thứ hai đến chủ nhật.
Thanh ghi ngày (0x04): 4 bit thấp (bit 0 đến bit 3) dùng để mã hóa BCD ra
chữ số hàng đơn vị của ngày trong tháng, bit 4 và bit 5 là đủ mã hóa BCD hàng
chục ngày trong tháng.
Thanh ghi tháng (0x05): 4 bit thấp (bit 0 đến bit 3) dùng để mã hóa BCD ra
chữ số hàng đơn vị tháng, bit 4 mã hóa BCD hàng chục của tháng.
Thanh ghi năm (0x06): DS1307 chỉ có 100 năm tương đương với 00 đến 99
nên dùng tất cả các bit thấp và bit cao để mã hóa BCD ra năm.
Thanh ghi điều khiển (0x07): Đây là thanh ghi điều khiển quá trình ghi của
DS1307 và quá trình ghi phải được kết thúc bằng địa chỉ 0x93.
Dựa vào yêu cầu, giới hạn của đề tài, cũng như các chức năng và cấu hình thì
IC DS13B07 là một linh kiện phù hợp cho đề tài nghiên cứu.
2.10.2 Module Thời Gian Thực DS1307
Mạch thời gian thực RTC DS13B07 sữ dụng IC DS13B07 làm nhân điều khiển
đồng thời tích hợp truyền theo chuẩn I2C. Việc tích hợp đó, đã tạo sự thuận lợi khi
điều khiển nhận dữ liệu thời gian thực. Ta chỉ cần việc điều khiển chân SDA và SCL
một cách hợp lý để nhận được dữ liệu mong muốn. Module đi kèm với EEPROM
AT24C32 có khả năng lưu trữ thêm thông tin lên đến 32KBit.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 29
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Hình 2. 27: RTC DS13B07 tích hợp chuẩn I2C.
Hình 2. 28: Sơ đồ chân module RTC DS13B07.
Một số thông tin kỹ thuật của module RTC DS1307:
Nguồn cung cấp: 5VDC.
Khả năng lưu trữ 32K bit với EEPROM AT24C32.
Sử dụng giao thức 2 dây I2C.
Lưu trữ thông tin giờ phút giây AM/PM.
Có pin đồng hồ lưu trữ thông tin.
Có ngõ ra tần số 1Hz.
Kích thước: 16 x 22 x 23mm.
2.11 MODULE SIM 900A
2.11.1 Giới Thiệu
Module SIM900A là module GSM/GPRS của hãng SIMCom được thiết kế
dưới dạng module chipset, nhỏ gọn, giá thành thấp, hoạt động ổn định và phù hợp
cho nhiều mục đích sử dụng. Module SIM900(A) có các tính năng cơ bản của một
chiếc điện thoại như gọi điện thoại, nhắn tin, truy cập GPRS.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 30
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Hình 2. 29: Module SIM900A.
Một số thông số module SIM900A
Điện áp hoạt động: 4.5 – 5.0V.
Dòng khi ở chế độ chờ: 10 mA.
Dòng khi hoạt động: 100 mA đến 1A.
Khe cắm SIM: MICROSIM.
Hỗ trợ tất cả 4 băng tần sau: GSM850MHz, EGSM900MHz, DSC1800Mhz,
PCS1900MHz.
Hình 2. 30: Kết nối giữa module Sim900A và vi điều khiển.
2.12 MODULE BLUETOOTH
2.12.1 Giới Thiệu
Module HC-05/HC-06 là module thu phát không dây ở khoảng cách ngắn qua
sóng bluetooth của điện thoại và PC. Mạch được thiết kế nhỏ gọn với các chân được
ra sẵn để giao tiếp cơ bản và một nút nhấn để chuyển sang chế độ AT COMMAND,
thích hợp với nhiều ứng dụng khác nhau: điều khiển robot, điều khiển thiết bị.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 31
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Hình 2. 31: Sơ đồ chân module Bluetooth HC-05/HC-06.
Về cơ bản thì hai module này có cấu tạo như nhau, nhưng HC-05 có thể họat
động ở hai chế độ là MASTER và SLAVE, trong khi đó HC-06 chỉ có thể hoạt động
ở chế độ SLAVE.
Ở chế độ MASTER: Module sẽ tự động dò tìm thiết bị Bluetooth khác như
Laptop, SmartPhone và tiến hành ghép nối chủ động mà không cần thiết lập gì từ máy
tính hoặc Smartphone.
Ở chế độ SLAVE: người sử dụng cần thiết lập kết nối từ Smartphone, Laptop
để dò tìm module sau đó ghép với mã PIN là 1234 hoặc 0000.
Với phạm vi và ứng dụng của đồ án, nhóm lựa chọn sử dụng module Bluetooth HC-
06.
Thông số kỹ thuật của module Bluetooth HC-05/HC-06:
Điện áp hoạt động: 3.3- 5VDC.
Bộ nhớ Flash 8Mbit
Mức điện áp giao tiếp: TTL tương ứng 3.3 VDC và 5VDC.
Dòng điện khi hoạt động: khi Pairing 30mA, sau khi Pairing 8mA.
Baudrate UART: 1200, 2400, 4800, 9600, 19200, 3840, 57600, 115200.
Giao thức truyền: Bluetooth specifICation v2.0 +EDR.
Tần số: 2.4GHz băng tần ISM.
Điều chế: GFSK (Gaussian frequency shift key).
Hỗ trợ chế độ: Master, Slave.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 32
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Độ nhạy: -80dBm.
Công suất truyền: lên đến +4dBm, class 2.
Tỉ lệ không đồng bộ: 2.1 Mbps(max) /160 kbps.
Tỉ lệ đồng bộ: 1 Mbps/1 Mbps.
Kích thước: 15.2 x 35.7 x 5.6 mm
Hình 2. 32: Kết nối module Bluetooth với vi điều khiển.
2.13 CHUẨN GIAO TIẾP UART
2.13.1 Giới Thiệu Uart
UART là viết tắt của Universal Asynchronous Receiver – Transmitter có nghĩa
là truyền dữ liệu nối tiếp bất đồng bộ. Truyền dữ liệu nối tiếp bất đồng bộ có 1 đường
phát dữ liệu và 1 đường nhận dữ liệu, không có tín hiệu xung clock nên gọi là bất
đồng bộ. UART thường được dùng trong máy tính công nghiệp, truyền thông, vi điều
khiển, hay một số các thiết bị truyền tin khác.
Hình 2. 33: Hệ thống truyền dữ liệu bất đồng bộ.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 33
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.13.2 Các Thông Số Uart
Hình 2. 34: Khung truyền dữ liệu của chuẩn giao tiếp UART.
Dưới đây là các thông số thường có của UART:
Baud rate (tốc độ baud): Khi truyền nhận không đồng bộ để hai đối tượng
hiểu được nhau thì cần quy định một khoảng thời gian cho một bit truyền
nhận, nghĩa là trước khi truyền thì tốc độ phải được cài đặt đầu tiên. Theo
định nghĩa thì tốc độ baud là số bit truyền trong một giây.
Frame (khung truyền): Do kiểu truyền thông nối tiếp này rất dễ mất dữ liệu
nên ngoài tốc độ, khung truyền cũng được cài đặt từ ban đầu để tránh bớt sự
mất mát dữ liệu này. Khung truyền quy định số bit trong mỗi lần truyền, các
bit báo hiệu như start, stop, các bit kiểm tra như parity, và số bit trong một
data.
Start Bit: Là bit bắt đầu trong khung truyền Bit này nhằm mục đích báo cho
thiết bị nhận biết quá trình truyền bắt đầu.
Data: Dữ liệu cần truyền Data không nhất thiết phải 8 bit. Trong UART bit
LSB được truyền đi trước, Bit MSB được truyền đi sau.
Parity bit: Là bit kiểm tra dữ liệu được truyền có chính xác không. Có 2
loại parity: chẵn (even parity), lẻ (odd parity). Parity chẵn là bit parity thêm
vào để số lượng số 1 trong data và parity là chẵn. Parity lẻ là bit parity thêm
vào để số lượng số 1 trong data và parity là lẻ. Bit Parity là không bắt buộc
nên có thể dùng hoặc không.
Stop Bit: là bit báo cáo kết thúc khung truyền, có thể có 1 hoặc 2 bit stop.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 34
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.14 CHUẨN TRUYỀN I2C
2.14.1 Giới Thiệu I2C
I2C (Inter-Integrated Circuit) là một chuẩn truyền thông do hãng điện tử
Philips Semiconductor sáng lập cho phép giao tiếp một thiết bị chủ với nhiều thiết bị
tớ với nhau. Ban đầu, chuẩn truyền thông này chỉ được dùng trong các linh kiện điện
tử của Philips. Nhưng sau đó, do tính ưu việt và đơn giản của nó, I2C đã được chuẩn
hóa và được dùng rộng rãi trong các module truyền thông nối tiếp của vi mạch tích
hợp ngày nay.
2.14.2 Nguyên Lý Hoạt Động I2C
Hình 2. 35: Hệ thống các thiết bị giao tiếp theo chuẩn I2C.
Điểm mạnh của I2C chính là hiệu suất và sự đơn giản của nó: một khối điều
khiển trung tâm có thể điều khiển cả một mạng thiết bị với 7 bit địa chỉ tương ứng
112 thiết bị mà chỉ cần hai lối ra điều khiển. Một bus I2C có thể hoạt động ở nhiều
chế độ khác nhau: một chủ một tớ (one master-one slave), một chủ nhiều tớ(one
master-multi slave), nhiều chủ nhiều tớ (multi master – multi slave). Tốc độ truyền
có thể đạt được trong chuẩn truyền này là 100Kbps (Standard mode), 400Kbps (Fast
mode) và cao nhất là 3.4Mbps (High-speed mode).
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 35
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Hình 2. 36: Giản đồ truyền nhận I2C.
Chuẩn I2C có 2 đường tín hiệu là SDA (serial data) có chức năng truyền dữ
liệu và tín hiệu SCL (serial clock) truyền tải xung clock để dịch chuyển dữ liệu. Mỗi
thiết bị có 1 địa chỉ được cài sẵn hoặc 1 địa chỉ thiết bị duy nhất để thiết bị chủ
(Master) có thể giao tiếp, việc tạo ra xung clock đó là do thiết bị chủ (Master). Còn
thiết bị nhận xung clock là tớ (Slave), hai chân SDA và SCL luôn hoạt động ở chế độ
mở, vì vậy để sử dụng được cần phải có trở kéo bởi các thiết bị trên bus I2C hoạt
động ở mức thấp. Giá trị thường được sử dụng cho các điện trở là từ 2KΩ cho tốc độ
vào khoảng 400 kbps, và 10KΩ cho tốc độ thấp hơn khoảng 100 kbps.
2.15 CHUẨN GIAO TIẾP MỘT DÂY
2.15.1 Giới Thiệu
Chuẩn giao tiếp một dây (one-wire) là chuẩn giao tiếp do hãng Dallas giới
thiệu. Chuẩn này cung cấp cả dữ liệu tốc độ thấp, truyền tín hiệu, và nguồn nuôi qua
cùng một chân tín hiệu đơn. Là chuẩn giao tiếp không đồng bộ và bán song công
(half-duplex). Nó thường được sử dụng để giao tiếp với các thiết bị nhỏ giá rẻ
như nhiệt kế kĩ thuật số và công cụ đo thời tiết.
2.15.2 Nguyên Lý Hoạt Động
Trong giao tiếp này tuân theo mối liên hệ chủ tớ một cách chặt chẽ, trên một
dây tín hiệu có thể gắn một hoặc nhiều thiết bị slave. Nhưng chỉ có một master có thể
kết nối đến dây tín hiệu này. Để thực hiện giao tiếp được với các thiết bị theo chuẩn
truyền một dây thường có các thao tác như sau: reset/presence, ghi bit 1 hoặc bit 0,
đọc bit. Các thao tác trên byte như gửi byte, đọc byte đều dựa trên các thao tác bit.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 36
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Hình 2. 37: Sơ đồ kết nối dây theo chuẩn truyền một dây.
Dưới đây là 3 thao tác thực hiện trong chuẩn truyền một dây giữa vi xử lý và
cảm biến DHT11.
Tạo tín hiệu reset và kiểm tra sự hiện diện của cảm biến:
Hình 2. 38: Tạo xung reset và kiểm tra sự hiện diện của cảm biến.
Vi xử lý kéo bus tín hiệu xuống mức 0 tối thiểu là 18ms sau đó thả nổi tín hiệu,
đợi DHT11 phản hồi trong khoảng 20-40uS. Như vậy là vi xử lý đã tạo được xung
reset. Sau khi vi xử lý tạo xung reset, nếu có cảm biến DHT11, thì cảm biến DHT11
sẽ trả về một xung hiện diện cho vi xử lý biết được. Trong đó DHT 11 sẽ kéo mức
tín hiệu xuống 0 trong 80us sau đó kéo lên mức 1 trong 80uS rồi mới tiến hành truyền
dữ liệu.
Đọc giá trị bit 1 và bit 0 cảm biến gửi về.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 37
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Hình 2. 39: Đọc giá trị bit 0.
Hình 2. 40: Đọc giá trị bit 1.
DHT11 gửi tín hiệu về cho vi xử lý, nếu thời gian ở mức 1 là 26-28uS thì đó
là bit 0, nếu thời gian ở mức 1 là 70uS thì đó là bit 1.
2.16 LÝ THUYẾT VỀ ẢNH
2.16.1 Điểm Ảnh
Điểm ảnh (pixel) là đơn vị nhỏ nhất tạo nên hình ảnh, thường mang một màu
duy nhất (kết quả của sự pha trộn các màu cơ bản giữa các kênh màu). Để thông số
điểm ảnh có ý nghĩa, người ta qui về một đơn vị kích thước nhất định như inch hay
cm/mm để tính và điểm ảnh thường được diễn đạt theo số lượng điểm trên một
inch/cm chiều dài.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 38
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Trên một đơn vị diện tích, số lượng điểm ảnh càng nhiều càng cho hình ảnh
chi tiết và đầy đủ màu sắc hơn. Điều này phụ thuộc vào thiết bị thu nhận hình ảnh và
thiết bị hiển thị hình ảnh.
Khi hiển thị ảnh trên màn hình, kích thước to nhỏ của ảnh phụ thuộc vào độ
phân giải của màn hình. Độ phân giải của màn hình càng lớn, ảnh có kích thước hiển
thị càng nhỏ hơn và ngược lại. Ví dụ, một bức ảnh cụ thể sẽ có kích thước to hơn nếu
hiển thị trên màn hình có độ phân giải 1024x768 px, và nhỏ hơn trên màn hình độ
phân giải là 1280x960 px.
Hình 2. 41: Số lượng điểm ảnh trong một diện tích.
Hình bên trái cho thấy trên cùng một đơn vị diện tích 4 điểm ảnh nên chỉ thể
hiện được 4 màu sắc chi tiết, trong khi hình vẽ bên phải có tới 16 điểm ảnh giúp thể
hiện 16 màu sắc, và làm ảnh chi tiết hơn. Số lượng điểm ảnh cũng thường được biểu
diễn theo hai chiều rộng và cao. Theo cách tính này, hình ảnh bên trái có thể biểu
diễn là 2x2 px và hình ảnh bên phải là 4x4 px. Độ phân giải của một hình ảnh là
tổng số điểm ảnh có trong một tệp tin hình ảnh.
2.16.2 PIXEL FORMAT
FrameBuffer chứa nhiều Pixel. Mỗi Pixel đó sẽ có 1 định dạng riêng như bao
nhiều bit. Nếu FrameBuffer dùng 1 bit làm Pixel có nghĩa đây là ảnh MONO (chỉ có
2 màu đen và trắng). Nếu FrameBuffer dùng 16 bit, 24 bit, 32 bit thì đây đều là ảnh
HighColor.
Với 16 bit thì thông thường có 2 dạng:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 39
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
1 bit không sử dụng (hoặc có thể làm Transparent) , còn lại 5 bit Red, 5 bit
Green, 5 bit Blue đại diện cho màu sắc.
5 bit Red, 6 bit Green, 5 bit Blue.
Với 24 bit: Red, Green, Blue sẽ chia đều 8 bit. Còn đối với 32 bit: bao gồm 24
bit màu RGB đồng thời sẽ có 8 Bit làm giá trị Alpha (độ trong suốt của ảnh =>
ARGB).
Riêng nếu FrameBuffer 8 bit thì lại khác. Nó sẽ có 1 màu bảng chứa 256 màu
gọi là Palette. Mỗi Entry trong bảng này là màu sắc 32bit. Sau đó chính là nội dung
của Buffer. Cứ 8bit là 1 Pixel chứa chỉ số Index màu sắc trên bảng Palette.
Hình 2. 42: Frame Buffer 8 bit.
2.16.3 FRAMEBUFFER
FrameBuffer là một vùng nhớ đặc biệt, có đặc điểm là mọi dữ liệu nằm trên
nó sẽ thể hiện trực tiếp lên màn hình. Tất cả các thiết bị có màn hình như di động,
tivi đều có FrameBuffer.
Cấu trúc dữ liệu của FrameBuffer giống như file BMP. Có nghĩa là nó sẽ có
Buffer 1bit, 8bit, 16bit, 24bit và 32bit... Kích thước của FrameBuffer tùy thuộc vào
độ phân giải và PixelFormat.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 40
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Hình 2. 43: Frame Buffer 24 bit màu.
Bảng 2.8 cho ta biết kích thước bộ nhớ RAM cần cung cấp cho Frame Buffer
ở các độ phân giải tương ứng.
Bảng 2. 8: Một số Fram Buffer RAM size
Resolution Width/height ratio Fram buffer Ram size
8 bit 15, 16 bit 24 bit 32 bit
640 x 480 4: 3 300 KB 600 KB 900 KB 1200 KB
800 x 600 4: 3 469 KB 938 KB 1407 KB 1875 KB
1024 x 768 4: 3 768 KB 1536 KB 2304 KB 3072 KB
1152 x 864 4: 3 972 KB 1944 KB 2916 KB 3888 KB
1280 x 1024 5: 4 1280 KB 2560 KB 3840 KB 5120 KB
1600 x 1200 4: 3 1875 KB 3750 KB 5625 KB 7500 KB
1920 x 1080 16: 9 2025 KB 4050 KB 6075 KB 8100 KB
1920 x 1200 8: 5 2250 KB 4500 KB 6750 KB 9000 KB
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 41
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
2.16.4 Mặt Phẳng Bit (Bit Plane)
Phương pháp cắt lớp mặt phẳng bit là một kỹ thuật mà trong đó hình ảnh được
cắt ra thành nhiều mặt phẳng khác nhau. Nó có phạm vi từ bit level 0 có trọng số thấp
nhất (LSB) đến bit level 7 có trọng số cao nhất (MSB). Ngõ ra của phương pháp này
là ảnh 8-bit mỗi pixel. Đây là một phương pháp rất quan trọng trong xử lý ảnh. Hiểu
một cách đơn giản, bitplane là độ sâu màu sắc của pixel, ví dụ đối với hệ màu 24 bit
thì độ sâu của màu đỏ là 8 bit (bitplane = 8).
Hình 2. 44: Mô hình của mặt phẳng bit.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 42
CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ
3.1 GIỚI THIỆU
Với màn hình LED sử dụng các LED ma trận RGB, chúng ta có thể hiệu chỉnh cài
đặt hiển thị các thông thông báo từ người dùng, dữ liệu từ cảm biến nhiệt độ và độ
ẩm đồng thời hiển thị thời gian gồm giờ, phút, giây, ngày, tháng, năm của Việt Nam
và một số nước thuộc các múi giờ khác nhau trên thế giới hay hình ảnh có sẵn trong
bộ nhớ. Dữ liệu được lấy về thông qua thao tác của người sử dụng từ máy tính hoặc
các thiết bị như điện thoại, máy tính bảng được kết nối với mạng wifi và được lưu
vào database của server được đặt trên Raspberry Pi3. Điều này giúp tránh được mất
mát dữ liệu nếu hệ thống mất điện và khởi động lại.
Các yêu cầu đặt ra cho mô hình như sau:
Điều khiển các bảng LED một cách chính xác, chuyển chế độ và đáp ứng kịp
thời khi thay đổi dữ liệu.
Dữ liệu truyền đến server nhanh chóng và đầy đủ và chính xác.
Kết cấu chắc chắn, gọn nhẹ, giao diện điều khiển đơn giản, dễ dàng sử dụng.
Phù hợp với điều kiện kinh tế.
3.2 CÁC HỆ THỐNG MÀN HÌNH TRONG THỰC TẾ
Công nghệ màn hình LED được phát mình ở Nga năm 1920 và sau đó lan rộng
ra khắp các khu vực trên thế giới, tiếp đó là sự phát triển vượt trội khi được ứng dụng
dần vào tivi. Cho tới ngày nay, con người đã quá quen thuộc với những màn hình
LED cỡ lớn và đa dạng về màu sắc, chúng được sử dụng rộng rãi trong nhiều lĩnh
vực của cuộc sống nhất là khi máy chiếu không đảm bảo được độ sáng, màn hình
LCD quá nhỏ thì màn hình lớn LED giúp giải quyết được nhu cầu hiển thị đặc biệt.
Có hai thuật ngữ hay được nhắc tới trong ngành công nghiệp màn hình LED là indoor
và outdoor.
Màn hình LED hiển thị màu indoor (trong nhà) có thể được sử dụng ở 1 số nơi như:
trường quay, rạp hát, sân khấu ca nhạc, hội trường lớn, sảnh lớn của các toà nhà,
khách sạn hay các sự kiện quảng cáo, có thể đọc được hầu hết các định dạng : video,
mp4, avi, swf, VCD, DVD, trình diễn Powerpoint từ nhiều nguồn dữ liệu: Access,
ODBC, SQL màu LED indoor sử dụng công nghệ Diode phát quang với những ưu
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 43
CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
điểm nổi trội về độ sáng và tuổi thọ so với các phương tiện phát hình hiện có (khoảng
100000 giờ). Mỗi điểm ảnh là các LED có độ sáng khác nhau, khoảng cách giữa mỗi
điểm ảnh được thiết kế nhằm đảm bảo tầm nhìn tốt nhất: Màn hình LED indoor có
khoảng cách mỗi điểm ảnh đa dạng từ 4mm đến 10mm.
Màn hình outdoor LED có chức năng tương tự như màn hình LED indoor thông
thường (công dụng, độ sáng và tuổi thọ), màn hình LED hiển thị màu outdoor (ngoài
trời) cũng hiển thị hình ảnh động và tĩnh một cách rõ ràng và sắc nét. Đặc biệt, với
cường độ sáng của didode rất cao (cao hơn nhiều so với màn hình LED indoor), màn
hình LED outdoor có thể đáp ứng được nhu cầu hiển thị ngoài trời ngay cả khi trời
nắng. Khoảng cách mỗi điểm ảnh màn hình LED outdoor từ 4 mm đến 31.25 mm và
tạo ra 4.4 tỷ màu nên tạo hình ảnh trung thực không thua kém gì các phương tiện phát
hình hiện có. Mỗi điểm sáng LED có độ sáng đến hàng nghìn Lumens làm cho màn
hình có thể chỉnh độ sáng để thu hút người xem ngay cả ở những môi trường tối hoặc
sáng nhất. Màn hình LED outdoor rất hiệu quả khi sử dụng cho việc quảng cáo ngoài
trời, tại các sân vận động, quảng trường, trên đường quốc lộ Do các module của
màn hình LED outdoor được đặc biệt thiết kế chống ẩm, chống thấm nước, chống
ánh nắng nên nó có thể ổn định suốt 24 giờ trong ngày.
Các hệ thống màn hình LED ngày nay co kích cỡ lớn và là một hệ thống bao gồm
nhiều thành phần như: bộ điều khiển, hệ thống nguồn, các tấm LED ma trận, mạch
thu, mạch phát, bộ xử lý và chuyển đồi video, bộ chia DVI, nguồn cung cấp tín hiệu
như: Camera, máy vi tính, VCR... và hệ thống âm thanh. Sau đây là một số mô hình
được dùng trong thực tế:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 44
CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
Hình 3. 1: Hệ thống màn hình LED trong nhà.
Hình 3. 2: Hệ thống màn hình LED ngoài trời.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 45
CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
Hình 3. 3: Hệ thống màn hình LED lvp909.
Hình 3. 4: Sơ đồ khối hệ thống màn hình LED trong thực tế.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 46
CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
Vì có nhiều thành phần nên một hệ thống màn hình LED chuyên dụng rất đắt
tiền có thể lên đến nhiểu tỷ đồng cho một hệ thống màn hình ngoài trời có khả năng
chống nước và truyền hình trực tiếp. Để xây dựng những hệ thống chuyên dụng đòi
hỏi nhiều về kiến thức chuyên môn để thi công, lựa chọn các thiết bị phần cứng
chuyên dụng mới đảm bảo về chất lượng và độ tin cậy của hệ thống. Tuy nhiên, chúng
ta có thể rút gọn các hệ thống này xuống mức tối thiểu nhằm mục đích đưa hệ thống
tiếp cận với nhiều người dùng hơn và phục vụ nhiều mục đích hơn. Một hệ thống tối
thiểu bao gồm: máy vi tính, bộ nguồn, mạch điều khiển, các tấm LED ma trận. Một
hệ thống tối thiểu như thế này có chi phí có thể đạt tới mức dưới 6 triệu VNĐ cho 1
hệ thống gồm: 1 m2 các tấm LED ma trận P5 (Pitch = 5, khoảng cách mỗi điểm ảnh
là 5mm), không bao gồm máy vi tính nội dung hiển thị lưu trong mạch điều khiển
được sử dụng trong nhà cho nhiều mục đích như: bảng thông tin, quảng cáo
Hình 3. 5: Hệ thống màn hình LED tối thiểu.
Mạch điều khiển dùng trong một hệ thống tối thiểu được gọi là Card thu có
nhiệm vụ nhận dữ liệu đã qua xử lý và điểu khiển các tấm LED ma trận. Card thu có
nhiều mức giá khác nhau tuỳ thuộc vào tính năng và khả năng điều khiển số lượng
tấm LED ma trận cho mỗi Card thu này. Giá của một Card thu này trong khoảng từ
700,000 VNĐ (model RV908 của hãng LINSN) đến hơn 6,000,000 VNĐ (model A31
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 47
CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
của hãng XIXUN), Các model đắt tiền hơn hỗ trợ các kết nối không dây cũng như
mạng 3G để thu tín hiệu. Đa số các Card thu này đều yêu cầu thêm một Card phát
được gắn trong máy vi tính có nhiệm vụ gửi thông tin hình ảnh đã qua xử lý. Chúng
kết nối với nhau qua dây mạng RJ45 và các Card thu này đa số không thể kết nối trực
tiếp với máy vi tính qua cổng mạng RJ45 dẫn đến phát sinh thêm chi phí cho Card
phát có thể lên đến hơn 6,000,000 VNĐ cũng như không thể hoạt động độc lập mà
phải cắm vào máy vi tính do đó phát sinh thêm chi phí cho thêm một máy vi tính chỉ
để cắm Card phát. Tuy nhiên, một số ít Card thu trên thị trường có thể kết nối với
máy tính trực tiếp qua kết nối RJ45 và hoạt động độc lập bằng cách lưu trữ dữ liệu
hình ảnh được gửi từ máy tính bằng bộ nhớ tích hợp ví dụ như model Nova Mrv330
của hãng Coreman.
Hình 3. 6: Card điều khiển Mrv330.
Trong các hệ thống này, máy tính không đóng vai trò điều khiển các LED ma
trận trực tiếp mà có nhiệm vụ xử lý hình ảnh cần hiển thị sau đó gửi đến mạch thu,
sau đó mạch thu sẽ xuất các thông tin nhận được ra các tấm LED ma trận. Thành phần
chính của các mạch thu này bao gồm chip FPGA và các chip nhớ.
Do có nhiều hãng sản xuất các mạch thu phát, các bộ điều khiển dẫn đến việc
có nhiều phần mềm điều khiển khác nhau cho các mạch này, các phần mềm này mang
tính chất đặc thù theo hãng sản xuất. Một phần mềm chỉ dùng cho một vài dòng sản
phẩm của hãng đó và đa số các phần mềm này không thể dùng chéo cho nhau ví dụ
như không thể dùng phần mềm của hãng này cho phần cứng của hãng khác. Các phần
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 48
CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
mềm điều khiển đều hỗ trợ các chức năng cơ bản như: hiển thị ký tự, hiển thị hình
ảnh, hiển thị video, lấy hình trực tiếp từ màn hình desktop, lấy nguồn video từ camera
và hiển thị ra màn hình LED. Một số phần mềm hỗ trợ thêm những tính năng đặc biệt
khác như lịch, đồng hồ analog, bảng tỉ số. Một vài phần mềm như: Colorlight
LEDShowT9 dùng cho các Card thu A8 và T9, Colorlight LEDVISION cho các Card
thu 5A và i5A, LEDstudio dùng cho các Card thu của hãng LINSN, Nova studio dùng
cho các Card thu của hãng Novastar.
Hình 3. 7: Giao diện phần mềm LEDSHOW.
3.3 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG
3.3.1 Thiết Kế Sơ Đồ Khối Hệ Thống
Sau một thời gian khảo sát và tìm hiểu các yêu cầu đề tài, dựa trên các yêu cầu
của một hệ thống màn hình LED, sơ đồ khối toàn hệ thống được trình bày như hình
sau:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 49
CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
Hình 3. 8: Sơ đồ khối hệ thống.
Sơ đồ khối của hệ thống quang báo gồm 6 khối cơ bản. chức năng của từng
khối như sau:
Khối nguồn: cung cấp nguồn vào cho toàn bộ hệ thống bao gồm khối hiển thị,
khối xử lý trung tâm, các cảm biến và module của khối ngoại vi, các module
khối thu thập dữ liệu.
Khối thu thập dữ liệu: bao gồm các cảm biến, module thời gian thực, module
blutooth, module sim. Có chức năng thu thập và trao đổi dữ liệu từ các khối
website hoặc app android hoặc app windows và khối xử lý dữ liệu.
Khối xử lý dữ liệu: chức năng chính là xử lý và trao đổi dữ liệu từ các ngoại
vi trong khối thu thập dữ liệu và khối web server, app.
Khối web server, app android, app windows: là các ứng dụng trên nền web,
điện thoại, máy tính và có chức năng trao đổi qua lại giữa hai khối thu thập dữ
liệu và khối xử lý dữ liệu sau đó gửi cho bộ xử lý trung tâm.
Khối xử ký trung tâm: nhận dữ liệu sau khi xử lý từ khối web server, app
android, app windows sau đó xử lý bằng chương trình điều khiển và xuất tín
hiệu ra khối hiển thị.
Khối hiển thị: hiển thị dữ liệu đã được xử lý.
3.3.2 Tính Toán Và Thiết Kế Mạch
a. Thiết Kế Khối Hiển Thị
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 50
CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
Khối hiển thị có chức năng hiển thị các thông tin từ các khối khác để người sử
dụng dễ dàng quan sát được. Dữ liệu hiển thị được cập nhật liên tục, được cài đặt với
các thông số kích cỡ và màu sắc. Module LED ma trận được ứng dụng nhiều vào các
biển trang trí giúp cho không gian trang trí thêm rực rỡ và cuốn hút. LED ma trận có
nhiều kích thước khác nhau, ứng dụng cho đa dạng nhu cầu của người dùng, mang
đến nhiều hiệu ứng sinh động và đẹp mắt.
Yêu cầu khối hiển thị: hiển thị hình ảnh, các hông tin về thời gian, dữ liệu cảm
biến, nội dung hiển thị phải rõ nét, màu sắc tươi sáng và đa dạng.
Với các yêu cầu như trên, có thể nói hiện nay trên thị trường có khá nhiều lựa
chọn nodule cho màn hình như P3, P4, P5, P8, P10. Để phù hợp với các yêu cầu
của đề tài cũng như đáp ứng tốt các nhu cầu hiển thị, nhóm thực hiện quyết định chọn
module LED P5 indoor. Đây là loại module sử dụng công nghệ bóng LED siêu sáng
SMD. Điểm ảnh là các bóng LED có độ sáng và tuổi thọ cao. Mật độ điểm ảnh lớn,
các điểm ảnh cách nhau 5mm, cho độ phân giải cao, đem lại một góc nhìn sâu, hình
ảnh rõ nét, mịn màng, rất thích hợp cho việc hiển thị trong một không gian không quá
rộng. Ngoài ra, module LED P5 có độ sáng vừa phải, chống chói khi mắt người nhìn
và cho được độ rõ nét khi nhìn gần.
Thông số kỹ thuật của module LED p5 gồm có:
khoảng cách hai điểm ảnh: 5mm
Kích thước Module cơ bản 160mm x 320mm – 32 x 64 pixel
Số LED / điểm ảnh: SMD 3 trong 1
Độ sáng tối đa: 1800cd/1m2
Khoảng cách nhìn tốt nhất 10 > 300m
Công suất tiêu thụ /m2: tối đa 750W, trung bình 450W
Tuổi thọ bóng LED 50.000 h
Một tấm module LED P5 có kích thước khung viền là 16mm x 32mm với mật độ
điểm ảnh là 32 x 64 = 2048 Pixel. Có hai lựa chọn để ghép 8 tấm moudle P5 thành
một màn hình lớn hơn:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 51
CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ
Hình 3. 9: Cách bố trí màn hình chữ nhật.
Hình 3. 10: Cách bố trí màn hình vuông.
Với kiểu bố trí hình chữ nhật, ta có một màn hình với độ ph...;
}
result->push_back(frames[0]); // just a single still image.
const int img_width = (*result)[0].columns();
const int img_height = (*result)[0].rows();
const float width_fraction = (float)target_width / img_width;
const float height_fraction = (float)target_height / img_height;
if (fill_width && fill_height) {
const float larger_fraction = (width_fraction > height_fraction)
? width_fraction
: height_fraction;
target_width = (int) roundf(larger_fraction * img_width);
target_height = (int) roundf(larger_fraction * img_height);
}
else if (fill_height) {
target_width = (int) roundf(height_fraction * img_width);
}
else if (fill_width) {
target_height = (int) roundf(width_fraction * img_height);
}
for (size_t i = 0; i size(); ++i) {
(*result)[i].scale(Magick::Geometry(target_width, target_height));
}
return true;
}
//********************//
volatile bool interrupt_received = false;
static void InterruptHandler(int signo) {
interrupt_received = true;
}
static int usage(const char *progname) {
rgb_matrix::PrintMatrixFlags(stderr);
return 1;
}
static bool parseColor(Color *c, const char *str) {
return sscanf(str, "%hhu,%hhu,%hhu", &c->r, &c->g, &c->b) == 3;
}
static bool FullSaturation(const Color &c) {
return (c.r == 0 || c.r == 255)
&& (c.g == 0 || c.g == 255)
&& (c.b == 0 || c.b == 255);
}
void khoitao_video();
void doctinnhan()
{
f.open("/var/www/html/nd.txt", ios::in);
getline(f, data);
f.close();
cp = data.c_str();
}
void docfont()
{
f.open("/var/www/html/font.txt", ios::in);
getline(f, phong);
f.close();
phongchu = phong.c_str();
}
void docthoigian()
{
f.open("/var/www/html/esp.txt", ios::in);
getline(f, thoigian);
f.close();
dongho = thoigian.c_str();
}
void docnhietdo()
{
f.open("/var/www/html/nhietdo.txt", ios::in);
getline(f, nhietdo);
f.close();
nhietdo = nhietdo.substr(0,4);
if(nhietdo!="")
{
nhietdo_t = nhietdo.c_str();
}
}
void docsim()
{
f.open("/var/www/html/sim.txt", ios::in);
getline(f, sim);
f.close();
sim = sim.substr(0,sim.length()-1);
if(sim!="")
{
sim_t = sim.c_str();
}
}
void docdoam()
{
f.open("/var/www/html/doam.txt", ios::in);
getline(f, doam);
f.close();
doam = doam.substr(0,4);
if(doam!="")
{
doam_t = doam.c_str();
}
}
void docmau()
{
f.open("/var/www/html/color.txt", ios::in);
if (f.is_open()) {
for(int i = 0;i<3;i++){
if (!f.eof()) {
if(i> mauR;}
else if(i> mauG;}
else {f>> mauB;}
}
}
}
f.close();
}
void chon_kieu_dong_ho()
{
f.open("/var/www/html/clockstyle.txt", ios::in);
if (f.is_open()) {
if (!f.eof()) {
f >> clockstyle;
}
}
f.close();
}
void timezone_()
{
f.open("/var/www/html/timezone.txt", ios::in);
getline(f, timezone_s);
f.close();
if(timezone_s!="")
{
timezone_t = timezone_s.c_str();
}
}
void chonhinh_()
{
f.open("/var/www/html/chonhinh.txt", ios::in);
getline(f, chonhinh_s);
f.close();
if(chonhinh_s!="")
{
chonhinh_t = chonhinh_s.c_str();
}
}
void loadhinh_()
{
f.open("/var/www/html/loadhinh.txt", ios::in);
getline(f, loadhinh_s);
f.close();
if(loadhinh_s!="")
{
loadhinh_t = loadhinh_s.c_str();
}
}
void chonvideo_()
{
f.open("/var/www/html/chonvideo.txt", ios::in);
getline(f, loadvideo_s);
f.close();
if(loadvideo_s!="")
{
loadvideo_t = loadvideo_s.c_str();
}
}
void dosang_()
{
f.open("/var/www/html/dosang.txt", ios::in);
getline(f, dosang_s);
f.close();
if(dosang_s!="")
{
dosang_i = stoi(dosang_s);
}
}
void change_image()
{
f.open("/var/www/html/change.txt", ios::in);
f >> loadimage;
f.close();
}
void chophepfont_()
{
f.open("/var/www/html/chophepfont.txt", ios::in);
f >> chophepfont;
f.close();
}
int main(int argc, char *argv[]) {
Magick::InitializeMagick(*argv);
RGBMatrix::Options matrix_options;
rgb_matrix::RuntimeOptions runtime_opt;
if (!rgb_matrix::ParseOptionsFromFlags(&argc, &argv,
&matrix_options,
&runtime_opt)) {
return usage(argv[0]);
}
//*******************************//
bool do_center = false;
std::map filename_params;
ImageParams img_param;
for (int i = 0; i < argc; ++i) {
filename_params[argv[i]] = img_param;
}
const char *stream_output = NULL;
//*******************************//
const char *time_format = "%H:%M";
const char *time_format1 = "%d%m%y";
Color color(255, 255, 0);
Color bg_color(0, 0, 0);
Color outline_color(0,0,0);
////////////////////////////
Color YellowGreen(145,205,50);
Color Yellow(255,255,0);
Color WhiteSmoke(245,245,245);
Color White(255,255,255);
Color Wheat(245,222,179);
Color Violet(238,130,238);
Color Turquoise(64,224,208);
Color Tomato(255,99,71);
Color Thistle(216,191,216);
Color Teal(0,128,128);
Color Tan(210,180,140);
Color SteelBlue(70,130,180);
Color SpringGreen(0,255,127);
Color Snow(255,250,250);
Color SlateGrey(112,128,144);
Color SlateGray(112,128,144);
Color SlateBlue(106,90,255);
Color SkyBlue(135,206,235);
Color Silver(192,192,192);
Color Sienna(160,82,45);
Color SeaShell(255,245,238);
Color SeaGreen(46,139,87);
Color SandyBrown(244,164,96);
Color Salmon(250,128,114);
Color SaddleBrown(139,69,19);
Color RoyalBlue(65,105,225);
Color RosyBrown(188,143,143);
Color Red(255,0,0);
Color Purple(128,0,128);
Color PowderBlue(176,224,230);
Color Plum(221,160,221);
Color Pink(255,192,203);
Color Peru(205,133,63);
Color PeachPuff(255,218,185);
Color PapayaWhip(255,239,213);
Color PaleVioletRed(216,112,147);
Color PaleTurquoise(175,238,238);
Color PaleGreen(152,251,152);
Color PaleGoldenRod(238,232,170);
Color Orchid(218,112,214);
Color OrangeRed(255,69,0);
Color Orange(255,165,0);
Color OliveDrab(107,142,35);
Color Olive(128,128,0);
Color OldLace(253,245,230);
Color Navy(0,0,128);
Color NavajoWhite(255,222,173);
Color Moccasin(255,228,181);
Color MistyRose(255,228,225);
Color MintCream(245,255,250);
Color MidnightBlue(25,25,112);
Color MediumVioletRed(199,21,133);
Color MediumTurquoise(72,209,204);
Color MediumSpringGreen(0,250,154);
Color MediumSlateBlue(123,104,238);
Color MediumSeaGreen(60,179,113);
Color MediumPurple(147,112,216);
Color MediumOrchid(186,85,211);
Color MediumBlue(0,0,205);
Color MediumAquaMarine(102,205,170);
Color Maroon(128,0,0);
Color Magenta(255,0,255);
Color Linen(250,240,230);
Color LimeGreen(50,205,50);
Color Lime(0,255,0);
Color LightYellow(255,255,224);
Color LightSteelBlue(176,196,222);
Color LightSlateGrey(119,136,153);
Color LightSlateGray(119,136,153);
Color LightSkyBlue(135,206,250);
Color LightSeaGreen(32,178,170);
Color LightSalmon(255,160,122);
Color LightPink(255,182,193);
Color LightGrey(211,211,211);
Color LightGreen(144,238,144);
Color LightGray(211,211,211);
Color LightGoldenRodYellow(250,250,210);
Color LightCyan(224,255,255);
Color LightCoral(240,128,128);
Color LightBlue(173,216,230);
Color LemonChiffon(255,250,205);
Color LawnGreen(124,252,0);
Color LavenderBlush(255,240,245);
Color Lavender(230,230,230);
Color Khaki(240,230,140);
Color Ivory(255,255,240);
Color Indigo(75,0,130);
Color IndianRed(205,90,90);
Color HotPink(255,105,180);
Color HoneyDew(240,255,240);
Color Grey(218,218,218);
Color GreenYellow(173,255,47);
Color Green(0,218,0);
Color Gray(218,218,218);
Color GoldenRod(218,165,32);
Color Gold(255,215,0);
Color GhostWhite(248,248,255);
Color Gainsboro(220,220,220);
Color Fuchsia(255,0,255);
Color ForestGreen(34,139,34);
Color FloralWhite(255,250,240);
Color FireBrick(178,34,34);
Color DodgerBlue(30,144,255);
Color DimGrey(105,105,105);
Color DimGray(105,105,105);
Color DeepSkyBlue(0,191,255);
Color DeepPink(255,20,147);
Color DarkViolet(248,0,211);
Color DarkTurquoise(0,206,209);
Color DarkSlateGrey(47,79,79);
Color DarkSlateGray(47,79,79);
Color DarkSlateBlue(72,61,139);
Color DarkSeaGreen(143,188,143);
Color DarkSalmon(233,150,122);
Color DarkRed(139,0,0);
Color DarkOrchid(153,50,204);
Color Darkorange(255,140,0);
Color DarkOliveGreen(85,107,47);
Color DarkMagenta(139,0,139);
Color DarkKhaki(189,183,107);
Color DarkGrey(169,169,169);
Color DarkGreen(0,100,0);
Color DarkGray(169,169,169);
Color DarkGoldenRod(184,134,11);
Color DarkCyan(0,139,139);
Color DarkBlue(0,0,139);
Color Cyan(0,255,255);
Color Crimson(220,20,60);
Color Cornsilk(255,248,220);
Color CornflowerBlue(100,149,137);
Color Coral(255,127,80);
Color Chocolate(210,105,30);
Color Chartreuse(127,255,0);
Color CadetBlue(95,158,160);
Color BurlyWood(222,184,135);
Color Brown(165,42,42);
Color BlueViolet(138,43,226);
Color Blue(0,0,255);
Color BlanchedAlmond(255,235,205);
Color Black(0,0,0);
Color Bisque(255,228,196);
Color Beige(245,245,220);
Color Azure(240,255,255);
Color Aquamarine(127,255,212);
Color Aqua(0,255,255);
Color AntiqueWhite(250,235,215);
Color AliceBlue(240,248,255);
////////////////////////////
bool with_outline = false;
const char *bdf_font_file = NULL;
std::string line;
/* x_origin is set just right of the screen */
int brightness = 100;
int letter_spacing = 0;
float speed = 7.0f;
int loops = -1;
int opt;
doctinnhan();
docfont();
docmau();
Color color1(mauR,mauG,mauB);
chon_kieu_dong_ho();
docthoigian();
docnhietdo();
docnhietdo();
////////////////////////////////
rgb_matrix::Font font;
rgb_matrix::Font font2;
rgb_matrix::Font *outline_font2 = NULL;
font2.LoadFont(phongchu);
rgb_matrix::Font *outline_font = NULL;
if (with_outline) {
outline_font = font.CreateOutlineFont();
}
outline_font2 = font2.CreateOutlineFont();
rgb_matrix::Font font4x6;
rgb_matrix::Font *outline_font4x6 = NULL;
font4x6.LoadFont("/home/pi/matrix/fonts/4x6.bdf");
outline_font4x6 = font4x6.CreateOutlineFont();
rgb_matrix::Font font5x7;
rgb_matrix::Font *outline_font5x7 = NULL;
font5x7.LoadFont("/home/pi/matrix/fonts/5x7.bdf");
outline_font5x7 = font5x7.CreateOutlineFont();
rgb_matrix::Font font5x8;
rgb_matrix::Font *outline_font5x8 = NULL;
font5x8.LoadFont("/home/pi/matrix/fonts/5x8.bdf");
outline_font5x8 = font5x8.CreateOutlineFont();
rgb_matrix::Font font6x9;
rgb_matrix::Font *outline_font6x9 = NULL;
font6x9.LoadFont("/home/pi/matrix/fonts/6x9.bdf");
outline_font6x9 = font6x9.CreateOutlineFont();
rgb_matrix::Font font6x10;
rgb_matrix::Font *outline_font6x10 = NULL;
font6x10.LoadFont("/home/pi/matrix/fonts/6x10.bdf");
outline_font6x10 = font6x10.CreateOutlineFont();
rgb_matrix::Font font6x12;
rgb_matrix::Font *outline_font6x12 = NULL;
font6x12.LoadFont("/home/pi/matrix/fonts/6x12.bdf");
outline_font6x12 = font6x12.CreateOutlineFont();
rgb_matrix::Font font6x13;
rgb_matrix::Font *outline_font6x13 = NULL;
font6x13.LoadFont("/home/pi/matrix/fonts/6x13.bdf");
outline_font6x13 = font6x13.CreateOutlineFont();
rgb_matrix::Font font6x13B;
rgb_matrix::Font *outline_font6x13B = NULL;
font6x13B.LoadFont("/home/pi/matrix/fonts/6x13B.bdf");
outline_font6x13B = font6x13B.CreateOutlineFont();
rgb_matrix::Font font6x13O;
rgb_matrix::Font *outline_font6x13O = NULL;
font6x13O.LoadFont("/home/pi/matrix/fonts/6x13O.bdf");
outline_font6x13O = font6x13O.CreateOutlineFont();
rgb_matrix::Font font7x13;
rgb_matrix::Font *outline_font7x13 = NULL;
font7x13.LoadFont("/home/pi/matrix/fonts/7x13.bdf");
outline_font7x13 = font7x13.CreateOutlineFont();
rgb_matrix::Font font7x13B;
rgb_matrix::Font *outline_font7x13B = NULL;
font7x13B.LoadFont("/home/pi/matrix/fonts/7x13.bdf");
outline_font7x13B = font7x13B.CreateOutlineFont();
rgb_matrix::Font font7x13O;
rgb_matrix::Font *outline_font7x13O = NULL;
font7x13O.LoadFont("/home/pi/matrix/fonts/7x13O.bdf");
outline_font7x13O = font7x13O.CreateOutlineFont();
rgb_matrix::Font font7x14;
rgb_matrix::Font *outline_font7x14 = NULL;
font7x14.LoadFont("/home/pi/matrix/fonts/7x14.bdf");
outline_font7x14 = font7x14.CreateOutlineFont();
rgb_matrix::Font font7x14B;
rgb_matrix::Font *outline_font7x14B = NULL;
font7x14B.LoadFont("/home/pi/matrix/fonts/7x14B.bdf");
outline_font7x14B = font7x14B.CreateOutlineFont();
rgb_matrix::Font font8x13;
rgb_matrix::Font *outline_font8x13 = NULL;
font8x13.LoadFont("/home/pi/matrix/fonts/8x13.bdf");
outline_font8x13 = font8x13.CreateOutlineFont();
rgb_matrix::Font font8x13B;
rgb_matrix::Font *outline_font8x13B = NULL;
font8x13B.LoadFont("/home/pi/matrix/fonts/8x13B.bdf");
outline_font8x13B = font8x13B.CreateOutlineFont();
rgb_matrix::Font font8x13O;
rgb_matrix::Font *outline_font8x13O = NULL;
font8x13O.LoadFont("/home/pi/matrix/fonts/8x13O.bdf");
outline_font8x13O = font8x13O.CreateOutlineFont();
rgb_matrix::Font font9x15;
rgb_matrix::Font *outline_font9x15 = NULL;
font9x15.LoadFont("/home/pi/matrix/fonts/9x15.bdf");
outline_font9x15 = font9x15.CreateOutlineFont();
rgb_matrix::Font font9x15B;
rgb_matrix::Font *outline_font9x15B = NULL;
font9x15B.LoadFont("/home/pi/matrix/fonts/9x15B.bdf");
outline_font9x15B = font9x15B.CreateOutlineFont();
rgb_matrix::Font font9x18;
rgb_matrix::Font *outline_font9x18 = NULL;
font9x18.LoadFont("/home/pi/matrix/fonts/9x18.bdf");
outline_font9x18 = font9x18.CreateOutlineFont();
rgb_matrix::Font font9x18B;
rgb_matrix::Font *outline_font9x18B = NULL;
font9x18B.LoadFont("/home/pi/matrix/fonts/9x18B.bdf");
outline_font9x18B = font9x18B.CreateOutlineFont();
rgb_matrix::Font font10x20;
rgb_matrix::Font *outline_font10x20 = NULL;
font10x20.LoadFont("/home/pi/matrix/fonts/10x20.bdf");
outline_font10x20 = font10x20.CreateOutlineFont();
rgb_matrix::Font fontclR6x12;
rgb_matrix::Font *outline_fontclR6x12 = NULL;
fontclR6x12.LoadFont("/home/pi/matrix/fonts/clR6x12.bdf");
outline_fontclR6x12 = fontclR6x12.CreateOutlineFont();
rgb_matrix::Font fonthelvR12;
rgb_matrix::Font *outline_fonthelvR12 = NULL;
fonthelvR12.LoadFont("/home/pi/matrix/fonts/helvR12.bdf");
outline_fonthelvR12 = fonthelvR12.CreateOutlineFont();
if (brightness 100) {
fprintf(stderr, "Brightness is outside usable range.\n");
return 1;
}
//*******************************************//
runtime_opt.do_gpio_init = (stream_output == NULL);
//*******************************************//
matrix_options.cols =64;
matrix_options.rows =32;
matrix_options.chain_length =4;
matrix_options.parallel =2;
matrix_options.pwm_lsb_nanoseconds =300;
matrix_options.pixel_mapper_config="U-mapper";
runtime_opt.gpio_slowdown =3;
RGBMatrix *matrix = rgb_matrix::CreateMatrixFromOptions(matrix_options,
runtime_opt);
matrix->SetBrightness(dosang_i);
matrix->SetPWMBits(11);
int x_orig = (matrix_options.chain_length * matrix_options.cols) + 5;
int y_orig = 0;
int x = x_orig;
int y = y_orig;
int length = 0;
int length1 = 0;
signal(SIGTERM, InterruptHandler);
signal(SIGINT, InterruptHandler);
printf("CTRL-C for exit.\n");
FrameCanvas *offscreen_canvas = matrix->CreateFrameCanvas();
struct timespec next_time;
next_time.tv_sec = time(NULL);
next_time.tv_nsec = 0;
struct tm tm;
f.open("/var/www/html/change.txt", ios::out);
f << "00";
f.close();
while (!interrupt_received ) {
change_image();
dosang_();
matrix->SetBrightness(dosang_i);
if(loadimage=="00"){
offscreen_canvas->Clear(); // clear canvas
offscreen_canvas->Fill(bg_color.r, bg_color.g, bg_color.b);
doctinnhan();
docfont();
timezone_();
chophepfont_();
if(chophepfont=="1")
{
font2.LoadFont(phongchu);
outline_font2 = font2.CreateOutlineFont();
f.open("/var/www/html/chophepfont.txt", ios::out);
f << '0';
f.close();
}
docmau(); Color color1(mauR,mauG,mauB);
docthoigian(); docnhietdo();
docdoam(); docsim();
length1 = rgb_matrix::DrawText(offscreen_canvas, font2,
xt, 94 + font.baseline(),
color1, outline_font ? NULL
: &bg_color,sim_t);
length = rgb_matrix::DrawText(offscreen_canvas, font2,
x, 120 + font.baseline(),
color1, outline_font ? NULL
: &bg_color,cp);
biendem++;
if(biendem>=100) biendem=0;
if((biendem%2)==0)
{
if (--x + length < 0) {
x = x_orig;
if (loops > 0) --loops;
}
if (--xt + length1 < 0) {
xt = x_orig;
if (loops > 0) --loops;
}
}
chon_kieu_dong_ho();
if(thoigian!=""){
nam = thoigian.substr(0,4);
thang = thoigian.substr(5,2);
ngay = thoigian.substr(8,2);
gio = thoigian.substr(11,2);
phut = thoigian.substr(14,2);
giay = thoigian.substr(17,2);
//string => char
gio_t = gio.c_str();
phut_t = phut.c_str();
giay_t = giay.c_str();
ngay_t = ngay.c_str();
thang_t = thang.c_str();
nam_t = nam.c_str();
//string -> int
gio_tt = std::stoi(gio);
phut_tt = std::stoi(phut);
giay_tt = std::stoi(giay);
}
if(clockstyle == 0){
rgb_matrix::DrawText(offscreen_canvas, font9x18B, 0,10,
Green, NULL, "Timezone:",
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 40,25,
Red, NULL, timezone_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font9x18B, 0,40,
Green, NULL, "time",
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 36,40,
Yellow, NULL,ngay_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 54,40,
Blue, NULL,"/",
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 62,40,
Yellow, NULL,thang_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 79,40,
Blue, NULL,"/",
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 87,40,
Yellow, NULL,nam_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 0,55,
Orange, NULL, gio_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 20,55,
Blue, NULL, ":",
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 30,55,
Orange, NULL, phut_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 50,55,
Blue, NULL, ":",
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 60,55,
Orange, NULL, giay_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 0,75,
Blue, NULL, nhietdo_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 40,75,
Blue, NULL, "°C",
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 66,75,
Blue, NULL, doam_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font10x20, 106,75,
Blue, NULL, "%",
letter_spacing);
}
else{
x1 = 32 + 20*cos((M_PI*(giay_tt-15))/30);
x2 = 32 + 20*sin((M_PI*(giay_tt-15))/30);
x3 = 32 + 18*cos((M_PI*((phut_tt + (giay_tt)/60)-15))/30);
x4 = 32 + 18*sin((M_PI*((phut_tt + (giay_tt)/60)-15))/30);
xag1_1 =32+13*cos(M_PI*(gio_tt+(float)(phut_tt/60)-3)/6);
yag1_1 =32+13*sin(M_PI*(gio_tt+(float)(phut_tt/60)-3)/6);
rgb_matrix::DrawRect(offscreen_canvas,1, 1, 63, 63, 0, DarkViolet);
rgb_matrix::DrawLine(offscreen_canvas,32,32,x1,x2,Yellow);
rgb_matrix::DrawBar(offscreen_canvas,32,32,x3,x4,2,Crimson);
rgb_matrix::DrawBar(offscreen_canvas,32,32,xag1_1,yag1_1,3,DarkViolet);
rgb_matrix::DrawCircle(offscreen_canvas,32,32,27,Orange);
rgb_matrix::DrawCircle(offscreen_canvas,32,32,29,Blue);
rgb_matrix::DrawCircle(offscreen_canvas,32,32,30,Green);
rgb_matrix::DrawCircle(offscreen_canvas,32,32,28,Red);
rgb_matrix::DrawCircle(offscreen_canvas,32,32,2,AliceBlue);
rgb_matrix::DrawLine(offscreen_canvas,31,31,31,33,AliceBlue);
rgb_matrix::DrawLine(offscreen_canvas,32,31,32,33,AliceBlue);
rgb_matrix::DrawLine(offscreen_canvas,33,31,33,33,AliceBlue);
rgb_matrix::DrawText(offscreen_canvas, font5x8, 27,12,Chartreuse,
NULL, "12");
rgb_matrix::DrawText(offscreen_canvas, font5x8, 30,59,Chartreuse,
NULL, "6");
rgb_matrix::DrawText(offscreen_canvas, font5x8, 6,35,Chartreuse,
NULL, "9");
rgb_matrix::DrawText(offscreen_canvas, font5x8, 55,35,Chartreuse,
NULL, "3");
rgb_matrix::DrawText(offscreen_canvas, font8x13B,63,12,
Red, NULL, timezone_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font9x18B, 64,32,
Blue, NULL, nhietdo_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font9x18B, 64,50,
Blue, NULL, doam_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font9x18B, 100,32,
Blue, NULL, "°C",
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font9x18B, 105,50,
Blue, NULL, "%",
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font9x18B, 1,75,
Blue, NULL,ngay_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font9x18B, 19,75,
Blue, NULL,"/",
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font9x18B, 27,75,
Blue, NULL,thang_t,
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font9x18B, 44,75,
Blue, NULL,"/",
letter_spacing);
rgb_matrix::DrawText(offscreen_canvas, font9x18B, 50,75,
Blue, NULL,nam_t,
letter_spacing);
}
offscreen_canvas = matrix->SwapOnVSync(offscreen_canvas);
}
else if(loadimage=="01"){
chonvideo_();
bool verbose = false;
// Initalizing these to NULL prevents segfaults!
AVFormatContext *pFormatCtx = NULL;
int i, videoStream;
AVCodecContext *pCodecCtxOrig = NULL;
AVCodecContext *pCodecCtx = NULL;
AVCodec *pCodec = NULL;
AVFrame *pFrame = NULL;
AVFrame *pFrameRGB = NULL;
AVPacket packet;
int frameFinished;
int numBytes;
uint8_t *buffer = NULL;
struct SwsContext *sws_ctx = NULL;
const char *movie_file = loadvideo_t;
av_register_all();
avformat_network_init();
if(avformat_open_input(&pFormatCtx, movie_file, NULL, NULL)!=0)
return -1; // Couldn't open file
if(avformat_find_stream_info(pFormatCtx, NULL)<0)
return -1;
StreamWriter *stream_writer = NULL;
StreamIO *stream_io = NULL;
if (stream_output) {
int fd = open(stream_output, O_CREAT|O_WRONLY, 0644);
if (fd < 0) {
perror("Couldn't open output stream");
return 1;
}
stream_io = new rgb_matrix::FileStreamIO(fd);
stream_writer = new StreamWriter(stream_io);
}
// Find the first video stream
videoStream=-1;
for (i=0; i nb_streams; ++i) {
if (pFormatCtx->streams[i]->codec-
>codec_type==AVMEDIA_TYPE_VIDEO) {
videoStream=i;
break;
}
}
pCodecCtxOrig = pFormatCtx->streams[videoStream]->codec;
double fps = av_q2d(pFormatCtx->streams[videoStream]->avg_frame_rate);
if (fps < 0) {
fps = 1.0 / av_q2d(pFormatCtx->streams[videoStream]-
>codec->time_base);
}
pCodec=avcodec_find_decoder(pCodecCtxOrig->codec_id);
pCodecCtx = avcodec_alloc_context3(pCodec);
if (avcodec_copy_context(pCodecCtx, pCodecCtxOrig) != 0) {
fprintf(stderr, "Couldn't copy codec context");
return -1;
}
if (avcodec_open2(pCodecCtx, pCodec, NULL)<0)
return -1;
pFrame=av_frame_alloc();
pFrameRGB=av_frame_alloc();
numBytes=avpicture_get_size(AV_PIX_FMT_RGB24, pCodecCtx->width,
pCodecCtx->height);
buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t));
avpicture_fill((AVPicture *)pFrameRGB, buffer, AV_PIX_FMT_RGB24,
pCodecCtx->width, pCodecCtx->height);
sws_ctx = sws_getContext(pCodecCtx->width,
pCodecCtx->height,
pCodecCtx->pix_fmt,
matrix->width(), matrix->height(),
AV_PIX_FMT_RGB24,
SWS_BILINEAR,
NULL,
NULL,
NULL
);
while( !interrupt_received &&((av_read_frame(pFormatCtx, &packet) >=
0)&&(loadimage=="01"))) {
change_image();
dosang_();
matrix->SetBrightness(dosang_i);
if (packet.stream_index==videoStream) {
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished,
&packet);
if (frameFinished) {
sws_scale(sws_ctx, (uint8_t const * const *)pFrame->data,
pFrame->linesize, 0, pCodecCtx->height,
pFrameRGB->data, pFrameRGB->linesize);
CopyFrame(pFrameRGB, offscreen_canvas);
offscreen_canvas = matrix-
>SwapOnVSync(offscreen_canvas);
}
}
av_free_packet(&packet);
}
if(loadimage=="010"){
f.open("/var/www/html/change.txt", ios::out);
f << "01";
f.close();
}
av_free(buffer);
av_frame_free(&pFrameRGB);
av_frame_free(&pFrame);
avcodec_close(pCodecCtx);
avcodec_close(pCodecCtxOrig);
avformat_close_input(&pFormatCtx);
delete stream_writer;
delete stream_io;
}
else{
if(loadimage =="10"){
chonhinh_();
offscreen_canvas->Clear(); // clear canvas
offscreen_canvas->Fill(bg_color.r, bg_color.g, bg_color.b);
rgb_matrix::StreamIO *stream_io = NULL;
rgb_matrix::StreamWriter *global_stream_writer = NULL;
if (stream_output)
{
int fd = open(stream_output, O_CREAT|O_WRONLY, 0644);
stream_io = new rgb_matrix::FileStreamIO(fd);
global_stream_writer = new rgb_matrix::StreamWriter(stream_io);
}
std::vector file_imgs;
const char *filename = chonhinh_t;
FileInfo *file_info = NULL;
std::string err_msg;
std::vector image_sequence;
if (LoadImageAndScale(filename, matrix->width(), matrix->height(),
true, true, &image_sequence,
&err_msg))
{
file_info = new FileInfo();
file_info->params = filename_params[filename];
file_info->content_stream = new rgb_matrix::MemStreamIO();
rgb_matrix::StreamWriter out(file_info->content_stream);
const Magick::Image &img = image_sequence[0];
int64_t delay_time_us;
delay_time_us = 10;
StoreInStream(img, delay_time_us, do_center, offscreen_canvas,
global_stream_writer ?
global_stream_writer : &out);
f.open("/var/www/html/change.txt", ios::out);
f << "11";
f.close();
}
offscreen_canvas = matrix-
>SwapOnVSync(offscreen_canvas);
}
}
}
// Finished. Shut down the RGB matrix.
matrix->Clear();
delete matrix;
return 0;
}
Chương Trình Tạo Giao Diện Web Server
<?php
require './libs/matrix.php';
//lấy tất cả các dữ liệu trong database
$dl_db = get_all_data();
disconnect_db();
$ds_image = array();
$ds_image = glob("/var/www/html/upload/*");
$ds_video = array();
$ds_video = glob("/var/www/html/video/*");
?>
ĐỒ ÁN TỐT NGHIỆP
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-
ui.css">
$( function() {
$( "#datepicker" ).datepicker({dateFormat: "mm-dd-yy"});
});
Trường Đại Học
Sư Phạm Kỹ Thuật TP. Hồ Chí Minh
Bộ môn Điện Tử Công Nghiệp - Y Sinh
Khoa Điện - Điện Tử
Đề Tài:
THIẾT KẾ VÀ THI CÔNG QUANG BÁO
<button class="tablink" onclick="openPage('Home', this, 'red')"
id="defaultOpen">Quản Lý Tin Nhắn
Cài Đặt
Quản lý hình
ảnh
Quản lý
video
<input title="điền nội dung tin nhắn" name="nd" value="<?php echo
!empty($data['nd']) ? $data['nd'] : ''; ?>" id="tinnhan"/>
<?php
if (!empty($errors['nd'])) echo $errors['nd'];
?>
<select name="font" style="width:100px; height:30px;" title="chọn
kích thước">
<option value="9x15"<?php if (!empty($data['font']) &&
$data['font'] == '9x15') echo 'selected'; ?>>9x15
4x6
5x7
5x8
6x9
6x10
6x12
6x13
6x13B
6x13O
7x13
7x13B
7x13O
7x14
7x14B
8X13
8x13B
8x13O
9x15B
9x18
9x18B
10x20
clR6x12
helvR12
tom-thumb
<button input type="submit" name="add_dl" value="Lưu" title="lưu vào cơ
sở dữ liệu">Lưu
<button input type="submit" name="Printtoled" value="hiển thị
ngay"title="hiển thị ngay">hiển thị
tt
noi dung
font
color
ngay nhap
lua chon
"><?php echo
$item['db_color'];?>
<?php echo
$item['db_ngay_thang'];?>
<input type="hidden" name="id" value="<?php echo $item['db_tt'];
?>"/>
<button input onclick="return confirm('Bạn có chắc muốn xóa
không?');" type="submit" name="delete" value="Xóa">xóa
<button input onclick="window.location = 'data_edit2.php?id=<?php
echo $item['db_tt']; ?>'" type="button" value="Sửa">sửa
<input type="hidden" name="tt" value="<?php echo $item['db_tt'];
?>"/>
<input type="hidden" name="nd" value="<?php echo
$item['db_nd']; ?>"/>
<input type="hidden" name="font" value="<?php echo
$item['db_font']; ?>"/>
<input type="hidden" name="color" value="<?php echo
$item['db_color']; ?>"/>
<input type="hidden" name="date" value="<?php echo
$item['db_ngay_thang']; ?>"/>
in
IMAGE/TEXT
KIỂU ĐỒNG
HỒ
VIỆT NAM
ĐỨC
MỸ
ANH
NHẬT
THÁI LAN
PHÁP
NGA
TEXT
IMAGE
VIDEO
DOSANG
">
"/>
Hiển
thị
<button input type="submit" name="xoaanh" value="press"
>Xóa
<input type="text" name="id" value="<?php echo
substr($video,20,strlen($video)); ?>"/>
"/>
<button input type="submit" name="hienthivideo"
value="press">Hiển thị
<button input type="submit" name="xoavideo"
value="press">Xóa
function openPage(pageName,elmnt,color) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablink");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].style.backgroundColor = "";
}
document.getElementById(pageName).style.display = "block";
elmnt.style.backgroundColor = color;
}
// Get the element with id="defaultOpen" and click on it
document.getElementById("defaultOpen").click();
Các file đính kèm theo tài liệu này:
- do_an_thiet_ke_thi_cong_quang_bao.pdf