Ta thực hiện đo với các túi khí CO có nồng độ là 0,2%; 0,1% và 0,05% ở điều kiện nhiệt độ phòng là 250C, áp suất là 1 atm.
- Lắp đặt nút mạng, nút mạng cơ sở và gắng đầu đo CO-AF vào nút mạng 1 như hình 3.9.
- Cấp nguồn cho nút mạng gắn cảm biến và nút mạng cơ sở, ta thực hiện đo nồng độ CO trong môi trường không khí xung quanh.
Kết quả đo như sau: nút mạng 1 đo được 0 ppm, nút mạng 2 và 3 chưa có dữ liệu (do nút 2 và 3 không có đầu đo khí CO) (hình 3.10).
- Cho đầu đo khí CO vào túi nilon, thực hiện hút chân không cho túi (hình 3.11). Sau đó bơm khí CO nồng độ 0,2% vào trong túi đựng đầu đo (hình 3.12):
Thực hiện đo 5 lần, mỗi lần cách nhau 10 phút với mỗi nồng độ khí CO 0,2%; CO 0,1% và CO 0,05%, ta thu được kết quả trong bảng 3.1.
Hình 3.10. Đo nồng độ CO trong không khí
Số lần đo Nồng độ Kết quả lần 1 (ppm) Kết quả lần 2 (ppm) Kết quả lần 3 (ppm) Kết quả lần 4 (ppm) Kết quả lần 5 (ppm) Trung bình (ppm) CO 0,05% 356 362 397 364 321 380 CO 0,1% 787 708 737 722 781 707 CO 0,2% 1594 1558 1519 1562 1517 1590
Bảng 3.1. Kết quả đo thử nghiệm lần đầu
Mặt khác, như kết quả tính toán ở trong chương 2 ta có:
Khối lượng CO nguyên chất trong một lít CO 0,2% là 2,28267mg Khối lượng CO nguyên chất trong một lít CO 0,1% là 1,14372mg Khối lượng CO nguyên chất trong một lít CO 0,05% là 0,57074mg
Áp dụng công thức quy đổi: M m mg ppm 3 45 , 24 (3.1) Đổi nồng độ CO ra ppm như sau:
- Nồng độ CO theo đơn vị ppm được tính trong 1m3
khí CO 0,2% là: ppm 548 , 1992 01 , 28 67 , 2282 45 , 24
- Nồng độ CO theo đơn vị ppm được tính trong 1m3
khí CO 0,2% là: ppm 356 , 998 01 , 28 72 , 1143 45 , 24
- Nồng độ CO theo đơn vị ppm được tính trong 1m3 khí CO 0,2% là:
ppm 2 , 498 01 , 28 74 , 570 45 , 24
Như vậy, so sánh giữa 2 kết quả trên ta thấy kết quả của đầu đo là chưa chính xác và cần phải hiệu chỉnh lại.
3.2.2. Hiệu chỉnh lại đầu đo khí CO
Để hiệu chỉnh đầu đo khí, ta thực hiện như sau: - Bước 1: Đọc giá trị ADC:
Trong đầu đo sử dụng chip MSP430F2013 của hãng Texas Instruments, đây là vi điều khiển có bộ ADC 16 bit, được sử dụng để chuyển tín hiệu điện áp tương tự sau khi khuyếch đại từ IC1 cảm biến thành tín hiệu số.
Để đọc dữ liệu sau khi chuyển đổi từ tương tự thành số của MSP430F2013, ta sử dụng lệnh:
int Raw_ADC_Value; //khai báo biến
Raw_ADC_Value = SD16MEM0; //đọc ADC
Sau khi khai báo lệnh đọc dữ liệu trên vào phần mềm, ta kết nối đầu đo vào máy tính thông qua thiết bị debug và nạp chương trình. Sau đó vừa debug chương trình để quan sát giá trị biến Raw_ADC_Value vừa thực hiện đo nồng độ CO trong không khí ta thu được dữ liệu số có giá trị trong nhãn Value (màu vàng) ở hình 3.13
Tiếp theo, lần lượt bơm khí CO với các nồng độ tương ứng: CO 0,05%; CO 0,1% và CO 0,2% vào túi nilon chứa đầu đo bên trong, ta thu được các giá trị số như sau: Khí CO Giá trị ADC (Raw_ADC_Value ) Không khí 15980 CO 0,05% 23126 CO 0,1% 31814 CO 0,2% 48925
- Bước 2: Tính nồng độ khí CO, vì dòng điện sinh ra tỉ lệ tuyến tính với nồng độ CO nên ta có phương trình:
PCO = a. Raw_ADC_Value + b (3.2)
Trong đó, đã biết giá trị của ADC và nồng độ CO thực tế tương ứng với các nồng độ CO ở trên tại 4 điểm, từ đó ta có thể tìm được mối liên hệ giữa giá trị ADC và nồng độ CO như hình 3.12. Khí CO Giá trị ADC (Raw_ADC_Value ) Nồng độ CO (ppm) Không khí 15980 0 CO 0,05% 23126 498,2 CO 0,1% 31814 998,356 CO 0,2% 48925 1992,548
Sử dụng phần mềm Excel, ta có dạng phương trình như sau:
Từ đồ thị trên ta thấy mối quan hệ giữa nồng độ khí chuẩn và giá trị điện áp có dạng tuyến tính, và phương trình có dạng: y = 0,0599x – 921,21
Kết hợp với phương trình (3.2) ta suy ra y là nồng độ CO (ppm), x là giá trị ADC và các hệ số a và b.
Từ kết quả này, ta lập trình lại cho đầu đo: - Lệnh tính nồng độ ban đầu:
Raw_ADC_Value = SD16MEM0; // đọc ADC
Pco = Raw_ADC_Value*0,06353 – 1020,408; // tính nồng độ khí CO
- Lệnh sau khi hiệu chỉnh:
Raw_ADC_Value = SD16MEM0; // đọc ADC
Pco = Raw_ADC_Value*0.0599 - 921.21; // tính nồng độ khí CO
Sau khi nạp lại chương trình cho đầu đo, thực hiện ghép nối và đo lại với các mẫu khí trên, ta thu được kết quả như sau:
- Đo mẫu khí CO 0,05%: kết quả đo trung bình 495,5 ppm
- Đo mẫu khí CO 0,1%: kết quả đo trung bình 987,5 ppm
Hình 3.13. Đo mẫu khí CO 0,05%
- Đo mẫu khí CO 0,2%: kết quả đo trung bình 1994,6 ppm
Sau khi hiệu chỉnh ta thấy kết quả giữa lý thuyết, trước khi hiệu chỉnh và sau khi hiệu chỉnh như sau:
Khí CO Nồng độ CO (ppm) Theo lý thuyết Nồng độ CO (ppm) Trƣớc hiệu chỉnh Nồng độ CO trung bình (ppm) Sau hiệu chỉnh
Sai số sau hiệu chỉnh so với lý
thuyết
CO 0,05% 498,2 380 495,5 0,54%
CO 0,1% 998,356 707 987,5 1,09%
CO 0,2% 1992,548 1590 1994,6 0,1%
Từ bảng so sánh trên, ta thấy kết quả sau khi hiệu chỉnh gần sát với kết quả tính theo lý thuyết với sai số trung bình = 0,576%, sai số này có thể chấp nhận được.
KẾT LUẬN
Luận văn đã giới thiệu tổng quan về mạng cảm biến không dây, cấu tạo và phân loại nút mạng, đồng thời giới thiệu một số ứng dụng của nó trong đời sống xã hội. Mặt khác, luận văn này đã trình bày và chỉ ra những ảnh hưởng của một số khí độc do các nguồn phát thải hàng ngày đến môi trường sống con người, giới thiệu một số loại đầu đo khí độc và ứng dụng của nó trong mạng cảm biến không dây để giám sát môi trường.
Trên cơ sở nhu cầu cần thiết của việc chuẩn hóa đầu đo khí độc, luận văn đã xây dựng được quy trình chế tạo ra các mẫu khí có nồng độ tùy theo ý muốn trong dải an toàn đến độc hại đối với sức khỏe con người. Trên cơ sở đó, thông qua việc tìm hiểu phương pháp phân tích phổ hấp thụ phân tử kết hợp với các thí nghiệm hóa học đã xây dựng được quy trình chuẩn kiểm nghiệm và đo đạc được mọi mẫu khí nói chung và các mẫu khí đã tạo ra theo quy trình pha chế trên.
Đặc biệt, luận văn đã giới thiệu tổng quan về đầu đo khí độc CO, mạch điện tử điều khiển cảm biến và tiến hành các bước chuẩn hóa đầu đo khí độc CO cho mạng cảm biến không dây.
Như vậy, sau một quá trình học tập, nghiên cứu, tiến hành thí nghiệm và kiểm thử để hoàn thành nội dung và mục tiêu của luận văn, em rút ra một số kết luận sau:
1.Giới thiệu được một số khí độc hại thải ra môi trường ảnh hưởng đến sức khỏe và đời sống của con người. Đồng thời giới thiệu tổng quan về mạng cảm biến không dây, các nút mạng cảm biến, các ứng dụng của mạng cảm biến trong đời sống xã hội. Trên cơ sở đó giới thiệu về một số đầu đo khí độc sử dụng để giám sát môi trường. Đặc biệt đã giới thiệu chi tiết về đầu đo khí độc CO-AF ứng dụng cho mạng cảm biến không dây để đo khí độc CO.
2.Tạo ra được các nồng độ khí độc khác nhau theo mong muốn trong dải từ an toàn đến độc hại đối với sức khỏe con người từ một khí có nồng độ cao để phục vụ cho việc chuẩn hóa đầu đo khí độc ứng dụng trong mạng WSN. Đồng thời đã xây dựng được một quy trình có thể kiểm nghiệm mọi mẫu khí nói chung và những mẫu khí được tạo ra theo quy trình pha chế.
3.Pha chế và kiểm thử trên mẫu khí độc CO nồng độ 0,2% theo quy trình pha chế là rất phù hợp với sai số rất nhỏ.
4.Thực hiện chuẩn hóa được đầu đo khí độc CO-AF và ghép nối đầu đo với nút mạng cảm biến không dây để kiểm thử hoạt động đo thông số môi trường và đo các mẫu khí độc CO với các nồng độ khác nhau được pha chế theo quy trình với sai số trung bình 0,576%. Sai số này là rất nhỏ và có thể chấp nhận được.
Với những kết luận đó, cho phép bằng quy trình chế tạo mẫu khí ở trên kết hợp với các bước chuẩn hóa và kiểm thử đầu đo CO có thể áp dụng trong thực tế để chuẩn hóa đầu đo khí ứng dụng cho WSN.
Trên cơ sở luận văn này, ta có thể áp dụng với các loại khí độc khác để phục vụ cho việc chuẩn hóa nhiều loại đầu đo khí độc khác nhau của mạng cảm biến không dây.
TÀI LIỆU THAM KHẢO
Tiếng Việt:
[1] Vƣơng Đạo Vy, Mạng và truyền dữ liệu, Nhà xuất bản đại học quốc gia Hà Nội. [2] Trần Tự Hiếu, Từ Vọng Nghi, Nguyễn Văn Ri, Nguyễn Xuân Trung, Hóa học phân tích, Nhà xuất bản đại học Quốc gia Hà Nội.
[3] QCVN 06:2009/BTNMT, Quy chuẩn kỹ thuật quốc gia về một số chất độc hại trong không khí xung quanh, Bộ Tài nguyên và Môi trường.
[4] TCVN 6438 : 2001, Giới hạn lớn nhất cho phép của khí thải các phương tiện giao thông đường bộ, Bộ GT&VT.
[5] QCVN 19:2009/BTNMT, Quy chuẩn kỹ thuật quốc gia về khí thải công nghiệp đối với bụi và các chất vô cơ, Bộ Tài nguyên và Môi trường.
Tiếng Anh:
[6] Bhaskar Krishnamachari, Networking Wireless Sensor, Cambridge University Press.
[7] Chipcon, CC1010 Datasheet.
[8] Henan Hanwei Electronics Co, MQ6, MQ7,MG811Datasheet.
[9] E2V, VQ101HTDatasheet.
[10] DET-TRONICS, SPECIFICATION DATA Datasheet.
PHỤ LỤC
Chƣơng trình nhúng cho đầu đo khí độc CO-AF
#include <msp430x20x3.h> #define Tbit 102//793 #define PRESSURE_SENSOR 1 #define FORCE_SENSOR 2 #define IR_SENSOR 3 #define TEMPERATURE_SENSOR 4 #define CURRENT_SENSOR 5 #define VOLTAGE_SENSOR 6 #define TOXIC_CO_AF 7 #define TOXIC_SO2_AE 8 #define TOXIC_NO2_AE 9 #define TOXIC_H2S_A1 10 #define UNKNOWN_SENSOR 0xFF #define SENSOR_TYPE TOXIC_CO_AF static unsigned char /*rxbit*/ txbit; // RX/TX bit counters, do NOT modify volatile unsigned short rxbuf, txbuf; // RX/TX buffers, do NOT modify unsigned char DCO_Calib(void); void transmit(unsigned char txdata); void AD16Setup(void); void delay_timebit(void); void puts(char *); void main(void) { // char so[10]; int Raw_ADC_Value; int Pco; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer // DCO calib
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation */ __delay_cycles(100000); // startup delay
P1DIR |= 0x10; // P1.4 output P1OUT |= 0x10; // set bus idle state P1IE |= 0x04; // P1.2 interrupt enabled P1IES |= 0x04; // P1.2 Hi/lo edge P1IFG &= ~0x04; // P1.2 IFG cleared
SD16CTL = SD16REFON + SD16SSEL_0 + SD16DIV_1; // 1.2V ref, SMCLK/2
SD16INCTL0 = SD16INCH_0; // A0+/-
SD16CCTL0 = SD16SNGL + SD16UNI + SD16OSR_1024; // Single conv, interrupt
SD16INCTL0 |= SD16INTDLY_0; // interrupt after 4 conversion SD16AE = SD16AE0;
_BIS_SR(GIE); // Enter LPM0 w/ interrupt rxbuf = 0; while(1) { if(rxbuf) {
SD16CCTL0 &= ~SD16IFG; // clear SD16IFG
SD16CCTL0 |= SD16SC; // Set bit to start conversion while(!(SD16CCTL0 & SD16IFG)); // wait SD16IFG = 1
transmit(SENSOR_TYPE); // transmit ID
Raw_ADC_Value = SD16MEM0; // Save CH0 results (clears IFG)
Pco = Raw_ADC_Value*0.0599 -921.21; //tinh nong do CO transmit((Pco>>8)&0x00FF); transmit(Pco & 0x00FF); rxbuf = 0; P1IE |= 0x04; } } }
// Port 1 interrupt service routine #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) {
P1IE &= ~0x04; // P1.2 interrupt disable rxbuf = 1;
P1IFG &= ~0x04; // Clear interrupt flag } void puts(char * str) { while(*str) { transmit(*str++); } }
void transmit(unsigned char txdata) {
txbit = 10;
txbuf = txdata + 0x100; // add mark start bit txbuf = txbuf << 1; // add space stop bit CCR0 = Tbit;
CCTL0 &= ~CCIFG; // clear CCR0 flag CCTL0 |= CCIE; // CCR0 interrupt enabled // Start counting
TACTL = TASSEL_2 + MC_1; // SMCLK, upmode (Up to CCR0) while((CCTL0 && CCIE) ); // wait for CCIE = 0
// Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) {
CCR0 = Tbit; if(txbit == 0) {
CCTL0 &= ~CCIE; // CCR0 interrupt disabled // P1IE |= 0x04; // P1.2 interrupt enabled
} else { if (txbuf & 0x01) { P1OUT |= 0x10; } else P1OUT &= ~0x10; txbuf = txbuf >> 1; --txbit; } }