Phần mềm cho hệ truyền đơn bước (single hop)

Một phần của tài liệu Đồ án tốt nghiệp - Mô hình mạng cảm nhận không dây - WSN (Trang 27 - 33)

Trong hệ này giả sử ta chỉ truyền từ các nút mạng về trung tâm. Mỗi nút mạng này ta sẽ gắn 1 địa chỉ. Mỗi nút mạng khác nhau sẽ có một địa chỉ khác

nhau. Muốn thu dữ liệu từ nút đơn nào ta chỉ việc kiểm tra địa chỉ nút đó, nếu đúng địa chỉ thì sẽ tiến hành xử lý dữ liệu để hiển thị.

Phần mềm nhúng cho hệ đơn bước phải bao gồm 2 phần mềm:

¾ Phần mềm 1( software 1 single hop SW1-SH ):

Cài đặt cho nút mạng (bộ truyền), đảm bảo rằng khi nút mạng nhận được tín hiệu từ cảm biến thì sẽ thực hiện số hóa tín hiệu, điều chế và đưa lên Anten phát. Phần mềm này cũng phải đảm bảo rằng nút mạng có khả năng hoạt động độc lập, có chế độ ngủ đông để tiết kiệm pin.

¾ Phần mềm 2 ( software 1 single hop SW2-SH ):

Cài đặt cho nút gốc (bộ nhận ), đảm bảo rằng khi nút gốc nhận được tín hiệu vô tuyến của các nút mạng thì sẽ tiến hành phân tích, kiểm tra địa chỉ, sau đó lọc ra thông tin nhiệt độ, điều khiển hiển thị lên màn hình LCD. Phần mềm 2 này còn phải bao gồm cả việc điều khiển phân tích dữ liệu và đưa ra các phán đoán xử lý kịp thời, hay đơn giản là hiển thị dữ liệu cho quan sát viên ở trung tâm xử lý có thể nhận biết được.

Trong khi viết các phần mềm này, có thể sử dụng một vài hàm trong thư viện hàm mà nhà sản xuất cung cấp.

a) Phần mềm 1 (software 1 single hop SW1-SH)

Thuật toán

Nút mạng thực hiện việc cảm nhận, số hóa và truyền tín hiệu nhiệt độ đã số hóa đến nút gốc. Theo cấu trúc phần cứng của CC1010, để tiết kiệm nguồn nuôi, sau mỗi lần phát tín hiệu, ta sẽ đặt nút mạng vào trạng thái Hibernate (ngủ đông). Sau đó lại cho tiếp tục phát. Chu trình hoạt động của nút mạng theo một vòng lặp như sau:

- Phát tín hiệu số hoá của nhiệt độ lấy từ chân AD1.

- Đợi một khoảng thời gian ngẫu nhiên từ 0 đến 250* 8ms (trong lúc này tiến hành ngủ đông cho nút mạng).

Hình 4.3: Thuật toán cho nút truyền trường hợp single hop

Chương trình

Sử dụng thư viện hàm nhà sản xuất cung cấp, để có thể đọc và truyền thông tin nhiệt độ ta sử dụng các hàm và đoạn chương trình như sau:

- Đưa lối ra IC LM 61 tới chân AD1, ta dùng khai báo: // ADC setup halConfigADC(ADC_MODE_SINGLE | ADC_REFERENCE_INTERNAL_1_25, CC1010EB_CLKFREQ, 0); ADC_SELECT_INPUT(ADC_INPUT_AD1); ADC_POWER(TRUE); - Địa chỉ được định: #define TBC_MY_SPP_ADDRESS 1 nodeIDs[0] = TBC_MY_SPP_ADDRESS; - Hàm truyền nhiệt được viết như sau:

void tbcTransmit (void) { word xdata temp;

// Khoi dong ADC

ADC_SAMPLE_SINGLE();

temp = ADC_GET_SAMPLE_10BIT(); // Cap nhat bang

txDataBuffer[TBC_TEMP_OFFSET] = (temp >> 8) & 0xFF; txDataBuffer[TBC_TEMP_OFFSET + 1] = temp & 0xFF; nodeTemps[0] = temp;

nodeLastT[0] = (int) sppGetTime(); // Truyen thong tin

sppSend(&TXI);

do { /*nothing*/ } while (sppStatus() != SPP_IDLE_MODE); } // tbcTransmit

- Hàm đợi ngẫu nhiên:

// doi 1 khoang ngau nhien (0 to 255*8=2040) void tbcWaitRandom (void) {

byte xdata time; byte xdata n; time = rand();

for (n = 0; n < waitMultiplier; n++) { halWait (time, CC1010EB_CLKFREQ); }

} // tbcWaitRandom

- Đoạn lặp trong chương trình thể hiện thuật toán: while (TRUE) {

tbcTransmit(); tbcWaitRandom(); }

b) Phần mềm 2 (software 2 single hop SW2-SH )

Thuật toán

Điểm quan trọng nhất của phần mềm này là viết hàm nhận dữ liệu và viết hàm để hiển thị lên màn hình LCD làm việc ở chế độ 4bit.

Hình 4.4: Thuật toán cho nút gốc trường hợp truyền single hop

Chương trình

- Để nhận dữ liệu : sppReceive(&RXI);

do { /* khong lam gi ca */ } while (sppStatus() != SPP_IDLE_MODE);

- Đoạn kiểm tra tín hiệu tại địa chỉ x :

for (n = 0; n <= TBC_MAX_NODE_COUNT; n++) { for(p=0;p<4;p++){

if(nodeIDs[n]==p){

// thực hiện hiển thị số liệu và kiểm tra ngưỡng ....

//... }

else{

// thông báo không có số liệu }

} }

- Đoạn hiển thị lên LCD dùng một số hàm được viết ở trong file thư viện: lcd.h điều khiển LCD ở chế độ 4 bit:

+ Để in một xâu ra LCD cần thực hiện các động tác: lcd_init();

lcd_com(a); // a là đặt địa chỉ trên màn hình ta cần in

lcd_puts("xâu cần in ");// phần trong dấu nháy kép là dòng cần in + Để in nhiệt ra LCD cần chuyển dữ liệu thành dạng chuỗi, ở đây

dữ liệu trong biến fTemp được chuyển thành chuỗi bằng lệnh: Char so[15]; // khai báo chuỗi “so”

sprintf(so,"%2.3f",fTemp); // chuyển giá trị biến ra chuỗi - Ví dụ: Với khai báo:

char so[15] // khai báo xâu tên nút mạng và: sprintf(not,"%2d",p);

đoạn chương trình sau được đặt vào vòng lặp để kiểm tra tính an toàn của hệ thống:

// Phan doan he thong: if (fTemp<70){

lcd_init(); // khởi tạo LCD

lcd_com(15); // đặt con trỏ lên dòng đầu lcd_puts(" Nhiet not ");

lcd_puts(not); // in tên nút mạng cần hiển thị lcd_com(0xC0); // đặt con trỏ đầu dòng 2

lcd_puts(" -- An toan -- "); // thông báo nút an toàn delayy(10000); // quan sát trong 10s

} else{ lcd_init(); lcd_com(15);

lcd_puts(" Nhiet Nut "); // in tên nút mạng cần hiển thị

lcd_puts(not); lcd_com(0xC0); // đặt con trỏ đầu dòng 2

delayy(10000); }

Một phần của tài liệu Đồ án tốt nghiệp - Mô hình mạng cảm nhận không dây - WSN (Trang 27 - 33)

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

(66 trang)