Thợ điện vô duyên học điện: Tự học vi điều khiển Bài 13

Vô Duyên - Hỏi Đáp Về Smart Home: Bài 13 giao tiếp và lập trình cảm biến nhiệt độ, độ ẩm DHT11/DHT22 với Arduino, xây dựng hệ thống smart home tự động

Tác giả: Thợ điện vô duyên - Phạm minh liêm

Hé lô anh em, Vô Duyên lại lên đây!

Bữa nay anh em mình lại tỉ tê chuyện nghề ha. 

Anh em muốn tui viết bài thứ mười ba trong chuyên mục "Vô Duyên - Hỏi Đáp Về Smart Home" với chủ đề "Tự học vi điều khiển" đúng không? 

Vụ này thì tui khoái nè, vì nó là cái "cần câu cơm" của tui mà.

Ở mấy bài trước, anh em mình đã biết cách điều khiển đồ điện, giờ mình học thêm cái nữa, đó là cách đọc dữ liệu từ môi trường

Cái này giống như anh em mình gắn thêm cái "máy đo" cho thằng Arduino vậy đó. 

Anh em mình sẽ làm được mấy cái đồng hồ đo nhiệt độ, đo độ ẩm, rất hay ho.

Thôi, không nói nhiều nữa, anh em mình bắt đầu thôi.

Bài 13: Giao tiếp với cảm biến nhiệt độ và độ ẩm DHT11 và DHT22

1. Cảm biến DHT11 và DHT22 là gì?

Nói thẳng luôn, hai thằng này là hai anh em sinh đôi, nhưng tính tình mỗi thằng mỗi khác. 

Anh em cứ tưởng tượng nó là một cái "nhiệt kế điện tử" vậy đó. 

Nó sẽ cho anh em mình biết nhiệt độ và độ ẩm của không khí xung quanh nó.

DHT11

  • Đây là thằng em út. 
  • Nó rẻ tiền, dễ kiếm, nhưng chỉ đo được nhiệt độ từ 0-50°C và độ ẩm từ 20-90%
  • Độ chính xác vừa phải, anh em mới học thì xài nó là đủ rồi.

DHT22

  • Đây là thằng anh lớn. 
  • Nó mắc tiền hơn nhưng xịn hơn nhiều. 
  • Nó đo được nhiệt độ rộng hơn (-40 đến 80°C), độ ẩm cũng rộng hơn (0-100%) và chính xác hơn thằng em. 
  • Anh em mình làm mấy cái dự án cần độ chính xác cao thì xài thằng này.

Cả hai đều có 3 chân để nối với Arduino

  • VCC (nguồn), 
  • GND (đất),
  • DATA (dữ liệu).

2. Chuẩn bị "đồ nghề"

Để làm bài này, anh em mình cần có:

  • Một bo Arduino Uno.
  • Một cái breadboard.
  • Một cái cảm biến DHT11 (hoặc DHT22).
  • Một điện trở 10k Ohm.
  • Vài sợi dây nối.

3. Đấu dây (Mạch điện)

Nói thiệt, cái này quan trọng lắm, anh em nhìn hình rồi làm theo cho kỹ.

  • Chân VCC
    • Nối vào chân 5V trên bo Arduino.
  • Chân GND
    • Nối vào chân GND trên bo Arduino.
  • Chân DATA
    • Nối vào chân digital bất kỳ trên bo Arduino, ví dụ chân số 2.
  • Thêm điện trở kéo lên (pull-up resistor)
    • Anh em mình nên nối thêm một điện trở 10k Ohm từ chân VCC sang chân DATA
    • Cái này giúp tín hiệu từ cảm biến ổn định hơn, tránh bị nhiễu.

4. Lập trình và giải thích

Để thằng Arduino nó hiểu được tín hiệu từ cảm biến, anh em mình phải cài thêm một cái "từ điển" cho nó. 

