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

112 1.4K 3
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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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

Ngày đăng: 15/10/2015, 12:30

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan