Giao Tiếp Cảm Biến Chất Lượng Không Khí MQ-135 với Arduino

Trong thế giới công nghệ, nhiều cảm biến đang được sử dụng để giám sát và điều khiển các ứng dụng gia đình, robot, tự động hóa công nghiệp, v.v. Có nhiều cảm biến khác nhau cho các mục đích khác nhau. Giống như con người có khả năng cảm nhận khác nhau cho những mục đích khác nhau. Trong bài viết này chúng tôi tập trung vào cảm biến khí MQ-135 để giám sát môi trường. Cảm biến khí MQ-135 chủ yếu được sử dụng để đo NH3, NOx, Rượu, Benzen, Khói, CO2.

1. Thông số kỹ thuật

  • Điện áp hoạt động: 5 VDC
  • Ngõ ra DO: 0.1V / 5V
  • Ngõ ra AO: 0.1~0.3V
  • Điện trở tải: thay đổi được (2kΩ-47kΩ)
  • Điện trở của heater: 33Ω±5%
  • Công suất tiêu thụ của heater: < 800mW
  • Có thể nhận biết được các chất khí như NH3, Nox, Ancol, Benzen, Khói, gas, CO2…
  • Khoảng phát hiện: 10 – 300 ppm NH3, 10 – 1000 ppm Benzene, 10 – 300 Alcol
  • Kích thước: 32mm*20mm

Cảm biến MQ-135 có thể được sử dụng trong các ứng dụng như:

  • Giám sát chất lượng không khí
  • Phát hiện cháy nổ
  • Kiểm soát khí thải
  • Kiểm soát môi trường

2. Lập trình

1. Kết nối với Arduino

Để kết nối cảm biến MQ-135 với Arduino, ta cần sử dụng các chân sau:

  • GND: Kết nối với chân GND của Arduino
  • VCC: Kết nối với chân 5V của Arduino
  • AO: Kết nối với chân A1 của Arduino

2. Tải và cài đặt thư viện

Trước hết, bạn cần cài đặt thư viện để đọc giá trị từ cảm biến. Hãy mở Arduino IDE và làm theo các bước sau:

  1. Chọn "Sketch" -> "Include Library" -> "Manage Libraries...".
  2. Tìm kiếm thư viện "MQ135" và cài đặt nó.

3. Code

Vì giá trị cảm biến trả về chân AO là tín hiệu analog từ 0->1023 mà chúng ta cần chuyển giá trị này thành ppm (Nồng độ chất mà nó phát hiện được). Do đó chúng ta sẽ có 2 cách lập trình:

  • Chuyển tín hiệu analog đọc được sang giá trị ppm bằng hệ số trung bình. Ta sẽ dùng lệnh sau: float ppm = *.getPPM (); (* là tên đối tượng khai báo với thư viện).
    #include "MQ135.h" //Thêm thư viện
    #define PIN_MQ135 A1 //Khai báo pin nối với chân AO
    MQ135 mq135_sensor = MQ135 (PIN_MQ135); //Khai báo đối tượng thư viện
    void setup () {
        Serial.begin (9600); //Mở serial
    }
    void loop () {
        float ppm = mq135_sensor.getPPM (); //Đọc giá trị ppm
        Serial.print ("PPM: ");
        Serial.print (ppm);
        Serial.println ("ppm");
        delay (500);
    }
    
  • Kết hợp thêm một cảm biến, đó là cảm biến nhiệt độ và độ ẩm như DHT11 hay DHT22. Nhiệm vụ của cảm biến nhiệt độ, độ ẩm: Lấy nhiệt độ, độ ẩm khu vực hiện tại để tính ra hệ số chuyển đối tín hiệu analog sang ppm. Ta sử dụng lệnh: float correctedPPM = *.getCorrectedPPM (temperature, humidity); (temperature là nhiệt độ hiện tại, humidity là độ ẩm hiện tại).
    #include "MQ135.h"
    #define PIN_MQ135 A1
    MQ135 mq135_sensor = MQ135 (PIN_MQ135);
    float temperature = 25.0; // Nhiệt độ lấy từ cảm biến
    float humidity = 60.0; // Độ ẩm lấy từ cảm bến
    void setup () {
        Serial.begin (9600);
    }
    void loop () {
        float ppm = mq135_sensor.getPPM ();
        float correctedPPM = mq135_sensor.getCorrectedPPM (temperature, humidity);
        Serial.print ("PPM: ");
        Serial.print (ppm);
        Serial.print ("\t Corrected PPM: ");
        Serial.print (correctedPPM);
        Serial.println ("ppm");
        delay (500);
    }

4. Nạp chương trình

Kết nối Arduino với máy tính và nạp chương trình vào board Arduino bằng cách nhấn nút "Upload" trong Arduino IDE.

5. Kiểm tra kết quả

Mở Serial Monitor trong Arduino IDE (chọn "Tools" -> "Serial Monitor") để xem giá trị nồng độ khí được đọc từ cảm biến MQ-135. Hãy chắc chắn rằng bạn đã đặt baud rate trong chương trình là 9600 (hoặc theo baud rate bạn đã chọn).

3. Thư viện MQ135

Thư viện MQ135 cung cấp một số hàm giúp đơn giản hóa việc sử dụng cảm biến MQ-135 với Arduino. Dưới đây là một số hàm chính được định nghĩa trong tệp MQ135.h:
  1. MQ135(int pin): Hàm khởi tạo đối tượng MQ135 với chân analog được chỉ định.
    MQ135 gasSensor = MQ135(A0);
    
  2. float getCorrectionFactor(float temperature, float humidity): Hàm này trả về hệ số điều chỉnh dựa trên nhiệt độ và độ ẩm, giúp tăng độ chính xác của cảm biến.
    float correctionFactor = gasSensor.getCorrectionFactor(25.0, 60.0);
    
  3. float getResistance(): Hàm này trả về giá trị trở kháng của cảm biến.
    float sensorResistance = gasSensor.getResistance();
    
  4. float getCorrectedResistance(float temperature, float humidity): Hàm này trả về giá trị trở kháng được điều chỉnh dựa trên nhiệt độ và độ ẩm.
    float correctedResistance = gasSensor.getCorrectedResistance(25.0, 60.0);
    
  5. float getPPM(): Hàm này trả về ước lượng nồng độ khí trong đơn vị Parts Per Million (PPM) dựa trên giá trị trở kháng của cảm biến.
    float gasDensity = gasSensor.getPPM();
    
  6. float getRZero(): Hàm này trả về giá trị R₀ của cảm biến.
    float rZeroValue = gasSensor.getRZero();
    
  7. float getRZero(float temperature, float humidity): Hàm này trả về giá trị R₀ của cảm biến được điều chỉnh dựa trên nhiệt độ và độ ẩm.
    float rZeroValue = gasSensor.getRZero(25.0, 60.0);
    
  8. float getResistanceRatio(): Hàm này trả về tỷ lệ giữa giá trị trở kháng hiện tại và giá trị trở kháng R₀.
    float ratio = gasSensor.getResistanceRatio();

4. Video

Nhận xét

Mới hơn Cũ hơn