LỜI NÓI ĐẦUNgày nay, với sự phát triển của nền công nghiệp vi mạch điện tử, các hệ thống đo lường và điều khiển dần dần được số hóa và tự động hóa.. Các kỹ thuật tiên tiến như vi xử lý,
Trang 2: Lê Minh Hiếu MSSV: 20172548
Hà Nội, 12-2021
Trang 3LỜI NÓI ĐẦU
Ngày nay, với sự phát triển của nền công nghiệp vi mạch điện tử, các hệ thống đo lường và điều khiển dần dần được số hóa và tự động hóa Các kỹ thuật tiên tiến như vi
xử lý, vi mạch số,… được ứng dụng nhiều vào lĩnh vực đo lường và điều khiển thay cho các hệ thống thô sơ trước, với tốc độ xử lý nhanh hơn và chính xác hơn do các lệnh chương trình tự động được thiết lập trước.Trong quá trình sản xuất, việc đo và thống kê nhiệt độ, độ ẩm một các tự động là yêu cầu hết sức cần thiết trong các nhà máy xí nghiệp hiện nay Nếu nắm bắt được nhiệt độ đô ẩm làm việc của các hệ thống, dây chuyền sản xuất sẽ giúp biết được tình trạng hoạt động của máy móc và có những phương pháp xử lý kịp thời, tránh những sự cố hay hư hỏng không đáng có
Nhận biết được tầm quan trọng của việc đo và khống chế nhiệt độ, em quyết định chọn đề tài “Thiết kế mạch đo nhiệt độ và độ ẩm” làm đồ án thiết kế 2 Đề tài giúp em tích lũy được thêm nhiều kiến thức về mạch điện tử cũng như trau dồi thêm nhiều kinh nghiệm để phục vụ cho những môn học sau này.
Em xin gửi lời cảm ơn đến thầy Tào Văn Cường đã chỉ bảo và góp ý giúp em trong suốt quá trình thực hiện đồ án Em đã cố gắng hết sức để đề tài đạt kết quả tốt nhất nhưng do hạn chế về kiến thức chuyên môn cũng như thời gian nên đề tài sẽ không tránh khỏi những thiết sót nhất định Em rất mong nhận được những lời nhận xét của thầy để em có thể rút kinh nghiệm và cải tiến, phát triển đề tài.
Trang 4BAO.cao.do.an.THIET.ke.II.de.tai.THIET.ke.MACH.do.NHIET.do.va.do.amBAO.cao.do.an.THIET.ke.II.de.tai.THIET.ke.MACH.do.NHIET.do.va.do.amBAO.cao.do.an.THIET.ke.II.de.tai.THIET.ke.MACH.do.NHIET.do.va.do.amBAO.cao.do.an.THIET.ke.II.de.tai.THIET.ke.MACH.do.NHIET.do.va.do.amBAO.cao.do.an.THIET.ke.II.de.tai.THIET.ke.MACH.do.NHIET.do.va.do.amBAO.cao.do.an.THIET.ke.II.de.tai.THIET.ke.MACH.do.NHIET.do.va.do.amBAO.cao.do.an.THIET.ke.II.de.tai.THIET.ke.MACH.do.NHIET.do.va.do.amBAO.cao.do.an.THIET.ke.II.de.tai.THIET.ke.MACH.do.NHIET.do.va.do.am
Trang 5MỤC LỤC
DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT i
DANH MỤC HÌNH VẼ ii
DANH MỤC BẢNG BIỂU iii
CHƯƠNG 1 MÔ TẢ ĐỀ TÀI 1
1.1 Giới thiệu chung 1
1.2 Phân tích thiết kế 2
1.2.1 Yêu cầu chức năng 2
1.2.2 Yêu cầu phi chức năng 2
CHƯƠNG 2 THIẾT KẾ HỆ THỐNG 1
2.1 Thiết kế sơ đồ khối 1
2.2 Chi tiết từng khối 1
2.2.1 Khối nguồn 1
2.2.2 Khối cảm biến 2
2.2.3 Khối xử lý 2
2.2.4 Khối hiển thị 3
2.3 Sơ đồ mạch nguyên lý 5
2.4 Mạch thực tế 6
CHƯƠNG 3 ĐÁNH GIÁ VÀ HƯỚNG PHÁT TRIỂN 8
3.1 Đánh giá 8
3.2 Hướng phát triển 8
KẾT LUẬN 9
TÀI LIỆU THAM KHẢO 10
PHỤ LỤC 11
Trang 7DANH MỤC HÌNH VẼ
Hình 2-1 Sơ đồ khối hệ thống 1
Hình 2-2 Sơ đồ nguyên lý khối nguồn 1
Hình 2-3 Hình ảnh module DHT11 2
Hình 2-4 Sơ đồ nguyên lý khối cảm biến 2
Hình 2-5 Sơ đồ chân của vi điều khiển ATmage16 3
Hình 2-6 Màn hình LCD1602 3
Hình 2-7 Sơ đồ nguyên lý khối hiển thị 5
Hình 2-8 Sơ đồ nguyên lý hệ thống 6
Hình 2-9 Hình ảnh mạch thực tế 7
Trang 8DANH MỤC BẢNG BIỂU
Bảng 2-1 Ý nghĩa các chân của LCD1602 4
iii
Trang 9CHƯƠNG 1 MÔ TẢ ĐỀ TÀI
1.1 Giới thiệu chung
Nhiệt độ là một đại lượng vật lý gắn liền với cuốc sống của chúng ta Nó tác động đến mọi người mọi mặt của cuốc sống Và các lĩnh vực sản xuất cũng vậy, nhiết
độ ảnh hưởng trực tiếp tới quá trình vận hành, sản xuất.
Độ ẩm là đại lượng vật lý xác định khối lượng hơi nước tính theo gam có trong đơn vị thể tích xác định hay còn nói đó là lượng hơi nước có trong không khí Độ ẩm chính là thước đo cho thấy được khả năng mưa hoặc lượng mưa, sương mù của thời tiết.
Đối với con người thì độ ẩm càng cao việc đổ mồ hôi làm mát cơ thể càng kém.
Vì thế mà trong những điều kiện thời tiết độ ẩm cao khiến cho chúng ta cảm thấy khó chịu Độ ẩm không khí quá cao sẽ tạo điều kiện cho vi khuẩn, vi sinh vật phát triển mạnh mẽ Đây cũng là nguyên nhân gây ra nhiều bệnh lý hô hấp, ảnh hưởng trực tiếp đến sức khỏe mọi người.
Trong lĩnh vực sản xuất công nghiệp, nhiệt độ có tác động trực tiếp đến chất lượng sản phẩm đầu ra như trong quá trình gia công hàn vật liệu, nhiệt độ ảnh hưởng tới độ chính xác, tính giãn nở của vật liệu.
Trong y học, nhiệt độ ảnh hưởng tới kết quả nghiên cứu chữa bệnh.
Trong nông nghiệp, nó ảnh hưởng trực tiếp đến thành quả và năng suất nông nghiệp; trong chế biến và bảo quản thực phẩm.
Trong quá trình nung nóng, sấy như nung gạch men thì nhiệt độ ảnh hưởng tới chất lượng về độ cứng, độ dẻo, màu sắc của sản phầm đầu ra.
Nhiệt độ là đại lượng chỉ có thể đo gián tiếp trên cơ sở tính chất của vật phụ thuộc nhiệt độ Hiện nay, chúng ta có nhiều nguyên lý cảm biến khác nhau để chế tạo cảm biến nhiệt độ như: nhiệt điện trở, cặp nhiệt ngẫu, phương pháp quang dựa trên phân bố bức xạ nhiệt, phương pháp dựa trên sự dãn nở của vật rắn, lỏng, khí,…
Như vậy, việc đo nhiệt độ, độ ẩm bằng cảm biến đang là phương pháp phổ biến
và tiết kiệm trong đời sống.
Trang 101.2 Phân tích thiết kế
1.2.1 Yêu cầu chức năng
Mạch có yêu cầu chức năng như sau:
Đo được nhiệt độ và độ ẩm
Hiển thị nhiệt độ, độ ẩm lên màn hình LCD
Có thể tùy chỉnh ngưỡng cảnh báo
1.2.2 Yêu cầu phi chức năng
Mạch có các yêu cầu phi chức năng như sau:
Nhiệt độ và độ ẩm đo được với sai số thấp
Trang 11CHƯƠNG 2 THIẾT KẾ HỆ THỐNG 2.1 Thiết kế sơ đồ khối
− Khối cảm biến: Đo nhiệt độ và độ ẩm từ môi trường
− Khối giao tiếp: Giao tiếp với máy tính để thay đổi ngưỡng cảnh báo
− Khối xử lý: Xử lý tính toán
− Khối hiện thị: Hiện thị nhiệt độ, độ ẩm
2.2 Chi tiết từng khối
2.2.1 Khối nguồn
Hình 2-2 Sơ đồ nguyên lý khối nguồn
Trang 12Cảm biến nhiệt độ và độ ẩm DHT11 là loại linh kiện điện tử cảm biến nhiệt độ
độ ẩm Đây là cảm biến cơ bản và giá rẻ so với các cảm biến khác, rất thích hợp cho những ứng dụng thu thập dữ liệu cơ bản Cảm biến DHT11 có 2 phần, 1 cảm biến độ
ẩm điện dung và một điện trở nhiệt.
Dữ liệu ngõ ra của cảm biến DHT là chuẩn 1 dây (One-Wire), có thể dùng bất
cứ vi điều khiển nào để lấy dữ liệu ra Dữ liệu độ ẩm mà cảm biến đo được mức từ 20% ~ 90% Bộ tiền xử lý tín hiệu tích hợp trong cảm biến giúp bạn có được dữ liệu chính xác mà không phải qua bất kỳ tính toán nào.
Nhiệt độ đo từ 0 ~ 50 Độ C, thời gian trả dữ liệu < 50ms.
Trang 13Hình 2-5 Sơ đồ chân của vi điều khiển ATmage16
ATmega16 là một bộ vi điều khiển 8 bit dựa trên kiến trúc RISC bộ nhớ chương trình 16KB ISP flash có thể ghi xóa hàng nghìn lần, 512B EEPROM, một bộ nhớ RAM vô cùng lớn trong thế giới vi xử lý 8 bit (1KB SRAM).
Với 32 chân có thể sử dụng cho các kết nối I/O, 3 bộ định thời, đầy đủ các giao tiếp ngoại vi như I2C, UART, SPI, có hỗ trợ ngắt ngoài, bộ chuyển đổi tương tự sang
số ADC với độ phân giải 10 bit.
Trong khối này, vi điều khiển sẽ dùng giao tiếp UART để giao tiếp với máy tính, kết nối với cảm biến nhiệt độ, hiển thị lên LCD và cảnh báo nếu vượt ngưỡng
Trang 14Bảng 2-1 Ý nghĩa các chân của LCD1602 Chân Ký hiệu Mô tả
GND của mạch điều khiển
với VCC=5V của mạch điều khiển
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD.
logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic
“1” để LCD ở chế độ đọc
bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high- to-low transition) của tín hiệu chân E.
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát
MPU Có 2 chế độ sử dụng 8 đường bus này : 4
Trang 15+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7.
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7
Trang 16Hình 2-8 Sơ đồ nguyên lý hệ thống 2.4 Mạch thực tế
Sau khi sử dụng ngôn ngữ C để lập trình cho vi điều khiển, chúng ta sẽ tiến hành biên dịch mã nguồn sang file mã máy dưới dạng hex Sau đó chúng ta sẽ sử dụng mạch nạp AVR USB và phần mềm Progisp để nạp file này xuống vi điều khiển Sau đó tiến hành kiểm tra hoạt động của mạch theo như ý tưởng thiết kế đã nêu lên phần trước Hình ảnh bên dưới miêu tả quá trình hoạt động của mạch thực tế.
6
Trang 17Hình 2-9 Hình ảnh mạch thực tế
Trang 18Ưu điểm:
o Độ ẩm: 20-90% RH, sai số ± 5%RH.
o Khả năng đáp ứng nhanh với độ thay đổi nhiệt độ của môi trường.
o Mạch được thiết kế nhỏ gọn, dễ sử dụng, tiện lợi.
o Có thể sử dụng ở những nơi cần theo dõi nhiệt độ như nhà kho, công xưởng, nhà ở và trong một số thiết bị máy móc khác.
- Để tăng độ chính xác thì có thể sử dụng 1 loại cảm biến khác.
- Thiết lập các trạm đo nhiệt độ, độ ẩm sau đó gửi dữ liệu về server bằng cách sử dụng Module SIM900A hoặc ESP8266.
8
Trang 19KẾT LUẬN
Trong đồ án này bản thân em đã thiết kế được mạch đo nhiệt độ độ ẩm sử dụng cảm biến cho tín hiệu số, hoàn thành được mục tiêu đề ra của đồ án Tuy mạch chạy thử nghiệm còn đơn giản và tồn tại một số hạn chế nhất định nhưng có thể hoàn thiện
và cải tiến mạch với những phương pháp em đề xuất ở trên Em rất hi vọng nhận được những lời nhận xét và đánh giá từ thầy hướng dẫn để em có thể phát triển đề tài, cũng như thực hiện được những project lớn hơn.
Trang 20TÀI LIỆU THAM KHẢO
[1] https://www.electronicwings.com/avr-atmega/atmega1632-usart , truy nhập lần cuối 12/2020
Trang 21#define LCD_Data_Port PORTC /* Define LCD data port */
#define LCD_Command_Port PORTD /* Define LCD data port */
#define RS PIND6 /* Define Register Select (data/command reg.)pin */
#define RW PIND5 /* Define Read/Write signal pin */
#define EN PIND7 /* Define Enable signal pin */
#define BUZZER_DDRx DDRD
#define BUZZER_PORTx PORTD
#define BUZZER_PIN PIND3 volatile char buff[10];
volatile uint8_t status_flag = 0;
volatile uint8_t buffer_pointer = 0;
int th_Temp =30, th_humi = 90;
void LCD_Command(unsigned char cmnd) {
LCD_Data_Port= cmnd;
LCD_Command_Port &= ~(1<<RS);/* RS=0 command reg */
LCD_Command_Port &= ~(1<<RW);/* RW=0 Write operation */
Trang 22LCD_Command_Port |= (1<<RS); /* RS=1 Data reg */
LCD_Command_Port &= ~(1<<RW);/* RW=0 write operation */
LCD_Command_Port |= (1<<EN); /* Enable Pulse */
LCD_Command (0x0C); /* Display ON Cursor OFF */
LCD_Command (0x06); /* Auto Increment cursor */
LCD_Command (0x01); /* Clear display */
LCD_Command (0x80); /* Cursor at home position */
}
void LCD_String (char *str) /* Send string to LCD function */ {
int i;
Trang 23for(i=0;str[i]!=0;i++) /* Send each char of string till the NULL */
{
LCD_Char (str[i]);
} }
void LCD_String_xy (char row, char pos, char *str)/* Send string to LCD with xy position */
{
if (row == 0 && pos<16) LCD_Command((pos & 0x0F)|0x80); /* Command of first row and required position<16 */
else if (row == 1 && pos<16) LCD_Command((pos & 0x0F)|0xC0); /* Command of first row and required position<16 */
LCD_String(str); /* Call LCD string function */ }
void LCD_Clear() {
LCD_Command (0x01); /* clear display */
LCD_Command (0x80); /* cursor at home position */
DDRD |=(1<<DHT11_PIN);// set output
PORTD &= ~(1<<DHT11_PIN);
_delay_ms(18); //low 18ms PORTD |=(1<<DHT11_PIN);
_delay_us(40);//high 40 us
Trang 24DDRD &= ~(1<<DHT11_PIN); // Set input
// wait data low in 80 us TCNT0 = 0x00;
while(!(PIND & (1<<DHT11_PIN)))
if (TCNT0 > 100) {
return 255; //timeout }
//wait data high in 80us TCNT0 = 0x00;
while(PIND & (1<<DHT11_PIN))
if (TCNT0 > 100) {
return 255; //timeout }
//doc 40 bit for (uint8_t i =0;i<5;i++) {
for (uint8_t j =0;j<8;j++) {
// low in 50 us TCNT0 = 0x00;
while(!(PIND & (1<<DHT11_PIN)))
if (TCNT0>60U) {
return 255; //timeout }
// HIGH for 26-28us = bit 0 / 70us = bit 1 TCNT0 = 0x00;
while(PIND & (1<<DHT11_PIN))
if (TCNT0 > 100U) {
return 255; //timeout }
uint8_t counter_tmp = TCNT0;
Trang 25if (counter_tmp > 40U) {
dht_data[i] |= (uint8_t)1<<(7-j);
} }
} if((dht_data[0] + dht_data[1] + dht_data[2] + dht_data[3]) != dht_data[4])
return 0 ; //checksum error
*temp = dht_data[2];
*humi = dht_data[0];
return 1;
} void UART_init(long USART_BAUDRATE) {
UCSRB |= (1 << RXEN) | (1 << TXEN )| (1 <<RXCIE);/* Turn on transmission and reception */
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);/* Use 8-bit character sizes */
UBRRL = BAUD_PRESCALE; /* Load lower 8-bits of the baud rate value */
UBRRH = (BAUD_PRESCALE >> 8);/* Load upper 8-bits*/
while (! (UCSRA & (1<<UDRE))); /* Wait for empty transmit buffer*/
UDR = ch ; }
Trang 26status_flag =1;
buffer_pointer=0;
}
if (buffer_pointer >5) {
status_flag =0;
} }
if ((temperature > th_Temp) || (humidity >th_humi)) // check thresh_hold
BUZZER_PORTx |= 1<< BUZZER_PIN;
else