/20
ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA FAST
O❖O
BÁO CÁO
MINI PROJECT
KỸ THUẬT ĐO LƯỜNG
Chủ đề: Thiết kế lắp mạch cảm biến đo nhiệt độ, độ ẩm.
Sinh viên thực hiện: HUỲNH CÔNG ĐẠT 20PFIEV2
NGUYỄN THANH PHI 20PFIEV2
NGUYỄN DUY MINH 20PFIEV2
NGUYỄN VĂN TIẾN – 20PFIEV1
Giáo viên hướng dẫn: TS. QUỐC HUY
Đà nẵng, 2022.
TẢ Ý TƯỞNG:
Thiết kế mạch đo các thông số môi trường (nhiệt độ, độ m)
bên trong phòng học
Yêu cầu: + Nhiệt độ: 10
o
C 40
o
C
+ Độ ẩm: 40% 80%
Thiết kế mạch đo: Nhiệt độ trong khoảng 0 50
o
C
Độ ẩm trong khoảng 20 80%
Độ chính c:
Sai số dự kiến : Nhiệt độ ± 2
o
C
Độ ẩm ± 5%
Tùy thuộc vào các linh kiện, điện trở dây dẫn.
Kiến thức:
Hiểu và nắm vững khái niệm, cấu tạo và nguyên hoạt
động của các thiết bị và linh kiện điện tử : Arduino,
cảm biến nhiệt độ, LCD 16x2, Module giao tiếp I2C.
Cảm biến
Cảm
biến
nhiệt
độ +
độ ẩm
DHT11
Chuẩn hóa
Tích hợp sẵn
trong cảm
biến DHT11
Xử tín hiệu
Arduino
UNO R3
LCD 16x2
giao tiếp
qua
chuẩn
I2C
I. ĐỒ KHỐI:
II. GIỚI THIỆU LINH KIỆN:
1. Cảm biến nhiệt độ, độ ẩm DHT11
Cảm biến nhiệt độ, độ ẩm DHT11
là một loại cảm biến khá phổ biến
vì giá thành rẻ và rất dễ lấy dữu
liệu ra thông qua 1 chân wire
(Giao tiếp Digital 1 dây duy nhất)
Bộ tiền xử lý tín hiệu được tích
hợp sẵn nên không cần thêm bất
kỳ tính toán nào
.
2. Arduino UNO R3:
Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB
hoặc cấp nguồn ngoài với điện áp khuyên dùng là 7-12V DC và
giới hạn là 6-20V
Vi điều khiển
ATmega328 họ 8bit
Điện áp hoạt động
5V DC (chỉ được cấp qua cổng USB)
Tần số hoạt động
16 MHz
Dòng tiêu thụ
khoảng 30mA
Điện áp vào khuyên
dùng
7-12V DC
Điện áp vào giới hạn
6-20V DC
Số chân Digital I/O
14 (6 chân hardware PWM)
Số chân Analog
6 (độ phân giải 10bit)
Dòng tối đa trên mỗi
chân I/O
30 mA
Dòng ra tối đa (5V)
500 mA
Dòng ra tối đa (3.3V)
50 mA
Bộ nhớ flash
32 KB (ATmega328) với 0.5KB
dùng bởi bootloader
SRAM
2 KB (ATmega328)
EEPROM
1 KB (ATmega328)
3. LCD (Liquid Crystal Display) 16x2
Chức năng của các chân:
Cn
hiệu
tả
1
Vss
Chân nối đất cho LCD, khi thiết kế mạch ta nối chân
này với GND của mạch điều khiển
2
VDD
Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối
chân này với VCC=5V của mạch điều khiển
3
VEE
Điều chỉnh độ tương phản của LCD.
4
RS
Chân chọn thanh ghi (Register select). Nối chân RS
với logic “0” (GND) hoặc logic “1” (VCC) để chọn
thanh ghi.
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi
lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối
với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ
liệu DR bên trong LCD.
5
R/W
Chân chọn chế độ đọc/ghi (Read/Write). Nối chân
R/W với logic “0” để LCD hoạt động ở chế độ ghi,
hoặc nối với logic “1” để LCD ở chế độ đọc.
6
E
Chân cho phép (Enable). Sau khi các tín hiệu được
đặt lên 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 hiện cạnh lên (low-to-high transition)
ở chân E và được LCD giữ ở bus đến khi nào chân E
xuống mức thấp.
7 - 14
DB0
-
DB7
Tám đường của bus dữ liệu dùng để trao đổi thông
tin với MPU. Có 2 chế độ sử dụng 8 đường bus này :
+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8
đường, với bit MSB bit DB7.
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ
DB4 tới DB7, bit MSB DB7
15
-
Nguồn dương cho đèn nền
16
-
GND cho đèn nền
4. MODULE I2C
Thông thường, để sử dụng màn hình LCD, ta sẽ phải mất rất
nhiều chân trên Arduino để điều khiển. Do vậy, để đơn giản hóa
công việc, người ta đã tạo ra một loại mạch điều khiển màn hình
LCD sử dụng giao tiếp I2C. Nói một cách đơn giản, ta chỉ tốn ...
2 dây để điều khiển màn hình, thay vì 8 dây như cách thông
thường.
Sau đó các ta chỉ việc hàn mạch như hình bên dưới. Bởi vì giao
tiếp I2C được thiết kế riêng nhằm giúp LCD giao tiếp với Board
xử lý một cách dễ dàng, nên rất dễ kết nối.
Cách nối chân LCD 16x2 vào Module I2C
Nối chân Module I2C vào Ardruino Uno
Module màn hình LCD
(16x2)
Arduino
GND
GND
Vcc
5V
SDA
A4
SCL
A5
III. NGUYÊN HOẠT ĐỘNG:
1. Khâu cảm biến:
Cảm biến DHT11 thu nhận tín hiệu từ môi trường, tính
toán, so lệch và đưa ra giá trị digital sau khi được chuẩn
hóa và tính toán chính xác ra chân tín hiệu SIGNAL
Đưa tín hiệu thu được từ cảm biến DHT11 vào chân D2
của ARDRUINO UNO
DHT11
Arduino UNO R3
GND
GND
Vcc
5V
Signal
D2
2. Khâu chuẩn hóa:
Cảm biến DHT11 được tích hợp sẵn bộ chuẩn hóa tín hiệu,
nên tín hiệu đưa ra từ cảm biến DHT11 qua chân SIGNAL
tín hiệu Digital. Rất thuận lợi và giảm thiểu sai số do phần
cứng được nhà sản xuất tính toán kỹ lưỡng.
3. Khâu xử tín hiệu:
Tín hiệu sau đo lường chuẩn hóa được đưa vào chân D2
trên Arduino Uno
Arduino nhận tín hiệu vào, được nạp code xuất tín hiệu
đến khâu hiển thị
Code nạp cho Arduino:
1. // Gọi thư viện DHT11
2. #include "DHT.h"
3.
4. const int DHTPIN = 2; //Đọc dữ liệu từ DHT11 ở chân
2 trên mạch Arduino
5. const int DHTTYPE = DHT11; //Khai báo loại cảm biến,
2 loại DHT11 DHT22
6.
7. DHT dht(DHTPIN, DHTTYPE);
8.
9. void setup() {
10. Serial.begin(9600);
11. dht.begin(); // Khởi động cảm biến
12. }
13.
14. void loop() {
15. float h = dht.readHumidity(); //Đọc độ ẩm
16. float t = dht.readTemperature(); //Đọc nhiệt độ
17.
18. Serial.print("Nhiet do: ");
19. Serial.println(t); //Xuất nhiệt độ
20. Serial.print("Do am: ");
21. Serial.println(h); //Xuất độ ẩm
22.
23. Serial.println(); //Xuống ng
24. delay(1000); //Đợi 1 giây
25. }
26.
4. Khâu hiển thị:
Kết quả sau khi đo và xử lý được xuất ra màn hình LCD 16x2
thông qua một module giao tiếp I2C.
Module I2C for LCD
(16x2)
Arduino
GND
GND
Vcc
5V
SDA
A4
SCL
A5
Code hiển thị LCD 16x2
1. #include <Wire.h>
2. #include <LiquidCrystal_I2C.h>
3.
4. LiquidCrystal_I2C lcd(0x27,16,2);
5. //0x3F địa chỉ màn hình trong bus I2C.
6. //16 số cột của màn hình
7. //2 là số dòng của màn hình
8.
9. void setup() {
10. lcd.init(); //Khởi động màn hình.
11.
12. lcd.backlight(); //Bật đèn nền
13. lcd.print("Hello world"); //Xuất ra chữ Hello world
14. lcd.setCursor(0,1); //Đưa con trỏ tới hàng 1, cột 0
15. lcd.print("I love Arduino !");//Xuất ra chữ I love
Ardruino
16. }
17.
18. void loop() {
19. }
20. ĐỒ MẠCH TỔNG QUÁT
Code của đề i:
1. #include <DHT.h>
2. #include <Wire.h>
3. #include <LiquidCrystal_I2C.h>
4. LiquidCrystal_I2C lcd(0x27,16,2);
5. const int DHTPIN = 2;
6. const int DHTTYPE = DHT11;
7. DHT dht(DHTPIN, DHTTYPE);
8. byte degree[8] = {
9. 0B01110,
10. 0B01010,
11. 0B01110,
12. 0B00000,
13. 0B00000,
14. 0B00000,
15. 0B00000,
16. 0B00000
17. };
18. void setup() {
19. lcd.init();
20. lcd.backlight();
21. lcd.print("Nhiet do: ");
22. lcd.setCursor(0,1);
23. lcd.print("Do am: ");
24. lcd.createChar(1, degree);
25. dht.begin();
26. }
27. void loop() {
28. float h = dht.readHumidity();
29. float t = dht.readTemperature();
30. if (isnan(t) || isnan(h)) { // Kiểm tra xem thử việc đọc giá trị bị thất bại
hay không.
31. }
32. else {
33. lcd.setCursor(10,0);
34. lcd.print(round(t));
35. lcd.print(" ");
36. lcd.write(1);
37. lcd.print("C");
38. lcd.setCursor(10,1);
39. lcd.print(round(h));
40. lcd.print(" %");
41. }
42. }
IV. KẾT QUẢ ĐỀ I:
Kết luận:
Mạch chạy ổn định
Nhiệt độ đo được sai số chấp nhận được
Kết quả gần với nhiệt độ môi trường thực tế.
Thỏa mản yêu cầu ban đu.
Bài báo cáo đến đây xin hết.
Chúc thầy luôn tràn đầy năng lượng cho cuộc sống, thành công trong
công việc !
PHỤ LỤC
Trong đề tài sử dụng các phần mềm bổ trợ sau:
1. Ardruino IDE Viết code
2. Ms Word Viết báo o
Giá thành linh kiện:
1. Cảm biến DHT11 35 000 đồng
2. Ardruino UNO R3 140 000 đồng

