آموزش آردوینوپروژه های آردوینو

آموزش مانیتورینگ کیفیت هوا با آردوینو (حرفه ای)

تنفس هوای سالم و پاک امری حیاتی در تندستی انسان ها محسوب میشود. با این حال کیفیت هوا در بسیاری از محیط ها یک دغدغه بزرگ است. در این مطلب، ما به دنبال ساخت یک سیستم مانیتورینگ کیفیت هوا با آردوینو هستیم. در گذشته با استفاده از ESP8266 یک سیستم مانیتورینگ آلودگی هوا مبتنی بر اینترنت اشیا را ساخته ایم. اما در این پروژه، کار خود را سخت و پیچیده نکرده و از همان بورد آردوینو Uno معروف برای ساخت یک سنسور کیفیت هوا DIY استفاده خواهیم کرد.

در ابتدا درمورد قطعات به کار برده شده در این پروژه صحبت کرده و سپس به سراغ اتصال سنسور MQ135 به بورد آردوینو میرویم. درنهایت هم کد پروژه را نوشته و بررسی میکنیم. پس بیایید بدون اتلاف وقت و معطلی، پروژه خود را آغاز کنیم.

سنسور AQI یا سنسور شاخص کیفیت هوا چیست؟

شاخص کیفیت هوا (AQI) یک روش اندازه گیری استاندارد برای بیان میزان آلودگی یا پاکی هوا در یک محیط مشخص و دریک بازه زمانی معلوم است. به کمک این روش، اطلاعات کیفیت هوا را به آسانی و با روشی قابل درک به عموم مردم منتقل میکنیم.

AQI به طور معمول آلاینده های اصلی هوا را که توسط آژانس های زیست محیطی درسراسر جهان تنظیم میشوند، مانند گاز ازون در سطح زمین، ذرات معلق (PM2.5 , PM10)، کربن مونوکسید (CO)، گوگرد دی اکسید (SO2)، و نیتروژن دی اکسید (NO2) را در نظر میگیرد. هر آلاینده مقیاس و سطح آستانه مخصوص به خود را دارد که به کمک آن ها مقدار AQI مشخص میشود.

مقدار AQI در بازه 0 تا 500 تغییر میکند. این محدوده کلی، به چند بازه کوچک تر تقسیم شده و هرکدام از این بازه ها بیانگر یک سطح آلودگی و یک میزان نگرانی برای سلامت افراد جامعه درارتباط با کیفیت هوا هستند.

بازه 0 تا 150 (آلودگی نرمال تا متوسط) :

زمانی که AQI یا شاخص کیفیت هوا مقداری بین 0 تا 150 دارد، یعنی کیفیت هوا برای اغلب افراد قابل قبول و مناسب است. حال اگر مقدار AQI به کران بالای این بازه یعنی 150 نزدیک باشد، آنگاه میتوان گفت که نگرانی های موردی برای گروه های حساس وجود دارد.

بازه 151 تا 200 (کیفیت پایین و ناسالم):

زمانی که AQI در این بازه قرار دارد، یعنی کیفیت هوا پایین است و تمام گروه ها، به خصوص گروه های حساس درمعرض آسیب های ناشی از هوای بی کیفیت بر سلامت خود هستند.

بازه 201 تا 300 (خیلی بد و ناسالم) :

زمانی که AQI دربازه 201 تا 300 قرار گرفته است، شرایط اورژانسی درنظر گرفته شده و خطرات بسیاری سلامتی افراد را تهدید میکنند. این وضعیت بر تمامی گروه ها تاثیر گذاشته و ممکن است آسیب های بسیار جدی به دنبال داشته باشد.

بازه 301 تا 500 (سمی و خطرناک):

قرار گرفتن AQI در این بازه یک هشدار برای سلامتی افراد تلقی میشود. تمامی گروه ها در این شرایط در معرض آسیب های جدی به سلامت خود به دلیل کیفیت بسیار پایین هوا هستند.

