Linux Kernel

Một phần của tài liệu XE ĐIỀU KHIỂN TỪ XA DÙNG ANDROID (Trang 34 - 48)

Hệ điều hành Android được xây dựng trên bộ nhân Linux 2.6 cho những dịch vụ hệ thống cốt lõi như: security, memory management, process management, network

35

stack, driver model. Bộ nhân này làm nhiệm vụ như một lớp trung gian kết nối phần cứng thiết bị và phần ứng dụng.

Hình 3.19 : mô hình hợp tác giữa máy ảo Dalvik và Navite code

JNI: Java Native Interface (Tương tự khái niệm Application Programming Interface). Java Native Interface: là một bộ framework cho phép mã lệnh viết bằng Java chạy trên máy ảo java có thể gọi hoặc được gọi bởi một ứng dụng viết bằng native code (Ứng dụng được viết cho một phần cứng cụ thể và trên một hệ điều hành cụ thể) hoặc những bộ thư viện viết bằng C, C++ hoặc Assembly.

Bằng cách sử dụng JNI, Android cho phép các ứng dụng chạy trên máy ảo Dalvik có thể sử dụng những phương thức được viết bằng các ngôn ngữ cấp thấp như: C, C++, Assembly. Qua đó các nhà phát triển ứng dụng có thể xây dựng ứng dụng dựa trên các bộ thư viện viết bằng C, C++, Assembly nhằm tăng tốc độ thực thi của ứng dụng hoặc sử dụng những tính năng mức thấp mà ngôn ngữ Java không hổ trợ. Tuy nhiên người phát triển ứng dụng cần phải cân nhắc sự gia tăng độ phức tạp của ứng dụng khi quyết định sử dụng các bộ thư viện này.

3.2.5 Chu kỳ ứng dụng trên andorid

Một tiến trình Linux gói gọn một ứng dụng Android đã được tạo ra cho ứng dụng khi codes cần được run và sẽ còn chạy cho đến khi:

- Nó không phụ thuộc.

- Hệ thống cần lấy lại bộ nhớ mà nó chiếm giữ cho các ứng dụng khác. Một sự khác thường và đặc tính cơ bản của Android là thời gian sống của tiến trình ứng dụng không được điều khiển trực tiếp bới chính nó. Thay vào đó, nó được xác định bởi hệ thống qua một kết hợp của:

- Những phần của ứng dụng mà hệ thống biết đang chạy - Những phần quan trọng như thế nào đối với người dùng

36

Bao nhiêu vùng nhớ chiếm lĩnh trong hệ thống.

3.2.5.1 Chu kỳ sống thành phần

Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từ lúc bắt đầu khởi tạo và đến thời điểm kết thúc. Giữa đó, đôi lúc chúng có thể là active hoặc inactive, hoặc là trong trường hợp activies nó có thể visible hoặc invisible

3.2.5.2 Activity Stack

Bên trong hệ thống các activity được quản lý như một activity stack. Khi một Activity mới được start, nó được đặt ở đỉnh của stack và trở thành activity đang chạy activity trước sẽ ở bên dưới activity mới và sẽ không thấy trong suốt quá trình activity mới tồn tại.

Nếu người dùng nhấn nút Back thì activity kết tiếp của stack sẽ di duyển lên và trở thành active.

Hình 3.20: Activity Satck

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

Một phần của tài liệu XE ĐIỀU KHIỂN TỪ XA DÙNG ANDROID (Trang 34 - 48)

Tải bản đầy đủ (PDF)

(48 trang)