Preview text:

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA FAST
O❖OBÁO CÁO MINI PROJECT KỸ THUẬT ĐO LƯỜNG
Chủ đề: Thiết kế và lắp mạch cảm biến đo nhiệt độ, độ ẩm.
Sinh viên thực hiện: HUỲNH CÔNG ĐẠT – 20PFIEV2
NGUYỄN THANH PHI – 20PFIEV2
NGUYỄN DUY MINH – 20PFIEV2
NGUYỄN VĂN TIẾN – 20PFIEV1
Giáo viên hướng dẫn: TS. LÊ QUỐC HUY Đà nẵng, 2022.
MÔ TẢ Ý TƯỞNG:
➢ Thiết kế mạch đo các thông số môi trường (nhiệt độ, độ ẩm) bên trong phòng học
Yêu cầu: + Nhiệt độ: 10oC – 40oC + Độ ẩm: 40% – 80%
➢ Thiết kế mạch đo: Nhiệt độ trong khoảng 0 –50 oC
Độ ẩm trong khoảng 20 – 80% Độ chính xác:
• Sai số dự kiến : Nhiệt độ ± 2oC Độ ẩm ± 5%
• Tùy thuộc vào các linh kiện, điện trở dây dẫn. ➢ Kiến thức:
• Hiểu và nắm vững khái niệm, cấu tạo và nguyên lý hoạt
động của các thiết bị và linh kiện điện tử : Arduino,
cảm biến nhiệt độ, LCD 16x2, Module giao tiếp I2C. I. SƠ ĐỒ KHỐI: Cảm biến Chuẩn hóa Xử lý tín hiệu
Thể hiện kết quả Cảm Tích hợp sẵn Arduino LCD 16x2 biến trong cảm UNO R3 giao tiếp nhiệt biến DHT11 qua độ + chuẩn độ ẩm I2C DHT11
II. GIỚI THIỆU LINH KIỆN:
1. Cảm biến nhiệt độ, độ ẩm DHT11
• Cảm biến nhiệt độ, độ ẩm DHT11
là một loại cảm biến khá phổ biến
vì giá thành rẻ và rất dễ lấy dữu
liệu ra thông qua 1 chân wire
(Giao tiếp Digital 1 dây duy nhất)
• Bộ tiền xử lý tín hiệu được tích
hợp sẵn nên không cần thêm bất kỳ tính toán nào . 2. Arduino UNO R3:
Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB
hoặc cấp nguồn ngoài với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V Vi điều khiển ATmega328 họ 8bit Điện áp hoạt động
5V DC (chỉ được cấp qua cổng USB) Tần số hoạt động 16 MHz Dòng tiêu thụ khoảng 30mA Điện áp vào khuyên 7-12V DC dùng Điện áp vào giới hạn 6-20V DC Số chân Digital I/O 14 (6 chân hardware PWM) Số chân Analog 6 (độ phân giải 10bit) Dòng tối đa trên mỗi 30 mA chân I/O Dòng ra tối đa (5V) 500 mA Dòng ra tối đa (3.3V) 50 mA 32 KB (ATmega328) với 0.5KB Bộ nhớ flash dùng bởi bootloader SRAM 2 KB (ATmega328) EEPROM 1 KB (ATmega328)
3. LCD (Liquid Crystal Display) 16x2
Chức năng của các chân: Chân Ký Mô tả hiệu 1
Vss Chân nối đất cho LCD, khi thiết kế mạch ta nối chân
này với GND của mạch điều khiển 2
VDD Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối
chân này với VCC=5V của mạch điều khiển 3
VEE Điều chỉnh độ tương phản của LCD. 4
RS Chân chọn thanh ghi (Register select). Nối chân RS
với logic “0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi.
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi
lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối
với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD. 5
R/W Chân chọn chế độ đọc/ghi (Read/Write). Nối chân
R/W với logic “0” để LCD hoạt động ở chế độ ghi,
hoặc nối với logic “1” để LCD ở chế độ đọc. 6 E
Chân cho phép (Enable). Sau khi các tín hiệu được
đặt lên 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 hiện cạnh lên (low-to-high transition)
ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp.
7 - 14 DB0 Tám đường của bus dữ liệu dùng để trao đổi thông -
tin với MPU. Có 2 chế độ sử dụng 8 đường bus này :
DB7 + 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 15 -
Nguồn dương cho đèn nền 16 - GND cho đèn nền 4. MODULE I2C
Thông thường, để sử dụng màn hình LCD, ta sẽ phải mất rất
nhiều chân trên Arduino để điều khiển. Do vậy, để đơn giản hóa
công việc, người ta đã tạo ra một loại mạch điều khiển màn hình
LCD sử dụng giao tiếp I2C. Nói một cách đơn giản, ta chỉ tốn ...
2 dây để điều khiển màn hình, thay vì 8 dây như cách thông thường.
Sau đó các ta chỉ việc hàn mạch như hình bên dưới. Bởi vì giao
tiếp I2C được thiết kế riêng nhằm giúp LCD giao tiếp với Board
xử lý một cách dễ dàng, nên rất dễ kết nối.
Cách nối chân LCD 16x2 vào Module I2C
Nối chân Module I2C vào Ardruino Uno Module màn hình LCD Arduino (16x2) GND GND Vcc 5V SDA A4 SCL A5
III. NGUYÊN LÝ HOẠT ĐỘNG: 1. Khâu cảm biến:
• Cảm biến DHT11 thu nhận tín hiệu từ môi trường, tính
toán, so lệch và đưa ra giá trị digital sau khi được chuẩn
hóa và tính toán chính xác ra chân tín hiệu SIGNAL
• Đưa tín hiệu thu được từ cảm biến DHT11 vào chân D2 của ARDRUINO UNO DHT11 Arduino UNO R3 GND GND Vcc 5V Signal D2 2. Khâu chuẩn hóa:
Cảm biến DHT11 được tích hợp sẵn bộ chuẩn hóa tín hiệu,
nên tín hiệu đưa ra từ cảm biến DHT11 qua chân SIGNAL là
tín hiệu Digital. Rất thuận lợi và giảm thiểu sai số do phần
cứng được nhà sản xuất tính toán kỹ lưỡng.
3. Khâu xử lý tín hiệu:
Tín hiệu sau đo lường và chuẩn hóa được đưa vào chân D2 trên Arduino Uno
Arduino nhận tín hiệu vào, được nạp code và xuất tín hiệu đến khâu hiển thị
Code nạp cho Arduino: 1. // Gọi thư viện DHT11 2. #include "DHT.h" 3. 4. const int DHTPIN = 2;
//Đọc dữ liệu từ DHT11 ở chân 2 trên mạch Arduino
5. const int DHTTYPE = DHT11; //Khai báo loại cảm biến,
có 2 loại là DHT11 và DHT22 6. 7. DHT dht(DHTPIN, DHTTYPE); 8. 9. void setup() { 10. Serial.begin(9600); 11. dht.begin();
// Khởi động cảm biến 12. } 13. 14. void loop() { 15. float h = dht.readHumidity(); //Đọc độ ẩm 16.
float t = dht.readTemperature(); //Đọc nhiệt độ 17. 18. Serial.print("Nhiet do: "); 19. Serial.println(t); //Xuất nhiệt độ 20. Serial.print("Do am: "); 21. Serial.println(h); //Xuất độ ẩm 22. 23. Serial.println(); //Xuống hàng 24. delay(1000); //Đợi 1 giây 25. } 26. 4. Khâu hiển thị:
Kết quả sau khi đo và xử lý được xuất ra màn hình LCD 16x2
thông qua một module giao tiếp I2C. Module I2C for LCD Arduino (16x2) GND GND Vcc 5V SDA A4 SCL A5
Code hiển thị LCD 16x2 1. #include 2. #include 3.
4. LiquidCrystal_I2C lcd(0x27,16,2);
5. //0x3F là địa chỉ màn hình trong bus I2C.
6. //16 là số cột của màn hình
7. //2 là số dòng của màn hình 8. 9. void setup() { 10. lcd.init(); //Khởi động màn hình. 11. 12.
lcd.backlight(); //Bật đèn nền 13.
lcd.print("Hello world"); //Xuất ra chữ Hello world 14.
lcd.setCursor(0,1); //Đưa con trỏ tới hàng 1, cột 0 15.
lcd.print("I love Arduino !");//Xuất ra chữ I love Ardruino 16. } 17. 18. void loop() { 19. } 20.
SƠ ĐỒ MẠCH TỔNG QUÁT Code của đề tài: 1. #include 2. #include 3. #include
4. LiquidCrystal_I2C lcd(0x27,16,2); 5. const int DHTPIN = 2; 6. const int DHTTYPE = DHT11; 7. DHT dht(DHTPIN, DHTTYPE); 8. byte degree[8] = { 9. 0B01110, 10. 0B01010, 11. 0B01110, 12. 0B00000, 13. 0B00000, 14. 0B00000, 15. 0B00000, 16. 0B00000 17. }; 18. void setup() { 19. lcd.init(); 20. lcd.backlight(); 21. lcd.print("Nhiet do: "); 22. lcd.setCursor(0,1); 23. lcd.print("Do am: ");
24. lcd.createChar(1, degree); 25. dht.begin(); 26. } 27. void loop() {
28. float h = dht.readHumidity();
29. float t = dht.readTemperature();
30. if (isnan(t) || isnan(h)) { // Kiểm tra xem thử việc đọc giá trị có bị thất bại hay không. 31. } 32. else { 33. lcd.setCursor(10,0); 34. lcd.print(round(t)); 35. lcd.print(" "); 36. lcd.write(1); 37. lcd.print("C"); 38. lcd.setCursor(10,1); 39. lcd.print(round(h)); 40. lcd.print(" %"); 41. } 42. }
IV. KẾT QUẢ ĐỀ TÀI: ✓ Kết luận:
• Mạch chạy ổn định
• Nhiệt độ đo được có sai số chấp nhận được
• Kết quả gần với nhiệt độ môi trường thực tế.
• Thỏa mản yêu cầu ban đầu.
Bài báo cáo đến đây xin hết.
Chúc thầy luôn tràn đầy năng lượng cho cuộc sống, thành công trong công việc ! PHỤ LỤC
Trong đề tài có sử dụng các phần mềm bổ trợ sau:
1. Ardruino IDE – Viết code
2. Ms Word – Viết báo cáo

Giá thành linh kiện: 1. Cảm biến DHT11 35 000 đồng
2. Ardruino UNO R3 140 000 đồng