از آنجایی که در پروژه “سیستم مانیتورینگ AQI” غلظت PM2.5 و PM10 را اندازه گیری کردیم، در این پروژه، از این دو آلاینده صرف نظر میکنیم. اگر علاقه مندید بیشتر درباره این آلاینده ها بدانید، میتوانید آن پروژه را نیز در ادامه این مطلب مطالعه کرده و اطلاعات خود را تکمیل کنید.

سیستم مانیتورینگ کیفیت هوا چگونه کار میکند؟

سیستم مانیتورینگ کیفیت هوا

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

سیستم مانیتورینگ کیفیت هوای ما با استفاده از دو سنسور، پارامترهای محیطی مانند سطح گاز، دما و رطوبت را اندازه میگیرد. به طور مشخص، داده های آنالوگ سنسور گاز، که به یکی از پایه های آنالوگ آردوینو متصل شده است، داده کیفیت هوا را به ما تحویل میدهد. داده های خوانده شده از سنسور، به مقادیر آستانه ای که پیشتر تعریف شده اند، نگاشت شده و کیفیت ها را در دسته های “خوب”، “بد”، “خیلی بد” یا “سمی” طبقه بندی میکنند. به صورت همزمان یک سنسور DHT11 رطوبت و دما را اندازه گیری میکند. داده جمع آوری شده به صورت همزمان و real-time با استفاده از کتابخانه های Adafruit روی یک نمایشگر اولد نشان داده میشوند. با نظارت مداوم بر پارامترهای محیطی، سیستم خلاصه ای از وضعیت کیفیت هوا را در اختیار کاربران قرار میدهد. کاربران نیز میتوانند با استفاده از این داده ها، تغییرات محیط خود را ارزیابی کرده و متناسب با شرایط، پاسخ مناسبی از خود نشان دهند.

قطعات لازم برای این پروژه

  • بورد آردوینو
  • سنسور گاز MQ135 برای تشخیص گازهای مختلف
  • سنسور دما و رطوبت DHT11
  • نمایشگر اولد برای نمایش خروجی
  • بردبورد و سیم های جامپر

مدار اتصال سیستم مانیتورینگ کیفیت هوا با آردوینو

اتصالات کامل این پروژه در تصویر زیر نشان داده شده است. همانگونه که مشاهده میکنید، یک نمایشگر اولد، یک سنسور DHT11 و یک سنسور گاز MQ135 از طریق اتصالاتی که روی بردبورد انجام شده به بورد آردوینو Uno متصل شده اند.

مدار اتصال سیستم مانیتورینگ کیفیت هوا با آردوینو

آردوینو با استفاده از پروتکل I2C و به کمک پایه های SDA و SCL به نمایشگر اولد متصل شده است. خروجی سنسور گاز MQ135، سیگنال آنالوگی است که به پایه A0 آردوینو فرستاده شده است. سنسور DHT11 یک پایه خروجی دیجیتال دارد که به پایه D2 آردوینو متصل میشود.

پس از انجام اتصالات، پروژه ما مداری مانند تصویر زیر خواهد بود.

مدار اتصال سیستم مانیتورینگ کیفیت هوا با آردوینو

کد سیستم مانیتورینگ کیفیت هوا با آردوینو

این کد بر کیفیت هوا نظارت کرده و داده های خوانده شده توسط دو سنسور (دما، رطوبت و سطح گاز) را روی یک نمایشگر اولد نشان میدهد. در اینجا کد کامل را به چند قطعه کد تقسیم کرده و هرکدام را به صورت جداگانه توضیح میدهیم.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <dht.h>

در قطعه کد بالا، کتابخانه های ضروری برای پروتکل های ارتباطی ( کتابخانه های SPI و Wire)، مدیریت گرافیک پروژه ( کتابخانه Adafruit_GFX)، کنترل نمایشگر اولد ( کتابخانه Adafruit_SSD1306) و سنسور DHT ( کتابخانه dht) را فراخوانی میکنیم.

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4

درادامه، با تعریف سه مقدار ثابت، عرض، طول و پایه ریست نمایشگر اولد را پیکربندی میکنیم.

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

