Cài đặt và hiển thị nhiệt độ, độ ẩm (DHT11) bằng Arduino

Bởi nguyenthanhphi (21/10/2017) 4 Bình luận

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, WireI2C 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:

  1. 1x board Arduino UNO R3.
  2. 1x module DTH11.
  3. Dây cắm breadboard
  4. 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.

arduino uno r3

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.

cài đặt và hiển thị nhiệt độ và độ ẩm

Để 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:

  1. 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".
  2. Wire.beginTransmission(address);
    • Bắt đầu truyền dữ liệu đến thiết bị "Slave" với address đã có.
  3. 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).
  4. Wire.write(value);
    • Ghi dữ liệu lên thiết bị "Slave", được gọi giữa beginTransmission() và endTransmission().
  5. Wire.read();
    • Đọc dữ liệu được truyền từ thiết bị "Slave" đến Arduino, được gọi sau requestFrom().
  6. 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:

cảm biến nhiệt độ và độ ẩm

Sơ đồ nối dây giữa module DHT11, I2C, nút nhấn với Arduino như sau:

cài đặt và hiển thị nhiệt độ, độ ẩm (DHT11)

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).

ardunio và nút nhấn

Nối dây thực tế như sau:

sơ đồ nối dây của arduino và dht11

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:

bộ tự hoc ardunio và dht11

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.

Đóng góp ý kiến

Bình luận(4)

  • Bình luận bởi hithapare
    https://bestadalafil.com/ - Cialis Ifewxz Healtyman Zvmfyp Cialis cheap cialis pills online https://bestadalafil.com/ - Cialis Sxspbs
  • Bình luận bởi hoang nam
    chào admin !!! Admin đã đăng code để hướng dẫn mọi người nhưng tại sao lại ko show chương trình con của setTemperature();.Vậy nếu ai có ý định chạy thử code của admin thì sẽ báo lỗi . Mong admin xem xét .Thân chào.
  • Bình luận bởi Nguyễn Khôi Nguyên
    Nếu như mình muốn sử dụng nhiều cảm biến DHT11 nhiều cái cùng một lúc thì mình nên lầm sao ạ? Và nguyên đoạn này mình chưa hiểu lắm ạ: " byte degree[8] = { 0B01110, 0B01010, 0B01110, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000 }" Đây có phải là địa chỉ của cảm biến không a?, nếu mình thêm một cảm biến DHT11 vào thì mình nên làm ra sao ạ?
  • Bình luận bởi nguyễn thanh tùng
    chào các ac ạ. e có sử dụng làm cái này nhưng code báo lỗi ạ. cái mạch e làm thì chỉ cần đóng rơ le khi nhiệt độ lớn hơn mức đặt thôi chứ k cần sử dụng nút ấn ạ.
Hotline 0938379351