CHƯƠNG 2 : BỘ THƯ VIỆN TMOTE SKY TRÊN HỆ ĐIỀU HÀNH CONTIKI
2.2 Bộ thư viện Tmote Sky trên Contiki
2.2.6 Thư viện cảm biến ánh sáng
Cảm biến ánh sáng sử dụng trong module Tmote sky là S1087. Dòng sản phẩm S1087 / S1133 là các loại đi - ốt quang bằng gốm có độ sáng tối thấp. Gói gốm được sử dụng ánh sáng khơng đi qua, do đó khơng có ánh sáng nào có thể phân tán tới vùng nhạy quang từ phía hoặc mặt sau. Điều này cho phép các phép đo quang học tin cậy trong phạm vi gần như hồng ngoại có thể nhìn thấy, qua một phạm vi rộng từ mức ánh sáng thấp đến mức ánh sáng cao.
44
Trong Contiki, các file cấu hình cho cảm biến ánh sáng trên Tmote Sky được nằm trong thư mục Contiki-2.7/platform/sky/dev/ trong đó có 4 file là light.h và light-sensor.h
khởi tạo cho 2 cảm biến. File light.c và light-sensor.c đọc và trả về giá trị của 2 cảm biến.
Hình 2.23 Cấu hình cho 2 cảm biến ánh sáng trong file light-sensor.h
45 2.2.7 Thư viện SHT11
Đây là khối có chức năng cảm biến nhiệt và độ ẩm sau đó gửi dữ liệu về cho MSP430 để xử lý.
Hình 2.25 Giao tiếp I2C Vi điều khiển và SHT11
Sensor gồm có 4 chân :
SHTxx yêu cầu cung cấp điện áp từ 2,4 đến 5,5 V. Sau khi bật nguồn thiết bị cần 11ms để đạt được trạng thái "ngủ". Khơng có lệnh nào được gửi trước thời điểm đó. Pin nguồn (VDD, GND) có thể được tách rời với một tụ điện 100 nF.
SCK được sử dụng để đồng bộ hóa sự giao tiếp giữa một vi điều khiển và SHTxx. Vì giao diện bao gồm logic tĩnh hồn tồn khơng có tần số SCK tối thiểu
Chân 3 Data dùng để truyền dữ liệu vào MSP430. Chân tristate dữ liệu được sử dụng để truyền dữ liệu vào và ra khỏi thiết bị. Dữ liệu thay đổi sau khi có sườn xuống và có hiệu lực vào sườn lên của xung clock. Để dữ liệu ổn định trong suốtquá trình SCK o mức cao cần 1 điện trở kéo bên ngồi
Cấu hình SHT11 gồm 1 file tiêu đề và 1 file .c đều nằm trong thư mục Contiki-
2.7/core/dev . Cấu hình cho các cảm biến nằm trong file thư mục sht11-sensor.h. Các hàm
46
Hình 2.26 Cấu hình cảm biến SHT11 trong file sht11-sensor.h
Hình 2.27 Chương trình trong file sht11.h, bao gồm các hàm khởi tạo, hàm của nhiệt độ và độ ẩm và hàm tắt sensor
47
CHƯƠNG 3: CHƯƠNG TRÌNH ĐIỀU KHIỂN LED ĐƠN TRÊN CONTIKI 3.1 Phân tích chương trình bật, tắt LED 3.1 Phân tích chương trình bật, tắt LED
Chương trình bật, tắt led được viết để điểu khiển các led đơn được nối với vi điều khiển MSP430 trên phần cứng Tmote Sky, chương trình điều khiển được viết và được lưu trong các thư mục của Contiki là core/dev/led.h và core/dev/led.c để thực thi các hàm đã được xây dựng trong thư viện của hệ điều hành contiki.
Chương trình led.c được viết để điều khiển các trạng thái của led, khung chương trình bao gồm các phần khai báo thư viện, khai báo biến, khởi tạo và gọi các hàm bật tắt
leds_on() và leds_off(), led_toggle(), và leds_invert().
Khai báo thư viện bao gồm khai báo thư viện led.h là thư viện có các hàm điều khiển led, thư viện clock.h là thư viện gọi các hàm xung đồng hồ, thư viện energest.h là thư viện kiểm tra năng lượng tiêu thụ của các con led. Khai báo biến cho tồn bộ chương trình, biến được khai báo ở đây là biến tĩnh (static) kiểu dữ liệu không dấu(unsigned char) và tên biến là leds và invert.
Hình 3.1 Khai báo thư viện và khai báo biến của chương trình led.c
Sau phần khai báo thư viện là chương trình con hiển thị kiểm tra năng lượng tiêu thụ của Led và được gọi bằng câu lệnh show_leds(unsigned char changed), và được gọi lại hàm
leds_arch_set() được gọi từ thư viện led.h và link đến file leds-arch.c nằm trong cây thư
mục của contiki: cpu/msp430/ mà ở đó đã có sẵn chương trình leds_arch_set(unsigned char
leds), trong hàm leds_arch_set() cấu hình các chân ra. Chương trình đó được link đến file platform-conf.h nằm trong thư mục platform/sky/ mà tại đó đã được định nghĩa giá trị mà
các led sẽ hiển thị khi được gọi đến và các giá trị của led xanh, vàng, đỏ được gán bằng giá trị các bit của các chân trên vi điều khiển MSP430 F1611 là cổng P5 với các chân P5.4, P5.5, P5.6.
48
Hình 3.2 Chương trình kiểm tra năng lượng tiêu thụ của led
Hình 3.3 Hàm leds_arch_set()
49
Chương trình khởi tạo led được gọi bằng hàm leds_init(void), bên trong gọi hàm leds-arch-init() từ leds-arch.c nằm trong cây thư mục của contiki: cpu/msp430/ mà ở đó đã
có sẵn chương trình leds_arch_init(void). Chương trình này gọi các hàm cấu hình đầu ra cho các led xanh, vàng, đỏ trong file led.h. Trong chương trình biến leds và invert được gán giá trị ban đầu bằng 0.
Hình 3.5 Hàm khởi tạo leds_init()
Hình 3.6 Hàm leds-arch-init()
Hàm gọi các led đang bật được thực thi bằng câu lệnh unsigned char let_get(void) và trả về giá trị của leds-arch-get() được gọi từ chương trình leds_arch_get() trong
leds_arch.c và trả về trạng thái của leds xuất ra PORT5.
50
Hình 3.8 Hàm leds_arch_get()
Chương trình bật led được gọi bằng hàm leds_on (unsigned char ledv), khai báo biến kiểu ký tự không dấu với tên biến là changed, biến này được gán với (~leds) & ledv, tức là : đầu tiên giá trị của leds sẽ được đảo các bit đã được khai báo từ đầu chương trình. Các bit này tiếp tục được AND logic với ledv có vector mà giá trị 8 bit của nó được cấu hình theo vector gắn với các chân của vi điều khiển với các led đơn mang giá trị 8 bit. Sau đó leds sẽ thực hiện phép OR rồi gán leds bằng một giá trị mới đã được OR bit. Cuối cùng chương trình hiển thị led với giá trị của biến changed
Hình 3.9 Chương trình bật led
Ví dụ như LED1 được nối với chân P5.4 trong sơ đồ mạch, cấu hình vector mang giá trị là 1 trong led.h sẽ link đến file platform-conf.h trong thư mục cây contiki là
platform/sky mà ở đó được khai báo và định nghĩa giá trị của led là 0x01 khi mang giá trị 8
bit sẽ là 000000010 và phép AND được thực hiện giá trị của changed = 00000010. Lệnh
leds |= ledv , thực hiện phép OR bit rồi gán bằng đối số ledv, ở đây phép OR bit sẽ được
thực hiện trước, sau khi leds OR giá trị của leds với ledv sẽ mang giá trị là 00000001. Cuối cùng hiển thị giá trị của biến changed bằng câu lệnh show_led(changed).
51
Hình 3.10 Giá trị của LED1 được cấu hình
Chương trình tắt led được gọi bằng hàm leds_off (unsigned char ledv), khai báo biến kiểu ký tự không dấu với tên biến là changed, biến này được gán với leds & ledv. Các bit này được AND logic với ledv có vector mà giá trị 8 bit của nó được cấu hình theo vector gắn với các chân của vi điều khiển với các led đơn mang giá trị 8 bit. Sau đó leds sẽ thực hiện phép AND bit với đảo của đối số ledv rồi gán leds bằng một giá trị mới đã được AND bit. Cuối cùng chương trình hiển thị led với giá trị của biến changed
Hình 3.11 Hàm chương trình tắt led
Ví dụ: LED 2 trong sơ đồ mạch được nối với chân P5.5 của vi điều khiển trong sơ đồ mạch, cấu hình vector mang giá trị là 2 trong led.h sẽ link đến file platform-conf.h trong thư mục cây contiki là platform/sky mà ở đó được khai báo và định nghĩa giá trị của led là 0x02 khi mang giá trị 8 bit sẽ là 00000100. Phép AND được thưc hiện giá trị của changed
= 00000000 .Lệnh leds &= ~ledv sẽ thực hiện phép AND giữa leds và đảo của đối số ledv
(~ledv). Sau khi thực hiện leds sẽ mang giá trị 00000000. Cuối cùng sẽ hiển thị giá trị của biến changed bằng câu lệnh show_led(changed).
52
53
3.2 Chương trình nhấp nháy led theo thời gian cố định
Mã chương trình: #include "contiki.h" #include "dev/leds.h"
PROCESS(blink_process, "Blink");
AUTOSTART_PROCESSES(&blink_process); PROCESS_THREAD(blink_process, ev, data){ PROCESS_EXITHANDLER(goto exit;) PROCESS_BEGIN();
while(1) {
static struct etimer et;
etimer_set(&et, CLOCK_SECOND); clock_delay(1000); leds_on(LEDS_RED); etimer_set(&et, CLOCK_SECOND); clock_delay(8000); leds_off(LEDS_RED); } exit: leds_off(LEDS_RED); PROCESS_END(); }
54
KẾT LUẬN
Đề tài này đã giúp chúng em hiểu thêm cấu trúc phần cứng và đặc tính của module Tmote Sky và cấu tạo và đặc tính, chức năng các thành phần trong module Tmote Sky như bộ vi xử lý (vi điều khiển), bô thu phát vô tuyến chuẩn truyền thông không dây, bộ nhớ Flash mở rộng, các cảm biến tích hợp trong module.
Nắm được cấu trúc hệ điều hành cho mạng thông minh – Contiki và lịch sử phát triển của Contiki, cách tổ chức các tập tin hệ thống trong Contiki. Hiểu sơ qua về bộ thư viện, cấu hình, gọi các hàm từ thư viện của Tmote Sky trên hệ điều hành Contiki cho vi xử lý, bộ nhớ, radio, các ngoại vi.
Trong q trình thực hiện đề tài, nhóm đã gặp một số khó khăn như: lần đầu tiếp xúc với module truyền thông không dây, hệ điều hành cho mạng thông minh, hạn chế về mặt kiến thức cũng như những hiểu biết về chuẩn truyền thông không dây, giao thức cho mạng các đối tượng thông minh...
55
TÀI LIỆU THAM KHẢO
[1] Doxygen, Contiki 2.x Reference Manual, 2007 [2] Moteiv Corporation, Tmote Sky : Datasheet, 2006 [3] Bài giảng Mạng các đối tượng thông minh