Một khó khăn của nhiều lược đồ TDMA là cung cấp các khe đảm bảo cho tất cả các nút, điều này không mềm dẻo về mặt cho phép các lưu lượng từ mỗi nút thay đổi theo thời gian. Lược đồ dành riêng như Resync cung cấp mềm dẻo hơn.
Trong Resync, mỗi nút trong mạng duy trì quan điểm của giai đoạn dựa trên thời gian nội bộ riêng của nó, nhưng nó giả sử rằng giai đoạn của mỗi nút kéo dài trong các khoảng thời gian giống nhau (hoặc có thể đồng bộ với các hàng xóm gần kề). Mỗi nút lựa chọn một thời gian đúng mỗi giai đoạn dựa trên xung đồng hồ nội bộ để gửi một mấu tin ngắn. Giả sử rằng việc chọn lựa thành công và không có đụng độ vì các mẩu tin tồn tại rất ngắn. Bằng việc nghe đủ dài, mỗi nút được học xa hơn khi hàng xóm gửi mẩu tin để nó có thể thức giấc đúng giờ để lắng nghe chúng. Khi một nút muốn truyền tới một nút khác, nó biểu thị trong mẩu tin khi nó dự định truyền dữ liệu (thời gian truyền dữ liệu này được chọn ngẫu nhiên và hiển thị như là một số gia hơn là giới hạn tuyệt đối). Nơi nhận được dự định sẽ thức dậy tại thời gian tương ứng (nó được tính toán dưa trên xung đồng hồ nội bộ) để mà nhận bản tin. Resync không kết hợp chặt chẽ với một cơ chế RTS/CTS để ngăn chặn đụng độ bản tin do vấn đề các nút ẩn; tuy nhiên khi dữ liệu truyền và lập lịch ngẫu nhiên, bất kỳ đụng độ nào không được duy trì liên tục.
2.6.4 Thâm nhập môi trường thích ứng lưu lượng (TRAMA)
Giao thức thâm nhập môi trường thích ứng lưu lượng là kỹ thuật TDMA phân tán cho phép mềm dẻo và lập lịch động cho các khe thời gian. Các giai đoạn thời gian được chia thành tập hợp các khe tín hiệu ngắn, theo bởi tập hợp các khe truyền dài hơn. TRAMA bao gồm 3 phần chính:
1. Giao thức hàng xóm (NP) : các nút trao đổi thông tin một hop hàng xóm trong khoảng ngẫu nhiên thâm nhập các khe tín hiệu. Các khe tín hiệu đủ dài để đảm bảo rằng thông tin được truyền thật sự và các nút có thông tin chắc chắn vùng lân cận.
2. Giao thức trao đổi lập lịch (SEP): Mỗi nút sẽ thông báo lịch của nút trong giai đoạn khe sử dụng của nút tại mỗi giai đoạn. Lịch sử dụng ảnh nhị phân để chứng tỏ hiệu quả nơi nhận mong đợi (unicast hoặc broadcast) cho mỗi gói tương lai của nó trong giai đoạn tiếp theo. Nêu số các gói một nút muốn gửi thấp hơn số khe ssang sử dụng trong một thời điểm, nó sẽ từ bỏ các khe thừa (được đóng gói tại cuối thời điêm với nhau giữa khe sử dụng,hướng đến sự thay đổi khe, và lịch cuối cùng phổ biến tên các khe . Việc thay đổi khe được sử dụng đồng bộ: vì vậy các hàng xóm được yêu cầu thức giấc và lắng nghe nó.) Nút ngủ tại tất cả các thời điểm khi nút không được yêu cầu truyền nhận.
3. Thuật toán lựa chọn thích ứng (AEA) : thuật toán này sử dụng chức năng băm dựa trên ID nút và thời gian để đảm bảo rằng có duy nất mức ưu tiên của nút giữa các nút trong phạm vi vùng 2 hop tại mỗi thời điểm. TRong phiên bản đơn giản nhất của thuật toán này, một nút truyền nếu và chỉ nếu nó có mức ưu tiên cao nhất giữa các nút trong phạm vi vùng lân cận 2 hop của nó. Tuy niên, để làm giảm các lãng phí của một khe nếu không có dữ liệu truyền. TRAMA ràng buộc một mở rộng phức tạp cho phép dùng lại khe. Thủ tục TRAMA thực hiện việc phân công cho phép các nút truy cập kênh truyền để tránh xung đột, giao thức này giả sử tất cả các nút đều đồng bộ thời gian và chia thời gian thời gian được chia thành thời điểm truy cập ngẫu nhiên. Một nút sẽ quảng bá thông tin của nó tới các nút hàng xóm, bao gồm cả thông tin về lập lịch của nó. Dựa và các thông tin này các nút sẽ sử dụng thuật toán phân tán để xác định khe thời gian và kế hoạch thâm nhập để truyền - nhận dữ liệu và kế hoạch chuyển sang trạng thái ngủ của nó. Nhược điểm của thủ tục này khá nặng về tính toán và bộ nhớ bởi vậy yêu cầu mạng có tài nguyên đủ lớn.
Hình 2.10: Thủ tục TRAMA
2.7 Lập lịch tập trung
Trong thủ tục lập lịch tập trung, mạng sẽ chia thành 2 thành phần : nút cơ sở và nút cảm nhận.
Nút cơ sở: sẽ hoạt động theo chu kỳ với thời gian hoạt động và thời gian nghỉ là cố định: thoạt động và tnghỉ . Trong thời gian hoạt động, nút cơ sở sẽ gửi yêu cầu tới từng nút cảm nhận, sau khi gửi yêu cầu thì nút cơ sở chuyển sang trạng thái nhận, nếu nhận được thì sẽ xử lý số liệu rồi chuyển sang yêu cầu nút tiếp theo. Nếu ko nhận được dữ liệu từ nút đã yêu cầu thì sẽ nhận lại trong khoảng thời gian tx nào đó, nếu trong thời gian đó vẫn không nhận được thì chuyển sang yêu cầu nút tiếp theo.
Nút cảm nhận: sau khi khởi tạo, nút cảm nhận tiến hành nhận dữ liệu từ môi trường, nếu không nhận được thì nhận lại cho đến khi nhận được 1 gói tin bất kỳ. khi quá trình nhận thành công chứng tỏ bên ngoài môi trường các nút đang ở trong trạng thái hoạt động. Lúc này, nút cảm nhận bắt đầu tiến hành chu trình hoạt động của mình.
Nhận dữ liệu từ môi trường, nếu không nhận được thì nhận lại cho tới khi nhận được gói tin. Khi nhận được gói tin thì tiến hành kiểm tra địa chỉ và yêu cầu xem có phải yêu cầu nó gửi dữ liệu đi hay không, nếu ko phải thì lại quay lại nhận dữ liệu. nếu đúng thì tiến hành lấy dữ liệu rồi truyền cho nút cơ sở. Nếu ko nhận được dữ liệu liên tiếp trong một khoảng thời gian thì chuyển sang chế độ nghỉ. Thời gian nghỉ ở đây tính là tnghỉ1 = tnghỉ - t1.
Sau khi nghỉ xong, tức là kết thúc 1 chu kỳ làm việc đầu tiên, nút cảm nhận đã bám được vào chu kỳ làm việc của nút cơ sở. Các chu kỳ tiếp theo, nút cảm nhận sẽ hoạt động dựa vào các khoảng thời gian thoạt động và tnghỉ y như nút cơ sở. Nhưng nếu hoạt động mãi như vậy thì sau 1 khoảng dài sẽ bị lệch khe thời gian. Vì thế, sau
khoảng 30chu kỳ (1 số lần nào đó) hoạt động và nghỉ, nó sẽ quay trở lại thực hiện như chu kỳ đầu tiên, tức là tiến hành việc bám vào khhung làm việc, sau đó mới lại tiến hành làm việc và nghỉ theo khoảng thời gian giống như nút cơ sở. Như vậy thì nút cảm nhận sẽ tiến hành bám lại vào chu kỳ làm việc sau 1 số lần hoạt động để đảm bảo việc khớp về mặt khe thời gian.
Hình 2.11 Thuật toán lập lịch tập trung
T T Khởi tạo Add=1 Nhận ok? Và tx<1s Gửi yêu cầu Nhận Xử lý và hiển thị Trế Add++ Add<max F F
CHƯƠNG 3
THỰC NGHIỆM ĐO KIỂM MẠNG WSN SỬ DỤNG PHƯƠNG PHÁP LẬP LỊCH TẬP TRUNG
3.1. Mục đích và yêu cầu thực nghiệm: 3.1.1. Mục đích: 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, PACKET_LENGTH);
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;