یک شی به نام display از Adafruit_SSD1306 تعریف کرده و نمایشگر اولد را به کمک چهار آرگومان یا پارامتر این شی (عرض، طول، ارتباط Wire و پایه ریست) کنترل میکنیم.

#define sensor A0
#define DHT11PIN 2

در این قطعه کد، دو مقدار ثابت تعریف میکنیم. یکی برای پایه آنالوگ متصل به سنسور گاز که sensor نام داشته و دیگری برای پایه متصل به سنسور DHT11 که DHT11PIN نام دارد.

int gasLevel = 0;
String quality = "";
dht DHT;

دو متغیر برای ذخیره سطح گاز و توضیحات لازم در مورد کیفیت هوا تعریف شده اند. یک نمونه به نام DHT نیز از سنسور DHT ایجاد شده است.

void sendSensor() {
 // Function to read temperature and humidity from the DHT sensor
int readData = DHT.read11(DHT11PIN);
      float h = DHT.humidity;
      float t = DHT.temperature;

      if (isnan(h) || isnan(t)) {
      Serial.println("Failed  to read from DHT sensor!");
        Return;
  }
      display.setTextColor(WHITE);
      display.setTextSize(1);
      display.setFont();
      display.setCursor(0, 43);
      display.println("Temp  :");
     display.setCursor(80, 43);
      display.println(t);
      display.setCursor(114, 43);
      display.println("C");
      display.setCursor(0,  56);
      display.println("RH    :");
      display.setCursor(80, 56);
      display.println(h);
      display.setCursor(114, 56);
      display.println("%");
}

این تابع برای خواندن داده دما و رطوبت از سنسور DHT11 و نمایش آن روی نمایشگر اولد تعریف میشود.

void air_sensor() {
gasLevel = analogRead(sensor);

      if(gasLevel<151){
        quality = "  GOOD!";
      }
      else if (gasLevel >151 && gasLevel<200){
        quality =  "  Poor!";
  }
      else if (gasLevel >200 && gasLevel<300){
        quality  = "Very bad!";
  }
        else if (gasLevel >300 && gasLevel<500){
        quality  = "Toxic!";
  }
        else{
        quality = " Toxic";   
}
  display.setTextColor(WHITE);
  display.setTextSize(1);  
  display.setCursor(1,5);
  display.setFont();
  display.println("Air Quality:");
  display.setTextSize(1);
  display.setCursor(5,23);
  display.println(gasLevel);
  
  display.setCursor(20,23);
  display.println(quality);  
}
This function is defined to read gas levels from the analog pin connected to the gas sensor and determine the air quality based on predefined thresholds. It also displays the gas level and quality on the OLED screen.

void setup() {
 Serial.begin(9600);
  pinMode(sensor,INPUT);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) { // Address  0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
}
  display.clearDisplay();
  display.setTextColor(WHITE);
  
  display.setTextSize(2);
  display.setCursor(50, 0);
  display.println("Air");
  display.setTextSize(1);
  display.setCursor(23, 20);
  display.println("Quality monitor");
  display.display();
  delay(1200);
  display.clearDisplay();
  
  display.setTextSize(1.5);
  display.setCursor(20, 20);
  display.println("BY Circuit");
  display.setCursor(20, 40);
  display.println("Digest");
  display.display();
  delay(1000);
  display.clearDisplay(); 

}

تابع ()setup، ارتباط سریال را به منظور دیباگ کردن و اشکال زدایی آغاز میکند. به علاوه پایه sensor ( پایه متصل به سنسور گاز) را به عنوان پایه ورودی پیکربندی کرده و نمایشگر اولد را مقداردهی و راه اندازی میکند. همچنین پیام های مقدماتی را نیز روی صفحه نمایشگر نشان میدهد.

void loop() {
display.clearDisplay();
air_sensor();
sendSensor();
display.display();  

}

تابع ()loop، صفحه نمایشگر را پاک کرده، داده سنسور گاز و سنسور DHT11 را با استفاده از توابع تعریف شده میخواند و به صورت مداوم داده های نمایشگر را با آخرین مقادیر خوانده شده به روز میکند.

