Kết quả của bài toán

Một phần của tài liệu Nghiên cứu, chế tạo mạng cảm biến không dây giám sát nhiệt độ, độ ẩm môi trường (Trang 72)

4.1.Mạch thực tế

Mạch thực tế nhƣ đƣợc đƣa ra từ ban đầu của bài toán sẽ phải thỏa mãn có 4 nút, trong đó nút gốc phải hiện thị đƣợc các thông số của cả 4 nút cảm biến trong mạng.

Hình 4- 17 Ba mạch node con và một mạch node chính

Sau khi thiết kế xong, tiến hành đo đạc và quan sát ta thu đƣợc kết quả nhƣ sau:

(c ) Node 3 (d) Node trung tâm

Hình 4- 18 Các node đo nhiệt độ độ ẩm

Nhiệt độ và độ ẩm thu đƣợc của các node con truyền tới node chính nhƣ các hình 4.16 (a), (b), (c), (d). Ở hình 4.16(d), ta có thể thấy:

- Node thứ tự nhƣ sau: thứ tự 1 chính là nhiệt độ, độ ẩm của chính node chính, các thứ tự tiếp theo là của các node 1,2,3.

- Cột thứ nhất lƣu nhiệt độ, cột thứ 2 lƣu độ ẩm, cột thứ ba là lƣu trạng thái hoạt động nhƣ thế nào. Trạng thái bằng 0 nghĩa là node đang hoạt động và truyền thành công về node chính; trạng thái bằng 1 nghĩa là node đang hoạt động và truyền dữ liệu thông qua node 1 về node chính; ngoài ra còn trạng thái là N có nghĩa là node đã bị dừng hoạt động.

Hình 4- 19 Đồ thị giám sát kết quả đo đạc trên máy tính

Ở hình giao diện giám sát, phía trên là đồ thị của nhiệt độ, phía dƣới là đồ thị độ ẩm. Đƣờng h0, h1, h2, h3 tƣơng ứng là của nút chủ, và các nút con thành phần. Khi di chuột đặt vào 1 điểm trên đƣờng của đồ thị, giá trị cụ thể sẽ đƣợc hiện ra. Nhƣ ở hình vẽ, ta thấy giá trị độ ẩm của h1 là 83% tại thời điểm 4:45:14 PM ngày 19/04/2015.

Hình 4- 20 Kết quả giám sát lưu ra file text

File text để giám sát có cấu trúc 2 phần: phần phía trái là kết quả phần phía phải là tiêu đề tƣơng ứng: t1, h1 là nhiệt độ và độ ẩm tƣơng ứng của nút chủ, tiếp theo là của các nút thành phần.

5. Kết luận

Chƣơng 4 đã đƣa ra bài toán mô phỏng để thực hiện mô hình hệ thống mạng cảm biến không dây trong phạm vi nhỏ với số nút cố định. Chƣơng này đã trình bày chi tiết thuật toán thiết kế phần mềm cũng nhƣ những phần cứng cần cho xây dựng mạch và cuối cùng là đƣa ra kết quả đo đạc thực tế một cách tƣơng đối chính xác và ổn định. Mạch hoạt động hiệu quả và tiêu thụ ít năng lƣợng.

KẾT LUẬN VÀ ĐỊNH HƢỚNG ĐỀ TÀI

1. Kết luận

Các thiết bị cảm biến không dây liên kết thành một mạng đã tạo ra nhiều khả năng mới cho con ngƣời. Các đầu đo với bộ vi xử lý và các thiết bị vô tuyến rất nhỏ gọn tạo nên một thiết bị cảm biến không dây có kích thƣớc rất nhỏ, tiết kiệm về không gian. Chúng có thể hoạt động trong môi trƣờng dày đặc với khả năng xử lý tốc độ cao. Ngày nay, các mạng cảm biến không dây đƣợc ứng dụng trong nhiều lĩnh vực nhƣ nghiên cứu vi sinh vật biển, giám sát việc chuyên chở các chất gây ô nhiễm, kiểm tra giám sát hệ sinh thái và môi trƣờng sinh vật phức tạp, điều khiển giám sát trong công nghiệp và trong lĩnh vực quân sự, an ninh quốc phòng hay các ứng dụng trong đời sống hàng ngày.

Luận văn đã đi sâu nghiên cứu lý thuyết về mạng cảm biến không dây, các giao thức định tuyến, chuẩn truyền thông không dây Zigbee và xây dựng hoàn chỉnh mô hình ứng dụng thực tế: “Nghiên cứu, chế tạo mạng cảm biến không dây giám sát

nhiệt độ, độ ẩm của môi trƣờng”. Dựa trên kết quả đo đạc mạch thực tế cho thấy,

các thông số, nhiệt độ, độ ẩm thu đƣợc là tƣơng đối chính xác, các tín hiệu truyền qua giao thức Zigbee là ổn định và có độ chính xác cao, mạch hoạt động hiệu quả, tiêu thụ ít năng lƣợng. Giao diện ngƣời dùng đƣợc lập trình bằng ngôn ngữ C# nên khả năng phát triển mở rộng là rất cao, giúp chúng ta có những so sánh, phân tích, đánh giá số liệu nhanh chóng, tiện lợi từ đó nhanh chóng đƣa ra các phƣng pháp điều tiết và làm chủ đƣợc môi trƣờng xung quanh.

2. Định hƣớng tƣơng lai cho đề tài

Ứng dụng đo nhiệt độ, độ ẩm, giám sát sự thay đổi của môi trƣờng là một ứng dụng có tính thực tiễn cao, áp dụng lớn trong đời sống hàng ngày.

Tuy nhiên, với thời gian hạn hẹp, ngƣời viết luận văn chỉ thiết kế đƣợc mạch nhƣ trên với tính năng dù đầy đủ nhƣng còn thô sơ:

- Mạch đơn giản, chƣa thu đƣợc cƣờng độ ánh sáng

- Màn hình giao tiếp còn chƣa cho chỉnh sửa độ rộng hay thời gian giám sát theo yêu cầu.

- Chạy bằng 3 cục pin cho 1 mạch - Độ trễ thu tín hiệu vẫn còn lớn

Ngƣời viết luận văn mong muốn trong tƣơng lai gần sẽ tiếp tục có thời gian cũng nhƣ dành thời gian nhiều hơn để khắc phục những hạn chế hiện tại, xây dựng một hệ thống đẹp, rẻ, tiện lợi, tiết kiệm năng lƣợng hơn nữa. Để làm đƣợc điều đó, ngƣời viết

luận văn xác định sẽ tiếp tục nghiên cứu sâu về thuật toán định tuyến tìm đƣờng, các phƣơng pháp tránh và giảm nhiễu trong quá trình truyền dữ liệu, các phƣơng pháp điều khiển và kiểm soát chất lƣợng đƣờng truyền của các nút cảm biến để làm rút ngắn thời gian trễ. Đặc biệt là nghiên cứu và đƣa ra những phƣơng pháp tiết kiệm năng lƣợng, công suất thu phát thấp để giảm giá thành cho sản phẩm thực tế nếu đƣợc triển khai.

TÀI LIỆU THAM KHẢO

Tiếng việt

1. Bùi Đức Thắng (2008), “Một số nét khái quát về chuẩn Zigbee”, Tạp chí tự động hóa ngày nay, tháng 8/2008

2. Đồng Thảo Phƣơng, Nguyễn Đại Dƣơng, Bùi Đăng Thảnh (2013), “Giao thức Zigbee trong truyền thông công nghiệp”, Tạp chí tự động hóa ngày nay(số 147),

tháng 4/2013

3. Khiếu Thị Hoài (2013),“Ứng dụng của mạng cảm biến không dây”, Tạp chí khoa học và công nghệ, Trƣờng đại học Phan Châu Trinh

4. Nguyễn Trung Dũng, Nguyễn Văn Đức, Nguyễn Ngọc Tuấn, Nguyễn Tiến Dũng, Trịnh Hùng Tín, Lƣu Tiến Đạt (2013), “Sử dụng hiệu quả năng lƣợng với mô hình giám sát theo vùng trong mạng cảm biến không dây”, Tạp chí khoa học công nghệ(số 95), Trƣờng đại học Bách Khoa Hà Nội

5. Trần Văn Công Thành (2013), Nghiên cứu ứng dụng kỹ thuật mạng không dây vào giám sát sự thay đổi của môi trường, Luận văn thạc sĩ , Trƣờng Đại Học Đà Nẵng, tr.28-42, 53-69

6. Trịnh Lƣơng Miên(2014), “Tổng quan mạng cảm biến không dây”, Tạp chí tự động hóa ngày nay( số 157), tháng 3/2014

Tiếng Anh

7. Anna Ha’c (2003), Wireless Sensor Network Designs, University of Hawaii at Manoa, Honolulu, USA, John Wiley & Sons Ltd

8. Deying Li, Magie Xiaoyan Cheng (2001), Advances in wireless ad hoc and sensor Networks, Springer

9. Edgar H.Callaway Jr. (2004), Wireless Sensor Networks: Architectures and Protocols, A CRC Press Company

10. Implementing ZigBee in Existing Industrial Automation Networks, Sensors Expo 2005

11. Hochschule Ostwestfalen-Lippe, Wireless Automation Systems: Optimizing Reliability, Security and Coexistence, 2008.

12. Holger Karl Andreas Willig (2005), Protocols and Architectures for Wireless Sensor Networks, John Wiley & Sons, EngLand

Internet

14.http://arduino.vn/bai-viet/91-doc-nhiet-do-do-am-va-xuat-ra-man-hinh-lcd 15.http://mcu.banlinhkien.vn/threads/dht11-cam-bien-do-am.122/

16.http://mcu.banlinhkien.vn/threads/module-nrf24l01-2-4g-cach-thuc-su-dung- voi-tat-ca-cac-dong-vdk.129/

PHỤ LỤC 1. Chƣơng trình code cho vi điều khiển

1.1. Chƣơng trình cho từng nút con thực hiện đo, thu và phát tín hiệu

#include <mega8.h>

// Alphanumeric LCD Module functions #include <alcd.h>

#include <delay.h>

// Declare your global variables here

#define DHT_DATA_IN PIND.3 #define DHT_DATA_OUT PORTD.3

#define DHT_DDR_DATA DDRD.3 #define DHT_ER 0 #define DHT_OK 1 #define DDROUT 1 #define DDRIN 0 #define CE PORTC.0 #define CSN PORTC.1 #define SCK PORTC.2 #define MOSI PORTC.3 #define MISO PINC.4 #define IRQ PINC.5

#define RX_CH 10

//*********************************************NRF24L01********* ****************************

#define TX_ADR_WIDTH 5 // 5 uints TX address width #define RX_ADR_WIDTH 5 // 5 uints RX address width

#define TX_PLOAD_WIDTH 32 // 32 uints TX payload #define RX_PLOAD_WIDTH 32 // 32 uints TX payload

//*************************************** nRF24L01 COMMAND *******************************************************

#define READ_REG 0x00 // READ REGISTER R_REG + A #define WRITE_REG 0x20 // WRITE REGISTER WR_REG + B #define RD_RX_PLOAD 0x61 // READ RX PAYLOAD

#define WR_TX_PLOAD 0xA0 // WRITE TX PAYLOAD #define FLUSH_TX 0xE1 // CLEAR TX FIFO

#define FLUSH_RX 0xE2 // CLEAR RX FIFO ( USE WHEN TRANSMITED NOT COMPLETE)

#define REUSE_TX_PL 0xE3 //

#define NOP 0xFF // READ STATUS

//*************************************REGISTER MAP·**************************************************** #define CONFIG 0x00 // #define EN_AA 0x01 // #define EN_RXADDR 0x02 // #define SETUP_AW 0x03 // #define SETUP_RETR 0x04 // #define RF_CH 0x05 // #define RF_SETUP 0x06 // #define STATUS 0x07 // #define OBSERVE_TX 0x08 // · #define CD 0x09 //

#define RX_ADDR_P0 0x0A // #define RX_ADDR_P1 0x0B // #define RX_ADDR_P2 0x0C // #define RX_ADDR_P3 0x0D // #define RX_ADDR_P4 0x0E // #define RX_ADDR_P5 0x0F // #define TX_ADDR 0x10 // #define RX_PW_P0 0x11 // #define RX_PW_P1 0x12 // #define RX_PW_P2 0x13 // #define RX_PW_P3 0x14 //

#define RX_PW_P4 0x15 // #define RX_PW_P5 0x16 // #define FIFO_STATUS 0x17 //

//*********************************************************

unsigned char const TX_ADDRESS[TX_ADR_WIDTH]=

{0x34,0x43,0x10,0x02,0x01}; //

unsigned char const RX_ADDRESS[RX_ADR_WIDTH]=

{0x34,0x43,0x10,0x02,0x01}; //

unsigned char

Txbuf[32]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};

unsigned char

Rxbuf[32]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};

unsigned char SPI_RW(unsigned char Buff) {

unsigned char bit_ctr;

for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit {

MOSI = (Buff & 0x80); // output 'uchar', MSB to MOSI delay_us(5);

Buff = (Buff << 1); // shift next bit into MSB.. SCK = 1; // Set SCK high.. delay_us(5);

Buff |= MISO; // capture current MISO bit SCK = 0; // ..then set SCK low again }

return(Buff); // return read uchar }

unsigned char SPI_Read(unsigned char reg) // Ðoc thanh ghi reg {

unsigned char reg_val;

SPI_RW(reg); // Select register to read from.. reg_val = SPI_RW(0); // ..then read registervalue

CSN = 1; // CSN high, terminate SPI communication

return(reg_val); // return register value }

unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value) // GHI GIA TRI VALUE VAO THANH GHI REG

{

unsigned char status;

CSN = 0; // CSN low, init SPI transaction status = SPI_RW(reg); // select register

SPI_RW(value); // ..and write value to it.. CSN = 1; // CSN high again

return(status); // return nRF24L01 status uchar }

unsigned char SPI_Read_Buf(unsigned char reg, unsigned char pBuf[], unsigned char uchars) // doc giá

{

unsigned char status,uchar_ctr;

CSN = 0; // Set CSN low, init SPI tranaction

status = SPI_RW(reg); // Select register to write to and read status uchar

for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++) pBuf[uchar_ctr] = SPI_RW(0); //

CSN = 1;

return(status); // return nRF24L01 status uchar }

unsigned char SPI_Write_Buf(unsigned char reg, unsigned char pBuf[], unsigned uchars)

{

unsigned char status,uchar_ctr; CSN = 0; //SPI

status = SPI_RW(reg);

for(uchar_ctr=0; uchar_ctr<uchars; uchar_ctr++) // SPI_RW(pBuf[uchar_ctr]); CSN = 1; //SPI return(status); // } void SetRX_Mode(void) { CE=0;

SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // Enable CRC, 2 byte CRC, Recive

CE = 1;

delay_us(130); // }

unsigned char nRF24L01_RxPacket(unsigned char rx_buf[32]) {

unsigned char revale=0; unsigned char sta;

sta=SPI_Read(STATUS); // Read Status //if(RX_DR) // Data in RX FIFO if((sta&0x40)!=0) // Data in RX FIFO {

CE = 0; //SPI

SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer

revale =1; }

SPI_RW_Reg(WRITE_REG+STATUS,sta); return revale;

void SetTX_Mode(void) {

CE=0;

SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // Enable CRC, 2 byte CRC, Send

CE = 1;

delay_ms(1); // }

void nRF24L01_TxPacket(unsigned char tx_buf[32]) {

SPI_RW_Reg( FLUSH_TX,0); CE=0;

SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // Send Address

SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); //send data

SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // Send Out CE = 1; delay_ms(1); } void init_NRF24L01(void) { //inerDelay_us(100); delay_us(100);

CE=0; // chip enable CSN=1; // Spi disable

SCK=0; // Spi clock line init high

SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); //

SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); //

SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // EN ack pipe0 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); //Enable data P0 SPI_RW_Reg(WRITE_REG + RF_CH, RX_CH); // Chanel 0 RF = 2400 + RF_CH* (1or 2 M)

SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); // Do rong data truyen 32 byte

SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // 1M, 0dbm

SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // Enable CRC, 2 byte CRC, Send

}

