Số lượng gói tin gửi của các nút 1, nút 2, và nút 3 tương ứng là 62 tin, 68 tin và 55 tin. Như vậy tổng số gói tin đã gửi trong quá trình thực nghiệm là 185 gói tin. Từ hình 3.7, tổng số gói tin nhận được là 185 gói tin. Do đó, tỷ lệ nhận được gói dữ liệu trong quá trình thực nghiệm là 100%.
Trong quá trình thực tế, việc xây dựng các mô hình tương tự với quá trình thực nghiệm. Hình 3.9 sẽ hiển thị các mô hình trong quá trình thực tế.
Hình 3.8: Số lượng gói tin gửi đi trong quá trình thực nghiệm trong phòng
Số lượng các gói tin truyền - nhận được thể hiện trong Bảng 3.3.
Bảng 3.3: Số lượng các gói tin truyền - nhận được trong quá trình thực nghiệm trong phòng
Số gói tin truyền Số gói tin nhận Tỷ lệ nhận tin thành công (%)
185 185 100
3.2.2. Thực nghiệm ngoài trời:
Khi đo bên ngoài, tôi đã mở rộng số lượng các nút cảm biến. Các kịch bản thực nghiệm được thể hiện trong Bảng 3.4.
Bảng 3.4: Kịch bản thực nghiệm khi đo lường ngoài trời Kiểu kết
nối
Số lượng
nút
Khoảng cách từ nút tới gateway Phạm vi thực nghiệm Thời gian thực nghiệm mô phỏng Nút1 Nút 2 Nút 3 Nút 4 Nút 5 Nút 6 Hình sao 6 38 m 57 m 18 m 39 m 35 m 25 m 100 ×100 m2 30 phút Mô hình thực nghiệm được thể hiện trong hình 3.10
Khi kết thúc thực nghiệm, tôi đã tính toán tỷ lệ phân phối gói dữ liệu các cơ sở về số lượng gói tin đã được gửi và nhận.
Số lượng gói tin gửi của các nút 1, nút 2, nút 3, nút 4, nút 5 và nút 6 tương ứng là 11 tin, 23 tin, 19 tin, 13 tin, 15 tin, và 16 tin. Như vậy tổng số gói tin đã gửi trong quá trình thực nghiệm là 97 gói tin. Từ hình 3.11, tổng số gói tin nhận được là 97 gói tin. Do đó, tỷ lệ nhận được gói tin trong quá trình thực nghiệm là 100%.
Trong quá trình thực tế, việc xây dựng các mô hình tương tự với quá trình thực nghiệm. Hình 3.13 sẽ hiển thị các mô hình trong quá trình thực tế.
Hình 3.11: Số lượng gói tinnhận được trong quá trình thực nghiệm ngoài trời
Số lượng các gói tin truyền - nhận được thể hiện trong Bảng 3.5.
Bảng 3.5: Số lượng các gói tin truyền - nhận được trong quá trình thực nghiệm ngoài trời
Số gói tin truyền Số gói tin nhận Tỷ lệ nhận tin thành công (%)
97 97 100
3.3. Nâng cao thời gian hoạt động của hệ thống:
Trong phần này, tôi thực hiện tính toán tiêu thụ điện năng của bộ cảm biến trong các hộp cảm biến để ước tính tuổi thọ của pin. Các hộp cảm biến bao gồm 3 loại cảm biến: nhiệt độ, gia tốc và độ ẩm của đất. Mức độ tiêu thụ điện năng của bộ cảm biến được thể hiện trong Bảng 3.6.
Bảng 3.6: Công suất tiêu thụ điện của một nút cảm biến [10]
Thành phần nút cảm biến
Dòng điện (mA) Điện áp (V) Công suất (mW)
Waspmote 15 (Hoạt động) 55*10-3 (Nghỉ) 3,3 49,5 (Hoạt động) 0,18 (Nghỉ) Modul XBee 3 3,3 10 Cảm biến nhiệt độ 10 3,3 33 Cảm biến gia tốc 0,35 3,3 1,155 Cảm biến độ ẩm 2 3,3 6,6
Tổng công suất trung bình của nút cảm biến khi hoạt động = 100,255 mW
Tổng công suất trung bình của nút cảm biến ở chế độ nghỉ = Công suất của Waspmote ở chế độ nghỉ = 0,18 mW
Pin là pin Lithium, nó có điện áp là 3,7V và 6600 mAh. Công suất tiêu thụ được tính bằng công thức:
Công suất tiêu thụ = Điện áp * Dòng điện
Từ công thức trên, điện năng tiêu thụ là 24,420 Wh. Theo lý thuyết thời gian cho lần sạc tiếp theo được tính: 24420mWh / 100.255mW = 244 giờ (khoảng 10,2 ngày).
Trong thực tế, pin chì-axit không thể xả nhiều lần bằng 100% năng lượng của nó. Vì vậy, khi tính toán cần phải giảm công suất pin bằng một lượng khoảng 25%.
Trong trường hợp này, 25% * 244 giờ = 61 giờ. Vì vậy, thời gian thực tế giữa 2 lần nạp lúc này là: 244 giờ - 61 giờ = 183 giờ (khoảng 7,6 ngày).
Để tiết kiệm năng lượng tiêu thụ, sau 10 phút chúng tôi thực hiện đọc và truyền dữ liệu một lần trong 3 giây. Trong khoảng thời gian còn lại, các nút cảm biến trong mô hình hoạt động ở chế độ nghỉ và tiêu thụ điện năng ở mức thấp.
Tổng năng lượng tiêu thụ trong 3 giây để đọc và truyền dữ liệu là: 100.255mW * 3s = 0.08mWh. Trong thời gian nghỉ, năng lượng tiêu thụ là: 0.18mW * 10 min = 0.03mWh.
Tổng số lần các nút cảm biến đọc và truyền dữ liệu là: 24420mWh / (0.08mWh + 0.03mWh) = 222.000 lần.
Các nút cảm biến có thể hoạt động khoảng: 222.000 lần * (10 phút + 3giây) * (100% - 25%) = 1162 ngày (khoảng 3,2 năm).
Với việc thực hiện truyền nhận dữ liệu từ các nút cảm biến với thời gian là khoảng 10 phút/1 lần thì vấn đề tiêu thụ năng lượng của pin được tiết kiệm mà hiệu quả công việc vẫn có thể đảm bảo, tuổi thọ của pin được tăng lên từ 7 ngày đến 3 năm.
3.4. Thảo luận:
- Để cho mô hình đảm bảo tính hiệu quả và có thể được áp dụng trong thời gian tới, hệ thống đưa ra phương thức truyền – nhận dữ liệu chung cho mô hình này như sau:
- Phương thức truyền – nhận dữ liệu được thực hiện như mô hình truyền nhận phía trên: các dữ liệu về môi trường sẽ được thu từ các nút cảm biến bao gồm các thông tin về gia tốc, nhiệt độ, độ ẩm, năng lượng, lượng mưa và thời gian mưa. Các dữ liệu được căn chỉnh và tiền xử lý sau đó sẽ được đóng gói, truyền về proble gateway thông qua giao thức ZigBee, thiết bị ZigBee được sử dụng vì có tính năng truyền dữ liệu ở những khoảng cách xa bằng cách truyền dữ liệu thông qua một mạng lưới các thiết bị trung gian, tiêu tốn điện năng và công suất thấp; các dữ liệu này được xử lý bởi Data Logger (chuyển đổi ADC, DAC, các thuật toán…). Để thuận tiện trong việc theo dõi, giám sát thì từ Data Logger các dữ liệu sẽ được đẩy lên internet và được lưu trữ trong Mysql trên Database server theo các ngăn ứng với trường dữ liệu khác nhau. Từ đây, dữ liệu sẽ được khai thác thông qua web service và qua các ứng dụng trên smartphone bởi các giao thức API để phục vụ cho việc đưa ra những cảnh báo kịp thời đối với nguy cơ sạt lở đất.
KẾT LUẬN
Luận văn đã trình bày việc phát triển các nút cảm biến có thể được sử dụng cho ứng dụng giám sát hiện tượng trượt lở đất. Trong các nút cảm biến đã được tích hợp các loại cảm biến (nhiệt độ, độ ẩm, gia tốc), bộ vi xử lý và hệ thống truyền thông để thu thập và xử lý dữ liệu. Trong khi thu thập dữ liệu các thông số của các nút cảm biến đã được tính toán và cân chỉnh để khi hoạt động có thể tránh tối đa sự ảnh hưởng của các yếu tố bên ngoài có thể làm ảnh hưởng đến quá trình hoạt động.
Trong luận văn này, tôi đã làm các thử nghiệm trong hai trường hợp là ở trong phòng và ngoài trời. Kết quả của quá trình thực nghiệm và quy trình thực tiễn cả khi thí nghiệm trong nhà và ngoài trời đều tương tự. Tỷ lệ truyền – nhận gói dữ liệu trong mô phỏng và thực tế là 100% là đảm bảo độ tin cậy. Các dữ liệu thu được từ các thí nghiệm sẽ được đối chiếu với các thông số ở điều kiện bình thường trong thực tế để có thể đưa ra những cảnh báo thích hợp. Thông tin thời gian thực của mạng cảm biến sẽ được tự động cập nhật liên tục tại website của nhóm nghiên cứu http://uetlandslide.com/.
Tôi cũng đề xuất một phương pháp để tiết kiệm năng lượng tiêu thụ. Mỗi 10 phút, quy trình đọc và chuyển giao dữ liệu sẽ được diễn ra trong 3 giây, khi quá trình kết thúc các nút cảm biến sẽ đặt ở chế độ nghỉ và chuẩn bị cho lần đọc, truyền nhận dữ liệu tiếp theo. Bằng cách này, thời gian hoạt động của nút cảm biến có thể kéo dài lâu hơn.
Trong tương lai, hệ thống sẽ thay đổi cấu trúc liên kết của hệ thống theo dạng hình cây và so sánh kết quả đạt được với cấu trúc hình sao. Từ kết quả này, hệ thống có thể thay đổi linh hoạt giữa cấu trúc cây và cấu trúc sao để tiết kiệm năng lượng của pin sử dụng cho các cụm cảm biến.
TÀI LIỆU THAM KHẢO
1. A., Berti, M., Bicocchi, N., Castelli, G., Corsini, A., Mamei, M., & Zambonelli, F. (2011). Landslide monitoring with sensor networks: experiences and lessons learnt from a real-world deployment. International Journal of Sensor Networks, 10(3), 111-122.
2. Ramesh, M. V., & Vasudevan, N. (2012). The deployment of deep-earth sensor probes for landslide detection. Landslides, 9(4), 457-474.
3. Texas Intrusment, 2013, LM35 Precision Centigrade Temperature Sensors www.ti.com
4. Datasheet Dir, Precision ±18 G Single-/Dual-Axis IMEMS Accelerometer, www.datasheetdir.com/ADW22035+Accelerometer.
5. Digi. [Online] www.digi.com/pdf/ds_xstreammodule.pdf.
6. Gary Johnson, Richard Jennings, 2006, LabVIEW Graphical Programming, McGraw-Hill Professional, 4th edition , 608 pages.
7. Frank R. 2013. Understanding smart sensors. Artech House.
8. L. M. Ha, Tran Duc Tan, N. T. Long, N. D. Duc, N. P. Thuy, Errors Determination Of The MEMS IMU, Journal of Science, Đại học Quốc gia Hà nội, ISSN 0866-8612, 2007, pp. 6-12.
9. Chen, Feng, et al. "Simulation study of IEEE 802.15. 4 LR‐ WPAN for industrial applications." Wireless Communications and Mobile Computing 10.5 (2010): 609-621.
10. Dinh-Chinh Nguyen, Duc-Nghia Tran, Tran Duc-Tan, Application of Compressed Sensing in Effective Power Consumption of WSN for Landslide Scenario, Asia Pacific Conference on Multimedia and Broadcasting, pp. 111-115, April 2015.
11. Nguyen Dinh Chinh, Tran Duc Nghia, Le Ngoc Hoan, Ta Duc Tuyen, Pham Anh Tuan, Tran Duc Tan, Multi-sensors integration for landslide monitoring application, VNU Journal of Science – Natural Science and Technology, Vol. 30, No. 6S-B, 2014, pp. 202-210.
12. Rosso, Renzo, Maria Cristina Rulli, and Giovanni Vannucchi. "A physically based model for the hydrologic control on shallow landsliding." Water Resources Research 42.6 (2006).
13. Nguyen Dinh Chinh, Tran Duc-Tan, Energy Efficiency Scheme for Wireless Sensor Network based Landslide Monitoring System, International Conference on Green and Human Information Technology (ICGHIT), Feb. 4 ~ Feb. 6, 2015, Vietnam
PHỤ LỤC
CODE CHẠY WASPMOTE
// doc du lieu tu cac cam bien va gui ve trung tam giam sat
#include <WaspXBeeZB.h> khai báo
#include <WaspFrame.h>
#include <WaspSensorPrototyping_v20.h> #include <math.h>
//Pointer to an XBee packet structure packetXBee* packet;
// Destination MAC address ///////////////////////////////////////////////
char* MAC_ADDRESS="0013A20040B3166D"; địa chỉ
/////////////////////////////////////////////// void setup() { USB.ON(); kết nối ACC.ON(); USB.println(F("LandSlide project")); xbeeZB.ON(); SensorProtov20.ON(); cấp nguồn 3.3V và 5V pinMode(DIGITAL8,OUTPUT); pinMode(DIGITAL6,OUTPUT); pinMode(DIGITAL4,OUTPUT);
pinMode(DIGITAL2, OUTPUT); // blink led pin4 đầu ra truyền dữ liệu
delay(10); trễ ms
// Check XBee's network parameters
checkNetworkParams(); kiểm tra đường truyền XBee
}
void loop()
{ int x_ac=0,y_ac=0,z_ac = 0; khai báo biến cho Acceleration
float g,x,y,z;
float zero_G = 512.0; float scale = 102.3;
//---Moisture---
double val_mois1=0,val_mois2=0,moisture1,moisture2;
digitalWrite(DIGITAL8,HIGH); khai báo biến cho Soil moisture
digitalWrite(DIGITAL4,LOW);
digitalWrite(DIGITAL2, HIGH); // sang led val_mois1 = analogRead(ANALOG2); //pin8
moisture1 = (val_mois1-680)*200/(1018-680); 1018: ẩm nhất; 680: khô nhất val_mois1 = analogRead(ANALOG3); //pin8
moisture1 = (val_mois1-680)*200/(1018-680); digitalWrite(DIGITAL8,LOW); digitalWrite(DIGITAL6,LOW); digitalWrite(DIGITAL4,HIGH); delay(50); digitalWrite(DIGITAL4,LOW); //****************Temperture************************ int temp = analogRead(ANALOG1); // pin14
temp = temp*34/100; // nhiet do
//********************************** //gia toc tai ground surface
x_ac = analogRead(ANALOG4); // truc x pin7 y_ac = analogRead(ANALOG5); // truc y pin16 z_ac = analogRead(ANALOG6); // truc z pin6 x=((float)x_ac - zero_G)/scale; y=((float)y_ac - zero_G)/scale; z=((float)z_ac - zero_G)/scale; g=sqrt(x*x+y*y+z*z); //********************************** //---Check Register--- // should always answer 0x32, it is used to check // the proper functionality of the accelerometer /* byte check = ACC.check();
float x_acc = ACC.getX(); if (x_acc > 1000) x_acc = 1000; if (x_acc < -1000) x_acc = -1000;
int angle_x = (180 / PI) * asin(x_acc/1000); float y_acc = ACC.getY();
if (y_acc > 1000) y_acc = 1000; if (y_acc < -1000) y_acc = -1000;
int angle_y = (180 / PI) * asin(y_acc/1000); float z_acc = ACC.getZ();
if (z_acc > 1000) z_acc = 1000; if (z_acc < -1000) z_acc = -1000;
int angle_z = (180 / PI) * asin(z_acc/1000); */
delay(500);
// Create new frame
frame.createFrame(ASCII, "G"); // Add frame fields
frame.addSensor(SENSOR_TCA,temp);
frame.addSensor(SENSOR_HUMI1,moisture1); // Do am 1 frame.addSensor(SENSOR_HUMI2,moisture2); // Do am 2
frame.addSensor(SENSOR_BAT, PWR.getBatteryLevel()); // % pin
//frame.addSensor(SENSOR_ACC,angle_x,angle_y,angle_z); // Gia toc tai box frame.addSensor(SENSOR_ACC1,x_ac,y_ac,z_ac); // Gia toc tren mat dat frame.addSensor(SENSOR_STR,"D");
// set parameters to packet:
packet=(packetXBee*) calloc(1,sizeof(packetXBee)); // Memory allocation
packet->mode=BROADCAST; // Choose transmission mode: UNICAST or BROADCAST
// 4.2. set destination XBee parameters to packet
xbeeZB.setDestinationParams( packet, MAC_ADDRESS, frame.buffer, frame.length);
// 4.3. send XBee packet xbeeZB.sendXBee(packet); // 4.4. check TX flag if( xbeeZB.error_TX == 0) { USB.println(F("ok")); } else { USB.println(F("error")); } // free variables free(packet); packet=NULL; frame.showFrame(); // wait for one second delay(1000);
digitalWrite(DIGITAL2, LOW); delay(500);
}
/******************************************* *
* checkNetworkParams - Check operating * network parameters in the XBee module *
*******************************************/ void checkNetworkParams()
{
// 1. get operating 64-b PAN ID xbeeZB.getOperating64PAN(); // 2. wait for association indication xbeeZB.getAssociationIndication(); while( xbeeZB.associationIndication != 0 ) {
delay(2000);
// get operating 64-b PAN ID xbeeZB.getOperating64PAN();
USB.print(F("operating 64-b PAN ID: ")); USB.printHex(xbeeZB.operating64PAN[0]); USB.printHex(xbeeZB.operating64PAN[1]); USB.printHex(xbeeZB.operating64PAN[2]); USB.printHex(xbeeZB.operating64PAN[3]); USB.printHex(xbeeZB.operating64PAN[4]); USB.printHex(xbeeZB.operating64PAN[5]); USB.printHex(xbeeZB.operating64PAN[6]); USB.printHex(xbeeZB.operating64PAN[7]); USB.println(); xbeeZB.getAssociationIndication(); } USB.println(F("\nJoined a network!")); // 3. get network parameters
xbeeZB.getOperating16PAN(); xbeeZB.getOperating64PAN(); xbeeZB.getChannel();
USB.print(F("operating 16-b PAN ID: ")); USB.printHex(xbeeZB.operating16PAN[0]); USB.printHex(xbeeZB.operating16PAN[1]); USB.println();
USB.print(F("operating 64-b PAN ID: ")); USB.printHex(xbeeZB.operating64PAN[0]); USB.printHex(xbeeZB.operating64PAN[1]); USB.printHex(xbeeZB.operating64PAN[2]); USB.printHex(xbeeZB.operating64PAN[3]); USB.printHex(xbeeZB.operating64PAN[4]); USB.printHex(xbeeZB.operating64PAN[5]); USB.printHex(xbeeZB.operating64PAN[6]); USB.printHex(xbeeZB.operating64PAN[7]); USB.println(); USB.print(F("channel: ")); USB.printHex(xbeeZB.channel); USB.println(); }
CODE CHẠY VISUAL STUDIO
// Programmer: Nguyen Van Hung // Date: 05/05/2015
// code mieu ta phan giao dien nguoi dung using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; using System.Text.RegularExpressions; using System.Data.SqlClient; using DataAccess; using BusinessLogic; using System.Text; using System.IO; using System.Net; using System.Collections.Specialized; namespace WindowsFormsApplication2 {
public partial class Form1 : Form { public Form1() { InitializeComponent(); serialPortGateway.Parity = System.IO.Ports.Parity.None; serialPortGateway.StopBits = StopBits.One; serialPortGateway.DataBits = 8; serialPortGateway.DataReceived += new SerialDataReceivedEventHandler(serialPortGateway_DataReceived); ////////////////////////////////////////////////////////////////////// serialPortGSM.Parity = System.IO.Ports.Parity.None; serialPortGSM.StopBits = StopBits.One; serialPortGSM.DataBits = 8;
serialPortGSM.DataReceived += new SerialDataReceivedEventHandler(serialPortGSM_DataReceived); /////////////////////////////////////////////////////////////////////////