Cài đặt và hiển thị nhiệt độ, độ ẩm (DHT11) bằng Arduino
Bài viết này sẽ giới thiệu về giao tiếp I2C trên Arduino và sử dụng module DTH11, và cách cài đặt nhiệt độ, độ ẩm để đóng ngắt thiết bị theo yêu cầu của chúng ta. Và hiển thị giá trị nhiệt độ độ ẩm lên màn hình LCD16X02.
Trước tiên bạn cài 3 thư viện : DTH11, Wire và I2C cho arduino IDE. Các bạn tải 3 thư viện này tại: http://tdhshop.com.vn/tong-hop-cac-thu-vien-cho-arduino
Nội dung bài viết:
- Giới thiệu về chuẩn giao tiếp I2C.
- Giao tiếp I2C trên Arduino.
- Cách sử dụng module DTH11.
- Hiển thị giá trị nhiệt độ và độ ẩm trên màn hình LCD.
- Cài đặt giá trị nhiệt độ theo yêu cầu để đóng ngắt thiết bị.
- Và từ tài liệu này các bạn có thể làm nên những mô hình áp dụng vào thiệt tế.
Chuẩn bị linh kiện:
- 1x board Arduino UNO R3.
- 1x module DTH11.
- Dây cắm breadboard
- Màn hình LCD16X2 có I2C.
Giới thiệu về giao tiếp I2C
I2C là viết tắt của "Inter-Integrated Circuit", một chuẩn giao tiếp được phát minh bởi Philips’ semiconductor division (giờ là NXP) nhằm đơn giản hóa việc trao đổi dữ liệu giữa các ICs. Đôi khi nó cũng được gọi là Two Wire Interface (TWI) vì chỉ sử dụng 2 kết nối để truyền tải dữ liệu, 2 kết nối của giao tiếp I2C gồm: SDA (Serial Data Line) và SCL (Serial Clock Line).
Có hàng ngàn thiết bị sử dụng giao tiếp I2C, chẳng hạn như real-time clocks, digital potentiometers, temperature sensors, digital compasses, memory chips, FM radio circuits, I/O expanders, LCD controllers, amplifiers,...Board Arduino của chúng ta có thể kiểm soát tất cả và số lượng tối đa trong một thời điểm lên đến 112 thiết bị I2C.
Trên board Arduino UNO, SDA là chân analog 4, SCL là chân analog 5.
Trên I2C bus, sẽ có một thiết bị được coi là "Master", và trong hầu hết các trường hợp, Arduino là một "Master", mỗi IC được gắn trên I2C bus là một "Slave". Mỗi "slave" có một địa chỉ riêng ở dạng HEX (thập lục phân) để Arduino ("Master") có thể giao tiếp với nó. Để biết địa chỉ I2C bus của IC, các bạn có thể tra datasheet.
Để I2C bus có thể hoạt động, chúng ta cần 2 điện trở pull-up như trong hình, 4.7k hoặc 10k là hợp lý. Tuy nhiên, nếu chỉ có một thiết bị I2C, chúng ta có thể bỏ qua điện trở pull-up vì trong MCU ATmega328 của Arduino UNO đã có sẵn 20k build-in resisters.
Vì Arduino UNO sử dụng điện áp 5V, do đó các thiết bị I2C cũng phải hoạt động ở 5V.
Sử dụng I2C trên arduino:
Đế sử dụng I2C bus trên Arduino, chúng ta sẽ cần sử dụng thư viện Wire.h (đây là built-in library của Arduino).
Một số hàm trong thư viện Wire.h:
- Wire.begin(address (optional));
- Khởi tạo thư viện Wire.h và tham gia vào I2C bus.
- address: 7-bit địa chỉ của thiết bị "Slave" (optional); nếu không có địa chỉ thì coi như "Master".
- Wire.beginTransmission(address);
- Bắt đầu truyền dữ liệu đến thiết bị "Slave" với address đã có.
- Wire.endTransmission();
- Kết thúc truyền dữ liệu đến thiết bị "Slave" đã được bắt đầu bởi Wire.beginTransmission(address).
- Wire.write(value);
- Ghi dữ liệu lên thiết bị "Slave", được gọi giữa beginTransmission() và endTransmission().
- Wire.read();
- Đọc dữ liệu được truyền từ thiết bị "Slave" đến Arduino, được gọi sau requestFrom().
- Wire.requestFrom(address, quantity);
- Được sử dụng bởi thiết bị "Master" để yêu cầu dữ liệu từ thiết bị "Slave".
- address: là địa chỉ của thiết bị "Slave".
- quantity: số lượng bytes yêu cầu.
Module DHT11:
Sơ đồ nối dây giữa module DHT11, I2C, nút nhấn với Arduino như sau:
Sơ đồ nối dây của nút nhấn như sau: ( ở trên là 3 nút nhấn ghép lại với nhau thành 1 module do shop thiết kế (như hình ở dưới), các bạn cũng có thể làm được, thực hiện giống như hình sau, với nhiều nút nhấn theo ý muốn của mình).
Nối dây thực tế như sau:
SAU KHI ĐÃ NỐI DÂY XONG TA NẠP CHƯƠNG TRÌNH SAU:
Các bạn tải code theo link sau:
https://drive.google.com/open?id=0BwJmY0TV86JwWkdRTktuTHVsWXM
.......................................................
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//DHT11
#define DHTPIN11 6 // what pin we're connected to
#define DHTTYPE11 DHT11 // DHT 11
#define minTempC 0 // about 109F
#define maxTempC 100 // about 183F
#define minTempC1 0 // about 109F
#define maxTempC1 100 // about 183F
#define startTempC 34 // starting set Temp
float setTempC;
float setTempC1;
#define buttonDN 5
#define buttonUP 4
#define role 3
LiquidCrystal_I2C lcd(0x3f,16,2);
DHT dht11(DHTPIN11, DHTTYPE11);
byte degree[8] = {
0B01110,
0B01010,
0B01110,
0B00000,
0B00000,
0B00000,
0B00000,
0B00000
};
void setup()
{
Serial.begin(9600);
pinMode(buttonDN, INPUT_PULLUP);
pinMode(buttonUP, INPUT_PULLUP);
pinMode(role, OUTPUT);//KICH ROLAY CHAN
setTempC = startTempC;
setTempC1 = startTempC;
dht11.begin();
}
void loop()
{
setTemperature();
setHeater();
displayLCD();
}
...........................................
void setHeater()
{
float h1 = dht11.readHumidity();
float t1 = dht11.readTemperature();
//static bool toggle;
if ((setTempC) > t1){
digitalWrite(role, LOW);
lcd.setCursor(8,1);
lcd.print("TAT QUAT");
}
else if (setTempC <= (t1)){
digitalWrite(role, HIGH);
lcd.setCursor(8,1);
lcd.print("MO QUAT");
}
}
VÀ KẾT QUẢ SAU KHI NẠP CHƯƠNG TRÌNH CHO ARDUNIO:
Và từ nút nhấn ta có thể cài đặt giá trị nhiệt độ theo yêu cầu để đóng ngắt thiết bị mà mình muốn.
CHÚC CÁC BẠN THÀNH CÔNG!!!
Một số bài viết có thể bạn quan tâm: 5 Lý Do Tại Sao Ai Cũng Nên Tìm Hiểu Về Arduino || Arduino UNO R3 là gì || Bộ Tự Học Arduino Dể Hiểu Nhất || Cài Đặt Phần Mền Arduino IDE || Cấu trúc chương trình Arduino || Hướng Dẫn Nạp Chương Trình Cho Arduino Uno R3 || Hướng dẫn cài thư viện vào arduino IDE || Điều Khiển Đèn LED Sáng Nhấp Nháy.
Bình luận(4)