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... Cảm biến n
Trang 1ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA FAST
O O
BÁO CÁO
MINI PROJECT
Chủ đề:Thiết kế và lắp mạch cảm biến đo nhiệt độ, độ ẩm
NGUYỄN THANH PHI – 20PFIEV2 NGUYỄN DUY MINH – 20PFIEV2 NGUYỄN VĂN TIẾN – 20PFIEV1
Đà nẵng, 2022
Trang 2MÔ 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 C 40 C o – o
+ Độ ẩm: 40% 80% –
Thiết kế mạch đo: Nhiệt độ trong khoảng 0 50 C – o
Độ ẩm trong khoảng 20 – 80%
Độ chính xác:
Sai số dự kiến : Nhiệt độ ± 2 C o
Độ ẩ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
Trang 3I SƠ ĐỒ KHỐI:
Thể hiện kết quả
• LCD 16x2 giao tiếp qua chuẩn 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ử lý tín hiệu
• Arduino UNO R3
Trang 4II 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 và rẻ 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
Trang 6
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
Trang 7Vi đ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
Đ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
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
Trang 83 LCD (Liquid Crystal Display) 16x2
Chức năng của các chân:
Chân Ký
hiệu
Mô 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
Trang 9+ Ở 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 đường 8 bus này : + 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
Trang 104 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
Trang 11Cá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
Trang 12III 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á digital sau khi trị đượ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
Trang 132 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
13
Trang 1414 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
26
4 Khâu hiển thị:
Kết quả sau khi đo và lý xử được xuất ra màn hình LCD 16x2 thông qua một module giao tiếp I2C
Module I2C for LCD
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 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à dòng số của màn hình
8
9 void setup() {
Trang 1510 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 }
Trang 1620 SƠ ĐỒ MẠCH TỔNG QUÁT
Code của đề tà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,
Trang 1713 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 }
Trang 18IV 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 !
Trang 19PHỤ LỤC
1 Ardruino IDE – Viết code
2 Ms Word – Viết báo cáo
1 Cảm biến DHT11 35 000 đồng
2 Ardruino UNO R3 140 000 đồng