3.1.1. Mục đích:
Tìm hiểu nguyên tắc hoạt động của module CC1010 (sử dụng vi điều khiển CC1010 để xây dựng nút mạng trong mạng cảm nhận). Trên cở sở đó viết phần mềm nhúng cho các nút mạng và xây dựng mô hình thí nghiệm khảo sát quá trình hoạt động, đo hiệu quả truyền nhận gói tin của mạng WSN, đánh giá hiệu quả năng lượng theo phương pháp lập lịch tập trung, từ đó rút ra kết luận so sánh và đánh giá.
3.1.2. Yêu cầu thực nghiệm:
Hai thực nghiệm sau cần được thực hiện:
Đo cường độ tín hiệu nhận được giữa các nút mạng WSN
Đo hiệu quả nhận gói tin giữa các nút mạng WSN
Các thí nghiệm cần được đo đạc nhiều lần ở các môi trường truyền nhận và khoảng cách khác nhau để chỉ ra rõ sự tác động của chúng đến cường độ nhận và hiệu quả truyền nhận gói tin.
3.2. Các thiết bị thực nghiệm:
Hệ thống WSN được kết nối với máy tính thông qua cáp nối RS232, do đó việc thu nhận dữ liệu từ nút mạng về máy tính sẽ thực hiện truyền qua giao tiếp RS232 (cổng COM). Ngôn ngữ lập trình được sử dụng ở đây là ngôn ngữ C, chương trình dịch là Keil µVision2.0/3.0.
Vi điều khiển (VĐK) được lựa chọn để xây dựng nút mạng ở đây là CC1010. Việc chọn VĐK hợp lý sẽ làm cho quá trình xây dựng hệ thống được rút ngắn, hệ thống hoạt động ổn định, tin cậy và đạt các chỉ tiêu đề ra:
Tiêu thụ năng lượng thấp.
Tích hợp ADC để có thể ghép nối với cảm biến tương tự.
Bộ nhớ chương trình cũng như bộ nhớ dữ liệu có kích thước hợp lý.
Kích thước vật lý nhỏ.
thuận tiện như: sử dụng ngôn ngữ cấp cao, có các thư viện hỗ trợ cho việc cảm nhận cũng như truyền nhận không dây, hỗ trợ gỡ lỗi…
Giá thành rẻ.
3.3 Giới thiệu VDK CC1010:
Các đặc điểm chính của VDK CC1010:
Thu phát không dây 300-1000 MHz.
Độ nhạy cao (-107 dBm).
Có thể lập trình cho công suất đầu ra tới +10 dBm.
Tốc độ truyền RF có thể đạt 76.8 kbit/s.
Đo được cường độ RF (RSSI).
Tương thích họ VĐK 8051, tốc độ xử lý bằng 2,5 lần vi điều khiển 8051 chuẩn.
32 kB Flash, 2048 + 128 Byte SRAM.
3 kênh ADC 10 bit, 4 bộ định thời / 2PWMs, 2 UARTs, RTC, Watchdog, SPI, mã hoá DES, 26 chân I/O.
Có khả năng gỡ lỗi sử dụng chương trình dịch Keil µVision2.0/3.0 IDE qua
cổng nối tiếp.
Hình 3.2 Chip CC1010 dùng thiết kế nút mạng cảm nhận
3.4 Tiến hành thực nghiệm
3.4.1 Sơ đồ thực nghiệm
Hình 3.4 Sơ đồ thực nghiệm mạng WSN
Nút CC1010 nối trực tiếp với máy tính qua cổng RS232 (gọi là nút cơ sở) nhận kết quả từ nút cảm nhận (có thể di động xa nút cơ sở). Nút cơ sở sẽ phát tín hiệu yêu cầu thu thập dữ liệu từ các nút cảm nhận theo nguyên tắc hỏi vòng, các nút cảm nhận sau khi nhận được yêu cầu từ nút cơ sở sẽ gửi trả lời
Thí nghiệm tiến hành các phép đo sau :
1.Khoảng cách D lớn nhất có để nút cảm nhân và nút cơ sở còn có thể
truyền tín hiệu được cho nhau.
2.Thời gian truyền nhận dữ liệu giữa nút cảm nhận và nút cơ sở.
3.Đo cường độ dòng điện của các nút mạng các trạng thái : ngủ, truyền,
nhận dữ liệu ở chế độ lập lịch tập trung.
3.4.1.1 Xác định khoảng cách D lớn nhất giữa các nút mạng để chúng còn có thể truyền nhận có hiệu quả :
a. Chuẩn bị thí nghiệm :
- Địa điểm đo : tại sân trường Đại Học Công Nghệ
- Nạp phần mềm nhúng cho các nút mạng.
- Chuẩn bị các phụ kiện : thước dây, máy ảnh…
2 1 3 4 Nút cơ sở Master RS232 Các nút cảm nhận (Slave) Các nút cảm nhận (Slave) Các nút cảm nhận (Slave) Các nút cảm nhận (Slave)
Hình 3.5 Nạp phần mềm cho nút mạng WSN
b. Mô tả quá trình đo đạc : Dùng thước dây để xác định các mốc cần đo, khởi động các nút mạng. Nút cơ sở phát tín hiệu tại một vị trí cố định, sau đó ta di chuyển nút mạng cảm nhận trên các mốc xác định trước, quan sát kết quả trên màn hình LED của nút mạng cơ sở.
c. Kết quả đo :
Lần đo thứ Khoảng
cách (M)
Số gói yêu cầu
nút cơ sở truyền đi Số gói trả lời nút cơ sở nhận được Tỉ lệ % nhận được 50 100 100 100% 90 100 100 100% 95 100 80 80% 1 110 100 0 0% 50 100 100 100% 90 100 100 100% 95 100 80 80% 96 100 77 77% 97 100 74 74% 100 100 70 70% 2 105 100 5 5% 94 100 100 100 100 100 79 79% 3 102 100 0 0%
Bảng 3.1 Bảng số liệu đo khoảng cách truyền tín hiệu giữa các nút mạng
d. Kết luận :
Đo ngoài trời khoảng cách D giữa nút cơ sở và nút cảm nhận :
D < 95m : nhận 100% 95m < D < 100m : nhận 70% - 80%
Công suất phát của chip C1010 với nguồn nuôi 3.3V truyền với khoảng cách D<100 các nút mạng còn nhận được tín hiệu.
3.4.1.2 Xác định thời gian truyền nhận dữ liệu giữa nút cảm nhận và nút cơ sở của mạng WSN trên cơ sở CC1010.
a. Các bước chuẩn bị thí nghiệm: - Nạp phần mềm cho các nút mạng
- Nối nút mạng cơ sở giao tiếp với máy tính qua cổng RS232 - Chạy phần mềm .. để đón kết quả
b. Mô tả thí nghiệm và quá trình đo
- Sử dụng bộ định thời tích hợp sẵn trong vi điều khiển CC1010.
- Cấu trúc của gói dữ liệu đã được sử dụng trong chương trình có dạng như sau:
7 byte 2 byte 2 byte 2 byte 2 byte 2 byte
Preamble NútID Data Target Type CRC
Trong đó:
Preamble : các byte dẫn đường dùng để đồng bộ ngưỡng cho bộ thu RF NútID: Địa chỉ của nút truyền.
Data: Thông tin dữ liệu truyền về. Target: Địa chỉ nút nhận.
Type: Loại gói dữ liệu (điều khiển/dữ liệu).
CRC : Byte chứa thông tin kiểm tra lỗi dư thừa vòng.
. Quy trình truyền nhận : bao gồm hai pha Phase 1: pha truyền
Truyền 7 byte dẫn đường
Truyền từng byte và tính CRC cho hết 8 byte
Truyền 2 byte CRC
Phase 2 : Pha nhận
Nhận 8 byte dữ liệu
Nhận 2 byte CRC
Kiểm tra CRC
Các bước sử dụng timer để đo, ở đây sử dụng timer0
Khởi tạo timer0 chạy ở chế độ định thời, bộ đếm timer0 sẽ tăng lên
mỗi chu kỳ máy(0.2713µs, với tần số thạch anh là 14,746Mhz). Với CC1010 thì một chu kỳ máy = 4 chu kỳ thạch anh
Gọi hàm truyền, đồng thời kích hoạt timer0 bắt đầu đếm.
Khi hàm truyền kết thúc thì cho timer0 dừng đếm.
Giá trị đếm được của timer0 được lưu lại, nhân với 0.2713µs và hiển
thị lên màn hình.
Làm tương tự với các phép đo khác (như đo thời gian nhận, tính
CRC…)
Chương trình khởi tạo timer0: // Khởi tạo timer0 mode 1
TMOD = (TMOD&0xF0)|0x01;
INT_ENABLE(INUM_TIMER0, INT_ON);
INT_GLOBAL_ENABLE(TRUE);
// Các biến đếm
byte xdata counter = 0; ulong xdata timeout; word xdata tCounter;
unsigned int xdata value = 0;
//Reset biến đếm và cho timer chạy tại thời điểm bắt đầu đo counter = 0;
TH0 = 0x00; TL0 = 0x00; TF0 = 0;
TIMER0_RUN(TRUE);
// Dừng timer khi kết thúc đo và in ra thông báo về thời gian đếm được TIMER0_RUN(FALSE);
value = TH0;// thanh ghi đếm của Timer 0 value <<= 8;
value |= TL0;
fTemp = (value*0.2713 + 65535*counter); //
printf("\n\nThoi gian đếm được là: %4.1f us", fTemp); // Hàm ngắt timer0 để tăng biến đếm mỗi khi tmer0 tràn
// Timer0 sẽ đếm từ 0, giá trị đếm tăng lên mỗi 0.2713us, giá trị đếm đạt 65535 thì timer0 tràn, báo ngắt
void TIMER0_ISR() interrupt INUM_TIMER0 { // Reset the timer to generate another interrupt
INT_SETFLAG (INUM_TIMER0, INT_CLR);
TIMER0_RUN(FALSE); TH0 = 0x00; TL0 = 0x00; TIMER0_RUN(TRUE); counter++; } // TIMER0_ISR
Chương trình đo thời gian từ nút truyền đến nút nhận
counter = 0; TH0 = 0x00; TL0 = 0x00; TF0 = 0;
TIMER0_RUN(TRUE);
// Tổng thời gian từ lúc bắt đầu truyền đến lúc hết hàm truyền
halRFSendPacket2(PREAMBLE_BYTE_COUNT, txDataBuffer.buffer,
TIMER0_RUN(FALSE); value = TH0;
value <<= 8; value |= TL0;
fTemp = (value*0.2713 + 65535*counter);
printf("\n\nThoi gian truyen het 7 byte preamale + 8 byte data + 2 byte CRC16: %4.1f us", fTemp);
Kết quả đo : thời gian truyền hết 137ms
Hình 3.7 Thời gian truyền hết 17 byte dữ liệu từ nút truyền đến nút nhận
Xác định thời gian nhận và xử lý dữ liệu tại nút nhận
counter = 0; TH0 = 0x00;
TL0 = 0x00; TF0 = 0;
TIMER0_RUN(TRUE);
// Tổng thời gian từ lúc bắt đầu nhận đến lúc hết hàm nhận
halRFReceivePacket2(byte timeOut, byte* packetData, byte maxLength);
TIMER0_RUN(FALSE); value = TH0;
value <<= 8; value |= TL0;
fTemp = (value*0.2713 + 65535*counter);
printf("\n\nThoi gian nhan het 7 byte preamale + 8 byte data + 2 byte CRC16: %4.1f us", fTemp);
Kết quả đo thời gian nút nhận và phân tích dữ liệu: 138ms
d. Kết luận
Vậy Tổng thời gian thời gian nút truyền bắt đầu gửi dữ liệu 17 byte cho đến khi nút nhận nhận và phân tích xong dữ liệu là : 137 + 138 = 275 ms
3.4.1.3 Đo cường độ dòng điện của các nút mạng các trạng thái : ngủ, truyền, nhận
dữ liệu ở chế độ lập lịch tập trung.
a. Chế độ lập lịch tập trung
Lập lịch tập trung là một trong nhiều cách tổ chức hoạt động của các nút mạng trong mạng WSN. Với lập lịch tập trung, hoạt động của mạng sẽ do nút cơ sở điều khiển. Tất cả các nút cảm nhận khác trong mạng sẽ hoạt động theo yêu cầu của nút mạng cơ sở, các yêu cầu điều khiển này đã được nút mạng cơ sở sắp xếp cố định và trở thành một lịch trình hoạt động cho mạng đó.
Hoạt động:
Nút cơ sở: Sẽ lần lượt yêu cầu từng nút mạng gửi dữ liệu truyền về. Mỗi nút
mạng khi nhận được yêu cầu sẽ phải gửi dữ liệu phản hồi về cho nút cơ sở.
Ban đầu, nút cơ sở gửi yêu cầu tới một nút cảm nhận n (NútID=n). Sau khi gửi gói tin yêu cầu nút n ra ngoài môi trường thì các nút mạng khác cũng đều nhận được yêu cầu đó chứ không riêng nút n nhận được. Tiếp theo nút mạng cơ sở chuyển sang chế độ nhận dữ liệu từ nút mạng cảm nhận truyền về. Lúc này, nút mạng cơ sở sẽ nhận dữ liệu, nếu nhận không thành công thì nhận lại lần nữa. Tuy nhiên, quá trình nhận lại này sẽ được giới hạn về mặt thời gian. Tức là với mỗi một nút cảm nhận, nút cơ sở chỉ dành cho một lượng thời gian nhất định, nếu sau khoảng thời gian đó mà vẫn không nhận được gói dữ liệu truyền về thì tức là nút mạng được yêu cầu đó đã không nhận được yêu cầu hoặc là gói dữ liệu truyền vễ đã gặp phải lỗi truyền nào đó ngoài môi trường dẫn tới nút cơ sở không thể nhận được. Lúc này nút cơ sở sẽ phải bỏ qua nút đó để chuyển tiếp sang yêu cầu nút khác. Nếu trong thời gian đó mà nút cơ sở nhận được thành công gói dữ liệu của nút cảm nhận truyền về thì sẽ tiến hành xử lý gói tin và hiển thị hoặc lưu trữ dữ liệu nhận được đó. Sau khi xử lý xong gói tin, trước khi chuyển sang yêu cầu nút tiếp theo (n+1) thì nút cơ sở sẽ trễ một khoảng tdelay. Lý do phải có khoảng trễ này sẽ được giải thích tại phần hoạt động của nút cảm nhận. Như vậy là nút cơ sở đã hoàn thành việc yêu cầu và nhận gói tin từ một nút cảm nhận trong mạng. Sau đó nút cơ sở sẽ tăng thêm 1 vào địa chỉ của nút sẽ yêu cầu, tức là sẽ yêu cầu nút cảm nhận tiếp theo. Quá trình được lặp lại liên tục, nút cơ sở yêu cầu và nhận dữ liệu của lần lượt từng nút trong mạng, sau khi hết một lượt lại tiến hành quay lại với nút đầu
tiên.
while (TRUE) {
for(i=1;i<max;i++) // max là số nút mạng
{
tbcTransmit(i,0xFF);// gửi yêu cầu cho nút I, loại gói tin điều khiển
t = (int) sppGetTime(); // lấy thời gian trước khi nhận
do{ //Nếu nhận không thành công sẽ nhận lại cho
//toi khi hết 800ms thì thôi. tbcReceive();
}while((RXI.status != SPP_RX_FINISHED)&&( ((int) sppGetTime()-t)<80));
tbcPrintTable(); // xử lý gói tin
delay(10000);//Thời gian Master đợi các Slave tính toán, xử lý dữ liệu
} }
Giải thuật của nút cơ sở:
Hình 3.9 Giải thuật nút cơ sở
Khởi tạo
Addr = 1 Gửi yêu cầu
Nhận dữ liệu Nhận ok? & tRx<0.8s Xử lý Trễ Addr++ Addr>max? Đ S S Đ
Nút cảm nhận: Luôn ở trạng thái sẵn sàng nhận yêu cầu của nút cơ sở. Ngay sau khi nhận được yêu cầu sẽ tiến hành gửi dữ liệu trở về.
Ban đầu, nút cảm nhận sẽ luôn ở trong trạng thái nhận dữ liệu, nếu nhận không thành công thì nhận lại cho tới khi nhận được gói dữ liệu thành công. Sau khi nhận được gói, nút cảm nhận tiến hành tách từng trường dữ liệu của gói đã nhận được và kiểm tra xem đó có phải nút cơ sở yêu cầu chính nó hay không. Nếu đúng thì nút cảm nhận sẽ trễ một khoảng thời gian ngắn rồi mới tiến hành gửi dữ liệu trở về cho nút cơ sở. Rồi sau đó lại quay trở lại quá trình nhận yêu cầu để chờ tín hiệu yêu cầu lần tiếp theo. Nếu gói tin nhận được không phải gói yêu cầu nó gửi dữ liệu thì có 2 khả năng: hoặc đó là gói tin yêu cầu của nút cơ sở tới một nút khác, hoặc đó là gói tin dữ liệu của một nút cảm nhận khác đang truyền về. Khi đó, nó sẽ quay trở lại việc nhận dữ liệu từ môi trường. Nhưng sau mỗi quá trình nhận thì nút cảm nhận lại phải tiến hành tách các trường dữ liệu trong gói tin nhận được và kiểm tra các trường đó. Các công việc này sẽ tốn một khoảng thời gian và khiến cho nút cảm nhận quay trở lại quá trình nhận yêu cầu muộn hơn nút cảm nhận vừa nhận được yêu cầu và đã gửi dữ liệu đi. Và cũng chính vì quá trình xử lý mất một khoảng thời gian nên nút cơ sở phải trễ đi một khoảng để khi gửi tin yêu cầu thì các nút cảm nhận khác có thể nhận được. Giải thuật nút cảm nhận: Hình 3.10 Giải thuật nút cảm nhận Đ Khởi tạo Nhận yêu cầu Nhận ok?
Kiểm tra địa chỉ
Trễ Truyền dữ liệu
Đ
S
while (TRUE) { do{ tbcReceive(); }while(RXI.status != SPP_RX_FINISHED); if((nútTarget[n]==1)&& (nútType[n]==0xFF)) { delay(20000); // Trễ để tbcTransmit(0xFFFF,0xFF00); } } Ơ b. Lập lịch tập trung kết hợp với lịch ngủ:
Trên thực tế, mạng cảm nhận không dây là mạng có tần suất truyền nhận thấp. Các gói tin truyền trong mạng không đòi hỏi phải có tốc độ nhanh. Trong một số ứng dụng như theo dõi thông tin từ môi trường thì thậm chí còn được sắp xếp một lịch hoạt động và lịch ngủ đều đặn theo chu kỳ. Việc đưa lịch ngủ vào quá trình hoạt động với
2 1 3 4 Nút cơ sở Master RS232 Các nút cảm nhận (Slave) Các nút cảm nhận (Slave) Các nút cảm nhận (Slave) Các nút cảm nhận (Slave)
thời gian hợp lý sẽ giải quyết được vấn đề tiết kiệm năng lượng mà lại không ảnh hưởng tới việc giám sát thông tin môi trường của mạng.
Ý tưởng cho mô hình này như sau: Nút cơ sở sẽ có một lịch hoạt động và lịch nghỉ đan xen nhau và cố định về mặt thời gian. Các nút cảm nhận khác sẽ phải có biện pháp nào đó để có thể hoạt động và nghỉ gần như trùng khớp với lịch hoạt động và lịch nghỉ của nút cơ sở. Như vậy thì toàn mạng sẽ có một khoảng thời gian hoạt động và