این کد اساسا سنسورها را راه اندازی کرده، داده های آن ها را خوانده، کیفیت هوا را براساس سطح گاز تعیین میکند و درنهایت نیز تمام اطلاعات را در یک حلقه تکرار شونده روی نمایشگر اولد نشان میدهد.

نسخه نمایشی پروژه مانیتورینگ کیفیت هوا با آردوینو

در ویدیو زیر، عملکرد نسخه نمایشی این پروژه را مشاهد میکنید. همانطور که مشخص است، مقادیر دما و رطوبت در قسمت پایینی نمایشگر اولد نشان داده میشوند. پس از خروج گاز از فندک نیز، سطح آلودگی هوا که از “خوب” تا “سمی” دسته بندی شده است، درقسمت بالایی این نمایشگر نشان داده میشود.

پروژه های مشابه آردوینو با مداراتصال و کد

پروژه های اتوماسیون خانگی با آردوینو

به کمک پروژه های اتوماسیون خانگی آردوینو محیط زندگی خود را به یک محیط هوشمند تبدیل کنید. از کنترل لامپ ها و وسایل برقی گرفته تا نظارت بر شرایط محیطی، این پروژه های DIY قدرت ساخت راه حل های شخصی سازی شده متناسب با نیازتان را به شما میدهند.

پروژه های IoT با استفاده از آردوینو

با استفاده از پروژه های ساخته شده با آردوینو ESP32، NodeMCU و ESP8266 سفر خود را به دنیای اینترنت اشیا (IoT) آغاز کنید. به کمک اینترنت اشیا، دستگاه های به هم متصلی بسازید که به طور یکپارچه از طریق اینترنت با هم ارتباط برقرار میکنند. پروژه شما چه مربوط به حسگر هوشمند باشد چه کنترل از راه دور و یا حتی مانیتورینگ داده، اینترنت اشیا به شما این امکان را میدهد که هوش و ارتباطات را به محیط اطراف خود آورده و خانه و محیط زندگی خود را هوشمندتر و کارآمدتر سازید.

پروژه های رباتیک با آردوینو

در پروژه های رباتیک آردوینو که کد و مدار با هم ترکیب شده و به ماشین ها جان میدهند، غرق شوید. ابداعاتی مانند ربات تعقیب کننده خط یا مسیریاب و شگفتی های کنترل حرکت را به کمک مداراتصال کامل و قطعه کدهای توضیح داده شده کشف کنید. برای تجربه و یادگیری فراگیر سخت افزار و برنامه نویسی به دنیای رباتیک با آردوینو وارد شوید.

درطول یک سفر ماجراجویانه با آردوینو که به طور مشخص برای تازه کاران و مبتدیان طراحی شده است، با ما همراه باشید. در این ماجراجویی، بر مهارت های اساسی و بنیادی الکترونیک و مفاهیم کدنویسی تسلط پیدا خواهید کرد.

با استفاده از LED چشمک زن و کاوش سنسورها، شبیه ساز چراغ راهنمایی و رانندگی اولیه خود را بسازید و زمینه افزایش مهارت برنامه نویسی خود را مهیا کنید. حتی اگر کاملا مبتدی هستید نیز میتوانید به دنیای پروژه های آردوینو وارد شده و ببینید که چگونه با هر خط از کد، ایده های شما به واقعیت میپیوندند.

موارد موجود در فایل : سورس کامل

4.3 (6 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

3 نظر

  1. سلام
    ممنون از پروژه ای که گذاشتید
    کتابخانه DHT را نرم افزار قبول نمیکند هرچه کتابخانه یاف بود دانلود کردم نشد
    امکانش است کتابخانهای که با ان کار کردید رو بفرستید
    ممنون

    1. سلام عزیز
      اروری که دریافت میکنید را بفرمایید کتابخانه های dht غالبا یکسان هست

  2. سلام. درمورد کالیبراسیون سنسور هم مطلب بگذارید. ممنون.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *