37
Hình 3.21: Chu kỳ sống của Activity
Một Activity chủ yếu có 3 chu kỳ chính sau:
- Active hoặc running: Khi Activity là được chạy trên màn hình. Activity này tập trung vào những thao tác của người dùng trên ứng dụng.
- Paused: Activity là được tạm dừng (paused) khi mất focus nhưng người dùng vẫn trông thấy. Có nghĩa là một Activity mới ở trên nó nhưng không bao phủ đầy
38
màn hình. Một Activity tạm dừng là còn sống nhưng có thể bị kết thúc bởi hệ thống trong trường hợp thiếu vùng nhớ.
- Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác. Nó vẫn còn trạng thái và thông tin thành viên trong nó. Người dùng không thấy nó và thường bị loại bỏ trong trường hợp hệ thống cần vùng nhớ cho tác vụ khác.
3.2.5.4 Chu kỳ sông của ứng dụng
Trong một ứng dụng Android có chứa nhiều thành phần và mỗi thành phần đều có một chu trình sống riêng. Và ứng dụng chỉ được gọi là kết thúc khi tất cả các thành phần trong ứng dụng kết thúc. Activity là một thành phần cho phép người dùng giao tiếp với ứng dụng. Tuy nhiên, khi tất cả các Activity kết thúc và người dùng không còn giao tiếp được với ứng dụng nữa nhưng không có nghĩa là ứng dụng đã kết thúc. Bởi vì ngoài Activity là thành phần có khả năng tương tác người dùng thì còn có các thành phần không có khả năng tương tác với người dùng như là Service, Broadcast receiver. Có nghĩa là những thành phần không tương tác người dùng có thể chạy background dưới sự giám sát của hệ điều hành cho đến khi người dùng tự tắt chúng.
3.2.5.5 Các sự kiện trong chu kỳ sống của ứng dụng
Nếu một Activity được tạm dừng hoặc dừng hẳn, hệ thống có thể bỏ thông tin khác của nó từ vùng nhớ bởi việc finish() (gọi hàm finish() của nó), hoặc đơn giản giết tiến trình của nó. Khi nó được hiển thị lần nữa với người dùng, nó phải được hoàn toàn restart và phục hồi lại trạng thái trước. Khi một Activity chuyển qua chuyển lại giữa các trạng thái, nó phải báo việc chuyển của nó bằng việc gọi hàm transition.
Tất cả các phương thức là những móc nối mà bạn có thể override để làm tương thich công việc trong ứng dụng khi thay đổi trạng thái. Tất cả các Activity bắt buộc phải có
onCreate() để khởi tạo ứng dụng. Nhiều Activity sẽ cũng hiện thực onPause() để xác nhận việc thay đổi dữ liệu và mặt khác chuẩn bị dừng hoạt động với người dùng.
3.2.5.6 Thời gian sống cảu ứng dụng
Bảy phương thức chuyển tiếp định nghĩa trong chu kỳ sống của một Activity. Thời gian sống của một Activity diễn ra giữa lần đầu tiên gọi onCreate() đến trạng thái cuối cùng gọi onDestroy(). Một Activity khởi tạo toàn bộ trạng thái toàn cục trong onCreate(), và giải phóng các tài nguyên đang tồn tại trong onDestroy().
3.2.5.7 Thời gian hiển thị của Activity
Visible lifetime của một activity diễn ra giữa lần gọi một onStart() cho đến khi gọi
onStop(). Trong suốt khoảng thời gian này người dùng có thể thấy activity trên màn hình, có nghĩa là nó không bị foreground hoặc đang tương tác với người dùng. Giữa 2 phương thức người dùng có thể duy trì tài nguyên để hiển thị activity đến người dùng.
3.2.5.8 Các phương thức của chu kỳ sống Phương thức: onCreate() Phương thức: onCreate()
- Được gọi khi activity lần đầu tiên được tạo
- Ở đây bạn làm tất cả các cài đặt tĩnh (tạo các view, kết nối dữ liệu đến list…) - Phương thức này gửi qua một đối tượngBundle chứa đựng từ trạng thái
trược của Activity
39
Phương thức: onRestart()
- Được gọi sau khi activity đã được dừng, chỉ một khoảng đang khởi động lần nữa (stared again)
- Luôn theo sau bởi onStart()
Phương thức: onStart()
- Được gọi trước khi một activity visible với người dùng.
- Theo sau bởi onResume() nếu activity đến trạng thái foreground hoặc
onStop() nế nó trở nên ẩn.
Phương thức: onResume()
- Được gọi trước khi activity bắt đầu tương tác với người dùng - Tại thời điểm này activity ở trên dỉnh của stack activity. - Luôn theo sau bởi onPause()
Phương thức: onPause()
- Được gọi khi hệ thống đang resuming activity khác.
- Phương thức này là điển hình việc giữ lại không đổi dữ liệu.
- Nó nên được diễn ra một cách nhanh chóng bởi vì activity kế tiếp sẽ không được resumed ngay cho đến khi nó trở lại.
- Theo sau bởi onResume nếu activity trở về từ ở trước, hoặc bởi onStop nếu nó trở nên visible với người dùng.
- Trạng thái của activity có thể bị giết bởi hệ thống.
Phương thức: onStop()
- Được gọi khi activity không thuộc tầm nhìn của người dùng.
- Nó có thể diễn ra bởi vì nó đang bị hủy, hoặc bởi vì activity khác vữa được resumed và bao phủ nó.
- Được theo sau bởi onRestart() nếu activity đang đở lại để tương tác với người dùng, hoặc onDestroy() nếu activity đang bỏ.
- Trạng thái của activity có thể bị giết bởi hệ thống.
Phương thức: onDestroy()
- Được gọi trước khi activity bị hủy.
- Đó là lần gọi cuối cùng mà activity này được nhận.
- Nó được gọi khác bởi vì activity đang hoàn thành, hoặc bởi vì hệ thống tạm thời bị hủy diệt để tiết kiệm vùng nhớ.
- Bạn có thể phân biệt giữa 2 kịch bản với phương isFinshing().
40
CHƯƠNG 4 : THIẾT KẾ MÔ HÌNH XE ĐIỀU KHIỂN
4.1 PHÂN TÍCH VÀ XÁC ĐỊNH YÊU CẦU
Mục đích của đề tài là thực hiển kết nối và trao đổi dữ liệu giữa ứng dụng trên hệ điều hành android và vi điều khiển xử lý trên xe. Hệ thống cho phép người dùng có thể điều khiển thiết bị bằng Mobile android qua Bluetooth
Yêu cầu đặt ra:
- Ứng dụng trên Mobile Android :
+ Thực hiện gửi dữ liệu thông qua sóng Bluetooth + Ứng dụng có giao diện thân thiện, dễ sử dụng + Ứng dụng hoạt động ổn định
- Thiết bị phần cứng :
+ Nhận giá trị từ module Bluetooth, xử lý và xuất ra driver động cơ để điều khiển xe
+ Driver có nhiệm vụ điều khiện 2 động cơ DC thực hiện các thao tác di chuyển cơ bản.
+ xe hoạt động ổn định
4.2 XÂY DỰNG HỆ THỐNG 4.2.1 Ứng dụng trên Android 4.2.1 Ứng dụng trên Android
41
Hình 4.1 Lưu đồ thuật toán trên Android
Hình ảnh ứng dụng :
42
Hình 4.4 Thông tin ứng dụng Hình 4.5 Dò tìm thiết bị
4.2.2 Thiết kế phần cứng
Sơ đồ khối tổng quát
Hình 4.6 Sơ đồ khối tổng quát
4.2.2.1 Khối xử lý
Mạch xử lý sử dụng vi điều khiển Atmega8 của hãng Atmel. Có nhiệm vụ nhận tín hiệu từ modul Bluetooth, xử lý và xuất dữ liệu cho modul Driver động cơ.
43
- Tốc độ tối đa : 16MHz
- Dung lượng bọ nhớ chương trình : 8Kb - Bộ nhớ EEPROM : 512 Byte
- Dung lượng bộ nhớ RAM : 1Kb
- Bộ nhớ chương trình có khả năng ghi 10.000 lần, bộ nhớ EEPROM có thể ghi 100.000 lần. Hỗ trợ bootloader, có khả năng tự ghi vào bộ nhớ chương trình, cập nhật chương trình cho chip mà không cần mạch nạp.
- Timer 8bit: 2 - Timer 16bit: 1 - ADC: 6 kênh, 10bit
- Giao tiếp: I2C, UART, SPI
- Điện áp hoạt động : 2.7V-5.5V ( Atmega8L), 4.5V-5.5V( Atmega8) Sơ đồ chân
Hình 4.7: Sơ đồ chân Atmega8
-Mạch nguyên lý
44
4.2.2.2 Khối nguồn
Mạch sử dụng nguồn Acquy 6V để cấp cho 2 động cơ DC và từ nguồn Acquy 6V qua IC ổn áp LM7805 để cấp nguồn 5V cho mạch
Hình 4.9: Mạch nguồn
4.2.2.3 Mạch driver động cơ
- IC L298 : là một IC tích hợp nguyên khối gồm 2 mạch cầu H bên trong. Với điện áp làm tăng công suất đầu ra từ 5V-47V, dòng lên đến 4A, L298 rất phù hợp trong những ứng dụng công suất nhỏ như động cơ DC,…
Hình 4.10 : Sơ đồ chân IC L298
+ 4 chân INPUT : IN1, IN2, IN3, IN4 được nối lần lượt với các chân 5,7,10,12 của L298. Đây là các chân nhận tín hiệu điều khiển
45
+ 4 chân OUTPUT: OUT1, OU2, OUT3, OUT4 được nối với các chân 2,3,13,14 của L298. Các chân này được nối với động cơ
+ hai chân ENA và ENB dùng để điều khiển các mạch cầu H trong L298. Nếu mức logic “1” thì cho phép mach cầu H hoạt động, nếu mức logic “0” thì mạch cầu H không hoạt động
+ ENA=0: động cơ không hoạt động
+ ENA=1:
Khi IN1=1, IN2=0 động cơ quay thuận Khi IN1=0, IN2=1 động cơ quay nghịch Tương tự cho 2 chân còn lại
Sơ đồ nguyên lý IC L298
Hình 4.11: Sơ đồ nguyên lý IC L298
- Để thực hiện các yêu cầu quay trái, quay phải, tiến, lùi chúng ta cần thêm mạch logic để tận dụng tối đa 2 cổng PWM của con Atmega8. Ở đây sử dụng cổng NOT ( 74HC04) và cổng ANG ( 74HC08 )
46
Bảng 3: Mô tả trạng thái hoạt động của xe
Trạng thái DIR 1 DIR 2 PWM 1 PWM 2 74HC04 74HC08 DC1 DC2 Tiến 0 0 990 990 1Y:1 2Y:1 1Y:990-2Y:0 3Y:990-4Y:0 Quay thuận 990 Quay thuận 990 Lùi 1 1 990 990 1Y:0 2Y:0 1Y:0-2Y:990 3Y:0-4Y:990 Quay nghịch 990 Quay nghịch 990 Trái 0 0 250 750 1Y:1 2Y:1 1Y:250-2Y:0 3Y:750-4Y:0 Quay thuận 250 Quay thuận 750 Phải 0 0 750 250 1Y:1 2Y:1 1Y:750-2Y:0 3Y:250-4Y:0 Quay thuận 750 Quay thuận 250
Sơ đồ nguyên lý toàn mạch:
47
4.2.3 Lập trình Firmwave
Dựa vào bảng mô tả các trạng thái hoạt động của xe ta có lưu đồ thuật toán sau
Hình 4.14: Lưu đồ thuật toán cho Atmega8
4.2.4 Thiết kế xe
Xe được thiết kế như hình:
48
CHƯƠNG 5: KẾT QUẢ & HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI
5.1 ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN ĐỀ TÀI
Đề tài “ XE ĐIỀU KHIỂN TỪ XA DÙNG ANDROID” , là một đề tài có tính dụng cao, có thể sử dụng cho nhiều bài toán thực tế như điều khiển các thiết bị trong nhà, giám sát và điều khiển các thiết bị báo cháy, báo ga, ổn định nhiệt độ,… Việc xây dựng thiết bị liên quan đến nhiều mảng kiến thức.
Kết quả đạt được:
- Nắm rõ được giao tiếp Bluetooth - Tìm hiểu về hệ điều hành android - Thực hiện viết ứng dụng trên Android
- Thực hiện kết nối và trao đổi dữ liệu giữa Smartphone và Module Bluetooth - Viết firmwave xử lý dùng Atmega8
- Thiết kế mạch driver cho động cơ DC Nhược điểm:
- Chưa nhớ được địa chỉ module Bluetooth vào điện thoại nên mỗi lần kết nối phải tiến hành dò tìm tốn thời gian
- Chưa kiểm soát được xe
- Xe thiết kế khá đơn giản, chưa nhiều tính năng
5.2 HƯỚNG PHÁT TRIỂN
Đề tài đã đạt được một số kết quả nhất định, song để đáp ứng cho một bài toán thực tế còn chưa thật tối ưu.
- Nghiên cứu hệ điều hành thời gian thực để tăng khả năng xử lý, cũng như tính linh hoạt của nó
- Tích hợp thêm nhiều chức năng cho xe như: truyền hình ảnh, đo nhiệt độ, độ ẩm, khoảng cách vật cản, đo độ nghiêng
- Phản hồi được các sự cố về ứng dụng android
TÀI LIỆU THAM KHẢO
1. DKS Groups, Giáo trình vi điều khiển AVR
2. Android Developer, http://developer.android.com/index.html