Sơ đồ thuật toán chương trình đọc giá trị cảm biến MQ7

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu thiết kế hệ thống đo ô nhiễm không khí (PM10, SOx, NOx ) (Trang 58 - 60)

Chương trình đọc dữ liệu tử cảm biến - Hiệu chỉnh giá trị điện áp

void pwm_adjust() {

float previous_v = 5.0; //giá trị khởi tạo điện áp ban đầu float raw2v = 5.0 / 1024.0;//Hệ số chuyển đổi ADC

//Đọc giá trị điện áp với các giá trị độ rộng tương ứng for(int w = 0; w < 250; w++)

{

setTimer2PWM(0, w); float avg_v = 0;

for(int x = 0; x < 100; x ++) //Đọc giá trị phản hồi trong khoảng 100ms {

avg_v += analogRead(A1); delay(time_scale); }

avg_v *= raw2v;

if(avg_v < 3.6 && previous_v > 3.6) //Khoảng điều chỉnh tối ưu {

float dnew = 3.6 - avg_v; // tính độ lệch điện áp hiện tại float dprev = previous_v - 3.6;// tính độ lệch điện áp trước if(dnew < dprev) // Đưa ra kết quả độ rộng xung

{

opt_voltage = avg_v; opt_width = w; return;

}

else //đưa ra giá trí trước đó { opt_voltage = previous_v; opt_width = w-1; return; } } previous_v = avg_v; } } - Cấu hình cảm biến

//Định nghĩa chân Analog được sử dụng kết nối với cảm biến

#define MQ_PIN (0)

//Định nghĩa giá trị điện trở tải trên modul cảm biến

#define RL_VALUE (1000) //Giá trị trở tải RLtheo Ω

//Định nghĩa giá trị RO_CLEAR_AIR_FACTOR=(Sensor resistance in clean air)/RO, giá trị này được lấy từ bảng thông số

#define RO_CLEAN_AIR_FACTOR (25.823)

- Hiệu chỉnh cảm biến

/*

Lưu ý: Hàm này giả định rằng cảm biến ở trong không khí sạch. Nó sử dụng hàm MQResistanceCalculation để tính toán điện trở cảm biến trong không khí sạch và sau đó chia nó với RO_CLEAN_AIR_FACTOR. Với MQ7 giá trị

RO_CLEAN_AIR_FACTOR là 25.823

void MQCalibration()

{

tft.fillScreen(ILI9341_BLACK);

tft.setTextSize(3);

tft.setTextColor(ILI9341_GREEN, ILI9341_BLACK);

tft.setCursor(20, 30); tft.print("Calibration MQ7"); tft.setCursor(20, 60); tft.print("R0: "); float val; val = read_RS_mq7(); R0=val/RO_CLEAN_AIR_FACTOR;

tft.setTextColor(ILI9341_RED, ILI9341_BLACK);

tft.setCursor(120, 60);

tft.print(R0);

delay(500); }

/*

Đầu ra: giá trị Rs của cảm biến

Chú ý: hàm này sử dụng hàm MQResistanceCalculation để tính giá trị Rs của cảm

biến. Giá trị Rs thay đổi tương ứng với sự thay đổi nồng đô khí, thời gian lấy mẫu và khoảng thời gian giữa các lần lấy mẫu có thể thay đổi được. */

float read_RS_mq7(){ float raw=0; float RS=0;

for(int i=0; i<100;i++){ raw += analogRead(MQ7); delay(8); } raw*=0.01; RS=RL*(1023 - raw)/(raw); return RS; } Tính toán giá trị ppm /*

Đầu vào: Giá trị RS

đầu ra: giá trị ppm của khí mục tiêu

Chú ý: Bằng cách sử dụng một điểm trên đồ thị và độ dốc. Ta có thể tính được giá trị x (giá trị Log(ppm)) thông qua tỉ số Rs/Ro.

*/

void calculatorPPM(float RS){

COppm = 98.43*pow((RS/R0), -1.523); }

3.2.2 Đọc và tính toán nồng độ NO2 từ cảm biến điện hóa

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu thiết kế hệ thống đo ô nhiễm không khí (PM10, SOx, NOx ) (Trang 58 - 60)