



















Preview text:
ĐẠ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ế 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