Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 112 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
112
Dung lượng
3,03 MB
Nội dung
TRƯỜNG ĐẠI HỌC NHA TRANG
KHOA ĐIỆN - ĐIỆN TỬ
NGUYỄN KHẮC HUY
NGHIÊN CỨU THIẾT KẾ CHẾ TẠO BỘ ĐIỀU
KHIỂN LED MA TRẬN BẰNG SMARTPHONE CHẠY
HỆ ĐIỀU HÀNH ANDROID
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
Ngành: Công Nghệ Kỹ Thuật Điện – Điện Tử
Khánh Hòa, năm 2015
TRƯỜNG ĐẠI HỌC NHA TRANG
KHOA ĐIỆN - ĐIỆN TỬ
NGUYỄN KHẮC HUY
NGHIÊN CỨU THIẾT KẾ CHẾ TẠO BỘ ĐIỀU
KHIỂN LED MA TRẬN BẰNG SMARTPHONE CHẠY
HỆ ĐIỀU HÀNH ANDROID
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
Ngành: Công Nghệ Kỹ Thuật Điện – Điện Tử
CÁN BỘ HƯỚNG DẪN
TH.S NHỮ KHẢI HOÀN
Khánh Hòa, năm 2015
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
i
LỜI CẢM ƠN
Trong quá trình thực hiện đề tài: “Nghiên cứu thiết kế chế tạo bộ điều khiển
Led ma trận bằng Smartphone chạy hệ điều hành Android” em xin chân thành
cảm ơn đến quý Thầy, Cô giáo trong bộ môn, khoa Điện – Điện tử đã tận tình giảng
dạy, cung cấp cho em nhiều kiến thức trong suốt quá trình học tập tại trường đại học
Nha Trang.
Xin gửi lời cảm ơn sâu sắc đến Thầy giáo Nhữ Khải Hoàn đã trực tiếp hướng
dẫn đồ án cho em. Cảm ơn Thầy đã tận tình chỉ bảo, hướng dẫn, cung cấp những tài
liệu, kinh nghiệm, bài học quý giá và tạo điều kiện thuận lợi cho em hoàn thành đồ
án này.
Em cũng xin chân thành cảm ơn gia đình và bạn bè đã giúp đỡ về mặt tinh thần
cũng như vật chất để em có thể hoàn thành tốt đồ án này.
Một lần nữa em xin kính chúc quý Thầy, Cô và mọi người luôn mạnh khỏe,
hạnh phúc và ngày càng thành công trong cuộc sống.
Xin chân thành cảm ơn!
Nha Trang, tháng 06 năm 2015.
Sinh viên
Nguyễn Khắc Huy
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
ii
Khoa Điện – Điện Tử
LỜI MỞ ĐẦU
Lý do chọn đề tài
Ngày nay với sự phát triển mạnh của khoa học – công nghệ, đời sống con người
ngày càng được nâng cao rõ rệt nhờ ứng dụng các thành tựu của khoa học – công
nghệ. Nó cũng thúc đẩy sự phát triển mạnh mẽ nhiều lĩnh vực trong đó có lĩnh vực
Điện – Điện tử.
Những chiếc điện thoại thông minh Smartphone ngày càng được cải tiến không
chỉ phục vụ nhu cầu nghe, gọi, xem phim… mà nó còn thay thế được các chức năng
của một chiếc máy tính (PC). Ưu điểm của những chiếc điện thoại này là nhỏ gọn, bộ
vi xử lý tốc độ ngày càng cao, bộ nhớ trong lớn, tích hợp đầy đủ các ứng dụng cơ
bản, kết nối không dây Bluetooth, Wifi, 3G, sử dụng được nhiều giờ liên tục… Chính
vì vậy, Smartphone rất được ưa chuộng và dần dần được thay thế cho máy tính phục
vụ các ứng dụng cơ bản. Hầu hết các thiết bị di động đều tích hợp chuẩn truyền thông
Bluetooth. Nếu như USB giúp chuẩn hóa các kết nối giữa các thiết bị ngoại vi với
máy tính (PC), thì Bluetooth có thể coi như chuẩn không dây tiêu chuẩn giúp kết nối
hầu hết các thiết bị phụ trợ thông qua giao tiếp không dây như tai nghe, chuột, bàn
phím, máy in, loa ... Sử dụng Bluetooth trong các thiết bị nhúng có thể giúp chúng ta
kết nối không dây dễ dàng với máy tính, điện thoại di động, máy tính bảng, laptop...
Từ đó mở ra rất nhiều ứng dụng điều khiển, giao tiếp, kết nối giữa các hệ thống nhúng
và thiết bị di động.
Trong đề tài này em sử dụng Smartphone chạy hệ điều hành Android để điều
khiển Led ma trận thông qua vi điều khiển AVR bằng Bluetooth. Điều khiển Led ma
trận bằng Smartphone rất thuận tiện trong việc cập nhật dữ liệu, tiết kiệm được thời
gian, tính thẩm mỹ cao, không cần sử dụng máy tính.
Mục tiêu của đề tài
Thiết kế được bảng quang báo Led ma trận qua Bluetooth.
–
Phải hiển thị được các thông tin cần thiết,...
–
Bảng quang báo Led ma trận cập nhật được nội dung mỗi khi truyền dữ liệu từ
Smartphone chạy hệ điều hành Android qua Bluetooth.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
iii
Xây dựng giao diện điều khiển Led ma trận trên Smartphone Android truyền
dữ liệu cho vi điều khiển thông qua mô đun Bluetooth HC-06.
Đối tượng và phạm vi nghiên cứu
– Đối tượng nghiên cứu.
Nghiên cứu mô đun Led ma trận P10 màu đỏ, mô đun Bluetooth HC-06, vi điều
khiển AVR, hệ điều hành Android.
– Phạm vi nghiên cứu
Tìm hiểu, thiết kế bo mạch điều khiển Led ma trận, ứng dụng mô đun Bluetooth
HC-06, mô đun Led ma trận P10 để thiết kế bảng quang báo ma trận 32 x 128 màu
đỏ, hiển thị được số và chữ cái tiếng việt có dấu truyền thông qua Bluetooth.
Phương pháp nghiên cứu
– Phương pháp lý thuyết: Cách cấp nguồn và nguyên lý hoạt động của mô
đun Led ma trận, kỹ thuật điều khển Led ma trận, kỹ thuật lập trình Android.
– Phương pháp thực nghiệm: Thiết kế, chế tạo mạch điều khiển, bảng quang
báo Led ma trận, xây dựng giao diện trên Android cho Smartphone. Kết nối, chạy
thử, kiểm tra, sửa chữa hoàn thiện.
Nội dung nghiên cứu
–
Nghiên cứu các mô đun Led ma trận, mô đun Bluetooth HC-06.
–
Tìm hiểu Smartphone, nghiên cứu ứng dụng hệ điều hành Android và viết giao
diện điều khiển Led ma trận dựa trên Android.
–
Thiết kế bảng quang báo bằng mô đun Led ma trận.
–
Thiết kế bộ điều khiển Led ma trận.
–
Đánh giá kết quả đạt được và phương hướng phát triển của đề tài.
Sản phẩm này không chỉ phục vụ cho đào tạo mà còn được ứng dụng vào thực
tiễn xã hội. Vì hiện nay quang báo bằng Led rất phổ biến, nó đáp ứng được các nhu
cầu phát triển xã hội, bởi tính thẩm mỹ, độ bắt mắt cao, dễ dàng cập nhật nội dung,
tiện ích mà Led mang lại.
Bố cục đồ án
-
Chương 1: Tổng quan về hệ điều hành Android và Led trong quang báo.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
iv
-
Chương 2: Thiết kế phần cứng hệ thống.
-
Chương 3: Phần mềm lập trình hệ thống.
-
Kết luận và phương hướng phát triển đề tài.
Khoa Điện – Điện Tử
Mặc dù đã hết sức nỗ lực, cố gắng trong quá trình thực hiện đồ án nhưng với
trình độ, kiến thức, kinh nghiệm thực tế còn hạn chế và thời gian có hạn nên không
thể tránh khỏi những sai sót nhất định. Do đó, em rất mong muốn nhận được sự góp
ý, chỉ bảo của quý Thầy, Cô và ý kiến đóng góp của bạn bè để đồ án được hoàn thiện
hơn.
Em xin chân thành cảm ơn!
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
v
Khoa Điện – Điện Tử
MỤC LỤC
LỜI CẢM ƠN ............................................................................................................. i
LỜI MỞ ĐẦU ............................................................................................................ ii
MỤC LỤC ...................................................................................................................v
DANH SÁCH CÁC HÌNH VẼ ............................................................................... viii
DANH SÁCH CÁC BẢNG BIỂU..............................................................................x
DANH SÁCH CÁC LƯU ĐỒ .................................................................................. xi
DANH SÁCH CÁC TỪ VIẾT TẮT ........................................................................ xii
CHƯƠNG 1: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH ANDROID VÀ LED TRONG
QUANG BÁO .............................................................................................................1
1.1 Tổng quan về hệ điều hành Android..................................................................1
1.1.1 Giới thiệu về hệ điều hành Android ............................................................1
1.1.2 Đặc điểm của hệ điều hành Android ...........................................................2
1.1.3 So sánh giữa các hệ điều hành Smartphone ................................................4
1.2 Kiến trúc hệ điều hành Android.........................................................................5
1.2.1 Lớp ứng dụng ..............................................................................................6
1.2.2 Lớp khung tổ chức ứng dụng ......................................................................6
1.2.3 Lớp thư viện ................................................................................................7
1.2.3.1 Library...................................................................................................7
1.2.3.2 Android runtime ....................................................................................8
1.2.4 Lớp nhân Linux phiên bản 2.6 ....................................................................8
1.3 Các thành phần của ứng dụng Android .............................................................9
1.3.1 Activity ......................................................................................................10
1.3.1.1 Khái niệm Activity ..............................................................................10
1.3.1.2 Vòng đời của Activity .........................................................................10
1.3.2 Service .......................................................................................................13
1.3.2.1 Khái niệm Service ...............................................................................13
1.3.2.2 Vòng đời của một Service ...................................................................13
1.3.3 Inten ...........................................................................................................15
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
vi
Khoa Điện – Điện Tử
1.3.4 Broadcast Receivers ..................................................................................16
1.3.5 Content Provider........................................................................................17
1.3.6 Notification ................................................................................................18
1.4 Cấu trúc một Project Android ..........................................................................18
1.4.1 Cấu trúc một Project Android trong Eclipse .............................................18
1.4.2 Một số tập tin quan trọng của Android .....................................................20
1.4.2.1 MainActivity.java ...............................................................................20
1.4.2.2 AndroidManifest.xml ..........................................................................21
1.4.2.3 Strings.xml ..........................................................................................23
1.4.2.4 R.java ..................................................................................................23
1.4.2.5 Activity_main.xml ..............................................................................25
1.5 Tổng quan về Led ............................................................................................26
1.5.1 Khái niệm về Led ......................................................................................26
1.5.2 Lịch sử hình thành Led ..............................................................................26
1.5.3 Cấu tạo và nguyên lý hoạt động của đèn Led ...........................................27
1.5.3.1 Cấu tạo của đèn Led ............................................................................27
1.5.3.2 Nguyên lý hoạt động của đèn Led ......................................................27
1.5.4 Ưu nhược điểm và ứng dụng của đèn Led ................................................28
1.5.4.1 Ưu nhược điểm của đèn Led ...............................................................28
1.5.4.2 Ứng dụng của đèn Led ........................................................................29
CHƯƠNG 2: THIẾT KẾ PHẦN CỨNG HỆ THỐNG.............................................31
2.1 Tổng quát về phần cứng...................................................................................31
2.1.1 Sơ đồ tổng quát phần cứng ........................................................................31
2.1.2 Chức năng của các khối.............................................................................31
2.2 Một số linh kiện sử dụng trong mạch ..............................................................33
2.2.1 Vi điều khiển Atmega 32...........................................................................33
2.2.1.1 Giới thiệu chung về Atmega 32 ..........................................................33
2.2.1.2 Cấu trúc Atmega 32 ............................................................................34
2.2.1.3 Cấu trúc bộ nhớ ...................................................................................36
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
vii
Khoa Điện – Điện Tử
2.2.1.4 Thanh ghi trạng thái của AVR ............................................................38
2.2.1.5 Các cổng vào ra ...................................................................................39
2.2.2 IC chốt dịch 74HC595 ...............................................................................41
2.2.3 IC giải mã địa chỉ 74HC138 ......................................................................43
2.3 Phân tích hệ thống ...........................................................................................45
2.3.1 Nguyên lý hoạt động của bảng quang báo Led ma trận ............................45
2.3.2 Phân tích hệ thống .....................................................................................45
2.4 Thiết kế phần cứng ..........................................................................................46
2.4.1 Khối hiển thị ..............................................................................................46
2.4.2 Khối điều khiển trung tâm .........................................................................50
2.4.3 Khối giao tiếp giữa vi điều khiển và Smartphone .....................................51
CHƯƠNG 3: PHẦN MỀM LẬP TRÌNH HỆ THỐNG ............................................54
3.1 Các phần mềm lập trình sử dụng cho vi điều khiển ........................................54
3.1.1 Phần mềm Proteus 8.0 ...............................................................................54
3.1.2 Phần mềm Codevision AVR V2.05.0 .......................................................55
3.2 Công cụ hỗ trợ lập trình Android.....................................................................56
3.2.1 Java SE Development Kit..........................................................................56
3.2.1.1 Tổng quát về Java SE Development Kit .............................................56
3.2.1.2 Cài đặt Java SE Development Kit .......................................................56
3.2.2 Eclipse IDE ................................................................................................58
3.2.2.1 Tổng quát Eclipse IDE ........................................................................58
3.2.2.2 Tích hợp Android SDK Manager vào Eclipse .......................................59
3.2.3 Android Virtual Device .............................................................................61
3.3 Lưu đồ thuật toán điều khiển bảng Led ma trận ..................................................
...............................................................................................................................65
3.4 Giao diện trên Smartphone Android giao tiếp với vi điều khiển.....................68
KẾT LUẬN VÀ PHƯƠNG HƯỚNG PHÁT TRIỂN ĐỀ TÀI ................................69
TÀI LIỆU THAM KHẢO .........................................................................................71
PHỤ LỤC ..................................................................................................................72
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
viii
DANH SÁCH CÁC HÌNH VẼ
Hình 1.1: Mô hình kiến trúc nền tảng Android. ........................................................ 5
Hình 1.2: Vòng đời của một Activity...................................................................... 12
Hình 1.3: Sơ đồ chuyển đổi trạng thái của Service. ................................................ 14
Hình 1.4: Chức năng của Intent. ............................................................................. 15
Hình 1.5: Ví dụ về Notification............................................................................... 18
Hình 1.6: Cấu trúc hình cây của Project Android. .................................................. 19
Hình 1.7: Hình ảnh Led thực tế ............................................................................... 26
Hình 1.8: Cấu tạo và nguyên lý hoạt động của Led ................................................ 27
Hình 1.9: Ứng dụng của đèn Led trong thực tế....................................................... 29
Hình 2.1: Sơ đồ khối tổng quát hệ thống phần cứng .............................................. 31
Hình 2.2: Atmega 32 loại chân cắm ........................................................................ 33
Hình 2.3: Atmega 32 loại chân dán ......................................................................... 33
Hình 2.4: Cấu trúc bên trong của vi điều khiển AVR ............................................. 35
Hình 2.5: Cấu trúc bộ nhớ vi điều khiển Atmega 32. ............................................. 36
Hình 2.6: Thanh ghi 8 bit của vi điều khiển Atmega 32 ......................................... 37
Hình 2.7: Cấu trúc thanh ghi trạng thái của AVR ................................................... 38
Hình 2.8: Hình ảnh thực tế IC 74HC595 ................................................................ 41
Hình 2.9: Sơ đồ chân IC 74HC595. ........................................................................ 41
Hình 2.10: Ghép nối tiếp các IC 74HC595 ............................................................. 43
Hình 2.11: Hình ảnh thực tế IC 74HC138. ............................................................. 43
Hình 2.12: Sơ đồ chân IC 74HC138. ...................................................................... 43
Hình 2.13: Nguyên tắc tạo ảnh cho Led ma trận. ................................................... 45
Hình 2.14: Mô đun Led ma trận P10. ..................................................................... 47
Hình 2.15: Sơ đồ chân mô đun Led P10. ................................................................ 47
Hình 2.16: Sơ đồ nguyên lý kết nối mô đun Led P10 với vi điều khiển Atmega32 ...
................................................................................................................................. 48
Hình 2.17: Sơ đồ mạch in kết nối mô đun Led P10 với vi điều khiển Atmega32.. 48
Hình 2.18: Nguyên lý đưa dữ liệu vào IC 74HC595 của Led ma trận P10. ........... 48
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
ix
Khoa Điện – Điện Tử
Hình 2.19: Nguyên lý quét mô đun Led ma trận P10. ............................................ 49
Hình 2.20: Hình ảnh thực tế IC 74HC254. ............................................................. 49
Hình 2.21: Sơ đồ chân IC 74HC254. ...................................................................... 49
Hình 2.22: Sơ đồ nguyên lý mạch điều khiển trung tâm Atmega 32. ..................... 50
Hình 2.23: Sơ đồ mạch in khối điều khiển trung tâm Atmega 32. ......................... 50
Hình 2.24: Mô đun Bluetooth HC06. ...................................................................... 51
Hình 2.25: Cấu trúc của một khung truyền phổ biến. ............................................. 52
Hình 2.26: Mô hình sản phẩm thực tế. .................................................................... 53
Hình 3.1: Giao diện chính của phần mềm Proteus 8.0. ........................................... 54
Hình 3.2: Giao diện của phần mềm Codevision AVR V2.05.0. ............................. 55
Hình 3.3: Lựa chọn Java Platform .......................................................................... 57
Hình 3.4: Chọn phiên bản JDK phù hợp với Windowns ........................................ 57
Hình 3.5: Chọn Workspace cho việc phát triển ứng dụng trên Android. ............... 58
Hình 3.6: Giao diện Eclipse. ............................................................................................ 59
Hình 3.7: Tham chiếu đến Android SDK. .............................................................. 60
Hình 3.8: Lựa chọn các gói Android SDK (API).................................................... 60
Hình 3.9: Cài đặt Android SDK Manager. .............................................................. 61
Hình 3.10: Chọn cài đặt Android Virtual Device ................................................... 61
Hình 3.11: Cài đặt thông số cho Android Virtual Device ....................................... 62
Hình 3.12: Khởi động Android Virtual Device ...................................................... 62
Hình 3.13: Thiết lập kích thước màn hình cho Android Virtual Device ................ 63
Hình 3.14: Android Virtual Device được khởi tạo ................................................. 63
Hình 3.15: Giao diện trên Smartphone Android giao tiếp với vi điều khiển .......... 68
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
x
DANH SÁCH CÁC BẢNG BIỂU
Bảng 1.1: So sánh giữa các hệ điều hành Smartphone. ............................................ 4
Bảng 2.1: Chức năng hoạt động của 74HC595. ...................................................... 41
Bảng 2.2: Bảng giá trị logic của IC 74HC138. ....................................................... 44
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
xi
DANH SÁCH CÁC LƯU ĐỒ
Lưu đồ 3.1: Lưu đồ thuật toán tổng quát quét Led ma trận .................................... 65
Lưu đồ 3.2: Lưu đồ thuật toán quét hàng và cột của Led ma trận .......................... 66
Lưu đồ 3.3: Lưu đồ thuật toán dịch chữ từ trái sang phải ....................................... 67
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
xii
DANH SÁCH CÁC TỪ VIẾT TẮT
PC: Máy vi tính.
JDK: Java Development Kit.
OHA: Open Handset Alliance.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
1
Khoa Điện – Điện Tử
CHƯƠNG 1: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH ANDROID VÀ LED
TRONG QUANG BÁO
1.1 Tổng quan về hệ điều hành Android
1.1.1 Giới thiệu về hệ điều hành Android
Android là một hệ điều hành dành cho thiết bị di động như điện thoại, máy tính
bảng và netbooks. Android được phát triển bởi Google, dựa trên nền tảng Linux
kernel và các phần mềm nguồn mở khác. Ban đầu nó đuợc phát triển bởi Android Inc
sau đó được Google mua lại và gần đây nó trở thành một trong những phần mềm
đứng đầu của liên minh OHA (với khoảng 78 thành viên bao gồm cả nhà sản xuất,
nhà phát triển ứng dụng... cho thiết bị di động mà dẫn đầu là Google).[7]
Tháng 11 năm 2007, OHA – Liên minh thiết bị cầm tay mở rộng ra đời với các
thành viên Texas Instruments, Tập đoàn Broadcom, Google, HTC, Intel, LG, Tập
đoàn Marvell Technology, Motorola, Nvidia, Qualcomm, Samsung Electronics,
Sprint Nextel và T-Mobile.
Tháng 10 năm 2008, hệ điều hành Android đã chính thức trở thành phần mềm
mã nguồn mở.
Tháng 12 năm 2008, có thêm 14 thành viên mới gia nhập dự án Android được
công bố, gồm có ARM Holdings, Atheros Communications, Asustek Computer Inc,
Garmin Ltd, Softbank, Sony Ericsson, Toshiba Corp, và Vodafone Group Plc.
Andorid được phát triển nhằm cạnh tranh với các hệ điều hành di động khác
như iOS (Apple), BlackBerry OS, Windows Mobile (Microsoft), Symbian (Nokia),
Samsung (Bada), WebOS (Palm)... Android chiếm 75% thị phần điện thoại thông
minh trên toàn thế giới vào thời điểm quý 3 năm 2012, với tổng cộng 500 triệu thiết
bị đã được kích hoạt và 1,3 triệu lượt kích hoạt mỗi ngày. Sự thành công của hệ điều
hành cũng khiến nó trở thành mục tiêu trong các vụ kiện liên quan đến bằng phát
minh, góp mặt trong cái gọi là “cuộc chiến điện thoại thông minh” giữa các công ty
công nghệ.[8],[9]
Android có một cộng đồng phát triển ứng dụng rất lớn, hiện có khoảng hơn
70.000 ứng dụng có sẵn cho Android và đang liên tục đuợc cập nhật. Ứng dụng được
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
2
Khoa Điện – Điện Tử
phát triển bằng ngôn ngữ Java kết hợp với thư viện Java có sẵn của Google. Các nhà
phát triển ứng dụng có thể sử dụng máy tính chạy hệ điều hành Windows hoặc MacOS
hoặc Linux kết hợp với Android SDK để phát triển ứng dụng cho Android. Hệ điều
hành Android bao gồm 12.000.000 dòng mã trong đó có 3.000.000 dòng XML,
2.800.000 dòng C, 2.100.000 dòng Java, và 1.750.000 dòng C++.
Ðể phát triển phần mềm trên Android, các lập trình viên có thể tải về bộ công
cụ phát triển (Android SDK). Bộ công cụ bao gồm các công cụ và các API cần thiết,
sử dụng ngôn ngữ Java dễ lập trình.
1.1.2 Đặc điểm của hệ điều hành Android
Tính mở
Android được xây dựng từ dưới đi lên cho phép người phát triển tạo các ứng
dụng di động hấp dẫn với đầy đủ các điểm mạnh của các thiết bị cầm tay hiện có.
Android hoàn toàn mở, một ứng dụng có thể gọi tới bất kể một chức năng lõi của điện
thoại như tạo cuộc gọi, gửi tin nhắn hay sử dụng máy ảnh, cho phép người phát triển
tạo phong phú hơn, liên kết hơn các tính năng cho người dùng. Android được xây
dựng trên nhân Linux mở. Thêm nữa, nó sử dụng một máy ảo mà đã được tối ưu hóa
bộ nhớ và phần cứng với môi trường di động. Android là một mã nguồn mở, nó có
thể được mở rộng để kết hợp tự do giữa các công nghệ nổi trội. Nền tảng này sẽ tiếp
tục phát triển bởi cộng đồng phát triển để tạo ra các ứng dụng di động hoàn hảo.
Tính ngang hàng của các ứng dụng
Với Android, không có sự khác nhau giữa các ứng dụng điện thoại cơ bản với
ứng dụng của bên thứ ba. Chúng được xây dựng để truy cập như nhau tới một loạt
các ứng dụng và dịch vụ của điện thoại. Với các thiết bị được xây dựng trên nền tảng
Android, người dùng có thể đáp ứng đầy đủ các nhu cầu mà họ thích. Chúng ta có thể
đổi màn hình nền, kiểu gọi điện thoại, hay bất kể ứng dụng nào, thậm chí có thể cài
đặt điện thoại chỉ xem những hình ảnh mình thích.
Phá vỡ rào cản phát triển ứng dụng
Android phá vỡ rào cản để tạo ứng dụng mới và cải tiến. Một người phát triển
có thể kết hợp thông tin từ trang Web với dữ liệu trên điện thoại cá nhân. Ví dụ như
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
3
danh bạ, lịch hay vị trí trên bản đồ để cung cấp chính xác hơn cho người khác. Với
Android, người phát triển có thể xây dựng một ứng dụng mà cho phép người dùng
xem vị trí của những người bạn và thông báo khi họ đang ở vị trí lân cận. Tất cả được
lập trình dễ dàng thông qua sự hỗ trợ của MapView và dịch vụ định vị toàn cầu GPS.
Tất cả các ứng dụng có thể được tạo ra cho Android
Android không phân biệt giữa các ứng dụng lõi của điện thoại và các ứng dụng
của bên thứ ba. Họ tất cả có thể được xây dựng để có thể truy cập bằng khả năng của
một người cung cấp cho người sử dụng điện thoại với một dải rộng các ứng dụng và
dịch vụ. Với các thiết bị xây dựng trên hệ điều hành Android, người dùng có thể hoàn
toàn thích ứng với điện thoại đến lợi ích của họ. Họ có thể trao đổi trên màn hình của
điện thoại, những phong cách của dialog hoặc bất kỳ ứng dụng nào. Họ thậm chí có
thể hướng dẫn điện thoại của họ để sử dụng hình ảnh ưa thích của họ xem các ứng
dụng để xử lý xem tất cả các hình ảnh.
Dễ dàng và nhanh chóng xây dựng ứng dụng
Android cung cấp bộ thư viện giao diện lập trình ứng dụng đồ sộ và các công
cụ để viết các ứng dụng phức tạp. Ví dụ Android có thể cho phép người phát triển
biết được vị trí của thiết bị và cho phép các thiết bị giao tiếp với nhau để có thể tạo
nên mạng xã hội chia sẻ ngang hàng rộng khắp thế giới. Thêm nữa, Android còn bao
gồm một bộ công cụ đầy đủ giúp cho việc phát triển trở nên dễ dàng.
Dễ dàng và nhanh chóng xây dựng ứng dụng
Rất nhiều nhà phát triển hệ điều hành Android đã vào cuộc và các Rom cho
Android độc đáo được ra đời với nhiều tích năng nổi trội được tích hợp và đầy sáng
tạo. Danh sách các nhà phát triển Rom nổi bật:
-
Ahmgsk.
-
HTCClay.
-
Amon_RA.
-
eViL_D.
-
Benbuchacher.
-
Domenukk.
-
BH_MAN.
-
OpenTeam.
Ngoài ra có hàng trăm nhà phát triển Rom đang ngày đêm làm việc cật lực để đưa ra
sản phẩm của chính mình.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
4
1.1.3 So sánh giữa các hệ điều hành Smartphone
Bảng 1.1: So sánh giữa các hệ điều hành Smartphone.
Đặc điểm
ANDROID
- Tùy biến màn hình
WINDOWS PHONE
- Tích hợp liền
- Tùy biến màn hình
và cập nhật thời
mạch phần mềm
và cập nhật thời
gian thực (real
và phần cứng.
gian thực (real
time).
- Hệ thống thông
báo nhanh.
- Chia sẻ mạng với
các thiết bị tương
thích khác.
- Chức năng xem
Ưu điểm
IOS
- Hỗ trợ nhiều
time).
trang web thông
- Tích hợp với các
qua trình duyệt
ứng dụng kinh
safari.
doanh phổ biến có
- Thống nhất về
trên Microsoft.
giao diện người
- Phù hợp với giao
dùng ngay cả
diện đồ họa người
Google Maps là
khi nâng cấp lên
dùng (GUI) và
tiêu chuẩn vàng
iOS 6.
nhiều API trên tất
của nhiều ứng
- Hỗ trợ truy cập
dụng điều hướng.
email thông qua
- Tích hợp một vài
nhiều tài khoản.
mạng xã hội rất
tốt.
- Tích hợp với
mạng xã hội.
- Hỗ trợ tìm kiếm
- Thích hợp với
bằng giọng nói.
nhiều API trên
- Chia sẻ nội dụng
bằng NFC.
cả các nền tảng di
động.
- Hiệu suất điện
năng tốt thông qua
hệ điều hành đa
nền tảng.
nhiều nền tảng
khác.
- Phù hợp với nhiều
API trên nhiều nền
tảng.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
- Tách rời hệ điều
- Màn hình chủ
hành và phần
khá lạc hậu,
cứng.
không sinh
- Tốn chi phí phát
triển.
Nhược
điểm
Khoa Điện – Điện Tử
5
- Dễ phát sinh các
vấn đề an ninh do
nguồn mở.
- Đồng bộ hóa với
PC kém.
- Yêu cầu tài khoản
Google.
- Phần cứng phân
mảnh.
- Cảm ứng màn hình
động, lỗi tương
có trực quan kém
tác thời gian
hơn so với iOS và
thực (khi nâng
Android.
cấp lên iOS 6).
- Tích hợp mạng xã
- Không hỗ trợ
hội không tốt.
Flash, có một
- Giao diện thay đổi
vài trang web
lớn so với trước
không xem
đó.
được.
1.2 Kiến trúc hệ điều hành Android
Kiến trúc của hệ điều hành Android gồm 4 thành phần:
-
Lớp ứng dụng (Applications).
-
Lớp khung tổ chức ứng dụng (Applications Framework).
-
Lớp thư viện (Librabries – Runtime).
-
Lớp nhân Linux phiên bản 2.6 (Linux kernel).
Hình 1.1: Mô hình kiến trúc nền tảng Android.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
6
1.2.1 Lớp ứng dụng
Đây là lớp ứng dụng giao tiếp với người dùng, bao gồm các ứng dụng như: Các
ứng dụng cơ bản được cài đặt đi liền với hệ điều hành như là gọi điện, quản lý danh
bạ, duyệt web, nhắn tin, lịch làm việc, Email, bản đồ, quay phim chụp ảnh (Camera)...
Các ứng dụng được cài thêm như các phần mềm chứng khoán (Stock), các trò chơi,
từ điển, các ứng dụng của bên thứ ba…Các ứng dụng viết sẽ có những đặc tính sau:
-
Viết bằng Java, phần mở rộng là .apk.
-
Khi mỗi ứng dụng được chạy, nó có một phiên bản Virtual Machine (máy ảo)
được dựng lên để phục vụ cho nó. Nó có thể là một Active Program chương trình có
giao diện với người sử dụng hoặc là một Background chương trình chạy nền hay là
dịch vụ.
-
Android là hệ điều hành đa nhiệm, điều đó có nghĩa là trong cùng một thời điểm,
có thể có nhiều chương trình cùng chạy một lúc, tuy nhiên với mỗi ứng dụng thì có
duy nhất một thực thể (instance) được phép chạy mà thôi. Điều đó có tác dụng hạn
chế sự lạm dụng tài nguyên, giúp hệ thống hoạt động tốt hơn. Các ứng dụng được
phân quyền và tự hệ thống sẽ hủy nếu mức ưu tiên thấp.
-
Các ứng dụng được gán số ID của người sử dụng nhằm phân định quyền hạn
khi sử dụng tài nguyên, cấu hình phần cứng và hệ thống.
Android là một hệ điều hành có tính mở, khác với nhiều hệ điều hành di động
khác, Android cho phép một ứng dụng của bên thứ ba được phép chạy nền. Các ứng
dụng đó chỉ có một hạn chế nhỏ đó là nó không được phép sử dụng quá 5 ÷ 10% công
suất CPU, điều đó nhằm để tránh độc quyền trong việc sử dụng CPU.
1.2.2 Lớp khung tổ chức ứng dụng
Ở lớp này các nhà phát triển ứng dụng có thể truy cập vào phần cứng thiết bị,
thông tin định vị vị trí, chạy các dịch vụ nền, đặt các cảnh báo, thông báo vào thanh
trạng thái,... và quan trọng nhất đó là các API của framework.
Phía duới tất cả các ứng dụng là một tập các dịch vụ của hệ thống bao gồm:
-
View Manage: Một tập hợp rất nhiều các View có khả năng kế thừa lẫn nhau
dùng để thiết kế phần giao diện ứng dụng như: Gridview, tableview, linearlayout,
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
7
relative layout, table layout,...
-
Activity Manager: Quản lý các chu kỳ sống của một ứng dụng cũng như cung
cấp công cụ điều khiển các Activity.
-
Telephony Manager: Cung cấp công cụ để thực hiện việc liên lạc như gọi điện
thoại.
-
Location Manager: Cho phép xác định vị trí của điện thoại thoại dựa vào hệ
thống định vị toàn cầu GPS và Google Maps.
-
Window Manager: Quản lý việc xây dựng và hiển thị các giao diện người dùng
cũng như tổ chức quản lý các giao diện giữa các ứng dụng.
-
Notication Manager: Quản lý việc hiển thị các thông báo (như báo có tin nhắn,
có Email mới,…).
-
Resource Manager: Quản lý tài nguyên tĩnh của các ứng dụng bao gồm các
tập tin hình ảnh, âm thanh, layout, string (những thành phần không được viết bởi
ngôn ngữ lập trình).
-
Content Provider: Cho phép các ứng dụng có thể truy xuất dữ liệu từ các ứng
dụng khác (chẳng hạn như Contacts) hoặc là chia sẻ dữ liệu giữa các ứng dụng đó.
1.2.3 Lớp thư viện
1.2.3.1 Library
Thành phần này có nhiều thư viện được viết bằng C/C++ để các phần mềm có
thể sử dụng, các thư viện đó được tập hợp thành một số nhóm như:
-
Thư viện hệ thống (System c Library)(Libc): Thư viện dựa trên chuẩn C, được
sử dụng chỉ bởi hệ điều hành.
-
Thư viện Media (Media Librarles): Có nhiều code C để hỗ trợ việc phát và ghi
các loại định dạng âm thanh, hình ảnh, video thông dụng.
-
Thư viện Web (LibWebCore): Đây là thành phần để xem nội dung trên Web,
được sử dụng để xây dựng phần mềm duyệt Web (Android Browse) cũng như để các
ứng dụng khác có thể nhúng vào. Nó cực kỳ mạnh, hỗ trợ được nhiều công nghệ mạnh
mẽ như HTML5, JavaScript, CSS, DOM, AJAX.
-
Surface Manage: Quản lý hiển thị 2D và 3D.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
8
-
SGL: Công nghệ 2D.
-
SQLite: Quản lý database của ứng dụng.
-
Free Type: Dùng cho hiển thị hình ảnh, font.
-
SSL(Secure Socket Layer): Tầng thiết lập giao dịch an toàn trên 2 ứng dụng
trên một cổng (socket).
-
Open GL/EL: Hỗ trợ thư viện tùy chọn 3D tĩnh và động.
1.2.3.2 Android runtime
Phần này chứa các thư viện mà một chương trình viết bằng ngôn ngữ Java có
thể hoạt động. Phần này gồm có 2 bộ phận tương tự như mô hình chạy Java trên máy
tính thông thường. Thứ nhất là các thư viện lõi (Core Library), chứa các lớp như
JAVA 10, Collections, File Access. Thứ hai là một máy ảo Java (Dalvik Virtual
Machine).
Mặc dù cũng được viết từ ngôn ngữ Java nhưng một ứng dụng Java của hệ điều
hành Android không được chạy bằng JRE (Java Runtime Environment) của Sun (nay
là Oracle) (JVM) mà chạy bằng máy ảo Dalvik (máy ảo Dalvik được đặt tên sau khi
một nhà phát triển phần mềm của Google tạo ra nó sau chuyến đi thăm một ngôi làng
ở nơi tổ tiên ông sinh sống), do Google phát triển. Máy ảo Davik thực thi các tập tin
davik (dex), khác với java là chuyển sang dạng bytecode. Định dạng này được tối ưu
hóa cho bộ nhớ tối thiểu.
1.2.4 Lớp nhân Linux phiên bản 2.6
Android sử dụng nhân Linux 2.6 làm nhân cho các dịch vụ hệ thống như bảo
mật, quản lý bộ nhớ, quản lý tiến trình (xử lý tiến trình, đa luồng,..), ngăn xếp mạng
và trình điều khiển thiết bị (giao tiếp USB, giao tiếp hồng ngoại, không dây,…). Nhân
Linux này cũng có vai trò như một lớp trừu tượng giữa phần cứng và phần mềm.
Tất cả mọi hoạt động của điện thoại muốn thi hành được thì đều được thực hiện
ở mức cấp thấp ở lớp này bao gồm quản lý bộ nhớ (Memory management), giao tiếp
với phần cứng (Driver model), thực hiện bảo mật (Security), quản lý tiến trình (Process).
Tuy được phát triển dựa vào nhân Linux nhưng thực ra nhân Linux đã được
nâng cấp và sửa đổi rất nhiều để phù hợp với tính chất của những thiết bị cầm tay
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
9
như hạn chế về bộ vi xử lý, dung lượng bộ nhớ, kích thước màn hình, nhu cầu kết nối
mạng không dây,…
Các thành phần của nhân Linux:
-
Display Driver: Điều khiển việc hiển thị lên màn hình cũng như thu nhận những
điều khiển của người dùng lên màn hình (di chuyển, cảm ứng, ...).
-
Camera Driver: Điều khiển hoạt động của camera, nhận luồng dữ liệu từ
camera trả về.
-
Bluetooth Driver: Điều khiển thiết bị phát và thu sóng Bluetooth.
-
USB driver: Quản lý hoạt động của các cổng giao tiếp USB.
-
Keypad driver: Điều khiển bàn phím.
-
Wifi Driver: Chịu trách nhiệm về việc thu phát sóng Wifi.
-
Audio Driver: Điều khiển các bộ thu phát âm thanh, giải mã các tính hiệu dạng
audio thành tín hiệu số và ngược lại.
-
Power Madagement: Giám sát việc tiêu thụ điện năng.
-
M-System Driver: Quản lý việc đọc ghi lên các thiết bị nhớ như thẻ SD, Flash.
-
Binder IPC Driver: Chịu trách nhiệm về việc kết nối và liên lạc với mạng vô
tuyến như CDMA, GSM, 3G, 4G, E để đảm bảo những chức năng truyền thông được
thực hiện.
1.3 Các thành phần của ứng dụng Android
Một ứng dụng trên Android được cấu thành từ các thành phần cơ bản sau:
Activities (hoạt động).
Services (dịch vụ).
Broadcast Receivers (nhận quảng bá).
Intent.
Content Provider.
Notification.
Các thành phần này không nhất thiết phải có mặt đầy đủ trong ứng dụng. Chúng
ta có thể xem các thành phần nào được sử dụng trong ứng dụng bằng việc xem khai
báo trong file AndroidManifest.xml.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
10
Khoa Điện – Điện Tử
1.3.1 Activity
1.3.1.1 Khái niệm Activity
Một Activity là một giao diện đồ họa trực quan mà người dùng có thể thực hiện
trên đó mỗi khi được kích hoạt. Một ứng dụng có thể có nhiều Activity và chúng có
thể gọi qua lại lẫn nhau. Mỗi Activity là một dẫn xuất của lớp Android.app.activity.
Một ứng dụng gọi điện thoại có thể gồm các hoạt động như hiển thị một danh
sách các liên hệ để gọi tới, hoạt động thứ hai là gọi tới số điện thoại liên hệ được
chọn, ngoài ra còn có các hoạt động khác nữa như xem nhật ký cuộc gọi hay thay đổi
cài đặt. Mặc dù, chúng làm việc cùng nhau để tạo thành một giao diện người dùng
nhưng mỗi Activity độc lập với những cái khác. Mỗi Activity là một lớp con của lớp
cơ sở Activity.
Một ứng dụng có thể gồm chỉ một Activity hay nhiều Activity tùy theo yêu cầu
của mỗi ứng dụng. Thông thường, một trong số các Activity được đánh dấu là
Activity đầu tiên phải được chạy đầu tiên khi ứng dụng được khởi động. Để chuyển
từ một Activity hiện tại sang Activity khác bằng cách cho Activity hiện tại khởi động
Activity kế tiếp.
Mỗi Activity được đưa ra một cửa sổ mặc định để vẽ vào. Thông thường, cửa
sổ này sẽ lấp đầy màn hình, nhưng ta có thể tùy chọn để nó nhỏ hơn màn hình và nằm
trên các cửa sổ khác. Ngoài ra nó cũng có thể có thêm các cửa sổ con khác như là
hộp thoại,… Nội dung của cửa sổ của hoạt động được cung cấp bởi một hệ thống cấp
bậc các View (là đối tượng của lớp Views).
Android có một số View đã xây dựng sẵn mà người dùng có thể sử dụng. Gồm
có các: Buttons, text fields, scroll bars, menu items, check box, image view, image
view button, video view,... Một cây phân cấp View được đặt trong một cửa sổ của
Activity bằng phương thức Activity.setContentView(). ContentView là đối tượng
View ở gốc của cây phân cấp.
1.3.1.2 Vòng đời của Activity
Các Activity trong hệ thống được quản lý bởi một cấu trúc dữ liệu ngăn xếp.
Khi có một hoạt động được khởi tạo nó được đẩy vào trong ngăn xếp, chuyển sang
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
11
Khoa Điện – Điện Tử
trạng thái thực thi và hoạt trộng trước đó sẽ chuyển sang trạng thái chờ. Hoạt động
này chỉ trở lại trạng thái kích hoạt khi mà hoạt động vừa khởi tạo kết thúc việc thực
thi.
Một Activity có 3 trạng thái chính:
-
Active hoặc running: Khi nó ở trên nhất màn hình và nhận tương tác với người
dùng.
-
Paused: Khi Activity không còn là trọng tâm trên màn hình nhưng vẫn hiện thị
trước người dùng.
-
Stopped: Khi một Activity hoàn toàn bị che khuất, nó sẽ rơi vào trạng thái
Stopped. Tuy nhiên, nó vẫn còn lưu trữ toàn bộ thông tin trạng thái và nó thường bị
hệ thống đóng lại khi có tình trạng thiếu bộ nhớ.
Khi chuyển giữa các trạng thái, ứng dụng sẽ gọi các hàm callback ứng với các
bước chuyển:
-
OnCreate(): Được gọi khi hoạt động được tạo ra lần đầu tiên.
-
OnStart(): Được gọi khi hoạt động trở nên hữu hình so với người dùng.
-
OnResume(): Được gọi khi hoạt động bắt đầu tương tác với người sử dụng.
-
OnPause(): Được gọi để dừng các hoạt động hiện tại và nối lại các hoạt động
trước đó.
-
OnStop(): Được gọi khi hoạt động không còn hiển thị với người dùng.
-
OnDestroy(): Được gọi trước khi hoạt động bị phá hủy bởi hệ thống (bằng tay
hoặc bằng hệ thống để bảo tồn bộ nhớ).
-
OnRestart(): Được gọi khi hệ thống đã được dừng lại và khởi động lại một lần
nữa.
Lưu đồ hình 1.2 mô tả trạng thái trong vòng đời của một Activity. Hình chữ
nhật thể hiện các phương thức Callback mà chúng ta có thể khai báo để gọi thực thi
một số thao tác khi hoạt động chuyển sang trạng thái khác (phương thức Callback là
phương thức được gọi lại bởi một phương thức khác khi có một sự kiện xảy ra). Các
trạng thái chính của một hoạt động được thể hiện bởi các hình viên thuốc.
Vòng đời của một Activity có thể được thể hiện trong những quá trình sau:
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
12
Hình 1.2: Vòng đời của một Activity.
Toàn bộ thời gian sống của một Activity bắt đầu từ lời gọi đầu tiên tới phương
thức onCreate() cho tới lời gọi phương thức onDestroy(). Trong quá trình này, một
Activity sẽ khởi tạo lại tất cả các tài nguyên cần sử dụng trong phương thức
onCreate() và giải phóng chúng khi phương thức onDestroy() được thực thi.
Thời gian sống có thể nhìn thấy của một Activity bắt đầu từ lời gọi tới phương
thức onStart() cho tới khi phương thức onStop() của nó được thực thi. Toàn bộ các
tài nguyên đang được sử dụng bởi Activity vẫn tiếp tục được lưu giữ, người dùng có
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
13
Khoa Điện – Điện Tử
thể thấy giao diện nhưng không tương tác được với hoạt động do trong qua trình này
Activity không ở trạng thái chạy tiền cảnh.
Thời gian sống tiền cảnh của một Activity là quá trình bắt đầu từ khi có lời gọi
tới phương thức onResume() và kết thúc bằng lời gọi tới phương thức onPause().
Trong thời gian này, hoạt động chạy ở tiền cảnh và có thể tương tác với người dùng.
1.3.2 Service
1.3.2.1 Khái niệm Service
Một Service (dịch vụ) là các đoạn mã được thực thi ngầm bởi hệ thống mà người
sử dụng không thấy được. Service sử dụng để cập nhật dữ liệu, đưa ra các cảnh báo.
Mỗi Service đều được mở rộng từ lớp cơ sở là Service trong gói Android.app.service.
Có thể kết nối tới hoặc kích hoạt một Service thông qua Interface mà Service đưa ra.
Ví dụ như một chương trình phát nhạc trên điện thoại, sẽ có vài hoạt động cho
phép người dùng duyệt danh sách các bài hát và lựa chọn bài hát nào để phát. Tuy
nhiên, chức năng phát nhạc không được thiết kế như một Activity bởi chúng ta sẽ
muốn chuyển qua cửa sổ khác, như khi soạn tin nhắn thì bài hát vẫn tiếp tục được
phát. Trong trường hợp này, ứng dụng phát nhạc sẽ khởi tạo một dịch vụ bằng cách
sử dụng phương thức Context.startservice().
Một ứng dụng có thể dễ dàng thực hiện liên kết tới một Service đang chạy (thậm
chí khởi động nếu nó chưa thực thi) bằng phương thức Context.bindservice(). Khi đó
Service này sẽ cung cấp cho ứng dụng cơ chế để giao tiếp với chúng thông qua giao
diện gọi là IBinder (đối với dịch vụ phát nhạc có thể cho phép dừng hoặc chuyển qua
bài nhạc kế tiếp).
1.3.2.2 Vòng đời của một Service
Vòng đời của một Service được hiểu là quá trình hoạt động từ khi nó được tạo
ra cho tới khi bị loại khỏi hệ thống.
Có hai cách thức để một dịch vụ có thể được chạy trong hệ thống:
–
Khi hệ thống có lời gọi tới phương thức Context.startService(). Trong trường
hợp này, dịch vụ sẽ được thực hiện liên tục cho tới khi hệ thống gọi phương thức
Context.stopService().
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
–
Khoa Điện – Điện Tử
14
Khi các ứng dụng gọi phương thức Context.bindService() để tạo kết nối với
dịch vụ (dịch vụ sẽ được khởi tạo nếu tại thời điểm đó nó đang không hoạt động).
Ứng dụng sẽ nhận được một đối tượng IBinder do dịch vụ trả lại để có thể gọi các
phương thức Callback phù hợp để truy cập tới các trạng thái của dịch vụ. Nếu do lời
gọi Context.bindService() mà dịch vụ được khởi tạo thì nó sẽ được thực thi cho tới
khi nào kết nối trên (tức là đối tượng IBinder) vẫn còn tồn tại.
Hình 1.3 cho ta thấy được hai phương thức để một dịch vụ có thể được khởi
chạy trong hệ thống.…………………………………………………... …………….
Hình 1.3: Sơ đồ chuyển đổi trạng thái của Service.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
15
1.3.3 Inten
Intent là nền tảng để truyền tải các thông báo. Intent được sử dụng để gửi các
thông báo đi nhằm khởi tạo một Activity hay Service để thực hiện công việc bạn
mong muốn. Ví dụ, khi mở một trang Web bạn gửi một Intent đi để tạo một Activity
mới hiển thị trang Web đó.
Intent là một cấu trúc dữ liệu mô tả cách thức, đối tượng thực hiện của một
Activity, là cầu nối giữa các Activity với nhau. Ứng dụng Android thường bao gồm
nhiều Activity, mỗi Activity hoạt động độc lập với nhau và thực hiện những công
việc khác nhau. Intent chính là người đưa thư, giúp các Activity có thể triệu gọi cũng
như truyền các dữ liệu cần thiết tới một Activity khác. Điều này cũng giống như việc
di chuyển qua lại giữa các Forms trong lập trình Windows Form.
Hình 1.4: Chức năng của Intent.
Content provider được kích hoạt khi chúng được gọi từ một ContentResolver.
Ba thành phần khác (Activity, service và Broadcast Rreceiver) được kích hoạt bởi
thông điệp không đồng bộ từ các Intent. Một Intent là một đối tượng có kiểu Intent
chứa nội dung của thông điệp. Với các hoạt động và dịch vụ, nó gọi tên hành động
được yêu cầu và xác định URI của dữ liệu tác động tới ở giữa. Ví dụ, nó có thể truyền
tải một yêu cầu cho một hoạt động hiển thị một hình ảnh cho người dùng hay cho
phép người dùng sửa văn bản. Với bộ nhận quảng bá, đối tượng Intent gọi tên của
hành động được thông báo. Ví dụ, bộ nhận quảng bá có thể thông báo các phần nó
quan tâm là nút chụp ảnh đã được bấm hay chưa.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
16
Khoa Điện – Điện Tử
Có vài phương thức cho việc kích hoạt mỗi thành phần:
Một hoạt động được khởi động thông qua một đối tượng Intent
Context.startActivity() hay Activity.startActivityForResult(). Hoạt động đáp lại có thể
theo dõi Intent được tạo ra đó bằng phương thức getIntent() và cập nhật thông qua
phương thức setIntent(Intent). Android gọi phương thức onNewIntent() để bỏ qua các
Intent đến trước nó.
Một Activity (hoạt động) thường bắt đầu bằng một Activity khác. Nếu nó muốn
trả lại kết quả của một Activity (hoạt động) nó đã khởi chạy, nó sẽ gọi phương thức
startActivityForResult() thay cho phương thức startActivity(). Ví dụ, nếu nó khởi
chạy một hoạt động mà cho phép người dùng lấy một ảnh, nó có thể muốn lấy kết
quả của ảnh được chọn. Kết quả được trả về trong một đối tượng Intent thông qua
phương thức onActivityResult().
Một Service (dịch vụ) được bắt đầu thông qua một đối tượng Intent là
Context.startService(). Android gọi phương thức onStart() của dịch vụ và thông qua
đối tượng Intent của nó.
Tương tự, một Intent có thể thông qua Context.bindService() để thiết lập một
kết nối liên tục giữa các thành phần và dịch vụ đích. Dịch vụ nhận đối tượng Intent
qua lời gọi onBind(), nếu dịch vụ chưa được kích hoạt bindService() có thể chọn bắt
đầu nó. Ví dụ, một hoạt động có thể thiết lập kết nối với dịch vụ phát nhạc đề cập ở
phần trước để nó có thể cung cấp cho người dùng giao diện sử dụng để điều khiển
phát lại. Hoạt động sẽ gọi bindService() để thiết lập kết nối và sau đó gọi phương thức
đã định nghĩa bởi dịch vụ để áp dụng phát lại ca khúc.
Một ứng dụng có thể khởi tạo một quảng bá thông qua đối tượng Intent bằng
phương thức như Context.setBroadcast(), Context.setOrderedBroadcast() và
Context.sendStickyBroadcast(). Android chuyển những Intent tới tất cả các bộ nhận
quảng bá nào quan tâm bằng việc gọi phương thức onReceive() của nó.
1.3.4 Broadcast Receivers
Broadcast Receiver là một thành phần không làm gì ngoài việc nhận và đáp lại
các thông báo Broadcast. Nhiều Broadcast khởi đầu trong mã hệ thống.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
17
Khoa Điện – Điện Tử
Ví dụ như thông báo múi giờ thay đổi, pin yếu, ảnh đã được chụp, hay người
dùng đã thay đổi ngôn ngữ,... Các ứng dụng có thể tạo ra các Broadcast, chẳng hạn
để ứng dụng khác biết được một số dữ liệu đã được tải về thiết bị và sẵn sàng cho
việc sử dụng chúng.
Một ứng dụng có thể có một số Broadcast Receiver để đáp lại bất cứ thông báo
nào mà nó cho là quan trọng. Tất cả các Receiver mở rộng từ lớp cơ sở
BroadcastReceiver.
Có hai bước quan trọng để cho Broadcast Receivers làm việc:
- Bước 1: Tạo Broadcast Receiver.
- Bước 2: Đăng ký Broadcast Receiver.
Có thêm một bước nữa trong trường hợp bạn implement các Intents tùy chỉnh
của bạn thì bạn sẽ phải tạo Broadcast các Intents đó.
Broadcast Receiver không hiển thị một giao diện người dùng. Tuy nhiên chúng
có thể bắt đầu một Activity để đáp lại thông tin mà chúng nhận hay chúng có thể sử
dụng NotificationManager để cảnh báo người dùng. Notifications có thể lấy sự chú ý
của người dùng bằng nhiều cách khác nhau như là: Sáng màn hình, hiển thị thông
báo, rung thiết bị, bật âm thanh nào đấy,… Thông thường, chúng thường lấy một biểu
tượng bền vững trong thanh trạng thái và đặt thông báo trên thanh trạng thái, nơi
người dùng có thể nhận được thông báo.
1.3.5 Content Provider
Content providers là thành phần cung cấp dữ liệu từ một ứng dụng đến một
ứng dụng khác dựa trên các Request. Mỗi Request được xử lý bằng các phương thức
của class ContentResolver. Một Content Provider có thể sử dụng các cách lưu trữ dữ
liệu khác nhau, dữ liệu có thể được lưu trữ trong databases, file, thậm chí thông qua
Network.
Mỗi ứng dụng Android chạy trong các tiến trình riêng của chính mình và nó có
các điều khoản riêng của nó, điều mà giữ dữ liệu của ứng dụng ẩn với các ứng dụng
khác. Tuy nhiên, thỉnh thoảng nó được yêu cầu chia sẻ dữ liệu đến các ứng dụng khác
sử dụng Content Provider trong việc này rất hữu ích.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
18
Content Providers cho phép bạn tập trung dữ liệu ở một nơi và các ứng dụng
khác nhau sẽ truy xuất vào nó khi cần thiết. Content Provider hoạt động rất giống với
một cơ sở dữ liệu và bạn có thể truy vấn nó, chỉnh sửa nội dung, cũng như là thêm,
xóa các nội dung sử dụng các phương thức: Insert(), update(), delete(), query(). Trong
nhiều trường hợp dữ liệu được lưu trữ trong SQLite.
Content Provider sẽ kế thừa class ContentProvider và phải implement một
chuẩn tập các API để cho phép các ứng dụng khác thực hiện xử lý các giao dịch.
1.3.6 Notification
Đưa ra các cảnh báo mà không làm cho các Activity phải ngừng hoạt
động. Notification là một cơ chế cho phép tại một thời điểm nhất định trình
bày một thông tin trên thanh trạng thái (Status bar) ở phía trên màn hình. Mỗi
khi thanh trạng thái được mở ra thì một danh sách những Notification được hiển thị,
khi người dùng chọn vào một Notification thì có thể một Activity được kích hoạt.
Một Nofication thông thường gồm các thành phần sau đây:
–
Một Icon (xuất hiện trên Status bar và ở nội dung chi tiết của
Notification).
–
Ticker text (xuất hiện trên status bar).
–
Notification title text (xuất hiện ở nội dung chi tiết).
–
Notification body text (xuất hiện ở nội dung chi tiết).
–
Một Intent (Launch Activity khi ta kích vào nội dung chi tiết).
Hình 1.5: Ví dụ về Notification.
1.4 Cấu trúc một Project Android
1.4.1 Cấu trúc một Project Android trong Eclipse
Cấu trúc hình cây của một Project Android trong Eclipse như hình 1.6.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
19
Khoa Điện – Điện Tử
Hình 1.6: Cấu trúc hình cây của Project Android.
Ta thấy rằng cấu trúc một Project Android gồm các thành phần chính như sau:
-
Src: Chứa các Package gồm các lớp ứng dụng và xử lý liên quan đến Activity,
các xử lý.
-
Gen: Chứa các tập tin Java được phát sinh ra tự động. Tốt nhất là không được
thêm hay sửa đổi bất kì giá trị gì của các tập tin nằm trong Gen. Nếu không tất cả các
giá trị vừa thêm hay sửa đổi đó sẽ được phục hồi về giá trị ban đầu. Trong tập tin
R.java của thư mục Gen chứa các định danh (địa chỉ ID) cho tất các đối tượng trên
giao diện của tất cả màn hình, của tất cả các nguồn tài nguyên gồm hình ảnh, giá trị,
layout, màu sắc,... trong thư mục Res.
-
Google APIs: Nếu ta chọn Target name là Android 4.2.2 thì thư mục sẽ trở
thành Android 4.2.2. Trong đây chứa các tập tin có đuôi .jar là toàn bộ các hàm API
của Android và Google là Android.jar và maps.jar. Ngoài ra, nếu chương trình của
chúng ta cần sự hỗ trợ các hàm do bên thứ 3 cung cấp thì ta có thể thêm tham chiếu
và chúng ta sẽ có thêm thư mục Referenced Libraries chứa các tập tin .jar gồm các
bộ hàm hỗ trợ của bên thứ 3.
-
Bin: Nơi chứa tập tin cài đặt ứng dụng và có phần mở rộng là .apk.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
20
Khoa Điện – Điện Tử
Asset: Các tài nguyên trong thư mục này sẽ không được Android đánh định
-
danh ID cho nó.
Res: Chứa các nguồn tài nguyên có trong chương trình như thư mục drawable
-
chứa các hình ảnh hay hình nền của chương trình gồm các tập tin hình ảnh hoặc .xml.
Thư mục layout chứa các khung giao diện chương trình và thư mục values chứa các
giá trị như chuỗi, màu sắc,... Tập tin AndroidManifest.xml chứa các thiết lập cho
chương trình như các quyền cho phép truy cập vào phần cứng, thiết lập màn hình
chính, các thuộc tính của chúng và còn rất nhiều thiết lập khác.
1.4.2 Một số tập tin quan trọng của Android
1.4.2.1 MainActivity.java
Khi một ứng dụng được tạo ra thì thông thường sẽ có một Activity để khởi chạy
ứng dụng. Ở đây ta hiểu rằng MainActivity.java chính là class chứa toàn bộ source
code, còn activity_main.xml chính là phần giao diện. Đối với Android khi một
Activity tạo ra thì thường nó đi kèm với một Layout giao diện nào đó (tức là nó luôn
được tách thành 2 phần: Phần source code riêng và phần giao diện riêng).
Đây là code mặc định của file MainActivity.java.
package com.nguyenhuy;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.Activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
21
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// as you specify a parent Activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
-
R.layout.Activity_main: Trỏ đến tập tin Activity_main.xml được đặt trong
thư mục res/layout.
-
Phương thức onCreate(): Là một trong số các phương thức để nạp một Activity.
1.4.2.2 AndroidManifest.xml
-
Bất cứ thành phần nào được triển khai như một phần trong ứng dụng, phải được
khai báo trong tập tin AndroidManifest.xml. Tệp tin này giống như một giao diện để
giao tiếp giữa hệ điều hành Android và ứng dụng của bạn. Vì vậy, nếu thành phần
nào bạn dùng mà không khai báo trong tập tin này, thì hệ điều hành sẽ không xem xét
đến chúng.
-
Đây là code mặc định của AndroidManifest.xml.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
22
Khoa Điện – Điện Tử
-
…: Thẻ bao quanh các thành phần có liên quan
trong ứng dụng. Thuộc tính Android:icon sẽ trỏ đến các Icon có sẵn trong thư mục
res/drawable-hdpi. Ứng dụng này sẽ sử dụng hình ic_launcher làm Icon.
-
…: Thẻ này được sử dụng để nêu chi tiết về một
Activity. Thuộc tính android:name được sử dụng để mô tả chi tiết về tên class của
một Activity. Thuộc tính android:label xác định một chuỗi ký tự được sử dụng là
nhãn cho Activity đó. Nếu trong ứng dụng của bạn có nhiều Activity thì bạn sẽ phải
tạo nhiều thẻ .
-
: Thuộc tính Android.intent.action.main để cho Android biết rằng
Activity này sẽ được khởi động lên đầu tiên khi chạy ứng dụng.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
-
Khoa Điện – Điện Tử
23
: Thuộc tính Android.intent.category.launcher để cho Android biết
ứng dụng có thể được chạy từ một Icon trên thiết bị.
-
@string: Sẽ được chỉ định đến file strings.xml, @string/app_name sẽ được dẫn
đến chuỗi app_name nó là HelloWord.
Sau đây là một số thẻ khác mà chúng ta có thể sử dụng trong tập tin
AndroidManifest.xml.
-
là thẻ dành cho các Activity.
-
là thẻ dành cho các Services.
-
là thẻ dành cho các Broadcast Receivers.
-
là thẻ dành cho các Content Providers.
1.4.2.3 Strings.xml
-
Strings.xml đây là tập tin được đặt trong thư mục res/values chứa tất cả các
chuỗi kí tự mà ứng dụng của bạn sử dụng. Ví dụ tên của các buttons, các labels, các
text mặc định bạn nên để trong tập tin này.
Code mặc định của tập tin Strings.xml:
NGUYENHUY
Hello world!
Settings
1.4.2.4 R.java
R.java tạo ra mối liên kết giữa các tập tin Activity và các tập tin Resource (ví
dụ như giữa tập tin MainActivity.java và tập tin strings.xml). Tệp tin này được tạo ra
tự động và bạn không nên thay đổi nội dung trong tệp tin này.
Sau đây là một ví dụ về nội dung của tệp tin R.java:
package com.example.radiobutton;
public final class R {
public static final class attr {
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
24
Khoa Điện – Điện Tử
}
public static final class dimen {
public static final int Activity_horizontal_margin=0x7f040000;
public static final int Activity_vertical_margin=0x7f040001;
}
public static final class drawable {
public static final int ic_launcher=0x7f020000;
}
public static final class id {
public static final int TableLayout1=0x7f080000;
public static final int action_settings=0x7f080008;
public static final int rbBeDe=0x7f080005;
public static final int rbNam=0x7f080003;
public static final int rbNu=0x7f080004;
public static final int rbgGioiTinh=0x7f080002;
public static final int textView1=0x7f080001;
public static final int tvKetQua=0x7f080007;
}
public static final class layout {
public static final int Activity_main=0x7f030000;
}
public static final class menu {
public static final int main=0x7f070000;
}
public static final class string {
public static final int action_settings=0x7f050002;
public static final int app_name=0x7f050000;
public static final int hello_world=0x7f050001;
}
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
25
public static final class style {
public static final int AppBaseTheme=0x7f060000;
public static final int AppTheme=0x7f060001;
}
}
1.4.2.5 Activity_main.xml
Activity_main.xml là một tệp tin layout nằm trong thư mục res/layout. Tệp tin
này sẽ được tham chiếu bởi ứng dụng khi tạo ra giao diện trên màn hình. Bạn sẽ phải
thay đổi nội dung tệp tin này rất nhiều trong khi tạo giao diện cho ứng dụng.
Đây code mặc định của tệp tin Activity_main.xml.
-
RelativeLayout: Là một trong số nhiều các layout của Android.
-
TextView: Là một trong nhiều thành phần của layout trong việc xây dựng giao
diện. TextView có nhiều thuộc tính như:
android:layout_width=”wrap_content”.
android:layout_height=”wrap_content”.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
26
Khoa Điện – Điện Tử
1.5 Tổng quan về Led
1.5.1 Khái niệm về Led
Led (viết tắt của Light Emitting Diode,
có nghĩa là điốt phát quang) là các điốt có khả
năng phát ra ánh sáng hay tia hồng ngoại, tử
ngoại. Cũng giống như điốt, Led được cấu tạo
từ một khối bán dẫn loại P ghép với một khối
bán dẫn loại N.
Hình 1.7: Hình ảnh Led thực tế.
Với các ưu điểm ánh sáng lớn, độ bền cao, ít tiêu tốn điện năng, Led được ứng
dụng rộng rãi trên các lĩnh vực: Bảng quảng cáo ngoài trời, đồng hồ cỡ lớn đặt tại các
biển quảng cáo tấm lớn trên đường cao tốc, hệ thống đèn giao thông, biển chỉ dẫn, và
các sản phẩm khác như bảng chạy chữ điện tử, bảng hệ thống giờ, bảng tỷ giá, bảng
chứng khoán, hệ thống xếp hàng tự động… Việc sử dụng rộng rãi thiết bị chiếu sáng
bằng loại đèn này có thể giúp chúng ta tiết kiệm đuợc nhiều năng lượng.[10]
1.5.2 Lịch sử hình thành Led
Đèn Led đã có mặt từ những thập niên 60, nhưng hầu hết chỉ dùng hiển thị thời
gian của đồng hồ báo thức hay dung lượng pin của máy ghi hình. Một thời gian dài,
đèn Led đã không được dùng làm nguồn sáng bởi vì chúng chỉ cho ánh sáng đỏ, xanh
lá cây và vàng mà không cho ánh sáng trắng.
Đến năm 1993, công ty hoá chất Nichia của Nhật Bản cho ra đời loại đèn Led
xanh dương, là sự kết hợp giữa ánh sáng đỏ và xanh lá cây để là cơ sở để phát triển
đèn Led cho ra ánh sáng trắng. Sự kiện này đã mở ra một lĩnh vực mới về công nghệ
Led. Đèn Led dựa trên công nghệ bán dẫn ngày càng tăng về độ chiếu sáng, hiệu suất
và tuổi thọ, giống như bộ vi xử lý của máy tính, phát triển ngày càng nhanh và giá
thành ngày càng giảm theo thời gian.
Năm 1960: Phát minh ra đèn Led ánh sáng đỏ.
Năm 1970: Phát minh ra Led 7 đoạn.
Năm 1980: Phát minh ra Led xanh lá cây.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
27
Năm 1990: Phát minh ra Led xanh dương là cơ sở để phát triển đèn Led ánh
sáng trắng.
Năm 2000: Thời điểm bùng nổ đèn Led chiếu sáng.[1]
1.5.3 Cấu tạo và nguyên lý hoạt động của đèn Led
1.5.3.1 Cấu tạo của đèn Led
Hình 1.8: Cấu tạo và nguyên lý hoạt động của Led.
Giống như điốt, Led được cấu tạo từ một khối bán dẫn loại P ghép với một khối
bán dẫn loại N. Kích thước của các lớp bán dẫn này rất nhỏ, chỉ cỡ vài phần trăm
milimet.
Vỏ bọc bên ngoài được làm bằng nhựa trong suốt hoặc có thể pha thêm chất
màu tùy loại Led. Lớp vỏ này có tác dụng làm giá đỡ, bảo vệ kết cấu của đèn Led
đồng thời phần chóp cầu phía trên có tác dụng hội tụ hướng ánh sáng phát ra theo một
hướng với một góc mở nhất định. Led thường có một chân cực âm và một chân cực
dương.
1.5.3.2 Nguyên lý hoạt động của đèn Led
Khối bán dẫn loại P chứa nhiều lỗ trống tự do mang điện tích dương nên khi
ghép với khối bán dẫn N chứa các điện tử tự do thì các lỗ trống này có xu hướng
chuyển động khuếch tán sang khối N. Cùng lúc khối P lại nhận thêm các điện tử (điện
tích âm) từ khối N chuyển sang. Kết quả là khối P tích điện âm thiếu hụt lỗ trống và
dư thừa điện tử trong khi khối N tích điện dương thiếu hụt điện tử và dư thừa lỗ trống.
Ở giữa hai mặt tiếp giáp, một số điện tử bị lỗ trống thu hút và khi chúng tiến lại
gần nhau, chúng có xu hướng kết hợp với nhau tạo thành các nguyên tử trung hòa.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
28
Quá trình này có thể giải phóng năng lượng dưới dạng ánh sáng hay các bức xạ điện
từ có bước sóng gần đó.
Tùy theo mức năng lượng giải phóng cao hay thấp mà bước sóng ánh sáng phát
ra khác nhau tức màu sắc của Led sẽ khác nhau. Mức năng lượng và màu sắc của Led
hoàn toàn phụ thuộc vào cấu trúc năng lượng của các nguyên tử chất bán dẫn.
Led thường có điện thế phân cực thuận cao hơn điốt thông thường, trong khoảng
1,5 V đến 3 V nhưng điện thế phân cực nghịch ở Led thì không cao. Do đó, Led rất
dễ bị hư hỏng do điện thế ngược gây ra.[1]
Các loại Led và điện thế phân cực thuận:
-
Đỏ và vàng: 1,9 V – 2,2 V.
-
Trắng, xanh lá cây, xanh dương: 3,0 V – 3,4 V.
1.5.4 Ưu nhược điểm và ứng dụng của đèn Led
1.5.4.1 Ưu nhược điểm của đèn Led
Ưu điểm
Tuổi thọ cao: Hiện tại đèn Led cho ánh sáng trắng có tuổi thọ lên tới 50.000 giờ
sử dụng liên tục gấp 50 lần so với bóng đèn 60 W thông thường. Nếu sử dụng 10 giờ
mỗi ngày, thì bóng có thể sử dụng trong 23 năm.
Lợi ích kinh tế: Đèn Led tiết kiệm 70 – 80 % năng lượng so với các loại bóng
đèn thông thường.
Tốt cho thị lực của người sử dụng: Ánh sáng của đèn LED dịu mát, hiệu ứng
chói mắt thấp và hoàn toàn không bị nhấp nháy như bóng đèn huỳnh quang vốn bị
coi là nguyên nhân gây ra bệnh đau nửa đầu và động kinh.
Ít ảnh hưởng tới môi trường: Do phần lớn năng lượng được chuyển hóa thành
quang năng, do đó hiệu ứng nhiệt của đèn Led rất thấp. Nó hoàn toàn không tỏa nhiệt
ra môi trường. Các nghiên cứu khoa học cho thấy một bóng Led trung bình tỏa ra một
lượng nhiệt 3,4 btu/h (tương đương với 1 W), trong khi một bóng đèn dây tóc có độ
sáng tương đương tỏa ra nhiệt lượng khoảng 85 btu/h (tương đương với 25 W). Ngoài
ra bóng đèn Led không chứa thủy ngân do đó sẽ ít gây hại cho môi trường hơn khi
thải bỏ.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
29
Khoa Điện – Điện Tử
Thời gian khởi động nhanh: Không giống với bóng đèn huỳnh quang, đèn Led
gần như bật sáng ngay lập tức khi được cấp điện.
Bền vững đặc biệt: Do được làm từ chất liệu nhựa cao cấp nên đèn Led có thể
chịu đựng các lực va đập mạnh hoặc các ảnh hưởng bởi thời tiết như mưa, nắng,…[1]
Nhược điểm
Chi phí sản xuất cao, lắp đặt thi công phức tạp, tốn nhiều thời gian hơn các loại
bóng thông thường khác.
Tỏa nhiệt ở chân đèn, gây ảnh hưởng đến các bộ phận liền kề.
Chưa tiện dụng: Đèn Led vẫn là mặt hàng công nghệ cao phải mua từ đại lý của
hãng, bộ điều khiển của hãng nào chỉ chạy với đèn Led của đúng hãng đấy mà thôi.[1]
1.5.4.2 Ứng dụng của đèn Led
Đèn Led dùng trong chiếu sáng chủ yếu sử dụng các Led phát ánh sáng trắng.
Led được dùng để làm bộ phận hiển thị trong các thiết bị điện, điện tử, đèn
quảng cáo, trang trí, đèn giao thông, máy chiếu bằng Led.
Nghiên cứu về các loại Led có độ sáng tương đương với bóng đèn bằng khí
neon. Đèn chiếu sáng bằng Led được cho là có các ưu điểm như gọn nhẹ, bền, tiết
kiệm năng lượng, tuổi thọ cao hơn so với đèn neon, đèn sợi đốt,…
Hình 1.9: Ứng dụng của đèn Led trong thực tế.
Các Led phát ra tia hồng ngoại được dùng trong các thiết bị điều khiển từ xa
cho đồ điện tử dân dụng, đồ chơi trẻ em.
Ðèn Led còn được sử dụng trong nhiều lĩnh vực khác như đèn đọc, chiếu sáng
bể bơi, nhất là cho chiếu sáng quảng cáo ngoài trời tại những nơi khó thay lắp, ít bị
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
30
Khoa Điện – Điện Tử
hấp thụ bởi ánh nắng mặt trời, do có tuổi thọ cao hơn nhiều lần so với bóng đèn neon,
đồng thời có nhiều màu sắc phong phú như: Đỏ, xanh lá, xanh da trời, màu hổ phách...
Quảng cáo luôn là một trong các vấn đề đóng vai trò quan trọng trong sự phát
triển của một công ty, doanh nghiệp hay thậm chí là của một cửa hàng. Quảng cáo tốt
sẽ đem lại nhiều lợi ích to lớn. Cũng chính vì vậy mà không ngạc nhiên khi hàng năm
các doanh nghiệp đã đầu tư rất nhiều vào vấn đề này. Một trong những biện pháp
được ưa dùng hiện nay đó là sử dụng bảng quảng cáo bằng đèn Led, vì sự đơn giản,
hiện đại, bắt mắt, chi phí hợp lý cũng như tính hiệu quả của nó. Những bảng thông
tin, cổng chào hay những bảng Led quảng cáo với màu sắc sặc sỡ, bắt mắt, gây nhiều
chú ý chắc hẳn đã không còn xa lạ đối với người dân, nhất là người dân đô thị.
Đèn Led thực sự là có cách đột phá mới trong công nghệ cao nói chung và trong
quảng cáo nói riêng. Đó là các bảng hiệu, bảng chỉ dẫn, panel quảng cáo có sử dụng
đèn Led và mạch điện tử để tạo hiệu ứng ánh sáng. Qua tìm hiểu ta thấy nhiều đặc
điểm nổi bật của nó như độ bền của nó cao gấp mấy chục lần bóng đèn thường và rất
ít hao điện, không gây cháy nổ, an toàn tuyệt đối, chống rung động tốt, đặc biệt là nó
vẫn sáng rõ vào ban ngày. Vì vậy, có thể dùng cả những biển quảng cáo trong nhà
(indoor) và ngoài trời (outdoor) cho hiệu quả cao cũng như gây sự chú ý đồng thời
truyền đạt thông tin đến khách hàng và người đi đường.
Ngày nay Led còn được sử dụng để làm màn hình của tivi, latop, điện thoại và
các thiết bị hiển thị khác. Ngày nay, Led còn được dùng để chiếu sang đèn đường đô
thị, thay thế cho những bóng đèn cao áp.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
31
CHƯƠNG 2: THIẾT KẾ PHẦN CỨNG HỆ THỐNG
2.1 Tổng quát về phần cứng
2.1.1 Sơ đồ tổng quát phần cứng
Với mục đích tìm hiểu, nghiên cứu thiết kế chế tạo bộ điều khiển Led ma trận
bằng Smartphone chạy hệ điều hành Android em đã xây dựng một hệ thống quang
báo Led ma trận với sơ đồ khối như sau:
Dữ liệu cột
Giải mã cột
Khối
điều
khiển
Khối hiển thị
Led ma trận
trung
Bluetooth
HC06
tâm
Atmega32
Smartphone Android
Giải mã hàng
Dữ liệu hàng
Hình 2.1: Sơ đồ khối tổng quát hệ thống phần cứng.
2.1.2 Chức năng của các khối
Khối điều khiển trung tâm Atmega 32
Đây là nơi lưu giữ chương trình điều khiển chính và dữ liệu cho các mạch giải
mã hàng và cột. Atmega 32 là một hệ vi xử lý 8 bit đơn chip CMOS có hiệu suất cao,
công suất nguồn tiêu thụ thấp và có 32 Kbyte bộ nhớ ROM Flash xoá được/lập trình
được, 2 Kbyte RAM, 1024 byte EEPROM. Chip này được sản xuất dựa vào công
nghệ bộ nhớ không mất nội dung có độ tích hợp cao.
Khối giải mã hàng
Dùng IC 74HC138 (3 đầu vào, 8 đầu ra) để giải mã cho các hàng của bảng Led
ma trận.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
32
Nhiệm vụ của khối này là giãi mã tín hiệu chọn dòng từ khối điều khiển trung
tâm đưa xuống, để tại mỗi thời điểm chỉ cho một dòng được sáng. Mỗi mô đun Led
ma trận P10 có 16 dòng và 32 cột, được quét bởi một mô đun quét dòng, đầu vào là
các tín hiệu điều khiển được đưa xuống từ khối điều khiển trung tâm, đầu ra sẽ chọn
1 trong số 16 dòng để hiển thị cho một lần quét. Mỗi mô đun hiển thị tại một thời
điểm chỉ cho 1 dòng được sáng.
Mô đun quét dòng phải chọn 1 trong số 16 dòng để hiển thị nên cần tín hiệu
chọn dòng từ mô đun điều khiển đưa xuống là các tín hiệu AM, BM. Các tín hiệu
chọn dòng sẽ được giải mã bằng IC 74HC138. Trên mỗi dòng của bảng Led ma trận
có 32 điểm, do vậy một dòng sẽ có 32 đèn Led. Vì vậy, các tín hiệu chọn dòng này
phải đi qua bộ khuếch đại công suất để có thể cung cấp đủ dòng cho 32 đèn sáng đồng
thời trong trường hợp cực đại.
Khối giải mã cột
Điều khiển cấp nguồn cho cột dùng IC chốt dịch 74HC595, ta nối các đầu ra
của IC 74HC595 song song với các chân cấp nguồn cho các cột của ma trận. Khối
giải mã cột nhận dữ liệu quét cột từ khối điều khiển trung tâm, xuất tín hiệu điều
khiển cho lần lượt các cột của mô đun Led ma trận.
Khối hiển thị Led ma trận
Khi nhận được dữ liệu về chuỗi ký tự cần hiển thị thì khối giải mã hàng và cột
sẽ tạo dữ liệu về mức logic cần cấp cho khối hiển thị Led ma trận. Khi nhận được dữ
liệu về màu sắc, hiệu ứng hiển thị thì hai khối này sẽ xác định thủ tục gửi dữ liệu cho
các khối chốt dữ liệu hàng và cột đưa ra khối hiển thị. Nội dung dữ liệu điều khiển sẽ
được hiển thị lên trên mô đun Led ma trận.
Khối truyền dữ liệu
Xây dựng giao diện điều khiển Led ma trận trên Smartphone chạy hệ điều hành
Android truyền dữ liệu cho vi điều khiển Atmega 32 qua mô đun Bluetooth HC-06.
Khối giao tiếp giữa vi điều khiển và Smartphone
Tạo môi trường kết nối giúp cho vi điều khiển và Smartphone giao tiếp được
với nhau, nhận biết được các tín hiệu truyền, nhận giữa hai bên.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
33
2.2 Một số linh kiện sử dụng trong mạch
2.2.1 Vi điều khiển Atmega 32
2.2.1.1 Giới thiệu chung về Atmega 32
Hình 2.2: Atmega 32 loại chân cắm.
Hình 2.3: Atmega 32 loại chân dán.
AVR là một họ vi điều khiển do hãng Atmel sản xuất. AVR là họ vi điều khiển
8 bits với cấu trúc tập lệnh đơn giản hóa – RISC (Reduced Instruction Set Computer),
một kiểu cấu trúc đang thể hiện ưu thế trong các bộ xử lý.
So với các vi điều khiển 8 bits khác, AVR có nhiều đặc tính hơn hẳn, hơn cả
trong tính ứng dụng dễ sử dụng và đặc biệt là về chức năng:
-
Gần như chúng ta không cần mắc thêm bất kỳ linh kiện phụ nào khi sử dụng
AVR, thậm chí không cần nguồn tạo xung clock cho chip (thường là các khối thạch
anh).
-
Thiết bị lập trình (mạch nạp) cho AVR rất đơn giản, có loại mạch nạp chỉ cần
vài điện trở là có thể làm được. Một số AVR còn hỗ trợ lập trình on – chip bằng
bootloader không cần mạch nạp…
-
Bên cạnh lập trình bằng ASM, cấu trúc AVR được thiết kế tương thích C.
-
Nguồn tài nguyên về source code, tài liệu, các chương trình ứng dụng…rất lớn
trên internet.
Hầu hết các chip AVR có những tính năng (features) sau:
-
Có thể sử dụng xung clock lên đến 16 MHz hoặc sử dụng xung clock nội lên
đến 8 MHz (sai số 3%).
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
-
Khoa Điện – Điện Tử
34
Bộ nhớ chương trình Flash có thể lập trình lại rất nhiều lần và dung lượng lớn,
có SRAM (Ram tĩnh) lớn và đặc biệt có bộ nhớ lưu trữ lập trình được EEPROM.
-
Nhiều ngõ vào ra (I/O PORT) 2 hướng (bi-directional).
-
8 bits, 16 bits timer/counter tích hợp PWM.
-
Các bộ chuyển đổi Analog – Digital phân giải 10 bits, nhiều kênh.
-
Chức năng Analog comparator.
-
Giao diện nối tiếp USART (tương thích chuẩn nối tiếp RS – 232).
-
Giao diện nối tiếp Two – Wire – Serial (tương thích chuẩn I2C) Master và
Slaver.
-
Giao diện nối tiếp Serial Peripheral Interface (SPI)…[2]
2.2.1.2 Cấu trúc Atmega 32
Vi điều khiển là một lĩnh vực có tốc độ phát triển như vũ bảo của nghành điện
tử. Cùng với sự phát triển của ngành điện tử thì nhiều họ vi điều khiển lần lượt được
các hãng sản xuất chip cho ra đời như: Z80 của Zilog, PIC của Microchip, AT89 và
AVR của Atmel...
Họ vi điều khiển AVR của Atmel là một bước phát triển trên nền của vi điều
khiển AT89 đã khá quen thuộc. Nếu như AT89 là vi điều khiển có CPU CISC thì
AVR là RISC.
AVR có cấu trúc harvard, trong đó đường truyền cho bộ nhớ dữ liệu (data
memory bus) và đường truyền cho bộ nhớ chương trình (program memory bus) được
tách riêng. Data memory bus chỉ có 8 bit và được kết nối với hầu hết các thiết bị ngoại
vi, với register file. Trong khi đó program memory bus có độ rộng 16 bits và chỉ phục
vụ cho instruction registers.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
35
Khoa Điện – Điện Tử
Hình 2.4: Cấu trúc bên trong của vi điều khiển AVR.
32 thanh ghi trong Register file được kết nối trực tiếp với Arithmetic Logic Unit
– ALU (ALU cũng được xem là CPU của AVR) bằng 2 line, vì thế ALU có thể truy
xuất trực tiếp cùng lúc 2 thanh ghi RF chỉ trong 1 chu kỳ xung clock.
Các instruction được chứa trong bộ nhớ chương trình Flash memory dưới dạng
các thanh ghi 16 bit. Bộ nhớ chương trình được truy cập trong mỗi chu kỳ xung clock
và một instruction chứa trong program memory sẽ được nạp vào trong instruction
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
36
Khoa Điện – Điện Tử
register, instruction register tác động và lựa chọn register file cũng như RAM cho
ALU thực thi. Trong lúc thực thi chương trình, địa chỉ của dòng lệnh đang thực thi
được quyết định bởi một bộ đếm chương trình – PC (Program counter). Đó chính là
cách thức hoạt động của AVR.[2]
AVR có ưu điểm là hầu hết các instruction đều được thực thi trong 1 chu kỳ
xung clock, vì vậy có thể nguồn clock lớn nhất cho AVR có thể nhỏ hơn một số vi
điều khiển khác như PIC nhưng thời gian thực thi vẫn nhanh hơn.
2.2.1.3 Cấu trúc bộ nhớ
Hình 2.5: Cấu trúc bộ nhớ vi điều khiển Atmega 32.
Bộ nhớ chương trình (Bộ nhớ Flash).
Là bộ nhớ Flash lập trình được, trong các chip AVR cũ (như AT90S1200 hay
AT90S2313…) bộ nhớ chương trình chỉ gồm một phần là Application Flash Section
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
37
nhưng trong các chip AVR mới chúng ta có thêm phần Boot Flash setion. Bộ nhớ
chương trình chúng ta tự hiểu là Application section. Thực chất, Application section
bao gồm 2 phần: Phần chứa các instruction (mã lệnh cho hoạt động của chip) và phần
chứa các vector ngắt (interrupt vectors). Các vector ngắt nằm ở phần đầu của
Application section (từ địa chỉ 0x0000) và dài đến bao nhiêu tùy thuộc vào loại chip.
Phần chứa instruction nằm liền sau đó, chương trình viết cho chip phải được nạp vào
phần này.[2]
Bộ nhớ dữ liệu [2]
Đây là phần chứa các thanh ghi quan trọng nhất của chip, việc lập trình cho chip
phần lớn là truy cập bộ nhớ này. Bộ nhớ dữ liệu trên các chip AVR có độ lớn khác
nhau tùy theo mỗi chip, tuy nhiên về cơ bản phần bộ nhớ này được chia thành 5 phần.
Phần 1: Là phần đầu tiên trong bộ nhớ dữ liệu, như mô tả trong hình 2.5, phần
này bao gồm 32 thanh ghi có tên gọi là Register file (RF), hay General Purpose
Rgegister – GPR hoặc đơn giản là các thanh ghi. Tất cả các thanh ghi này đều là các
thanh ghi 8 bits như hình vẽ 2.6.
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Hình 2.6: Thanh ghi 8 bit của vi điều khiển Atmega 32.
32 thanh ghi RF của AVR được xem là một phần của CPU, vì thế chúng được
CPU sử dụng trực tiếp và nhanh chóng. Để gọi các thanh ghi này, chúng ta không cần
gọi địa chỉ mà chỉ cần gọi trực tiếp tên của chúng. Thanh ghi RF thường được sử
dụng như các toán hạng (operand) của các phép toán trong lúc lập trình.
Phần 2: Là phần nằm ngay sau Register file, phần này bao gồm 64 thanh ghi
được gọi là 64 thanh ghi nhập/xuất (64 I/O register) hay còn gọi là vùng nhớ I/O (I/O
Memory). Vùng nhớ I/O là cửa ngõ giao tiếp giữa CPU và thiết bị ngoại vi. Tất cả
các thanh ghi điều khiển, trạng thái…của thiết bị ngoại vi đều nằm ở đây. Việc điều
khiển các PORT của AVR liên quan đến 3 thanh ghi DDRx, PORTx và PINx, tất cả
3 thanh ghi này đều nằm trong vùng nhớ I/O. Xa hơn, nếu muốn truy xuất các thiết
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
38
Khoa Điện – Điện Tử
bị ngoại vi khác như Timer, chuyển đổi Analog/Digital, giao tiếp USART…đều thực
hiện thông qua việc điều khiển các thanh ghi trong vùng nhớ này.
Phần 3: RAM tĩnh, nội (internal SRAM) là vùng không gian cho chứa các biến
(tạm thời hoặc toàn cục) trong lúc thực thi chương trình, vùng này tương tự các thanh
RAM trong máy tính nhưng có dung lượng khá nhỏ (khoảng vài KB, tùy thuộc vào
loại chip).
Phần 4: RAM ngoại (external SRAM), các chip AVR cho phép người sử dụng
gắn thêm các bộ nhớ ngoài để chứa biến, vùng này thực chất chỉ tồn tại khi nào người
sử dụng gắn thêm bộ nhớ ngoài vào chip.
Phần 5: EEPROM (Electrically Ereasable Programmable ROM) là một phần
quan trọng của các chip AVR mới, vì là ROM nên bộ nhớ này không bị xóa ngay cả
khi không cung cấp nguồn nuôi cho chip, rất thích hợp cho các ứng dụng lưu trữ dữ
liệu. Như trong hình 2.5 phần bộ nhớ EEPROM được tách riêng và có địa chỉ tính từ
0x0000.
2.2.1.4 Thanh ghi trạng thái của AVR
Nằm trong vùng nhớ I/O, thanh ghi SREG có địa chỉ I/O là 0x003F và địa chỉ
bộ nhớ là 0x005F (thường đây là vị trí cuối cùng của vùng nhớ I/O) là một trong số
các thanh ghi quan trọng nhất của AVR. Thanh ghi SREG chứa 8 bit cờ (flag) chỉ
trạng thái của bộ xử lí, tất cả các bit này đều bị xóa sau khi reset, các bit này cũng có
thể được đọc và ghi bởi chương trình. Chức năng của từng bit được mô tả như sau:
Hình 2.7: Cấu trúc thanh ghi trạng thái của AVR.
Bit 0 – C (Carry Flag: Cờ nhớ): Là bit nhớ trong các phép đại số hoặc logic,
ví dụ thanh ghi R1 chứa giá trị 200, R2 chứa 70, chúng ta thực hiện phép cộng có
nhớ: ADC R1, R2, sau phép cộng, kết quả sẽ được lưu lại trong thanh ghi R1, trong
khi kết quả thực là 270 mà thanh ghi R1 lại chỉ có khả năng chứa tối đa giá trị 255
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
39
Khoa Điện – Điện Tử
(vì có 8 bit) nên trong trường hợp này, giá trị lưu lại trong R1 thực chất chỉ là 14,
đồng thời cờ C được set lên 1 (vì 270 = 100001110, trong đó 8 bit sau 00001110 =
14 sẽ được lưu lại trong R1).
Bit 1 – Z (Zero Flag: Cờ 0): Cờ này được set nếu kết quả phép toán đại số hay
phép logic bằng 0.
Bit 2 – N (Negative Flag: Cờ âm): Cờ này được set nếu kết quả phép toán đại
số hay phép logic là số âm.
Bit 3 – V (Two’s complement Overflow Flag: Cờ tràn của bù 2): Hoạt động
của cờ này liên quan đến kiến thức số nhị phân (phần bù). Bù 1 một số trong hệ nhị
phân mà nó chính là bù cơ số trừ 1 của một số khác. Một số bù 1 có thể có được do
đảo tất cả các bit có trong số nhị phân (đổi 1 thành 0 và ngược lại).
Bit 4 – S (Sign Bit: Bit dấu): Bit S là kết quả phép XOR giữa một cờ N và V,
S = N xor V.
Bit 5 – H (Half Carry Flag: Cờ nhờ nữa): Cờ H là cờ nhớ trong một vài phép
toán đại số và phép logic, cờ này hiệu quả đối với các phép toán với số BCD.
Bit 6 – T (Bit Copy Storage): Được sử dụng trong hai Instruction BLD (Bit
LoaD) và BST (Bit STorage). Làm nơi trung gian trong các lệnh BLD và BST.
Bit 7 – I (Global Interrupt Enable): Cho phép ngắt toàn bộ bit này phải được
set lên 1 nếu trong chương trình có sử dụng ngắt. Sau khi set bit này, bạn muốn kích
hoạt loại ngắt nào cần set các bit ngắt riêng của ngắt đó. Hai instruction dùng riêng
để set và clear bit I là SEI và CLI.
Tất cả các bit trong thanh ghi SREG đều có thể được xóa thông qua các
instruction không toán hạng CLx và set bởi SEx, trong đó x là tên của bit. Ví dụ CLT
là xóa Bit T và SEI là set bit I.[2]
2.2.1.5 Các cổng vào ra
Vi điều khiển Atmega 32 có 32 đường vào ra chia làm bốn nhóm 8 bit một. Các
đường vào ra này có rất nhiều tính năng và có thể lập trình được. Ở đây ta sẽ xét
chúng là các cổng vào ra số. Nếu xét trên mặt này thì các cổng vào ra này là cổng vào
ra hai chiều có thể định hướng theo từng bit.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
40
Khoa Điện – Điện Tử
Mặc dù mỗi PORTx có các đặc điểm riêng nhưng khi xét chúng là các cổng vào
ra số thì dường như điều khiển vào ra dữ liệu thì hoàn toàn như nhau. Chúng ta có
thanh ghi và một địa chỉ cổng đối với mỗi cổng, đó là thanh ghi dữ liệu cổng (PORTA,
PORTB, PORTC, PORTD), thanh ghi dữ liệu điều khiển cổng (DDRA, DDRB,
DDRC, DDRD) và cuối cùng là địa chỉ chân vào của cổng (PINA, PINB, PINC,
PIND).[2]
Thanh ghi DDRx
Đây là thanh ghi 8 bit ta có thể đọc, ghi các bit ở thanh ghi này và nó có tác
dụng điều khiển hướng cổng PORTx (tức là cổng ra hay cổng vào). Nếu như một bit
trong thanh ghi này được set thì bit tương ứng đó trên PORTx được định nghĩa như
một cổng ra. Ngược lại nếu như bit đó không được set thì bit tương ứng trên PORTx
được định nghĩa là cổng vào.
Thanh ghi PORTx
Đây cũng là thanh ghi 8 bit (các bit có thể đọc và ghi được) nó là thanh ghi dữ
liệu của cổng PORTx và trong trường hợp nếu cổng được định nghĩa là cổng ra thì
khi ta ghi một bit lên thanh ghi này thì chân tương ứng trên port đó cũng có cùng mức
logic.
Trong trường hợp mà cổng được định nghĩa là cổng vào thì thanh ghi này lại
mang dữ liệu điều khiển cổng. Cụ thể nếu bit nào đó của thanh ghi này được set (đưa
lên mức 1) thì điện trở kéo lên (pull-up) của chân tương ứng của PORT đó sẽ được
kích hoạt. Ngược lại nó sẽ ở trạng thái hi-z, thanh ghi này sau khi khởi động vi điều
khiển sẽ có giá trị là 0x00.
Thanh ghi PINx
Đây là thanh ghi 8 bit chứa dữ liệu vào của bất kỳ PORTx nào của AVR (trong
trường hợp PORTx được thiết lập là cổng vào) và nó chỉ có thể đọc mà không thể ghi
vào được.[3]
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
41
2.2.2 IC chốt dịch 74HC595
vHình 2.8: Hình ảnh thực tế IC 74HC595.
Hình 2.9: Sơ đồ chân IC 74HC595.
IC 74HC595 là bộ ghi dịch 8 bít gồm có :
-
1 đầu vào cho phép ( OE ).
-
1 đầu vào chọn thanh ghi dịch (MR).
-
1 đầu vào dữ liệu nối tiếp (DS).
-
1 đầu vào cấp xung cho thanh ghi dịch (SH_CP).
-
1 đầu vào cấp xung cho thanh ghi chứa (ST_CP).
-
8 đầu ra 3 trạng thái ( Q1 đến Q7 và Q7’).
Bảng 2.1: Chức năng hoạt động của 74HC595 [1]
Đầu vào
SH_CP ST_CP OE
Đầu ra
MR
DS
Q7’
Chức năng
Qn
MR mức thấp dữ liệu chỉ dịch
X
X
L
L
X
L
kđ
X
L
L
X
L
L
X
X
H
L
X
L
Z
GVHD: Th.s Nhữ Khải Hoàn
trong thanh ghi dịch đầu ra
không đổi trạng thái
Xóa thanh ghi dich nạp dữ
liệu vào thanh ghi chứa
Xóa thanh ghi dịch đầu ra ở
trạng thái trở kháng cao
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
42
Dịch chuyển trạng thái cao
vào thanh ghi dịch, giá trị
trước đó của bít thứ 6 trong
X
L
H
H
Q6’
kđ
thanh ghi dịch được chuyển
sang đầu ra Q7’
Nội dụng của thanh ghi dịch
X
L
H
X
kđ
Qn’
được chuyển sang thanh ghi
chứa và chuyển sang đầu ra
Dịch chuyển nội dung của
thanh ghi dịch đồng thời nội
dung của thanh ghi dịch cũ
L
H
X
Q6’
Qn’
được chuyển vào thanh ghi
chứa và các đầu ra song song
Phải sử dụng 3 chân của vi điều khiển để nối với các chân DS, SH_CP, ST_CP
của IC 74HC595. Các bit dữ liệu mã hóa mức logic cần cấp cho các cột của một hàng
ma trận LED sẽ được truyền liên tiếp qua chân DS của IC 74HC595.
Để đồng bộ bit thì vi điều khiển mỗi khi xuất một bit tới chân DS sẽ phát một
xung có sườn dương (từ 0 lên 1) vào chân SH_CP. Sau khi truyền xong hết dữ liệu,
để các LED trên cột sáng thì ta phải chuyển dữ liệu trong thanh ghi dịch vào các đầu
ra của IC 74HC595 bằng cách cấp một xung sườn dương vào chân ST_CP. Chú ý để
IC có thể hoạt động và đẩy dữ liệu ra các chân đầu ra thì chân OE phải nối đất, chân
MR nối dương nguồn.
Khi mở rộng Led ma trận ta ghép nhiều IC 74HC595 nối tiếp nhau như hình
2.10. Các chân SH_CP được nối chung với một nguồn cấp xung, các chân ST_CP
cũng được nối chung với nhau, đầu ra Q7’ của IC phía trước được nối với đầu vào
DS của IC tiếp theo. Khi đó dữ liệu sẽ được dịch đồng bộ từ IC này sang IC khác và
đầu ra của các IC cũng được chốt đồng bộ.[1]
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
43
Hình 2.10: Ghép nối tiếp các IC 74HC595.
2.2.3 IC giải mã địa chỉ 74HC138
Hình 2.11: Hình ảnh thực tế IC 74HC138.
Hình 2.12: Sơ đồ chân IC 74HC138.
IC 74HC138 là bộ giả mã 3 đầu vào A0, A1, A2 và 8 đầu ra đảo từ Y0 đến Y7.
Nó có 3 đầu vào cho phép IC 74HC138 hoạt động, hai đầu vào tích cực mức thấp E1,
E2 và một đầu vào tích cực mức cao E3. Tất cả các đầu ra của 74HC138 sẽ ở mức
cao trừ khi E1, E2 ở mức thấp và E3 ở mức cao.
Khi các đầu vào E1, E2 ở mức thấp và E3 ở mức cao thì đầu ra của IC 74HC138
sẽ được quyết định bởi đầu vào. Các trạng thái đầu ra phụ thuộc vào trạng thái đầu
vào được mô tả ở bảng 2.2.
Khi mở rộng Led ma trận ta tăng thêm số lượng IC để cấp nguồn cho tất cả các
hàng, các IC này có thể cùng nối chung hoặc riêng chân điều khiển. Hoặc chỉ sử dụng
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
44
một IC nhưng cấp nguồn đồng thời cho tất cả các ma trận, khi đó một chân của IC sẽ
được nối với các hàng của các ma trận khác nhau.
Theo nguyên tắc quét Led ma trận thì tại mỗi thời điểm ta chỉ cấp nguồn cho
một hàng của ma trận do đó có thể dùng 74HC138 để cấp nguồn cho các hàng của
Led ma trận. Các đầu vào (A0, A1, A2) của 74HC138 sẽ được nối với các chân của
IC đệm tăng dòng 74HC245. Thông qua việc gửi tín hiệu từ vi điều khiển tới các chân
đầu vào của 74HC138 ta có thể chọn được hàng cần cấp nguồn.
Bảng 2.2: Bảng giá trị logic của IC 74HC138
ĐẦU VÀO
ĐẦU RA
E1
E2
E3
A0
A1
A2
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
H
X
X
X
X
X
H
H
H
H
H
H
H
H
X
H
X
X
X
X
H
H
H
H
H
H
H
H
X
X
L
X
X
X
H
H
H
H
H
H
H
H
L
L
H
L
L
L
L
H
H
H
H
H
H
H
L
L
H
H
L
L
H
L
H
H
H
H
H
H
L
L
H
L
H
L
H
H
L
H
H
H
H
H
L
L
H
H
H
L
H
H
H
L
H
H
H
H
L
L
H
L
L
H
H
H
H
H
L
H
H
H
L
L
H
H
L
H
H
H
H
H
H
L
H
H
L
L
H
L
H
H
H
H
H
H
H
H
L
H
L
L
H
H
H
H
H
H
H
H
H
H
H
L
Chú thích:
-
H: mức cao (mức 1).
-
L: mức thấp (mức 0).
-
X: bất kì.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
45
Khoa Điện – Điện Tử
2.3 Phân tích hệ thống
2.3.1 Nguyên lý hoạt động của bảng quang báo Led ma trận
Nguyên lý hoạt động của bảng Led ma trận dựa theo nguyên lý hoạt động của
các màn hình, đó là sử dụng phương pháp quét hình theo từng dòng. Mỗi dòng gồm
nhiều điểm ảnh, mỗi điểm ảnh có thể có một hoặc vài đèn, màu sắc khác nhau. Trong
đề tài này, em sử dụng mô đun Led ma trận P10 đơn sắc nên mỗi điểm ảnh là một
đèn Led màu đỏ. Mỗi đèn được biểu diễn thông qua một bit dữ liệu, bit 1 tương ứng
với đèn sáng, bit 0 tương ứng với đèn tắt.
Tại một thời điểm, không phải tất cả các dòng trên màn hình đều sáng nhưng do
tốc độ quét nhanh và sự lưu ảnh trên võng mạc tạo cho người nhìn thấy hình ảnh liên
tục. Trong quá trình quét, mạch điều khiển sẽ đưa dữ liệu ra mô đun hiển thị Led ma
trận, chính dữ liệu này sẽ quyết định điểm ảnh nào sáng, điểm ảnh nào tắt, màu sắc
của điểm ảnh là gì. Các điểm ảnh này sẽ tạo ra hình ảnh trên bảng Led ma trận.
Hình 2.13: Nguyên tắc tạo ảnh cho Led ma trận.
2.3.2 Phân tích hệ thống
Trong đồ án này, sử dụng bảng quang báo Led ma trận có kích thước 32 x 128
điểm ảnh, mỗi điểm ảnh là một đèn Led, do đó ta dùng 8 mô đun Led ma trận P10,
mỗi mô đun có kích thước 16 x 32 điểm ảnh.
Để hiển thị một hình ảnh ta phải quét hết 16 dòng. Nếu thời gian quét một dòng
là 1 ms, thì để quét xong một hình ảnh ta phải mất 16 ms. Nếu thời gian trễ cho một
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
46
Khoa Điện – Điện Tử
hình ảnh là 34 ms thì thời gian hiển thị của hình ảnh đó là 50 ms. Như vậy, ta có thể
hiển thị được 1000/50 = 20 hình/s.
Chất lượng hình ảnh phụ thuộc vào tốc độ dòng quét, tỉ lệ thời gian sáng và thời
gian tắt của từng dòng. Thời gian quét dòng phụ thuộc vào thời gian đẩy dữ liệu ra
và thời gian trễ sáng cho dòng đó. Độ trễ sáng của dòng, có ảnh hưởng đến mức độ
sáng tối cũng như màu sắc của hình ảnh. Vì vậy, để tạo ra nhiều mức sáng tối và tăng
số màu hiển thị thì phải có khả năng thay đổi độ trễ sáng của dòng.
Bộ điều khiển Led ma trận thực trong đề tài giao tiếp với Smartphone thông qua
Bluetooth, do đó chúng ta cần sử dụng mô đun Bluetooth – HC06 để tạo cầu kết nối
giũa chúng.
2.4 Thiết kế phần cứng
Phần cứng của bảng quang báo Led ma trận 32 x 128 gồm có các khối cơ bản
sau: Khối điều khiển trung tâm, khối hiển thị, khối giao tiếp giữa vi điều khiển và
khối xuất dữ liệu Smartphone.
2.4.1 Khối hiển thị
Khối hiển thị thông báo là một bảng hiển thị Led ma trận, nó có thể chạy được
nội dung thông báo truyền từ Smartphone thông qua mô đun Bluetooth HC-06.
Bảng hiển thị Led ma trận có rất nhiều loại và đầy đủ kích thước to nhỏ khác
nhau tùy nhu cầu sử dụng. Mỗi bảng gồm có rất nhiều Led đơn được ghép lại với
nhau trong một khối nhất định. Trong khối đó các Led đơn được sắp sếp theo các
hàng và các cột, tại mỗi giao điểm của hàng với cột là một Led đơn và người ta thường
phân biệt các loại bảng Led theo số hàng và cột. Một bảng 8 x 8 là có 8 hàng và 8 cột,
do 64 Led đơn ghép lại và nhiều loại kích thước lớn hơn như 16 x 32 hay 32 x 128...
Trên thị trường ta thường thấy các bảng Led ma trận cở lớn, dài hàng mét với
đủ kích cỡ. Các bảng đó là do hàng nghìn Led đơn ghép lại. Khi thiết kế những bảng
to như vậy ta cần chú ý đến sự đồng đều về độ sáng của các Led để việc hiển thị được
đồng đều. Bên cạnh đó vấn đề cấp nguồn cho mô đun Led ma trận cũng cần được chú
ý và thiết kế cho phù hợp. Trong đề tài này, em sử dụng 8 bảng mô đun P10 16x32
tạo thành bảng ma trận có kích thước 32x128.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
47
Sử dụng mô đun Led ma trận P10, khoảng cách giữa hai điểm ảnh 10mm, quét
1/4 chu kỳ. Trên mô đun đã tích hợp sẵn các khối giải mã hàng và cột.
Hình 2.14: Mô đun Led ma trận P10.
Các đường điều khiển của mô đun Led P10 gồm:
-
Tín hiệu OE: Tích cực mức logic thấp (0
V) cho phép chốt hàng.
-
Tín hiệu chọn hàng: A, B là hai đường tín
hiệu cho phép chọn hàng hiển thị.
-
Tín hiệu CLK: Tín hiệu cho phép chốt dữ
liệu ra cột.
-
Tín hiệu LATCH: Xung đưa dữ liệu ra IC
ghi dịch.
-
Tín hiệu RED: Đưa dữ liệu cần hiển thị ra
bảng LED.
GVHD: Th.s Nhữ Khải Hoàn
Hình 2.15: Sơ đồ chân mô đun Led P10
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
48
Khoa Điện – Điện Tử
Hình 2.16: Sơ đồ nguyên lý kết nối mô đun Led P10 với vi điều khiển Atmega 32.
Hình 2.17: Sơ đồ mạch in kết nối mô đun Led P10 với vi điều khiển Atmega 32.
Hình 2.18: Nguyên lý đưa dữ liệu vào IC 74HC595 của Led ma trận P10.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
49
Khoa Điện – Điện Tử
Đầu tiên dữ liệu được đưa vào IC74HC595 thứ nhất theo hướng mũi tên hình
2.18, sau đó dữ liệu tiếp theo sẽ được đưa vào IC thứ hai. Quá trình cứ lặp lại cho tới
khi ta đưa dữ liệu vào 16 IC 74HC595, lúc này ta cho tích cực 4 hàng đầu tiên bằng
cách cho tín hiệu chọn hàng A = 0 và B = 0 dữ liệu sẽ được hiển thị lên mô đun Led
ma trận như hình 2.19.
Để hiển thị dữ liệu của bốn hàng kế tiếp ta làm tương tự, nhưng lúc này tín hiệu
chọn hàng A và B lần lượt là: A = 0 và B = 1, A = 1 và B = 0, A = 1 và B = 1. Sau
khi thực hiện xong bốn lần quét ta sẽ hiển thị được dữ liệu của một mô đun Led ma
trận 16 x 32.
Hình 2.19: Nguyên lý quét mô đun Led ma trận P10.
Sử dụng IC 74HC245 làm IC đệm dữ liệu và khuếch đại tín hiệu điều khiển ở
các đầu vào khối giải mã hàng và cột. Sơ đồ các chân của IC 74HC245 như hình 2.21.
Hình 2.20: Hình ảnh thực tế IC 74HC245.
GVHD: Th.s Nhữ Khải Hoàn
Hình 2.21: Sơ đồ chân IC 74HC245.
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
50
Khoa Điện – Điện Tử
2.4.2 Khối điều khiển trung tâm
Khối điều khiển sử dụng vi điều khiển Atmega 32 sử dụng bộ giao đồng ngoài
với thạch anh có tần số 11.0592 MHz.
Hình 2.22: Sơ đồ nguyên lý mạch điều khiển trung tâm Atmega 32.
Hình 2.23: Sơ đồ mạch in khối điều khiển trung tâm Atmega 32.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
51
2.4.3 Khối giao tiếp giữa vi điều khiển và Smartphone
Vi điều khiển Atmega 32 giao tiếp với Smartphone bằng chuẩn truyền thông
nối tiếp không đồng bộ UART thông qua hai chân RXD (chân 14) nhận dữ liệu và
chân TXD (chân 15) truyền dữ liệu. Atmega 32 có thể giao tiếp với máy tính thông
qua cổng RS232 (Com), cổng USB, Bluetooth…
Trong đồ án này, em sử dụng mô đun Bluetooth HC-06 (Slave), sử dụng
Bluetooth trong các thiết bị nhúng, có thể giúp chúng ta kết nối không dây dễ dàng
hơn. Kết nối không dây có tính thẩm mỹ cao, di chuyển qua lại dễ dàng hơn so với
kết nối có dây thông thường.
Mô đun Bluetooth HC-06 được tích hợp trên board cho phép bạn sử dụng
nguồn từ 3.5 V đến 6 V cung cấp cho board mà không cần lo lắng về chênh lệch điện
áp 3 V – 5 V gây hỏng board.
Mô đun Bluetooth HC-06 gồm 6 chân
theo thứ tự: KEY, VCC, GND, TX, RX,
STATE. Đây là mô đun Bluetooth SLAVE
nghĩa là chúng ta không thể chủ động kết
nối bằng vi điều khiển, mà cần sử dụng
Smartphone, laptop, Bluetooth usb...để dò
tín hiệu và kết nối (pair) từ Smartphone,
laptop, Bluetooth USB...Sau khi ghép đôi
thành công, ta có thể gửi và nhận tín hiệu từ
vi điều khiển đến các thiết bị này.[4]
Hình 2.24: Mô đun bluetooth HC06.
Truyền thông không đồng bộ chỉ cần một đường một đường truyền cho một quá
trình. “Khung dữ liệu” đã được chuẩn hóa bởi các thiết bị nên không cần đường xung
nhịp báo trước dữ liệu đến.Tuy nhiên, để quá trình truyền thành công thì việc tuân
thủ các tiêu chuẩn truyền là hết sức quan trọng.
Cấu trúc của một khung truyền phổ biến nhất là: 1 bit Start + 8 bit data + 1 bit
stop.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
52
Khoa Điện – Điện Tử
Hình 2.25: Cấu trúc của một khung truyền phổ biến.
Tốc độ baud: Để việc truyền và nhận không đồng bộ xảy ra thành công thì các
thiết bị tham gia phải thống nhất nhau về khoảng thời gian dành cho 1 bit truyền, hay
nói cách khác tốc độ truyền phải được cài đặt như nhau trước, tốc độ này gọi là tốc
độ Baud. Theo định nghĩa, tốc độ Baud là số bit truyền trong 1s. Ví dụ nếu tốc độ
Baud được đặt là 19200 thì thời gian dành cho 1 bit truyền là 1/19200 ~ 52.083us.
Khung truyền: Do truyền thông nối tiếp mà nhất là nối tiếp không đồng bộ rất
dễ mất hoặc sai lệch dữ liệu, quá trình truyền thông theo kiểu này phải tuân theo một
số quy cách nhất định. Bên cạnh tốc độ Baud, khung truyền là một yếu tố quan trọng
tạo nên sự thành công khi truyền và nhận. Khung truyền bao gồm các quy định về số
bit trong mỗi lần truyền, các bit “báo” như bit Start và bit Stop, các bit kiểm tra như
Parity, ngoài ra số lượng các bit trong một gói dữ liệu cũng được quy định bởi khung
truyền. Hình 2.25 là một cấu trúc của một khung truyền phổ biến hay sử dụng nhất.
Start bit: Start là bit đầu tiên được truyền trong một khung truyền, bit này có
chức năng báo cho thiết bị nhận biết rằng có một gói dữ liệu sắp được truyền tới. Ở
mô đun USART trong AVR, đường truyền luôn ở trạng thái cao khi nghỉ (Idle), nếu
một chip AVR muốn thực hiện việc truyền dữ liệu nó sẽ gởi một bit start bằng cách
kéo đường truyền xuống mức 0. Như vậy, với AVR bit start là mang giá trị 0 và có
giá trị điện áp 0 V (với chuẩn RS232 giá trị điện áp của bit start là ngược lại). Start là
bit bắt buộc phải có trong khung truyền.
Data: Dữ liệu cần truyền là thông tin chính mà chúng ta cần gởi và nhận. Data
không nhất thiết phải là gói 8 bit, với AVR có thể quy định số lượng bit của data là
5, 6, 7, 8 hoặc 9 (tương tự cho hầu hết các thiết bị hỗ trợ UART khác). Trong truyền
thông nối tiếp UART, bit có ảnh hưởng nhỏ nhất (LSB – Least Significant Bit, bit
bên phải) của Data sẽ được truyền trước và cuối cùng là bit có ảnh hưởng lớn nhất
(MSB – Most Significant Bit, bit bên trái).
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
53
Parity bit: Parity là bit dùng kiểm tra dữ liệu truyền đúng hay không (một cách
tương đối). Có 2 loại parity là parity chẵn (even parity) và parity lẻ (odd parity). Parity
chẵn nghĩa là số lượng số 1 trong dữ liệu bao gồm bit parity luôn là số chẵn. Ngược
lại tổng số lượng các số 1 trong parity lẻ luôn là số lẻ.
Stop bits: Stop bits là một hoặc các bit báo cho thiết bị nhận rằng một gói dữ
liệu đã được gởi xong. Sau khi nhận được stop bits, thiết bị nhận sẽ tiến hành kiểm
tra khung truyền để đảm bảo tính chính xác của dữ liệu. Stop bits là các bits bắt buộc
xuất hiện trong khung truyền, trong AVR USART có thể là 1 hoặc 2 bits, trong các
thiết bị khác Stop bits có thể là 2.5 bits.[2]
Hình 2.26: Mô hình sản phẩm thực tế.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
54
CHƯƠNG 3: PHẦN MỀM LẬP TRÌNH HỆ THỐNG
3.1 Các phần mềm lập trình sử dụng cho vi điều khiển
Trong đề tài này em sử dụng các phần mềm chuyên ngành sau: Proteus 8.0 để
vẽ sơ đồ nguyên lý, sơ đồ mạch in cho khối điều khiển trung tâm, chạy thử mô phỏng
và phần mềm Codevision AVR V2.05.0 để lập trình cho vi điều khiển Atmega 32.
3.1.1 Phần mềm Proteus 8.0
Thanh trình đơn
Thanh tác vụ
Tùy chỉnh hiển thị
Thanh công cụ
Vùng làm việc chính
Vùng chọn linh kiện
Nút chạy mô phỏng
Tọa độ di chuyển
Hình 3.1: Giao diện chính của phần mềm Proteus 8.0.
Phần mềm Proteus 8.0 do hãng Labcenter Electronics sản xuất, một công ty sản
xuất phần mềm CAD của Anh và được hàng nghìn người sử dụng trên khắp thế giới.
Với ISIS chúng ta có thể mô phỏng hầu hết các dạng mạch điện tử và lần đầu tiên ở
các chương trình CAD, ISIS cho phép thiết kế hoàn chỉnh một hệ thống vi điều khiển
bao gồm toàn bộ mạch phần cứng giao diện bên ngoài, sau đó mô phỏng sự tương tác
giữa chúng. ISIS còn đặt quan tâm đến việc thiết kế mạch in (Printed Circuit BoardPCB) với sự hổ trợ kết xuất mạch điện sang ARES hoặc một chương trình CAD
Layout khác để vẽ mạch in.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
55
Khoa Điện – Điện Tử
Đối với các sinh viên mới của ngành điện tử, ISIS tạo một sự hấp dẫn bằng một
hệ thống chương trình đầy đủ công cụ mạnh mẽ và đầy màu sắc, nhiều phông chữ.
Kèm theo đó là một thư viện các thiết kế mẫu đa dạng theo thứ tự từ đơn giản đến
phức tạp để các bạn tiếp tục phát triển theo ý tưởng của mình.[5]
3.1.2 Phần mềm Codevision AVR V2.05.0
Thanh trình đơn
Thanh tác vụ
Các hàm có sẵn
Vùng viết chương trình
Các project
Thông báo lỗi và cảnh báo
Hình 3.2: Giao diện của phần mềm Codevision AVR V2.05.0
Có rất nhiều phần mềm lập trình cho AVR như: Codevision AVR, AVR Studio,
ICCAVR. Bascom AVR,…trong đó CodeVision AVR là phần mềm khá phổ biến.
CodeVision AVR là trình biên dịch C rất tốt cho lập trình vi điều khiển AVR.
CodeVision rất hữu dụng vì đã tích hợp nhiều thư viện hỗ trợ lập trình rất thiết thực.
Ngoài ra CodeVision còn có khả năng tự động sinh mã tùy theo cấu hình ban đầu của
người sử dụng nên giảm công sức lập trình đi rất nhiều. Mã sinh ra chỉ là một tập tin
có đuôi .c duy nhất với các chú thích rõ ràng và dễ hiểu giúp người dùng tùy biến mã
nguồn theo yêu cầu của riêng mình.[6]
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
56
Khoa Điện – Điện Tử
3.2 Công cụ hỗ trợ lập trình Android
Mới đây Google vừa cho ra mắt bộ công cụ Android SDK dành riêng cho lập
trình Android. Bộ SDK này Google đã giúp chúng ta tích hợp mọi thứ, không cần
nhiều công đoạn như các cách cài đặt cũ, phiên bản mới này chỉ cần tải về và chạy
trực tiếp. Android SDK Manager, Virtual Device Manager tích hợp sẵn vào trong
Eclips. Đặc biệt không bị một số lỗi khi khởi tạo tập tin .xml như trong các phiên bản
trước, thiết lập máy ảo đa dạng, đa thanh phần và một số thứ khác…
3.2.1 Java SE Development Kit
3.2.1.1 Tổng quát về Java SE Development Kit
Java SE Development Kit là bộ công cụ dành cho người phát triển ứng dụng
bằng ngôn ngữ lập trình Java. JDK tập hợp những công cụ phần mềm được phát triển
bởi Sun Microsystems dành cho các nhà phát triển phần mềm, dùng để viết những
Applet Java hay những ứng dụng Java, bộ công cụ này được phát hành miễn phí gồm
có trình biên dịch, trình thông dịch và trình giúp sửa lỗi (Debugger, trình chạy Applet
và tài liệu nghiên cứu).
Kể từ khi ngôn ngữ Java ra đời, JDK là bộ phát triển phần mềm thông dụng nhất
cho Java. Ngày 17 tháng 11 năm 2006, hãng Sun tuyên bố JDK sẽ được phát hành
dưới giấy phép GNU General Public License (GPL), JDK trở thành phần mềm tự do.
Việc này đã được thực hiện phần lớn ngày 8 tháng 5 năm 2007 và mã nguồn được
đóng góp cho OpenJDK.
JDK là hệ thống nền tảng Java và thường được cài đặt lên các máy trạm, máy
PC hay laptop để tiện lợi cho các nhà lập trình tiến hành phát triển các ứng dụng có
nền tảng Java. Cho nên dù muốn hay không thì khi lập trình với ứng dụng Java trên
máy trạm hoặc laptop (PC) thì trên máy phải có Java SE Development Kit (JDK).
Hiện tại bản JDK 8u45 được xem là phiên bản mới nhất với nhiều tính năng
vượt trội hơn so với các phiên bản đầu tiên.
3.2.1.2 Cài đặt Java SE Development Kit
Download SDK:
-
Bước 1: Truy cập vào đường dẫn sau.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
57
http://www.oracle.com/technetwork/java/javase/downloads/index.html
- Bước 2: Nhấn chọn Download Java Platform (JDK) 8u45.
Hình 3.3: Lựa chọn Java Platform.
-
Bước 3: Chọn Accept License Agreement sau đó chọn bản JDK phù hợp với
Windown 32 bit/64 bit để tải về máy.
Hình 3.4: Chọn phiên bản JDK phù hợp với Windowns.
Cài đặt SDK:
-
Bước 1: Kích đúp chuột trái vào tập tin jdk-8u45-windows-i586.exe vừa tải về
máy. Xuất hiện hộp thoại nhấn chọn Yes để cài đặt.
-
Bước 2: Nhấn chọn Next.
-
Bước 3: Nhấn chọn Next để tiếp tục cài đặt.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
58
Khoa Điện – Điện Tử
-
Bước 4: Xuất hiện hộp thoại, nhấn chọn Next để tiếp tục cài đặt.
-
Bước 5: Xuất hiện hộp thoại nhấn chọn Close để kết thúc quá trình cài đặt.
3.2.2 Eclipse IDE
3.2.2.1 Tổng quát Eclipse IDE
Về nguyên tắc chúng ta có thể dùng bất kì môi trường phát triển phần mềm
Java nào yêu thích để phát triển ứng dụng. Thậm chí có thể dùng Notepad của
Windows để viết các mã lệnh nhưng làm thế sẽ tốn rất nhiều thời gian và khá phức
tạp. Đối với Android, theo như Google khuyến cáo thì dùng Eclipse để có sự hỗ trợ
tối đa từ các công cụ lập trình Android mà Google cung cấp. Tổ chức OHA và
Google khuyến cáo dùng Eclipse, vì Eclipse có thể thực thỉ trên nhiều hệ điều hành
khác nhau mà không cần cài đặt trên chúng. Toàn bộ gói ứng dụng Eclipse có thể tải
về tại địa chỉ sau: https://developer.android.com/sdk/index.html#top. Sau khi tải về
giải nén và chạy trực tiếp không cần phải cài đặt như các bản cũ.
Có Elipse và JDK ta có thể lập trình ứng dụng Java ngay trên các máy trạm được.
Do chúng ta lập trình ứng dụng Android nên cần JDK để có nền tảng để lập trình Java,
có Eclipse IDE để lập trình ứng dụng trên đó, bây giờ ta cần thêm một Android SDK để
hỗ trợ viết ứng dụng đặc thù Android với những công cụ hỗ trợ của nó cùng với Eclipse
có thể viết ứng dụng Android hoàn chỉnh.
Trong ADT Bundle, khởi động Eclipse, giao diện ban đầu như hình 3.5.
Hình 3.5: Chọn Workspace cho việc phát triển ứng dụng trên Android.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
59
Chúng ta chọn Workspace cho việc phát triển ứng dụng trên Android, ở đây sẽ
là nơi mà chúng ta dùng để lưu trữ các dự án hay còn gọi là Project Android mà mình
tạo ra. Như ở trên ta chọn là ổ đĩa E, thư mục chứa là Eclipse. Công việc này chỉ cần
thực hiện một lần khi lần đầu tiên chúng ta khởi động Eclipse sau khi cài đặt. Sau khi
lựa chọn nơi lưu trữ, đợi Eclipse khởi động xong sẽ có giao diện như hình 3.6.
Hình 3.6: Giao diện Eclipse.
3.2.2.2 Tích hợp Android SDK Manager vào Eclipse
Android SDK Manager là một môi trường để phát triển các ứng dụng cho hệ
điều hành Android. Phần mềm này chứa các phiên bản Android, các hàm API cần
thiết cũng như các công cụ hỗ trợ lập trình khác, cho phép bạn tạo các ứng dụng sử
dụng máy ảnh của điện thoại di động, dữ liệu GPS, Wi-Fi, truy cập Bluetooth, 3G,…
Android SDK Manager tương tác với các trình duyệt và hỗ trợ làm việc với các
định dạng khác nhau của tập tin âm thanh hoặc video. Phần mềm này cũng được xây
dựng trong mô đun cho phép để tiến hành thử nghiệm các ứng dụng được phát triển
theo các phiên bản khác nhau của Android. Các tính năng khác của Android SDK
Manager được thực hiện bằng cách kết nối các công cụ khác nhau và bổ sung.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
60
Khoa Điện – Điện Tử
Để tích hợp Android SDK Manager vào Eclipde ta làm như sau:
-
Bước 1: Trên giao diện Eclipse chọn menu Windown, sau đó chọn Android
SDK Manager như hình 3.7.
Hình 3.7: Tham chiếu đến Android SDK.
-
Bước 2: Giao diện của Android SDK Manager sẽ như hình 3.8, danh sách các
packages sẽ hiển thị với các trạng thái “Installed”, “Not installed” hoặc “Update
available …”. Chúng ta muốn lập trình với Android phiên bản nào thì kích chọn và
nhấn Installed.
Hình 3.8: Lựa chọn các gói Android SDK (API).
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
-
61
Khoa Điện – Điện Tử
Bước 4: Cửa sổ tiếp theo sẽ xuất hiện với danh sách các thành phần mà ta đã
chọn trước đó, hãy kiểm tra lại lần nữa và khi đã thấy đầy đủ thì nhấn Accept License
và sau đó là Install. Quá trình tải về sẽ bắt đầu, và khi tải xong, tất cả sẽ được cài đặt
một cách tự động.
Hình 3.9: Cài đặt Android SDK Manager.
3.2.3 Android Virtual Device
Android Virtual Device cho phép lập trình viên tạo và quản lí các thiết bị ảo.
Cài đặt máy ảo Android Virtual Device.
-
Bước 1: Trên giao diện Eclipse chọn menu Windown, sau đó chọn Android
Virtual Device.
Hình 3.10: Chọn cài đặt Android Virtual Device.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
62
Khoa Điện – Điện Tử
-
Bước 2: Chọn Create để tiến hành tạo máy ảo.
-
Bước 3: Android Virtual Device (AVD) xuất hiện, khi đó hãy điền các thông
tin cấu hình cho máy ảo theo hình 3.11 và nhấn OK.
Hình 3.11: Cài đặt thông số cho Android Virtual Device.
-
Bước 4: Một Android Virtual Device sẽ xuất hiện tại danh sách AVD Name,
đó là cái mà bạn vừa tạo ở trên. Bây giờ hãy nhấn vào nó và chọn Start….
Hình 3.12: Khởi động Android Virtual Device.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
-
63
Khoa Điện – Điện Tử
Bước 5: Hộp thoại Launch Options sẽ xuất hiện, yêu cầu bạn thiết lập kích
thước của máy ảo, hãy thay đổi thông số theo ý muốn tại nhóm tùy chỉnh Scale display
to real size hoặc chọn Full màn hình bằng cách bỏ đánh dấu vào tùy chọn đó. Sau đó
nhấn Lauch.
Hình 3.13: Thiết lập kích thước màn hình cho Android Virtual Device.
Sau khi nhấn Lauch, máy ảo sẽ bắt đầu khởi động. Có thể sẽ mất ít phút cho lần
sử dụng đầu tiên. Khi đã khởi động thành công, chúng ta đã có một màn hình “thiết
bị ảo” chạy Android để khám chạy các ứng dụng.
Hình 3.14: Android Virtual Device được khởi tạo.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
64
Khoa Điện – Điện Tử
3.3 Lưu đồ thuật toán điều khiển bảng Led ma trận
Trong đề tài này em sử dụng 8 mô đun Led ma trận 16 x 32 ghép lại thành một
bảng cở 32 x 128 (32 hàng và 128 cột). Mỗi ký tự sẽ được hiển thị trong một khung
cở 8 x 8. Để hiển thị ký tự lên bảng Led ma trận ta có 2 phương pháp là quét theo
hàng hoặc quét theo cột. Ở đây ta dùng phương pháp quét theo hàng và xuất dữ liệu
ra cột. Quá trình quét theo hàng là ta gửi tín hiệu cho phép đến 4 hàng trong từng thời
điểm. Cùng lúc đó ta gửi dữ liệu cột đến 8 hàng. Trong đề tài này tín hiệu cho phép
cột là mức logic 1 và dữ liệu hàng tương ứng là mức 0 (mức 0 ứng với Led sáng và
mức 1 là tắt). Nguyên tắc quét Led ma trận như sau.
-
Đầu tiên ta đưa dữ liệu cần hiển thị đến 128 cột.
-
Kích hoạt 4 hàng đầu tiên và các Led trên mô đun Led ma trận tương ứng sẽ
sáng. Tạo một thời gian trễ để duy trì cho Led sáng, sau đó tắt 4 hàng đầu tiên.
-
Gửi tiếp giá trị dữ liệu 128 cột của 4 hàng tiếp theo, cho phép 4 hàng tiếp theo
tích cực, tạo trễ và lại 4 hàng tiếp theo.
-
Quá trình quét đó cứ tiếp diễn cho đến khi chúng ta quét hết 32 hàng của bảng
Led ma trận. Việc quét hiển thị này diễn ra trong thời gian rất ngắn, cỡ vài chục mili
giây, ta sẽ thấy hình ảnh hiển thị trên bảng Led.
Trong mỗi thời điểm chỉ có 4 hàng được sáng nhưng do thời gian quét rất nhanh
và do hiện tượng lưu ảnh trên võng mạc của mắt nên ta thấy hình ảnh xuất hiện liên
tục. Tần sổ quét cần phải đảm bảo sao cho đủ hoặc lớn hơn 25hình/s.
Từ những phân tích trên ta có các lưu đồ thuật toán điều khiển bảng Led ma
trận như sau.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
65
Bắt đầu
Smartphone
truyền dữ
liệu
Sai
Đúng
Vi điều khiển nhận, so sánh và giải mã tín hiệu
Giải mã dữ liệu cột, dữ liệu hàng
Hiển thị dữ liệu ra Led ma trận
Smartphone
truyền dữ
liệu
Đúng
Sai
Hiển thị hết dữ liệu truyền xuống ra Led ma trận
Lưu đồ 3.1: Lưu đồ thuật toán tổng quát quét Led ma trận.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
66
Bắt đầu
i=0; lap=0; hàng=0
Truyền bit dữ liệu vào 74HC595;
i = i+1
Sai
i=8
Đúng
i=0; lap=lap+1
Đúng
lap=16
Sai
i=0
hàng=hàng+1
Đúng
hàng=4
Sai
i = 0, lap = 0
Lưu đồ 3.2: Lưu đồ thuật toán quét hàng và cột của Led ma trận.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
67
Bắt đầu
vitri=0; khai báo số phần tử của mảng kitu: n
i=vitri; lap=0; bitthem=0
kitu[i]=(kitu[i](8-bitthem)
Truyền 8 bit dữ liệu kitu[i] vào 74HC595; i = i+1
Sai
i=8
Đúng
i=0; bitthem = bitthem+1
bitthem=8
Sai
Đúng
Vitri = vitri+1
Vitri = n
Sai
Đúng
Vitri = 0
Lưu đồ 3.3: Lưu đồ thuật toán dịch chữ từ trái sang phải.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
68
Khoa Điện – Điện Tử
3.4 Giao diện trên Smartphone Android giao tiếp với vi điều khiển
Phần mềm chạy trên Smartphone Android giao tiếp với vi điều khiển gồm có 2
giao diện chính: Trang đăng nhập và trang điều khiển.
Trang đăng nhập
Trang đăng nhập sẽ xuất hiện đầu tiên khi ta chạy ứng dụng, nó cho phép chúng
ta nhập hai thông số là: Tên đăng nhập (UserName) và mật khẩu đăng nhập
(PassWord). Nếu hai thông số đó không hợp lệ thì ta sẽ không thể khởi động được
trang điều khiển.
Trang điều khiển
Trang điều khiển sẽ xuất hiện khi ta chạy ứng dụng và hoàn thành được các
yêu cầu của trang đăng nhập. Khi trang điều khiển được khởi động nếu như
Smartphone của chúng ta chưa kích hoạt tính năng Bluetooth thì nó sẽ đưa ra yêu cầu
để kích hoạt Bluetooth của máy.
Trang điều khiển cho phép chúng ta nhập hai thông số là: Chuỗi cần hiển thị
trên Led ma trận và tốc độ chạy của chuỗi đó. Sau khi nhập đầy đủ dữ liệu nhấn Send
thì tất cả dữ liệu được xử lý và gửi xuống cho vi điều khiển Atmega 32 thông qua mô
đun Bluetooth HC-06, vi điều khiển Atmega 32 nhận dữ liệu để xuất tín hiệu điều
khiển.
Hình 3.15: Giao diện trên Smartphone Android giao tiếp với vi điều khiển.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
69
Khoa Điện – Điện Tử
KẾT LUẬN VÀ PHƯƠNG HƯỚNG PHÁT TRIỂN ĐỀ TÀI
Kết luận
Qua quá trình học tập, nghiên cứu và thực hiện đồ án tốt nghiệp: “Nghiên cứu
thiết kế chế tạo bộ điều khiển Led ma trận bằng Smartphone chạy hệ điều hành
Android” em có một số kết luận sau:
Đồ án đã hoàn thành được các nội dung theo yêu cầu của quyết định làm đồ
án tốt nghiệp 2015 được giao. Nghiên cứu các mô đun Led ma trận, mô đun Bluetooth
HC-06, thiết kế được bảng quang báo bằng mô đun Led ma trận có khích thước 32 x
128 và đã thiết kế được bộ điều khiển Led ma trận hoạt động ổn định, giao tiếp tốt
với Smartphone qua Bluetooth.
Đồ án đã tìm hiểu được Smartphone, nghiên cứu ứng dụng hệ điều hành
Android, từ đó xây dựng được giao diện giao tiếp giữa vi điển khiển AVR và
Smartphone chạy hệ điều hành Android với giao diện bắt mắt, dễ dàng sử dụng với
người dùng. Cập nhật và thay đổi được nội dung hiển thị, thay đổi được tốc độ chạy
của nội dung cần hiển thị trên bảng Led Ma trận qua Bluetooth.
Như vậy, so sánh với các mục tiêu, yêu cầu cần đạt được cơ bản đồ án đã hoàn
thành. Sản phẩm hoàn thiện, hoạt động ổn định và hiệu quả trong thực tiễn.
Phương hướng phát triển đề tài
Từ những kiến thức và kết quả đạt được trong quá trình thực hiện đồ án em có
những hướng sau nhằm phát triển đề tài cũng như nâng cao hiệu quả của bảng quang
báo Led ma trận:
Nghiên cứu phát triển theo hướng sử dụng mô đun ethernet để cập nhật dữ
liệu trực tiếp qua Internet, như vậy ở bất cứ ở đâu chỉ cần có Internet và Smartphone
là ta có thể diều khiển được bảng quang báo Led ma trận.
Hiện nay những chiếc Smartphone cấu hình ngày càng mạnh, tốc độ xử lý
cũng như bộ nhớ của máy lớn, đều tích hợp chuẩn 3G, rất tiện cho việc điều khiển
các thiết bị nhúng qua mạng.
Nghiên cứu các mô đun Led ma trận đa sắc để có thể tạo ra nhiều nội dung
với màu sắc hiển thị khác nhau, tạo được nhiều hiệu ứng bắt mắt hơn.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
70
Khoa Điện – Điện Tử
Do đó, có thể nghiên cứu và xây dựng giao diện ứng dụng cho Smartphone điều
khiển bảng quang báo Led ma trận qua Internet, để không phải giới hạn về khoảng
cách, hiển thị được nhiều màu sắc và hiệu ứng khác nhau.
Do thời gian thực hiện còn giới hạn nên đồ án vẫn có nhiều phần bị hạn chế và
thiếu sót. Rất mong có được những ý kiến đánh giá, góp ý của quý Thầy, Cô để đồ
án hoàn thiện hơn.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
71
Khoa Điện – Điện Tử
TÀI LIỆU THAM KHẢO
[1] Nguyễn Văn Giới (2011), Báo cáo thực tập tốt nghiệp trường đại học Công Nghiệp Hà
Nội.
[2] http://www.hocavr.com/index.php/vi/lectures/lamquenavr truy cập cuối cùng
ngày 24/05/2015.
[3] http://www.atmel.com. truy cập cuối cùng ngày 21/05/2015.
[4] http://machtudong.vn/sanpham/Bluetooth-module-3v-55v-ket-noi-serial-slavehc-06.html truy cập cuối cùng ngày 23/04/2015.
[5] https://www.tailieu.vn. truy cập cuối cùng ngày 19/05/2015.
[6] https://www.ebook.edu.vn. truy cập cuối cùng ngày 10/03/2015.
[7] http://thuthuatmobi.com/android-lich-su-hinh-thanh-va-phat-trien-dang-khenngoi.html truy cập cuối cùng ngày 28/05/2015.
[8] http://vi.wikipedia.org/wiki/Android truy cập cuối cùng ngày 20/05/2015.
[9] http://techcrunch.com/2012/09/05/eric-schmidt-there-are-now-1-3-millionandroid-device-activations-per-day/ truy cập cuối cùng ngày 28/05/2015.
[10] http://www.quangcao69 truy cập cuối cùng ngày 20/04/2015.
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
72
PHỤ LỤC
Chương trình xây dựng giao diện trang đăng nhập
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
73
Khoa Điện – Điện Tử
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
77
Chương trình xử lý trang đăng nhập
package com.huynguyen;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
Button BtLogin;
EditText edtUser, edtPass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Init();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void Init() {
edtUser = (EditText) findViewById(R.id.edtTen);
edtPass = (EditText) findViewById(R.id.edtPass);
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
78
BtLogin = (Button) findViewById(R.id.btLogin);
}
public void On_Click_Login(View v) {
final Context context = this;
String User = edtUser.getText().toString();
String Pass = edtPass.getText().toString();
if (User.equals("xxxxxxxxx") && Pass.equals("xyxyyxy")) {
Intent intent = new Intent(context, MainActivity_2.class);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(),"Sai mật khẩu hoặc tên đăng nhập
vui lòng kiểm tra lại",Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Chương trình xây dựng giao diện trang điều khiển
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
83
Khoa Điện – Điện Tử
Chương trình xử lý trang điều khiển
package com.huynguyen;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.Set;
import java.util.UUID;
import android.app.Activity;
import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity_2 extends Activity {
private static final String TAG = "Nguyễn Khắc Huy 53DDT";
Button btSent, btCanel;
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
84
TextView txtArduino;
EditText inputString, inputSpeed;
Handler h;
final int RECIEVE_MESSAGE = 1;
private BluetoothAdapter btAdapter = null;
private BluetoothSocket btSocket = null;
private StringBuilder sb = new StringBuilder();
private ConnectedThread mConnectedThread;
private int length = 0;
private String[] m_DataEndCode;
private String textToSend = "";
private String speedToSend = "1";
private static final UUID MY_UUID = UUID.fromString("00001101-0000-10008000-00805F9B34FB");
private static String address = "00:15:FF:F2:19:5F"
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
btSent = (Button) findViewById(R.id.btSent);
btCanel = (Button) findViewById(R.id.btCanel);
inputString = (EditText) findViewById(R.id.edtInput);
inputSpeed = (EditText) findViewById(R.id.edtSpeed);
h = new Handler() {
@Override
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case RECIEVE_MESSAGE:
byte[] readBuf = (byte[]) msg.obj;
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
85
String strIncom = new String(readBuf, 0, msg.arg1);
sb.append(strIncom);
int endOfLineIndex = sb.indexOf("\r\n");
if (endOfLineIndex > 0) {
String sbprint = sb.substring(0, endOfLineIndex);
sb.delete(0, sb.length());
txtArduino.setText("Data from Arduino: " + sbprint);
btSent.setEnabled(true);
btCanel.setEnabled(true);
}
break;
}
};
};
btAdapter = BluetoothAdapter.getDefaultAdapter();
checkBTState();
btSent.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String text = "
áab111cdecb1áebd1e1abca1dae1bdca1debca11
";
String bufferString = "
";
if(inputString.getText().toString() != "")
textToSend = inputString.getText().toString();
if(inputSpeed.getText().toString() != "")
speedToSend = inputSpeed.getText().toString();
text = bufferString + textToSend + bufferString;
Toast.makeText(getBaseContext(), "Text "+textToSend,
Toast.LENGTH_SHORT).show();
length = text.length();
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
86
Khoa Điện – Điện Tử
m_DataEndCode = new String[length];
Toast.makeText(getBaseContext(), "Chieu dai chuoi "+length,
Toast.LENGTH_SHORT).show();
mConnectedThread.sendDataBeginEnd("@");
int mod = length / 255;
int div = length % 255;
Toast.makeText(getBaseContext(), "Phan nguyen "+mod,
Toast.LENGTH_SHORT).show();
Toast.makeText(getBaseContext(), "Phan du "+div,
Toast.LENGTH_SHORT).show();
mConnectedThread.sendData(String.valueOf(mod));
mConnectedThread.sendData(String.valueOf(div));
Toast.makeText(getBaseContext(), "speedToSend "+speedToSend,
Toast.LENGTH_SHORT).show();
mConnectedThread.sendData(speedToSend);
convertString(text);
SystemClock.sleep(1000);
for(int j = 0; j < m_DataEndCode.length; j++)
{
if(j > 15 && j < length - 16)
Toast.makeText(getBaseContext(), "ky tu thu "+j+"
m_DataEndCode "+m_DataEndCode[j], Toast.LENGTH_SHORT).show();
mConnectedThread.sendData(m_DataEndCode[j]);
}
mConnectedThread.sendDataBeginEnd("#");
}
});
}
public void On_Click_Thoat(View v) {
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
87
Khoa Điện – Điện Tử
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Xác nhận?");
builder.setMessage("Bạn có muốn thoát không?");
builder.setIcon(R.drawable.iconcancel);
builder.setPositiveButton("Có", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),
"Chương trình đã thoát!", Toast.LENGTH_SHORT).show();
finish();
}
});
builder.setNegativeButton("Không", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
public String[] convertString( String text)
{
for(int i = 0; i < length; i++)
{
switch(text.charAt(i)) {
case ' ':
m_DataEndCode[i] = "52";
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
88
Khoa Điện – Điện Tử
break;
case 'a':
m_DataEndCode[i] = "0";
break;
case 'b':
m_DataEndCode[i] = "2";
break;
case 'c':
m_DataEndCode[i] = "4";
break;
case 'd':
m_DataEndCode[i] = "6";
break;
case 'e':
m_DataEndCode[i] = "8";
break;
case 'f':
m_DataEndCode[i] = "10";
break;
case 'g':
m_DataEndCode[i] = "12";
break;
case 'h':
m_DataEndCode[i] = "14";
break;
case 'i':
m_DataEndCode[i] = "16";
break;
case 'j':
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
89
Khoa Điện – Điện Tử
m_DataEndCode[i] = "18";
break;
case 'k':
m_DataEndCode[i] = "20";
break;
case 'l':
m_DataEndCode[i] = "22";
break;
case 'm':
m_DataEndCode[i] = "24";
break;
case 'n':
m_DataEndCode[i] = "26";
break;
case 'o':
m_DataEndCode[i] = "28";
break;
case 'p':
m_DataEndCode[i] = "30";
break;
case 'q':
m_DataEndCode[i] = "32";
break;
case 's':
m_DataEndCode[i] = "34";
break;
case 'r':
m_DataEndCode[i] = "36";
break;
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
90
Khoa Điện – Điện Tử
case 't':
m_DataEndCode[i] = "38";
break;
case 'u':
m_DataEndCode[i] = "40";
break;
case 'v':
m_DataEndCode[i] = "42";
break;
case 'w':
m_DataEndCode[i] = "44";
break;
case 'x':
m_DataEndCode[i] = "46";
break;
case 'y':
m_DataEndCode[i] = "48";
break;
case 'z':
m_DataEndCode[i] = "50";
break;
case 'á':
m_DataEndCode[i] = "54";
break;
case 'à':
m_DataEndCode[i] = "56";
break;
case 'ả':
m_DataEndCode[i] = "58";
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
91
Khoa Điện – Điện Tử
break;
case 'ã':
m_DataEndCode[i] = "60";
break;
case 'ạ':
m_DataEndCode[i] = "62";
break;
case 'â':
m_DataEndCode[i] = "64";
break;
case 'ấ':
m_DataEndCode[i] = "66";
break;
case 'ầ':
m_DataEndCode[i] = "68";
break;
case 'ẩ':
m_DataEndCode[i] = "70";
break;
case 'ẫ':
m_DataEndCode[i] = "72";
break;
case 'ậ':
m_DataEndCode[i] = "74";
break;
case 'ă':
m_DataEndCode[i] = "76";
break;
case 'ắ':
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
92
Khoa Điện – Điện Tử
m_DataEndCode[i] = "78";
break;
case 'ằ':
m_DataEndCode[i] = "80";
break;
case 'ẳ':
m_DataEndCode[i] = "82";
break;
case 'ẵ':
m_DataEndCode[i] = "84";
break;
case 'ặ':
m_DataEndCode[i] = "86";
break;
case 'đ':
m_DataEndCode[i] = "88";
break;
case 'é':
m_DataEndCode[i] = "90";
break;
case 'è':
m_DataEndCode[i] = "92";
break;
case 'ẻ':
m_DataEndCode[i] = "94";
break;
case 'ẽ':
m_DataEndCode[i] = "96";
break;
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
93
Khoa Điện – Điện Tử
case 'ẹ':
m_DataEndCode[i] = "98";
break;
….
case '4':
m_DataEndCode[i] = "216";
break;
case '5':
m_DataEndCode[i] = "218";
break;
case '6':
m_DataEndCode[i] = "220";
break;
case '7':
m_DataEndCode[i] = "222";
break;
case '8':
m_DataEndCode[i] = "224";
break;
case '9':
m_DataEndCode[i] = "226";
break;
case '%':
m_DataEndCode[i] = "228";
break;
case 'ý':
m_DataEndCode[i] = "230";
break;
default:
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
94
break;
}
}
return m_DataEndCode;
}
private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws
IOException {
if(Build.VERSION.SDK_INT >= 10){
try {
final Method m =
device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord",
new Class[] { UUID.class });
return (BluetoothSocket) m.invoke(device, MY_UUID);
} catch (Exception e) {
Log.e(TAG, "Could not create Insecure RFComm Connection",e);
}
}
return device.createRfcommSocketToServiceRecord(MY_UUID);
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "...onResume - try connect...");
BluetoothDevice device = null;
Set pairedDevices = btAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice devices : pairedDevices) {
device = devices;
}
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
95
}
Log.d(TAG, "...onResume - try connect..."+device);
try {
btSocket = createBluetoothSocket(device);
} catch (IOException e) {
errorExit("Fatal Error", "In onResume() and socket create failed: " +
e.getMessage() + ".");
}
btAdapter.cancelDiscovery();
Log.d(TAG, "...Connecting...");
try {
btSocket.connect();
Log.d(TAG, "....Connection ok...");
} catch (IOException e) {
try {
btSocket.close();
} catch (IOException e2) {
errorExit("Fatal Error", "In onResume() and unable to close socket during
connection failure" + e2.getMessage() + ".");
}
}
Log.d(TAG, "...Create Socket...");
mConnectedThread = new ConnectedThread(btSocket);
mConnectedThread.start();
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "...In onPause()...");
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
try
Khoa Điện – Điện Tử
96
{
btSocket.close();
} catch (IOException e2) {
errorExit("Fatal Error", "In onPause() and failed to close socket." +
e2.getMessage() + ".");
}
}
private void checkBTState() {
if(btAdapter==null) {
errorExit("Fatal Error", "Bluetooth not support");
} else {
if (btAdapter.isEnabled()) {
Log.d(TAG, "...Bluetooth ON...");
} else {
Intent enableBtIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 1);
}
}
}
private void errorExit(String title, String message){
Toast.makeText(getBaseContext(), title + " - " + message,
Toast.LENGTH_LONG).show();
finish();
}
private class ConnectedThread extends Thread {
private final InputStream mmInStream;
private final OutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket) {
InputStream tmpIn = null;
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
97
Khoa Điện – Điện Tử
OutputStream tmpOut = null;
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) { }
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
@Override
public void run() {
byte[] buffer = new byte[256];
int bytes;
while (true) {
try {
bytes = mmInStream.read(buffer);
h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();
} catch (IOException e) {
break;
}
}
}
public void write(String message) {
Log.d(TAG, "...Data to send: " + message + "...");
byte[] msgBuffer = message.getBytes();
try {
mmOutStream.write(msgBuffer);
} catch (IOException e) {
Log.d(TAG, "...Error data send: " + e.getMessage() + "...");
}
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
Đồ án tốt nghiệp
Khoa Điện – Điện Tử
98
}
public void sendDataBeginEnd(String message) {
Log.d(TAG, "...Data to send: " + message + "...");
byte[] msgBuffer = message.getBytes();
try {
mmOutStream.write(msgBuffer);
} catch (IOException e) {
Log.d(TAG, "...Error data send: " + e.getMessage() + "...");
}
}
public void sendData(String message) {
Log.d(TAG, "...Data to send: " + message + "...");
int bodyMessage = Integer.parseInt(message);
byte msgBuffer = (byte)(bodyMessage & 0xFF);
try {
mmOutStream.write(msgBuffer);
} catch (IOException e) {
Log.d(TAG, "...Error data send: " + e.getMessage() + "...");
}
}
}
}
GVHD: Th.s Nhữ Khải Hoàn
SVTH: Nguyễn Khắc Huy
[...]... Điện Tử CHƯƠNG 1: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH ANDROID VÀ LED TRONG QUANG BÁO 1.1 Tổng quan về hệ điều hành Android 1.1.1 Giới thiệu về hệ điều hành Android Android là một hệ điều hành dành cho thiết bị di động như điện thoại, máy tính bảng và netbooks Android được phát triển bởi Google, dựa trên nền tảng Linux kernel và các phần mềm nguồn mở khác Ban đầu nó đuợc phát triển bởi Android Inc sau đó được Google... sẵn cho Android và đang liên tục đuợc cập nhật Ứng dụng được GVHD: Th.s Nhữ Khải Hoàn SVTH: Nguyễn Khắc Huy Đồ án tốt nghiệp 2 Khoa Điện – Điện Tử phát triển bằng ngôn ngữ Java kết hợp với thư viện Java có sẵn của Google Các nhà phát triển ứng dụng có thể sử dụng máy tính chạy hệ điều hành Windows hoặc MacOS hoặc Linux kết hợp với Android SDK để phát triển ứng dụng cho Android Hệ điều hành Android. .. như hạn chế về bộ vi xử lý, dung lượng bộ nhớ, kích thước màn hình, nhu cầu kết nối mạng không dây,… Các thành phần của nhân Linux: - Display Driver: Điều khiển việc hiển thị lên màn hình cũng như thu nhận những điều khiển của người dùng lên màn hình (di chuyển, cảm ứng, ) - Camera Driver: Điều khiển hoạt động của camera, nhận luồng dữ liệu từ camera trả về - Bluetooth Driver: Điều khiển thiết bị... Điện Tử GVHD: Th.s Nhữ Khải... triển phần mềm trên Android, các lập trình viên có thể tải về bộ công cụ phát triển (Android SDK) Bộ công cụ bao gồm các công cụ và các API cần thiết, sử dụng ngôn ngữ Java dễ lập trình 1.1.2 Đặc điểm của hệ điều hành Android Tính mở Android được xây dựng từ dưới đi lên cho phép người phát triển tạo các ứng dụng di động hấp dẫn với đầy đủ các điểm mạnh của các thiết bị cầm tay hiện có Android hoàn toàn... dụng nhằm phân định quyền hạn khi sử dụng tài nguyên, cấu hình phần cứng và hệ thống Android là một hệ điều hành có tính mở, khác với nhiều hệ điều hành di động khác, Android cho phép một ứng dụng của bên thứ ba được phép chạy nền Các ứng dụng đó chỉ có một hạn chế nhỏ đó là nó không được phép sử dụng quá 5 ÷ 10% công suất CPU, điều đó nhằm để tránh độc quyền trong việc sử dụng CPU 1.2.2 Lớp khung tổ... Background chương trình chạy nền hay là dịch vụ - Android là hệ điều hành đa nhiệm, điều đó có nghĩa là trong cùng một thời điểm, có thể có nhiều chương trình cùng chạy một lúc, tuy nhiên với mỗi ứng dụng thì có duy nhất một thực thể (instance) được phép chạy mà thôi Điều đó có tác dụng hạn chế sự lạm dụng tài nguyên, giúp hệ thống hoạt động tốt hơn Các ứng dụng được phân quyền và tự hệ thống sẽ hủy nếu ... NGUYỄN KHẮC HUY NGHIÊN CỨU THIẾT KẾ CHẾ TẠO BỘ ĐIỀU KHIỂN LED MA TRẬN BẰNG SMARTPHONE CHẠY HỆ ĐIỀU HÀNH ANDROID ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Ngành: Công Nghệ Kỹ Thuật Điện – Điện Tử CÁN BỘ HƯỚNG DẪN... bị di động Trong đề tài em sử dụng Smartphone chạy hệ điều hành Android để điều khiển Led ma trận thông qua vi điều khiển AVR Bluetooth Điều khiển Led ma trận Smartphone thuận tiện việc cập nhật... 2: THIẾT KẾ PHẦN CỨNG HỆ THỐNG 2.1 Tổng quát phần cứng 2.1.1 Sơ đồ tổng quát phần cứng Với mục đích tìm hiểu, nghiên cứu thiết kế chế tạo điều khiển Led ma trận Smartphone chạy hệ điều hành Android