Đề tài Đo nhiệt độ, độ ẩm khí ga
Trong mạch có 2 chân đầu ra là Aout và Dout. Trong đó:
Aout: điện áp ra tương tự. Nó chạy từ 0.3 - 4.5V, phụ thuộc vào nồng độ khí xung quanh MQ2.
Dout: điện áp ra số, giá trị 0,1 phụ thuộc vào điện áp tham chiếu và nồng độ khí mà MQ2 đo được.
Việc có chân ra số Dout rất tiện cho các ứng dụng đơn giản, không cần đến vi điều khiển. Khi đó ta chỉ cần chỉnh giá trị biến trở tới giá trị nồng độ ta muốn cảnh báo. Khi nồng độ MQ2 đo được thấp hơn mức cho phép thì Dout = 1. Đèn Led tắt. Khi nồng độ khí đo được lớn hơn nồng khí cho phép, Dout =0, đèn led sáng.
Trong đề tài này, nhóm chúng em sử dụng chân Dout của module để cảnh báo khi có nồng độ khí gas trong môi trường. Chân Dout sẽ được kết nối với 1 đầu in của MSP430G2553, khi tín hiệu đọc về là mức logic 1 thì cho tắt còi chíp, khi tín hiệu đọc về là 0 thì cho còi chíp kêu để cảnh báo.
27 trang |
Chia sẻ: hachi492 | Ngày: 07/01/2022 | Lượt xem: 423 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài Đo nhiệt độ, độ ẩm khí ga, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
BÁO CÁO ĐỒ ÁN 2
Đề Tài: Đo nhiệt độ, độ ẩm khí ga.
Yêu cầu Đề Tài: Giao tiếp qua Module Bluetooth HC05 truyền dữ liệu đo được về điện thoại hoặc PC. Báo cho người dùng biết có sự cố khi có rò rỉ khí độc.
Giáo viên hướng dẫn: Cô Đinh Thị Nhung
Họ và tên:
Nguyễn Vũ Tùng Giang 20101438 ĐTVT-08 K55
Phan Quốc Việt 20102782 ĐTVT-08 K55
Nguyễn Hữu Hiển 20101532 ĐTVT-08 K55
LỜI NÓI ĐẦU
Kỹ thuật vi xử lý và điều khiển đã xuất hiện rất nhiều trong mọi lĩnh vực khoa học kỹ thuật hiện nay. Với sự phát triển mạnh mẽ của công nghệ, nhiều họ vi xử lý và điều khiển cùng với những tính năng mới xuất hiện ngày càng đa dạng. Trong đó họ vi điều khiển MSP430 hiện đang được ứng dụng rất rộng rãi trong nhiều lĩnh vực thực tiễn.
Để từng bước làm chủ và có thể áp dụng họ vi điều khiển này vào các ứng dụng thực tiễn, nhằm giải quyết các bài toán cụ thể trong cuộc sống, trong phạm vi Project II, nhóm chúng em đã thực hiện đề tài: “Đo và hiển thị nhiệt độ, độ ẩm, của môi trường đồng thời đưa ra cảnh báo khi nồng độ khí gas của môi trường vượt quá giới hạn cho phép”. Với ý kiến đóng góp của thầy giáo hướng dẫn cùng tinh thần tự tìm hiểu, nghiên cứu nhóm chúng em đã đưa ra được một sản phẩm chạy thực tế đáp ứng tương đối đầy đủ các yêu cầu được đưa ra trong đề tài.
CHƯƠNG I: MÔ TẢ ĐỀ TÀI
Yêu cầu chức năng
- Đo được nhiệt độ, độ ẩm của môi trường.
- Đo được nồng độ khí gas trong môi trường và đưa ra cảnh báo.
- Hiển thị được giá trị nhiệt độ, độ ẩm của môi trường.
1.2. Yêu cầu phi chức năng
- Mạch hoạt động tốt ngay trong môi trường khắc nghiệt.
- Mạch thiết kế nhỏ gọn để có thể dễ dàng tiến hành lắp đặt.
- Chi phí thực hiện mạch thấp.
1.3. Các công cụ sử dụng
- IAR Embedded Workbench: trình biên dịch soạn thảo code.
- Altium Designer : phần mềm thiết kế mạch nguyên lý, mạch in.
1.4. Sơ đồ khối của hệ thống
CHƯƠNG II: THIẾT KẾ PHẦN CỨNG – PHÂN TÍCH ĐẶC ĐIỂM, CHỨC NĂNG CÁC KHỐI TRONG HỆ THỐNG
Dựa vào những yêu cầu chức năng, phi chức năng cùng sơ đồ khối của hệ thống, nhóm chúng em đã đưa ra bản thiết kế sơ đồ nguyên lý mạch như hình vẽ, trong đó khối điều khiển sử dụng KIT phát triển LaunchPad MSP430, chạy trên MSP430G2553.
Hình 1: Sơ đồ nguyên lý hệ thống
Sau đây, nhóm chúng em xin trình bày cụ thể sơ đồ, đặc điểm và chức năng của từng khối trong hệ thống.
2.1 KHỐI ĐIỀU KHIỂN – KIT LAUNCHPAD MSP430
Trong ứng dụng này, nhóm sử dụng vi điều khiển MSP430G2553 chạy trên KIT phát triển LaunchPad MSP430
Hình 2: Kit phát triển LaunchPad MSP
Kit LaunchPad MSP do hãng ST cung cấp, trên Kit bao gồm:
Khối nguồn sử dụng nguồn DC 5V.
Khối mạch nạp tích hợp sẵn giúp người sử dụng có thể trực tiếp nạp và debug chương trình ngay trên Kit.
Khối vi điều khiển gồm đế chíp và các jump cắm kết nối với I/O của vi điều khiển giúp người sử dụng có thể cắm bo mở rộng ứng dụng ra bên ngoài.
Các linh kiện khác như: Led đơn, nút bấm
Trong phạm vi Project II, nhóm chúng em sử dụng Kit để nạp chương trình và kết nối với các chân I/O của MSP430G2553 ra bo chức năng bên ngoài để giao tiếp với các cảm biến, điều khiển hiển thị, điều khiển cảnh báo.
2.2 KHỐI HIỂN THỊ
Khối hiển thị sử dụng LCD16x2, sử dụng để hiển thị giá trị nhiệt độ, độ ẩm của môi trường trả về từ các cảm biến.
Hình 3: Khối hiển thị LCD16x2
Biến trở VR1 10K sử dụng để chỉnh độ tương phản của màn hình LCD16x2.
2.3 KHỐI CẢNH BÁO
Khối cảnh báo sử dụng còi chíp 5V, khi nồng độ khí gas trong môi trường vượt quá giới hạn cho phép, khối điều khiển sẽ phát tín hiệu điều khiển đến khối cảnh báo và còi chíp sẽ kêu. Khi nồng độ khí gas nằm trong giới hạn an toàn, khối điều khiển sẽ phát tín hiệu điều khiển tắt còi chíp.
Hình 4: Khối cảnh báo
2.4 KHỐI CẢM BIẾN
Để đo được nhiệt độ, độ ẩm và nồng độ khí gas trong môi trường, nhóm chúng em sử dụng 2 loại cảm biến:
Cảm biến nhiệt độ và độ ẩm DHT11.
Cảm biến khí gas MQ2.
Trên bo mạch, các jump cắm được thiết kế để dễ dàng kết nối với các cảm biến.
Hình 5: Jump kết nối cảm biến
2.4.1 Cảm biến nhiệt độ và độ ẩm DHT11
Hình 6: Cảm biến nhiệt độ và độ ẩm DHT11
Cảm biến DHT11 gồm 4 chân:
- VCC: Cấp nguồn 5V cho cảm biến hoạt động.
- GND: Chân nối đất.
- DATA: Chân dữ liệu để cảm biến giao tiếp với vi điều khiển.
- NC: chân không kết nối.
Một số thông số kỹ thuật:
Đo độ ẩm: 20%-95%.
Nhiệt độ: 0-50ºC.
Sai số độ ẩm ±5%.
Sai số nhiệt độ: ±2ºC.
Nguyên lý hoạt động:
- Sơ đồ kết nối vi xử lý:
Hình 7: Sơ đồ kết nối DHT11 với vi điều khiển
- Nguyên lý hoạt động:
Để có thể giao tiếp với DHT11 theo chuẩn 1 chân vi xử lý thực hiện theo 2 bước:
Gửi tin hiệu muốn đo (Start) tới DHT11, sau đó DHT11 xác nhận lại.
Khi đã giao tiếp được với DHT11, Cảm biến sẽ gửi lại 5 byte dữ liệu và nhiệt độ đo được.
Bước 1: gửi tín hiệu Start
Hình 8: Tín hiệu START gửi từ vi điều khiển
MCU thiết lập chân DATA là Output, kéo chân DATA xuống 0 trong khoảng thời gian >18ms.
MCU đưa chân DATA lên 1, sau đó thiết lập lại là chân đầu vào.
Sau khoảng 20-40us, DHT11 sẽ kéo chân DATA xuống thấp. Nếu >40us mà chân DATA ko được kéo xuống thấp nghĩa là ko giao tiếp được với DHT11.
Chân DATA sẽ ở mức thấp 80us sau đó nó được DHT11 kéo nên cao trong 80us. Bằng việc giám sát chân DATA, MCU có thể biết được có giao tiếp được với DHT11 ko. Nếu tín hiệu đo được DHT11 lên cao, khi đó hoàn thiện quá trình giao tiếp của MCU với DHT.
Bước 2: đọc giá trị trên DHT11
DHT11 sẽ trả giá trị nhiệt độ và độ ẩm về dưới dạng 5 byte. Trong đó:
Byte 1: giá trị phần nguyên của độ ẩm (RH%)
Byte 2: giá trị phần thập phân của độ ẩm (RH%)
Byte 3: giá trị phần nguyên của nhiệt độ (TC)
Byte 4 : giá trị phần thập phân của nhiệt độ (TC)
Byte 5 : kiểm tra tổng.
Nếu Byte 5 = (8 bit) (Byte1 +Byte2 +Byte3 + Byte4) thì giá trị độ ẩm và nhiệt độ là chính xác, nếu sai thì kết quả đo không có nghĩa.
Đọc dữ liệu: Sau khi giao tiếp được với DHT11, DHT11 sẽ gửi liên tiếp 40 bit 0 hoặc 1 về MCU, tương ứng chia thành 5 byte kết quả của Nhiệt độ và độ ẩm.
Bit 0:
Bit 1:
Sau khi tín hiệu được đưa về 0, ta đợi chân DATA của MCU được DHT11 kéo lên 1. Nếu chân DATA là 1 trong khoảng 26-28 us thì là 0, còn nếu tồn tại 70us là 1. Do đó trong lập trình ta bắt sườn lên của chân DATA, sau đó delay 50us. Nếu giá trị đo được là 0 thì ta đọc được bit 0, nếu giá trị đo được là 1 thì giá trị đo được là 1. Cứ như thế ta đọc các bit tiếp theo.
2.4.2 KHỐI CẢM BIẾN KHÍ GAS MQ2
- MQ2 là cảm biến khí, dùng để phát hiện các khí có thể gây cháy. Nó được cấu tạo từ chất bán dẫn SnO2. Chất này có độ nhạy cảm thấp với không khí sạch. Nhưng khi trong môi trường có chất ngây cháy, độ dẫn của nó thay đổi ngay. Chính nhờ đặc điểm này người ta thêm vào mạch đơn gian để biến đổi từ độ nhạy này sang điện áp.
- Khi môi trường sạch điện áp đầu ra của cảm biến thấp, giá trị điện áp đầu ra càng tăng khi nồng độ khí gây cháy xung quang MQ2 càng cao.
- MQ2 hoạt động rất tốt trong môi trường khí hóa lỏng LPG, H2, và các chất khí gây cháy khác. Nó được sử dụng rộng rãi trong công nghiệp và dân dụng do mạch đơn giản và chi phí thấp.
Hình 9: Sơ đồ chân cảm biến MQ2
- Trong đó:
Chân 1,3 là A
Chân 2,5 là B
Chân 4,6 là C
- Sơ đồ kết nối MQ2
Hình 10: Sơ đồ module MQ2
- Trong mạch có 2 chân đầu ra là Aout và Dout. Trong đó:
Aout: điện áp ra tương tự. Nó chạy từ 0.3 - 4.5V, phụ thuộc vào nồng độ khí xung quanh MQ2.
Dout: điện áp ra số, giá trị 0,1 phụ thuộc vào điện áp tham chiếu và nồng độ khí mà MQ2 đo được.
Việc có chân ra số Dout rất tiện cho các ứng dụng đơn giản, không cần đến vi điều khiển. Khi đó ta chỉ cần chỉnh giá trị biến trở tới giá trị nồng độ ta muốn cảnh báo. Khi nồng độ MQ2 đo được thấp hơn mức cho phép thì Dout = 1. Đèn Led tắt. Khi nồng độ khí đo được lớn hơn nồng khí cho phép, Dout =0, đèn led sáng.
Trong đề tài này, nhóm chúng em sử dụng chân Dout của module để cảnh báo khi có nồng độ khí gas trong môi trường. Chân Dout sẽ được kết nối với 1 đầu in của MSP430G2553, khi tín hiệu đọc về là mức logic 1 thì cho tắt còi chíp, khi tín hiệu đọc về là 0 thì cho còi chíp kêu để cảnh báo.
Sau khi thiết kế sơ đồ nguyên lý, nhóm đã tiến hành đi dây và vẽ mạch in để có thể làm được mạch in bằng tay:
Hình 11: Sơ đồ mạch in của hệ thống
CHƯƠNG II: LẬP TRÌNH PHẤN MỀM
Chương trình của hệ thống viết trên trình biên dịch IAR Embedded Workbench, chạy trên vi điều khiển MSP430G2553.
Code gồm các file:
Main.c: Chứa chương trình chính, nêu rõ thuật toán của đề tài.
Main.h: Chứa các khai báo thư viện, định nghĩa các chân I/O giao tiếp.
Các file driver: dht11, lcd16x2,đây là các file nêu rõ phương thức giao tiếp giữa vi điều khiển với các driver.
Hàm main.c:
#include "main.h"
void Buzz_On()
{
P2OUT |= SPEAK;
}
void Buzz_Off()
{
P2OUT &= ~SPEAK;
}
void main(void)
{
uint8_t temp=2;
uint8_t humi=12;
uint8_t str[16];
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer, Tan so Clock 1MHz
P1DIR = 0xff; // Cau hinh PORT1 là Output
P1OUT = 0x00;
P2DIR |= BIT0|BIT1; // Cau hinh PORT2.0, PORT2.1 là Output
P2DIR &= ~BIT2; // Cau hinh PORT2.2 là Input
P2REN &= ~BIT2; // Cau hinh khong tro treo cho PORT2.2
Buzz_Off();
LCD_Init ();
LCD_Gotoxy(0,0);
sprintf(str," PROJECT II ");
LCD_Puts(str);
_delay_cycles(2000000); // 2s
LCD_Clear();
while(1)
{
if(DHT_GetTemHumi (&temp,&humi))
{
sprintf(str,"Temp: %d%cC",temp,'\xdf');
LCD_Gotoxy(0,0);
LCD_Puts(str);
sprintf(str,"Humi: %d%c",humi,'%');
LCD_Gotoxy(0,1);
LCD_Puts(str);
}
if(P2IN & MQ2)Buzz_On();
else Buzz_Off();
}
}
Hàm main.h:
#ifndef MAIN_H_
#define MAIN_H_
/* Kieu So Nguyen Co Dau */
typedef signed char int8_t;
typedef signed int int16_t;
typedef signed long int int32_t;
/* Kieu So Nguyen Khong Dau */
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long int uint32_t;
/* Kieu So Thuc */
typedef float float32_t;
#include
#include
#include
#include
#include
// Khai bao chan cho LCD16x2 - PORT1
#define LCD_RS BIT0
#define LCD_RW BIT1
#define LCD_EN BIT2
// Khai bao cho DHT11 - PORT2
#define DHT_DDR_DATA BIT0
#define DHT_DATA_OUT BIT0
#define DHT_DATA_IN BIT0
// Khai bao Speak - PORT2
#define SPEAK BIT1
// Khai bao MQ2 - PORT2
#define MQ2 BIT2
#define DHT_ER 0
#define DHT_OK 1
#endif /*MAIN_H_*/
Driver dht11.c:
/*********************************** VI DU ************************************
uint8_t dht_nhiet_do,dht_do_am,dht_Ok;
dht_Ok = DHT_GetTemHumi(&dht_nhiet_do,&dht_do_am);
*******************************************************************************/
#include "main.h"
/*******************************************************************************
Noi Dung : MCU gui yeu cau chuyen doi den DHT11.
Tham Bien : Khong.
Tra Ve : Khong.
********************************************************************************/
uint8_t DHT_GetTemHumi (uint8_t *tem,uint8_t *humi)
{
uint8_t buffer[5]={0,0,0,0,0};
uint8_t ii,i,checksum;
P2DIR |= DHT_DDR_DATA;
P2OUT |= DHT_DATA_OUT;
//delay_us(60);
_delay_cycles(60);
P2OUT &= ~DHT_DATA_OUT;
//delay_ms(25); // it nhat 18ms
_delay_cycles(25000);
P2OUT |= DHT_DATA_OUT;
P2DIR &= ~DHT_DDR_DATA;
//delay_us(60);
_delay_cycles(60);
if(P2IN & DHT_DATA_IN)return DHT_ER ;
else while(!(P2IN & DHT_DATA_IN)); //Doi DaTa len 1
//delay_us(60);
_delay_cycles(60);
if(!(P2IN & DHT_DATA_IN))return DHT_ER;
else while(P2IN & DHT_DATA_IN); //Doi Data ve 0
//Bat dau doc du lieu
for(i=0;i<5;i++)
{
for(ii=0;ii<8;ii++)
{
while(!(P2IN & DHT_DATA_IN));//Doi Data len 1
//delay_us(50);
_delay_cycles(50);
if(P2IN & DHT_DATA_IN)
{
buffer[i]|=(1<<(7-ii));
while(P2IN & 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;
}
Driver lcd16x2.c:
#include "lcd16x2\lcd_16x2.h"
void LCD_Enable(void)
{
P1OUT |= LCD_EN;
//delay_us(3);
_delay_cycles(3);
P1OUT &= ~LCD_EN;
//delay_us(50);
_delay_cycles(50);
}
//Ham Gui 4 Bit Du Lieu Ra LCD
void LCD_Send4Bit( uint8_t Data )
{
P1OUT &= 0x0F;
P1OUT |= ((Data<<4)&0xF0);
}
// Ham Gui 1 Lenh Cho LCD
void LCD_SendCommand (uint8_t command )
{
LCD_Send4Bit ( command >>4 ); /* Gui 4 bit cao */
LCD_Enable () ;
LCD_Send4Bit ( command ); /* Gui 4 bit thap*/
LCD_Enable () ;
}
// Ham Khoi Tao LCD
void LCD_Init ( void )
{
LCD_Send4Bit(0x00);
//delay_ms(20);
_delay_cycles(20000);
P1OUT &= ~LCD_RS;
P1OUT &= ~LCD_RW;
LCD_Send4Bit(0x03);
LCD_Enable();
//delay_ms(5);
_delay_cycles(5000);
LCD_Enable();
//delay_us(100);
_delay_cycles(100);
LCD_Enable();
LCD_Send4Bit(0x02);
LCD_Enable();
LCD_SendCommand( 0x28 ); // giao thuc 4 bit, hien thi 2 hang, ki tu 5x8
LCD_SendCommand( 0x0c); // cho phep hien thi man hinh
LCD_SendCommand( 0x06 ); // tang ID, khong dich khung hinh
LCD_Clear(); // xoa toan bo khung hinh
}
//Ham Thiet lap vi tri con tro
void LCD_Gotoxy(uint8_t x, uint8_t y)
{
uint8_t address;
if(!y)
address = (0x80+x);
else
address = (0xC0+x);
delay_ms(1);
LCD_SendCommand(address);
//delay_ms(5);
_delay_cycles(5000);
}
// Ham Xoa Man Hinh LCD
void LCD_Clear()
{
LCD_SendCommand(0x01);
//delay_ms(5);
_delay_cycles(5000);
}
// Ham Gui 1 Ki Tu Len LCD
void LCD_PutChar ( uint8_t Data )
{
P1OUT |= LCD_RS;
LCD_SendCommand( Data );
P1OUT &= ~LCD_RS;
}
//Ham Gui Mot Chuoi Ki Tu Len LCD
void LCD_Puts (uint8_t *s)
{
while (*s)
{
LCD_PutChar(*s);
s++;
}
}
Hình ảnh sản phẩm mạch thật:
CHƯƠNG III: KẾT LUẬN
Qua Project II, nhóm chúng em xin cảm ơn Viện Điện Tử - Viễn Thông cùng cô Đinh Thị Nhung đã giúp chúng em có cơ hội thực tiễn, tăng khả năng làm việc theo nhóm, khả năng tự tìm hiểu nghiên cứu một vấn đề mới, đồng thời giúp chúng em tiếp cận những khó khăn thực tế khi thực hành ngoài thực tế
Các file đính kèm theo tài liệu này:
- de_tai_do_nhiet_do_do_am_khi_ga.docx