Đồ án Thiết kế, thi công quang báo

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.

pdf206 trang | Chia sẻ: huong20 | Ngày: 13/01/2022 | Lượt xem: 279 | Lượt tải: 0download
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:

  • pdfdo_an_thiet_ke_thi_cong_quang_bao.pdf