void channel(unsigned char chan) {

CE=0;

SPI_RW_Reg(WRITE_REG + RF_CH, chan); // Chanel 0 RF = 2400 + RF_CH* (1or 2 M)

}

unsigned char DHT_GetTemHumi (unsigned char *tem,unsigned char *humi) {

unsigned char buffer[5]={0,0,0,0,0}; unsigned char ii,i,checksum;

DHT_DDR_DATA=DDROUT; // set la cong ra DHT_DATA_OUT=1; delay_us(60); DHT_DATA_OUT=0; delay_ms(25); // it nhat 18ms DHT_DATA_OUT=1; DHT_DDR_DATA=DDRIN; delay_us(60); if(DHT_DATA_IN)return DHT_ER ;

else while(!(DHT_DATA_IN)); //Doi DaTa len 1 delay_us(60);

if(!DHT_DATA_IN)return DHT_ER;

else while((DHT_DATA_IN)); //Doi Data ve 0 //Bat dau doc du lieu

for(i=0;i<5;i++) {

for(ii=0;ii<8;ii++) {

delay_us(50);

if(DHT_DATA_IN) {

buffer[i]|=(1<<(7-ii));

while((DHT_DATA_IN));//Doi Data xuong 0 }

} }

//Tinh toan check sum

checksum=buffer[0]+buffer[1]+buffer[2]+buffer[3]; //Kiem tra check sum

if((checksum)!=buffer[4])return DHT_ER; //Lay du lieu *tem = buffer[2]; *humi = buffer[0]; return DHT_OK; }

void lcd_putnum(long num) {

char ngan, tram,chuc,donvi; ngan=num/1000; tram= (num%1000) / 100; chuc= (num %100) /10; donvi=num%10; if(ngan>0) { lcd_putchar(48+ngan); lcd_putchar(48+tram); lcd_putchar(48+ chuc); lcd_putchar(48+donvi); } else if(tram>0) { lcd_putchar(48+tram); lcd_putchar(48+ chuc); lcd_putchar(48+donvi);

} else if(chuc>0) { lcd_putchar(48+ chuc); lcd_putchar(48+donvi); } else lcd_putchar(48+donvi); }

unsigned char get_data(unsigned char add_ch) { unsigned char i; channel(add_ch); nRF24L01_TxPacket(Txbuf); SetTX_Mode(); delay_ms(1); SPI_RW_Reg(WRITE_REG+STATUS,0XFF); SPI_RW_Reg( FLUSH_RX,0); SetRX_Mode(); i=0; while(nRF24L01_RxPacket(Rxbuf)==0 ) { delay_us(100); if(i<100) i++; else { SPI_RW_Reg(WRITE_REG+STATUS,0XFF); SPI_RW_Reg( FLUSH_TX,0); channel(RX_CH); return 0; } } channel(RX_CH); return 1; } void main(void) {

// Declare your local variables here unsigned char temp=0,humi=0; unsigned char i=0,cout=0;

// Input/Output Ports initialization // Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00;

DDRB=0x00;

// Port C initialization

// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;

DDRC=0x0F; PORTC.5=1;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T PORTD=0x00;

DDRD=0x08;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00;

TCNT0=0x00;

// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off

// Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00;

TCCR2=0x00; TCNT2=0x00; OCR2=0x00;

// External Interrupt(s) initialization // INT0: Off

// INT1: Off MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;

// USART initialization // USART disabled UCSRB=0x00;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC disabled ADCSRA=0x00; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00; // Alphanumeric LCD initialization // Connections specified in the

// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTD Bit 5 // RD - PORTD Bit 6 // EN - PORTD Bit 7 // D4 - PORTB Bit 0 // D5 - PORTB Bit 1 // D6 - PORTB Bit 2 // D7 - PORTB Bit 3

Một phần của tài liệu Nghiên cứu, chế tạo mạng cảm biến không dây giám sát nhiệt độ, độ ẩm môi trường (Trang 72)