Cái này trong lập trình gọi là thư viện (library).

  • Bước 1: 
    • Cài đặt thư viện. 
    • Anh em mở Arduino IDE, vào Sketch -\> Include Library -\> Manage Libraries... 
    • gõ "DHT sensor" vào ô tìm kiếm, 
    • rồi tìm thư viện tên là "DHT sensor library by Adafruit". 
    • Bấm "Install" để cài đặt.
  • Bước 2: 
    • Viết chương trình. 
    • Giờ, anh em mình mở phần mềm lên, rồi copy cái đoạn code dưới đây vào:

// Khai báo thư viện để sử dụng cảm biến DHT

#include "DHT.h"

// Định nghĩa loại cảm biến và chân kết nối

#define DHTPIN 2    // Chân DATA nối vào chân số 2

#define DHTTYPE DHT11  // Đặt tên loại cảm biến là DHT11 (nếu xài DHT22 thì sửa lại)

// Khởi tạo đối tượng DHT

DHT dht(DHTPIN, DHTTYPE);

void setup() {

  // Bật cổng Serial để xem dữ liệu

  Serial.begin(9600);

  Serial.println("Hello, anh em! Bat dau do nhiet do va do am...");

  dht.begin(); // Khoi dong cam bien DHT

}

void loop() {

  // Đợi 2 giây rồi mới đọc giá trị

  delay(2000);

  // Đọc độ ẩm và nhiệt độ từ cảm biến

  float doAm = dht.readHumidity();

  float nhietDo = dht.readTemperature();

  // Kiểm tra xem có lỗi đọc dữ liệu không

  if (isnan(doAm) || isnan(nhietDo)) {

    Serial.println("Loi! Khong the doc du lieu tu cam bien DHT!");

    return;

  }

  // Hiển thị giá trị lên màn hình Serial Monitor

  Serial.print("Do am: ");

  Serial.print(doAm);

  Serial.print(" %\t");

  Serial.print("Nhiet do: ");

  Serial.print(nhietDo);

  Serial.println(" *C");

}

Giải thích:

  • "#include "DHT.h"": 
    • Dòng này để gọi cái "từ điển" mình vừa cài vào.
  • "#define DHTPIN 2": 
    • Giống như anh em mình đặt tên cho cái chân DATA là DHTPIN, và dặn nó là chân số 2.
  • "#define DHTTYPE DHT11": 
    • Dòng này để cho nó biết mình đang xài loại cảm biến nào.
  • "dht.readHumidity();" và "dht.readTemperature();": 
    • Hai câu lệnh này giống như anh em mình ra lệnh cho thằng Arduino là: "Mày đi hỏi thằng DHT xem độ ẩm và nhiệt độ là bao nhiêu rồi về nói cho tao nghe!".
  • "Serial.println()": 
    • Câu lệnh này dùng để in kết quả ra màn hình Serial Monitor
    • Anh em mình có thể mở cái màn hình này lên bằng cách bấm vào biểu tượng kính lúp ở góc trên bên phải của phần mềm.

Tổng kết

Tóm lại, bài này anh em mình đã biết cách sử dụng cảm biến để đo nhiệt độ và độ ẩm. 

Cái này là bước quan trọng để làm mấy cái máy đo thời tiết mini, hoặc điều khiển quạt tự động khi trời nóng trong các dự án smart home.

Nói nhiêu đó đủ rồi. 

Hẹn anh em ở bài viết tiếp theo, mình sẽ học cách điều khiển động cơ servo trong các dự án tự động hóa!

Nếu cần tư vấn về tư vấn thiết kế, lắp đặt thi công hay bảo trì sửa chữa các thiết bị và hệ thống smart home, cứ liên hệ tui qua số điện thoại 0902633999 (có Zalo và WhatsApp) để được giải đáp nhé!

Đăng nhận xét

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.

[facebook]

MKRdezign

{facebook#https://facebook.com/smarthomeminhliem} {twitter#http://twitter.com} {google-plus#http://google.com} {pinterest#http://pinterest.com} {youtube#https://youtube.com/smarthomeminhliem} {instagram#http://instagram.com/smarthomeminhliem}

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.
Javascript DisablePlease Enable Javascript To See All Widget