27 C
Hanoi
Thứ Hai, Tháng Mười Một 28, 2022

THIẾT KẾ PHẦN CỨNG - NHẬN THIẾT KẾ ĐIỆN TỬ CHO SẢN PHẨM PHẦN CỨNG SỐ, IOT, CÔNG NGHIỆP,...

Home LẬP TRÌNH VI ĐIỀU KHIỂN ARDUINO Đo nồng độ khí CO2 với cảm biến MQ135 và Arduino

Đo nồng độ khí CO2 với cảm biến MQ135 và Arduino

Chuẩn bị linh kiện

  • Arduino Nano
  • MQ-135 Sensor
  • Dây Jumper
  • Màn hình 0.96 inch SPI OLED
  • Board cắm
  • Điện trở 22KΩ

Màn hình OLED:

Tên chânKý hiệu khácMô tả
GndGroundGround
VddVcc, 5VNguồn cung cấp3-5V
SCKD0,SCL,CLKChân clock cho I2C và SPI
SDAD1,MOSIChân Data cho I2C và SPI
RESRST, RESETChân Reset (hữu ích cho SPI)
DCA0Data Command , sử dụng cho SPI
CSChip SelectChân chọn màn hình làm Slave khi giao tiếp SPI

Thông số của màn hình OLED :

  • OLED Driver IC: SSD1306
  • Độ phân giải: 128 x 64
  • Góc nhìn: >160°
  • Điện áp đầu vào: 3.3V ~ 6V
  • Màu của điểm ảnh: Blue
  • Nhiệt độ làm việc: -30°C ~ 70°C

Cảm biến MQ135:

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à đơ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.

Điều chỉnh độ nhạy:

Điện trở RL có vai trò rất quan trọng đến hoạt động của module sensor. Theo datasheet của MQ135 thì RL có thể điều chỉnh từ 10KΩ đến 47KΩ. Bạn sẽ thấy trên mạch module, nhà sản xuất đã hàn điện trở RL ;à 1KΩ (102). Để tập trung đo nồng độ khí CO2 thì bạn nên thay đổi giá trị của RL từ 1 KOhm lên 22 KOhm.

Kết nối MQ135 với Arduino:

Số thứ tựMàn hình OLED Arduino Uno
1GNDGround
2VCC5V
3D010
4D19
5RES13
6DC11
7CS12

Lập trình

Thư viện: https://github.com/GeorgK/MQ135

Tính điện trở R0 với điều kiện không khi sạch, bạn phải làm nóng cảm biến trong vòng 24h, sau đó đọc giá trị R0 theo code sau trên Arduino, mở cửa sổ Terminal để xem giá trị:

#include "MQ135.h"
void setup (){
Serial.begin (9600);
}
void loop() {
MQ135 gasSensor = MQ135(A0); // Attach sensor to pin A0
float rzero = gasSensor.getRZero();
Serial.println (rzero);
delay(1000);
}

Sau khi lấy được giá trị R0, chúng ta vào Documents > Arduino > libraries > MQ135-master folder , sau đỏ mở file  MQ135.h => Thay đổi giá trị  RLOAD và RZERO.

///The load resistance on the board
#define RLOAD 22.0
///Calibration resistence at atmospheric CO2 level
#define RZERO 5804.99

Tiếp tụ kéo xuống và thay thế giá trị ATMOCO2 với giá trị nồng độ CO2 trong khí quyển là 412.29

///Atmospheric CO2 level for calibration purposes
#define ATMOCO2 397.13

Code chính thức cho hệ thống:

Các thưu viện cần dùng:

Adafruit_GFX của tác giả by Adafruit
Adafruit_SSD1306 của tác giả by Adafruit
MQ135.h tại https://github.com/GeorgK/MQ135

Cài đặt tại Sketch => Include Library => Manage Libraries như các thư viện khác trên Arduino.

Khai báo thư viện:

#include "MQ135.h"
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Thiết lập thông số độ phân giải của màn hình OLED:

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Khai báo các chân giao tiếp của màn hình OLED với Arduino Uno:

#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

Khai báo chân đọc giá trị điện áp trả về của MQ135:

int sensorIn = A0;

Trong hàm setup(), khai báo baud rate cho Serial Monitor là 9600 và khởi tạo màn hình OLED:

Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();

Trong hàm loop(), đọc giá trị điện áp từ cảm biến:

val = analogRead(A0);
  Serial.print ("raw = ");

Gọi hàm tính toán giá trị nồng độ CO2:

 float ppm = gasSensor.getPPM();
  Serial.print ("ppm: ");
  Serial.println (ppm);

Thiết lập cỡ chữ và màu cho chữ trên màn hình OLED:

display.setTextSize(1);
display.setTextColor(WHITE);

Chọn vị trí để hiển thị giá trị nồng độ CO2 lên màn hình OLED:

   display.setCursor(18,43);
  display.println("CO2");
  display.setCursor(63,43);
  display.println("(PPM)");
  display.setTextSize(2);
  display.setCursor(28,5);
  display.println(ppm);

Hiển thị chữ lên màn hình OLED:

 display.display();
 display.clearDisplay();

Kết quả:

CODE:

/*
 * Interfacing MQ135 Gas Senor with Arduino
 * Author: Ashish
 * Website: www.circuitdigest.com
 * Date: 11-11-2020
 */
// The load resistance on the board
#define RLOAD 22.0
#include "MQ135.h"
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for SSD1306 display connected using software SPI (default case):
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
  OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
MQ135 gasSensor = MQ135(A0);
int val;
int sensorPin = A0;
int sensorValue = 0;
void setup() {
  Serial.begin(9600);
  pinMode(sensorPin, INPUT);
  display.begin(SSD1306_SWITCHCAPVCC);
  display.clearDisplay();
  display.display();
}
void loop() {
  val = analogRead(A0);
  Serial.print ("raw = ");
  Serial.println (val);
 // float zero = gasSensor.getRZero();
 // Serial.print ("rzero: ");
  //Serial.println (zero);
  float ppm = gasSensor.getPPM();
  Serial.print ("ppm: ");
  Serial.println (ppm);
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(18,43);
  display.println("CO2");
  display.setCursor(63,43);
  display.println("(PPM)");
  display.setTextSize(2);
  display.setCursor(28,5);
  display.println(ppm);
  display.display();
  display.clearDisplay();
  delay(2000);
}

Tham khảo: https://circuitdigest.com/

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Chia sẻ PCB KIT ESP32

Mạch nguyên lý schemaic: Download toàn bộ project phần mềm Altium: DOWNLOAD Một vài hình ảnh thiết kế trên Altium:

Chia sẻ PCB Ethernet Gigabit Switch 5 Port

Mạch nguyên lý Schematic: DOWNLOAD ALTIUM PROJECT Một số hình ảnh 3D và 2D của mạch: Lớp TOP: Lớp 2: Lớp 3:Lớp Bottom:

Chia sẻ PCB mạch Hub USB2.0 dùng FE1.1S

DOWNLOAD PROJECT (ALTIUM) Mạch thiết kế trên phần mềm Altium, 2 lớp, dùng cho mục đích thử nghiệm.

Chia sẻ PCB nguồn công nghiệp VRB2405YMD-20WR3

Công suất đầu ra 20 Vin (VDC) 18~36 Vout (VDC) 5 Số đầu ra 1 Điện áp cách ly 1500     DOWNLOAD  

Recent Comments