Đọc cảm biến DHT22 bằng 2 cách? (Cách cũ và không bị delay)

Những thứ cần chuẩn bị

Kết nối cảm biến DHT22 với mạch Arduino

DHT22

Arduino UNO R3

+

5V

-

GND

OUT

A3

Kết quả

Dùng thư viện đọc cảm biến DHT22

Download và cài đặt thư viện hỗ trợ sử dụng DHT22: download tại đây

Code Arduino

#include <DHT.h> // Gọi thư viện DHT22

const int DHTPIN = A3; //Đọc dữ liệu từ DHT22 ở chân A3 trên mạch Arduino
const int DHTTYPE = DHT22; //Khai báo loại cảm biến, có 2 loại là DHT11 và DHT22

DHT dht(DHTPIN, DHTTYPE);

void setup()
{
    Serial.begin(9600);
    Serial.println("Arduino.vn!");
    dht.begin(); // Khởi động cảm biến
}

void loop()
{
    float h = dht.readHumidity(); //Đọc độ ẩm
    float t = dht.readTemperature(); //Đọc nhiệt độ

    Serial.println("Arduino.vn");
    Serial.print("Nhiet do: ");
    Serial.println(t); //Xuất nhiệt độ
    Serial.print("Do am: ");
    Serial.println(h); //Xuất độ ẩm

    Serial.println(); //Xuống hàng
}

 

Kết quả

 

Dùng DHT Non-Blocking

Tại sao lại dùng thư viện này?

Vấn đề đặt ra là khi bạn cần đọc thông số của đèn led, nhiệt độ , độ ẩm. Bạn thấy rằng việc đọc những thông số này hoàn toàn là độc lập với nhau, nhưng khi dùng thư viện DHT22 bình thường thì sẽ có sự delay giữa chúng. Bởi ở đây sẽ đọc tuần tự, đọc đèn trước xong rồi mới tới đọc cảm biến hoặc ngược lại. Để giải quyết vấn đề đó khi bạn dùng thư viện DHT Non-Blocking sẽ cho phép đọc các thông số này song song và cùng lúc với nhau.

Download và cài đặt thư viện hỗ trợ sử dụng DHT Non-Blocking: download tại đây

Code Arduino

#include <dht_nonblocking.h> // gọi thư viện

#define DHT_SENSOR_TYPE DHT_TYPE_22 // Khai báo loại cảm biến
//#define DHT_SENSOR_TYPE DHT_TYPE_21
//#define DHT_SENSOR_TYPE DHT_TYPE_11

static const int DHT_SENSOR_PIN = A3; //Đọc dữ liệu từ DHT22 ở chân A3 trên mạch Arduino

DHT_nonblocking dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE);

void setup()
{
    Serial.begin(9600);
    Serial.println("Arduino.vn!");
}

// Đọc cảm biến sau 1 khoảng thời gian định trước
// Trả về false nếu không đọc được thông số cảm biến hoặc chưa tới thời gian cho phép đọc
// Trả về true nếu đọc được
// static để tạo cái gì đó dùng chung cho chương trình hoặc hàm và khởi tạo 1 lần duy nhất
static bool measure_environment(float* temperature, float* humidity) // Truyền địa chỉ của biến "*"
{
    static unsigned long measurement_timestamp = millis(); // Khởi tạo thời gian ban đầu
    if (millis() - measurement_timestamp > 4000ul) // Thời gian cho phép đọc là sau hơn 4s
    {
        if (dht_sensor.measure(temperature, humidity) == true) // Đọc thông số vào 2 biến và kiểm tra có đọc được không
        {
            measurement_timestamp = millis();
            return (true);
        }
    }

    return (false);
}

void loop()
{
    float temperature;
    float humidity;
    // Nhớ phải dùng “&” để truyền địa chỉ của biến vào
    if (measure_environment(&temperature, &humidity) == true) {
        // In ra màng hình
        Serial.println("Arduino.vn");
        Serial.print("Nhiet do: ");
        Serial.println(temperature); //Xuất nhiệt độ
        Serial.print("Do am: ");
        Serial.println(humidity); //Xuất độ ẩm

        Serial.println(); //Xuống hàng
    }
}

Kết quả

 
lên
9 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Điều khiển giám sát PLC Siemens, Mitsu, Delta từ xa qua điện thoại và máy tính

Trước giờ các phần mềm điều khiển qua internet rất mắc tiền bởi giá của các modem phần cứng và việc lập trình giao diện rất khó khăn mà không đáp ứng được tính thẩm mỹ cao. Chúng ta cần khoảng thời gian là 1 tuần cho việc lập trình và thiết lập hệ thống phần cứng bởi nó rât khó khăn, cần nhiều kiến thức chuyên sâu. Bởi vậy mà việc thực hiện dự án nào đó cho các bạn sinh viên và những người thích học hỏi, làm việc nhưng không có vốn là hoàn toàn bất khả thi. Do đó hôm nay tôi sẽ giới thiệu đến các bạn về iNut PLC và giải pháp giám sát điều khiển các thiết bị từ xa qua internet với giao diện được thiết kể bởi file ảnh svg (ảnh vector cho trình duyệt) bạn có thể tự mình làm được dễ dàng và cần thêm 1 tí ma thuật nữa là bạn có thể điều khiển, giám sát mọi thử thông qua giao diện đó rồi.

 
lên
11 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: