Giới thiệu cảm biến chất lượng không khí MQ135

Xin chào các bạn! Hôm nay mình xin giới thiệu và hướng dẫn các bạn cách lập trình cảm biến chất lượng không khí MQ135

Ok! Chúng cùng bắt đầu

I. Thông số kĩ thuật

Cảm biến này có thể nhận biết được các chất khí như NH3, Nox, Ancol, Benzen, Khói, gas, CO2...... Đa số khí nó nhận biết đều là khí tạp chất và không có lợi cho sức khỏe nên chính vì vậy người ta gọi nó là cảm biến chất lượng không khí.

  • Điện áp nguồn <=24V DC
  • Điện áp của heater: 5V AC/DC
  • Điện trở tải: Thay đổi được (2kOm -> 47kOm)
  • Điện trở heater: 33om
  • Công suất tiêu thụ của heater: Nhỏ hơn 800mW
  • Nồng độ phát hiện của một số chất: 10 - 300 ppm NH3, 10 - 1000 ppm Benzen, 10 - 300 ppm Alcol

ppm là gì? ===> ppm là đơn vị đo mật độ thường dành cho các mật độ TƯƠNG ĐỐI THẤP.  Nó thường chỉ tỷ lệ của lượng một chất trong tổng số lượng của hỗn hợp chứa chất đó (Ở đây là hỗn hợp không khí). Ở đây lượng có thể hiểu là khối lượng, thể tích, số hạt (số mol),... Khi dùng cần chỉ rõ lượng là gì. ppm = 1/1 000 000 = 10-6.

Sơ đồ pinout:

II. Lập trình

Chúng ta sẽ sử dụng thư viện MQ135 của tác giả GeorgK, tải về tại đây (mirror). Tải về giải nén, cho vào thư mục libraries của thư mục cài đặt arduino.

Sơ đồ nối chân:

MQ135 Arduino
Vcc 5V
GND GND
AO A2

 

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

Cách 1

Chúng ta sẽ chuyển tín hiệu analog đọc được sang giá trị ppm bằng hệ số trung bình (Cách tính thì mình không rõ). Ta sẽ dùng lệnh sau:

float ppm = *.getPPM(); //* là tên đối tượng khai báo với thư viện

Code mẫu:  

#include "MQ135.h"  //Thêm thư viện

#define PIN_MQ135 A2    //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);
}

Cách 2

Giá trị ppm là giá trị lấy trung bình nên không được chính xác. Nếu bạn muốn chính xác, chúng ta sẽ 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

Code mẫu:

#include "MQ135.h"

#define PIN_MQ135 A2
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
//Xem cách lấy nhiệt độ, độ ẩm từ DHT11 tại:
//http://arduino.vn/bai-viet/91-doc-nhiet-do-do-am-va-xuat-ra-man-hinh-lcd

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);
}

Mở rộng

Mình xin đề cập thêm một số lệnh của thư viện này:

float rzero = *.getRZero();
//Lấy hệ số trung bình của thư viện
float correctedRZero = *.getCorrectedRZero(temperature, humidity);
//Lấy hệ số được tính từ nhiệt độ và độ ẩm
float resistance = *.getResistance();
//Lấy khoảng cách tối đa mà cảm biến phát hiện ra.

Code hoàn chỉnh

#include "MQ135.h"

#define PIN_MQ135 A2
MQ135 mq135_sensor = MQ135(PIN_MQ135);

float temperature = 25.0;
float humidity = 60.0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  float rzero = mq135_sensor.getRZero();
  float correctedRZero = mq135_sensor.getCorrectedRZero(temperature, humidity);
  float resistance = mq135_sensor.getResistance();
  float ppm = mq135_sensor.getPPM();
  float correctedPPM = mq135_sensor.getCorrectedPPM(temperature, humidity);

  Serial.print("MQ135 RZero: ");
  Serial.print(rzero);
  Serial.print("\t Corrected RZero: ");
  Serial.print(correctedRZero);
  Serial.print("\t Resistance: ");
  Serial.print(resistance);
  Serial.print("\t PPM: ");
  Serial.print(ppm);
  Serial.print("\t Corrected PPM: ");
  Serial.print(correctedPPM);
  Serial.println("ppm");

  delay(500);
}

III. Kết luận

Như vậy là ta vừa tìm hiểu xong cảm biến chất lượng không khí MQ135. Chúc các bạn một ngày vui vẻ, sáng tạo, lập trình thật vui và có nhiều phát minh sáng chế trong tương lai với arduino. Nếu bạn có phát minh thì nhớ đăng lên cộng đồng chia sẻ với mọi người nha wink

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

Bộ điều khiển PID - ứng dụng phần 2 - xe dò line dùng thuật toán PID

Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn 

lên
34 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Tổng quan về cách sử dụng Module 4 LED 7 đoạn - Phần 1

Xin chào mọi người! Sau khi tìm hiểu led 4 đoạn, mình thấy rằng nó rất đa dạng, có khá nhiều loại với sơ đồ pinout khác nhau. Nên mình sẽ viết chuỗi bài "Tổng quan về cách sử dụng Module 4 LED 7 đoạn" để giúp cho những ai đang nghiên cứ led 7 đoạn sẽ dễ dàng hơn trong việc tìm hiểu chúng. Ở phần 1 này mình sẽ đưa ra nền tảng cơ bản về led 7 đoạn và cách tra pinout.

lên
14 thành viên đã đánh giá bài viết này hữu ích.

Giới thiệu về Femtoduino – Arduino nhỏ nhất hiện nay

Xin chào các bạn! Hôm nay mình xin giới thiệu với các bạn một board Arduino nhỏ nhất hiện nay, nó có tên là Femtoduino. Đây là sản phẩm của công ty Femtoduino, chứ không phải là của công ty Arduino. Nó có kích thước nhỏ hơn cả đồng xu.

lên
16 thành viên đã đánh giá bài viết này hữu ích.