Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
1,09 MB
Nội dung
Lời nói đầu : Có nhiều cách để đo độ ẩm khơng khí dùng HS1101 hay dịng cảm biến SHT1x DHT11… Nhưng hơm sử dụng cảm biến DHT11 để đo độ ẩm cho khơng khí… cảm ơn bạn ý đọc ! Đề tài thực : Đo nhiệt độ độ ẩm sử dụng DHT11 Linh kiện cần thiết gồm: Cảm biến DHT11 Arduino UNO R3 Modun điều khiển hình LCD Màn hình LCD 16x2 BreadBoard 20x5 Dây kết nối Cảm biến đo độ ẩm nhiệt độ DHT11 : DHT11 cảm biến đo độ ẩm nhiệt độ phức tạp với đầu tín hiệu kỹ thuật số hiệu chỉnh Kỹ thuật công nghệ cảm biến nhiệt độ độ ẩm, đảm bảo độ tin cậy cao tính ổn định lâu dài tuyệt vời Cảm biến nhiệt độ độ ẩm Nó đời sau sử dụng thay dòng SHT1x nơi khơng cần độ xác cao nhiệt độ độ ẩm a b o Thông số kỹ thuật : o Đo độ ẩm 20% -95% o Đo nhiệt độ - 50ºC o Sai số độ ẩm ± 5% o Sai số nhiệt độ ± 2ºC Nguyên lý hoạt động : Sơ đồ kết nối vi xử lý: o Nguyên lý hoạt động : Để giao tiếp với DHT11 theo chuẩn chân vi xử lý thựchiện theo bước: B1 Gửi tin hiệu muốn đo (Start) tới DHT11, sau DHT11 xác nhận lại B2 Khi giao tiếp với DHT11, Cảm biến gửi lại byte liệu nhiệt độ đo - Bước 1: gửi tín hiệu Start : o o MCU thiết lập chân DATA Output, kéo chân DATA xuống khoảng thời gian >18ms Trong Code để 25ms Khi DHT11 hiểu MCU muốn đo giá trị nhiệt độ độ ẩm MCU đưa chân DATA lên 1, sau thiết lập lại chân đầu vào o Sau khoảng 20-40us, DHT11 kéo chân DATA xuống thấp Nếu >40us mà chân DATA ko kéo xuống thấp nghĩa ko giao tiếp với DHT11 o Chân DATA mức thấp 80us sau DHT11 kéo nên cao 80us Bằng việc giám sát chân DATA, MCU biết có giao tiếp với DHT11 ko Nếu tín hiệu đo DHT11 lên cao, hồn thiện q trình giao tiếp MCU với DHT - - Bước 2: đọc giá trị DHT11: DHT11 trả giá trị nhiệt độ độ ẩm dạng byte Trong đó: § Byte 1: giá trị phần ngun độ ẩm (RH%) § Byte 2: giá trị phần thập phân độ ẩm (RH%) § Byte 3: giá trị phần nguyên nhiệt độ (TC) § Byte : giá trị phần thập phân nhiệt độ (TC) § Byte : kiểm tra tổng ð Nếu Byte = (8 bit) (Byte1 +Byte2 +Byte3 + Byte4) giá trị độ ẩm nhiệt độ xác, sai kết đo khơng có nghĩa - Đọc liệu: Sau giao tiếp với DHT11, DHT11 gửi liên tiếp 40 bit MCU, tương ứng chia thành byte kết Nhiệt độ độ ẩm - Bit 0: Bit 1: Sau tín hiệu đưa 0, ta đợi chân DATA MCU DHT11 kéo lên Nếu chân DATA khoảng 26 – 28 us 0, cịn tồn 70 us Do lập trình ta bắt sườn lên chân Data sau delay khoảng 50 us Nếu giá trị đo ta đọc bit 0, giá trị đo ta đọc bít Cứ ta đọc bit Vi điều khiển : (sử dụng cho arduino UNO R3) c Code arduino : // Gọi thư viện DHT11 #include "DHT.h" const int DHTPIN = 2; //Đọc liệu từ DHT11 chân mạch Arduino const int DHTTYPE = DHT11; //Khai báo loại cảm biến, có loại DHT11 DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); 10 dht.begin(); // Khởi động cảm biến 11 } 12 13 void loop() { 14 float h = dht.readHumidity(); //Đọc độ ẩm 15 float t = dht.readTemperature(); //Đọc nhiệt độ 16 17 Serial.print("Nhiet do: "); 18 Serial.println(t); //Xuất nhiệt độ 19 Serial.print("Do am: "); 20 Serial.println(h); //Xuất độ ẩm 21 22 Serial.println(); //Xuống hàng 23 delay(1000); //Đợi giây 24 } Arduino UNO R3 Arduino UNO R3 cấp nguồn 5V thơng qua cổng USB cấp qua nguồn ngồi thơng qua Adaptor với điện áp khuyên dùng – 12V DC giới hạn 6-20V Thường nên cấp nguồn Pin 9V hợp lý khơng có sẵn nguồn cấp từ cổng USB Nếu nguồn vượt qua ngưỡng làm hỏng Arduino UNO R3 GND ( ground) cực âm nguồn điện cấp cho Arduino UNO R3 Khi bạn dùng thiết bị sử dụng nguồn riêng biệt chân phải nối với 5V cấp điện áp 5V đầu Dòng tối đa cho phép chân 500mA 3.3V cấp điện áp 3.3V đầu Dòng tối đa cho phép chân 50mA Vin (voltage Input) để cấp nguồn cho Arduino, bạn nối cực dương nguồn với chân này, cực âm nguồn với chân GND Một vài thông số Arduino UNO R3 Vi điều khiển ATmega328 họ 8bit Điện áp hoạt động 5V DC (chỉ 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 (độ phân giải 10bit) Dòng tối đa chân I/O 30 mA Dòng tối đa (5V) 500 mA Dòng tối đa (3.3V) 50 mA Bộ nhớ flash 32 KB (ATmega328) với 0.5KB dùng bootloader SRAM KB (ATmega328) EEPROM KB (ATmega328) Lưu ý: • Arduino UNO khơng có bảo vệ cắm ngược nguồn vào Do bạn phải cẩn thận, kiểm tra cực âm – dương nguồn trước cấp cho Arduino UNO Việc làm chập mạch nguồn vào Arduino UNO biến thành miếng nhựa chặn giấy khuyên bạn nên dùng nguồn từ cổng USB • Các chân 3.3V 5V Arduino chân dùng để cấp nguồn cho thiết bị khác, chân cấp nguồn vào Việc cấp nguồn sai vị trí làm hỏng board Điều khơng nhà sản xuất khuyến khích • Cấp nguồn ngồi không qua cổng USB cho Arduino UNO với điện áp 6V làm hỏng board • Cấp điện áp 13V vào chân RESET board làm hỏng vi điều khiển ATmega328 • Cường độ dịng điện vào/ra tất chân Digital Analog Arduino UNO vượt 200mA làm hỏng vi điều khiển • Cấp điệp áp 5.5V vào chân Digital Analog Arduino UNO làm hỏng vi điều khiển • Cường độ dịng điện qua chân Digital Analog Arduino UNO vượt 40mA làm hỏng vi điều khiển Do khơng dùng để truyền nhận liệu, bạn phải mắc điện trở hạn dòng Bộ nhớ Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng: • • 32KB nhớ Flash: đoạn lệnh bạn lập trình lưu trữ nhớ Flash vi điều khiển Thường có khoảng vài KB số dùng cho bootloader đừng lo, bạn cần 20KB nhớ đâu • 2KB cho SRAM (Static Random Access Memory): giá trị biến bạn khai báo lập trình lưu Bạn khai báo nhiều biến cần nhiều nhớ RAM Tuy vậy, thực nhớ RAM lại trở thành thứ mà bạn phải bận tâm Khi điện, liệu SRAM bị 1KB cho EEPROM (Electrically Eraseble Programmable Read Only Memory): giống ổ cứng mini – nơi bạn đọc ghi liệu vào mà lo bị cúp điện giống liệu SRAM ATMEGA328P-PU Vi điều khiển bit Atmega328 chíp vi điều khiển sản xuất bời hãng Atmel thuộc họ MegaAVR có sức mạnh hẳn Atmega 328 vi điều khiển bít dựa kiến trúc RISC nhớ chương trình 32KB ISP flash ghi xóa hàng nghìn lần, 1KB EEPROM, nhớ RAM vô lớn giới vi xử lý bít (2KB SRAM) Với 23 chân sử dụng cho kết nối vào i/O, 32 ghi, timer/counter lập trình, có gắt nội ngoại (2 lệnh vector ngắt), giao thức truyền thơng nối tiếp USART, SPI, I2C Ngồi sử dụng biến đổi số tương tự 10 bít (ADC/DAC) mở rộng tới kênh, khả lập trình watchdog timer, hoạt động với chế độ nguồn, sử dụng tới kênh điều chế độ rộng xung (PWM), hỗ trợ bootloader [/col] Atemega328 có khả hoạt động dải điện áp rộng (1.8V – 5.5V), tốc độ thực thi (thông lượng) 1MIPS 1MHz Ngày vi điều khiển Atmega328 thực sử sử dụng phổ biến từ dự án nhỏ sinh viên, học sinh với giá thành rẻ, xử lý mạnh mẽ, tiêu tốn lượng (chế độ hoạt động : 0.2 mA, chế độ ngủ: 0.1 μA, chế độ tích kiệm: 0.75 μA) hỗ trợ nhiệt tình cộng đồng người dùng AVR Và khơng thể không nhắc tới thành công Vi điều khiển Atmega328 dự án mã nguồn mở Arduino với modul Arduino Uno R3, Arduino Nano, Arduino Pro Mini sản phẩm dẫn dắt vào giới mã nguồn mở để hồn thành chương trình “nháy mắt” - Lập trình cho Arduino Các thiết bị dựa tảng Arduino lập trình ngơn riêng Ngôn ngữ dựa ngôn ngữ Wiring viết cho phần cứng nói chung Và Wiring lại biến thể C/C++ Một số người gọi Wiring, số khác gọi C hay C/C++ Riêng gọi “ngơn ngữ Arduino”, đội ngũ phát triển Arduino gọi Ngôn ngữ Arduino bắt nguồn từ C/C++ phổ biến dễ học, dễ hiểu Nếu học tốt chương trình Tin học 11 việc lập trình Arduino dễ thở bạn Để lập trình gửi lệnh nhận tín hiệu từ mạch Arduino, nhóm phát triển dự án cấp đến cho người dùng mơi trường lập trình Arduino gọi Arduino IDE (Intergrated Development Environment) hình 3 Xuất hình LCD qua giao tiếp I2C : Mạch điều khiển hình 16x02 giao tiếp I2C sử dụng IC điều khiển hình kí tự gồm 16 cột dòng giúp tiết kiệm dây nối với vi điều khiển (hoặc Arduino) cho khả hiển thị nhanh với nhiều chức - Mạch điều khiển dùng cho hình 16x02 Thơng thường, để điều khiển hiển thị kí tự từ vi điều khiển xuất hình 16x02 bạn cần tới 7-8 dây nối đến chân vi điều khiển Điều gây nhiều phiền toái: sai dây, mạch rườm ra, khó viết code Những điều mạch điều khiển hình khắc phục hồn tồn số lượng dây tín hiệu giảm cịn nhất: dây Bằng việc sử dụng giao tiếp I2C, việc điều khiển trực tiếp hình chuyển sang cho IC xử lý nằm mạch Bạn việc gửi mã lệnh nội dung hiển thị, giúp vi điều khiển có nhiều thời gian để xử lý tiến trình phức tạp khác - Ưu điểm việc sử dụng giao tiếp I2C • Giao tiếp I2C sử dụng dây tín hiệu: SDA SCL giúp tiết kiệm chân vi điều khiển • Tốc độ truyền liệu lên đến 400Kbps • Dữ liệu truyền nhận đảm bảo tính tồn vẹn sử dụng chế phản hồi (ACK) byte liệu • Có khả kết nối nhiều thiết bị với nhau: mạch có sẵn mối hàn A0, A1, A2 để thay đổi địa module • Địa mặc định: 0x27, mắc vào I2C bus tối đa module (3bit address set) • Điện áp hoạt động: 3V-6V • Để điều khiển độ tương phản hình, bạn xoay biến trở màu xanh Kết nối module hình với Arduino Module hình LCD (16x2) Arduino GND GND Vcc 5V SDA A4 SCL A5 Sơ đồ nguyên lý DHT11 Arduino xuất hình LCD qua giao tiếp I2C Lập trình #include #include LiquidCrystal_I2C lcd(0x3F,16,2); void setup() { lcd.init(); //Khởi động hình lcd.backlight(); //Bật đèn lcd.print("Hello world"); //Xuất chữ Hello world, mặc định sau init trỏ cột hàng lcd.setCursor(0,1); //Đưa trỏ tới hàng 1, cột lcd.print("I love Arduino !"); } void loop() { } Kết hợp đọc nhiệt độ độ - độ ẩm xuất hình Bây bạn biết cách đọc nhiệt độ, độ ẩm biết xuất hình Vậy việc kết hợp lại để đoạn code này: #include #include #include LiquidCrystal_I2C lcd(0x3F,16,2); const int DHTPIN = 2; const int DHTTYPE = DHT11; DHT dht(DHTPIN, DHTTYPE); byte degree[8] = { 0B01110, 0B01010, 0B01110, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000 }; void setup() { lcd.init(); lcd.backlight(); lcd.print("Nhiet do: "); lcd.setCursor(0,1); lcd.print("Do am: "); lcd.createChar(1, degree); dht.begin(); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(t) || isnan(h)) { // Kiểm tra xem thử việc đọc giá trị có bị thất bại hay không } else { lcd.setCursor(10,0); lcd.print(round(t)); lcd.print(" "); lcd.write(1); lcd.print("C"); lcd.setCursor(10,1); lcd.print(round(h)); lcd.print(" %"); } } Lời Kết : Mạch đo độ ẩm nhiệt độ cảm biến DHT11 sử dụng vi xử lý Atmega 328 kit Arduino UNO R3 để đọc xuất liệu mạch đo lường đơn giản Từ mạch ta ứng dụng tồn đo lường nhiệt độ độ ẩm khơng khí, phát triển mạch để chế tạo đồng hồ đo nhiệt độ độ ẩm cố định Qua ta thấy bước làm mạch vi điều khiển để đo đại lượng cần trải qua bước sau : - Xác định đề tài cần thực - Chọn cảm biến đo thích hợp với đề tài - Chọn linh kiện để xử lý tốn cần giải - Mơ phương pháp đo phần mềm mô (thường dùng Proteus 8.0) - Viết chương trình vi điều khiển mã code - Nạp code cho vi điều khiển - Lắp mạch hoàn chỉnh đo thử nghiệm ... Arduino !"); } void loop() { } Kết hợp đọc nhiệt độ độ - độ ẩm xuất hình Bây bạn biết cách đọc nhiệt độ, độ ẩm biết xuất hình Vậy việc kết hợp lại để đo? ??n code này: #include #include ... Thông số kỹ thuật : o Đo độ ẩm 20% -95% o Đo nhiệt độ - 50ºC o Sai số độ ẩm ± 5% o Sai số nhiệt độ ± 2ºC Nguyên lý hoạt động : Sơ đồ kết nối vi xử lý: o Nguyên lý hoạt động : Để giao tiếp với... giản Từ mạch ta ứng dụng tồn đo lường nhiệt độ độ ẩm khơng khí, phát triển mạch để chế tạo đồng hồ đo nhiệt độ độ ẩm cố định Qua ta thấy bước làm mạch vi điều khiển để đo đại lượng cần trải qua