اندازه گیری غلظت CO2 در هوا با استفاده از آردوینو و سنسور MQ-135:
اقلام استفاده شده:
آردوینو نانو Arduino NANO ماژول سنسور گاز MQ135 تشخیص آمونیاک و بنزن سنسور MQ135 نمایشگر OLED 128x64 آبی I2C 0.96 برد برد سایز متوسط breadboard سیم برد بردی 40 تایی دو سر نری پک اقلام مورد نیاز:
سطح CO2 جو زمین روز به روز در حال افزایش است. میانگین جهانی دی اکسید کربن اتمسفر در سال 2019 409.8 قسمت در میلیون و در اکتبر 2020 411.29 است. دی اکسید کربن یک گاز گلخانه ای کلیدی است و مسئول حدود سه چهارم انتشار گازهای گلخانه ای است. بنابراین نظارت بر سطح CO2 نیز اهمیت پیدا کرده است.
در این پروژه اندازه گیری غلظت CO2 در هوا با استفاده از آردوینو و سنسور MQ-135 قصد داریم از سنسور MQ-135 با آردوینو برای اندازه گیری غلظت CO2 استفاده کنیم. مقادیر غلظت CO2 اندازه گیری شده روی ماژول OLED نمایش داده می شود و در آخر نیز خوانش سنسور Arduino MQ-135 را با خوانش سنسور CO2 مادون قرمز مقایسه می کنیم. به غیر از CO2، غلظت گاز LPG، دود و آمونیاک را نیز با استفاده از آردوینو اندازه گیری کرده ایم.
اجزای مورد نیاز:
- آردوینو نانو
- سنسور MQ-135
- سیم های جامپر
- ماژول نمایشگر 0.96 SPI OLED
- بردبورد
- مقاومت 22KΩ
ماژول نمایشگر OLED 0.96:
OLED (Organic Light-Emitting Diodes) یک فناوری خود ساطع کننده نور است که با قرار دادن یک سری لایه های نازک آلی بین دو هادی ساخته می شود. هنگامی که جریان الکتریکی به این فیلم ها وارد می شود، نور درخشانی تولید می شود. OLED ها از فناوری مشابه تلویزیون ها استفاده می کنند، اما پیکسل های کمتری نسبت به اکثر تلویزیون های ما دارند.
برای این پروژه، ما از یک صفحه نمایش 0.96 اینچی OLED SSD1306 هفت پین تک رنگ استفاده می کنیم. این می تواند روی سه پروتکل ارتباطی مختلف کار کند: حالت SPI 3 Wire، حالت SPI چهار سیمه و حالت I2C.
همچنین می توانید با مطالعه مقاله مرتبط با اصول اولیه نمایشگر OLED و انواع آن بیشتر آشنا شوید. پین ها و عملکرد آن در جدول زیر توضیح داده شده است:
Pin Name | Other Names | Description |
Gnd | Ground | Ground pin of the module |
Vdd | Vcc, 5V | Power pin (3-5V tolerable) |
SCK | D0,SCL,CLK | Acts as the clock pin. Used for both I2C and SPI |
SDA | D1,MOSI | Data pin of the module. Used for both IIC and SPI |
RES | RST, RESET | Resets the module (useful during SPI) |
DC | A0 | Data Command pin. Used for SPI protocol |
CS | Chip Select | Useful when more than one module is used under SPI protocol |
مشخصات OLED:
- آی سی درایور OLED: SSD1306
- رزولوشن: 128*64
- زاویه دید:> 160 درجه
- ولتاژ ورودی: 3.3 ~ 6 ولت
- رنگ پیکسل: آبی
- دمای کاری: -30 تا 70 درجه سانتیگراد
آماده سازی سنسور MQ-135:
سنسور گاز MQ-135 یک سنسور کیفیت هوا برای تشخیص طیف وسیعی از گازها از جمله NH3، NOx، الکل، بنزن، دود و CO2 است. سنسور MQ-135 را می توان به عنوان یک ماژول یا فقط به عنوان سنسور به تنهایی خریداری کرد. در این پروژه، ما از یک ماژول حسگر MQ-135 برای اندازه گیری غلظت CO2 در PPM استفاده می کنیم. نمودار مدار برد MQ-135 در زیر آورده شده است.
مقاومت بار RL نقش بسیار مهمی در کارکرد سنسور دارد. این مقاومت با توجه به غلظت گاز مقدار مقاومت خود را تغییر می دهد. با توجه به برگه داده MQ-135، مقدار مقاومت بار می تواند از 10KΩ تا 47KΩ باشد. برگه داده توصیه می کند که آشکارساز را برای غلظت 100ppm NH3 یا 50ppm الکل در هوا کالیبره کنید و از مقدار مقاومت بار (RL) حدود 20 KΩ استفاده کنید. اما اگر ردهای PCB خود را دنبال کنید تا مقدار RL خود را در برد پیدا کنید، می توانید یک مقاومت بار 1KΩ (102) را ببینید.
بنابراین برای اندازه گیری مقادیر مناسب غلظت CO2، باید مقاومت 1KΩ را با مقاومت 22KΩ جایگزین کنید.
نمودار مدار به رابط MQ135 با آردوینو:
شماتیک کامل اتصال سنسور گاز MQ-135 با آردوینو در زیر آورده شده است:
مدار بسیار ساده است زیرا ما فقط سنسور MQ-135 و ماژول نمایشگر OLED را با آردوینو نانو وصل می کنیم. سنسور گاز MQ-135 و ماژول نمایشگر OLED هر دو با +5V و GND تغذیه می شوند. پایه Analog Out سنسور MQ-135 به پایه A0 آردوینو نانو متصل است. از آنجایی که ماژول نمایشگر OLED از ارتباط SPI استفاده می کند، ما یک ارتباط SPI بین ماژول OLED و آردوینو نانو برقرار کرده ایم. اتصالات در جدول زیر نشان داده شده است:
S.No | OLED Module Pin | Arduino Pin |
1 | GND | Ground |
2 | VCC | 5V |
3 | D0 | 10 |
4 | D1 | 9 |
5 | RES | 13 |
6 | DC | 11 |
7 | CS | 12 |
پس از اتصال سخت افزار طبق نمودار مدار، تنظیمات حسگر Arduino MQ135 باید چیزی شبیه به زیر باشد:
محاسبه مقدار Ro سنسور MQ135:
اکنون که مقدار RL را می دانیم، بیایید به نحوه محاسبه مقادیر Ro در هوای پاک ادامه دهیم. در اینجا قصد داریم از MQ135.h برای اندازه گیری غلظت CO2 در هوا استفاده کنیم. بنابراین ابتدا کتابخانه MQ-135 را دانلود کنید، سپس سنسور را به مدت 24 ساعت قبل از خواندن مقادیر Ro گرم کنید. پس از فرآیند پیش گرم کردن، از کد زیر برای خواندن مقادیر Ro استفاده کنید:
#include "MQ135.h" void setup (){ Serial.begin (9600); } void loop() { // Attach sensor to pin A0 MQ135 gasSensor = MQ135(A0); float rzero = gasSensor.getRZero(); Serial.println (rzero); delay(1000); }
اکنون پس از دریافت مقادیر Ro، به Documents > Arduino > libraries > MQ135-master folder بروید و فایل MQ135.h را باز کنید و مقادیر RLOAD و RZERO را تغییر دهید.
///The load resistance on the board #define RLOAD 22.0 ///Calibration resistence at atmospheric CO2 level #define RZERO 5804.99
اکنون به پایین بروید و مقدار ATMOCO2 را با CO2 فعلی جو که 411.29 است جایگزین کنید.
///Atmospheric CO2 level for calibration purposes #define ATMOCO2 397.13
کد اندازه گیری CO2 با استفاده از سنسور Arduino MQ135: کد کامل رابط سنسور MQ-135 با آردوینو در انتهای سند آورده شده است. در اینجا چند قسمت مهم کد MQ135 آردوینو را توضیح می دهیم.
کد از کتابخانههای Adafruit_GFX و Adafruit_SSD1306 و MQ135.h استفاده میکند. این کتابخانه ها را می توان از Library Manager در Arduino IDE دانلود و از آنجا نصب کرد. برای آن، Arduino IDE را باز کنید و به Sketch <Include Library < Manage Libraries بروید. اکنون Adafruit GFX را جستجو کنید و کتابخانه Adafruit GFX توسط Adafruit را نصب کنید.
به طور مشابه، کتابخانه های Adafruit SSD1306 توسط Adafruit را نصب کنید. کتابخانه MQ135 را می توانید از اینجا دانلود کنید.
پس از نصب کتابخانه ها در Arduino IDE، کد را با گنجاندن فایل های کتابخانه مورد نیاز شروع کنید.
#include "MQ135.h" #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>
سپس عرض و ارتفاع OLED را مشخص کنید. در این پروژه، ما از یک صفحه نمایش OLED 128×64 SPI استفاده می کنیم. می توانید متغیرهای SCREEN_WIDTH و SCREEN_HEIGHT را با توجه به نمایشگر خود تغییر دهید.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
سپس پین های ارتباطی SPI را در جایی که نمایشگر OLED متصل است، مشخص کنید.
#define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13
سپس، یک نمونه نمایش Adafruit با عرض و ارتفاعی که قبلاً با پروتکل ارتباطی SPI تعریف شده بود، ایجاد کنید.
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
پس از آن، پین آردوینو را در جایی که سنسور MQ-135 متصل است، مشخص کنید.
int sensorIn = A0;
اکنون در تابع setup() ، مانیتور سریال را با نرخ باود 9600 برای اهداف اشکال زدایی مقداردهی اولیه کنید. همچنین، صفحه نمایش OLED را با تابع begin() راه اندازی کنید.
Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay();
در داخل تابع ()loop، ابتدا مقادیر سیگنال را در پین Analog آردوینو با فراخوانی تابع analogRead() بخوانید.
val = analogRead(A0); Serial.print ("raw = ");
سپس در خط بعدی، gasSensor.getPPM() را برای محاسبه مقادیر PPM فراخوانی کنید. مقادیر PPM با استفاده از مقاومت بار، R0 و خواندن از پایه آنالوگ محاسبه می شود.
float ppm = gasSensor.getPPM(); Serial.print ("ppm: "); Serial.println (ppm);
پس از آن، اندازه متن و رنگ متن را با استفاده از setTextSize() و setTextColor() تنظیم کنید.
display.setTextSize(1); display.setTextColor(WHITE);
سپس در خط بعدی، با استفاده از متد setCursor(x,y) موقعیتی را که متن شروع می شود، مشخص کنید. و با استفاده از تابع display.println() مقادیر CO2 را روی صفحه نمایش 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);
و در آخر، متد display() را فراخوانی کنید تا متن روی صفحه نمایش OLED نمایش داده شود.
display.display(); display.clearDisplay();
تست رابط سنسور MQ-135 با آردوینو: پس از آماده شدن سخت افزار و کد، نوبت به تست سنسور می رسد. برای این کار، آردوینو را به لپ تاپ متصل کنید، برد و پورت را انتخاب کنید و دکمه آپلود را بزنید. سپس سریال مانیتور خود را باز کنید و مدتی صبر کنید (فرایند پیش گرم کردن)، سپس اطلاعات نهایی را مشاهده خواهید کرد. مقادیر بر روی صفحه نمایش OLED مطابق شکل زیر نمایش داده می شود:
به این ترتیب می توان از سنسور MQ-135 برای اندازه گیری دقیق CO2 در هوا استفاده کرد. کد کامل سنسور کیفیت هوا MQ135 آردوینو و ویدیوی کار در زیر آورده شده است. اگر ابهامی دارید در قسمت نظرات مطرح کنید.
کد:
/* * 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); }
فیلم:
منبع این مطالب:
https://circuitdigest.com