سنجش میزان دیاکسید کربن با ESP8266؛ بررسی تأثیر جلبک در تصفیه هوا
کیفیت هوایی که در فضاهای بسته تنفس میکنیم، تأثیر زیادی روی سلامتی و میزان تمرکز ما دارد. با افزایش سطح دیاکسید کربن در اتاق، احساس خستگی و خوابآلودگی بیشتر میشود. یکی از روشهای طبیعی و جذاب برای کاهش این گاز، استفاده از جلبکهاست که از طریق فتوسنتز، دیاکسید کربن را جذب و اکسیژن تولید میکنند. در این آموزش از تیم آیسیمدار، میخواهیم یک سیستم هوشمند بسازیم که به طور همزمان کیفیت هوای محیط و هوای تصفیهشده توسط یک فیلتر جلبکی را اندازهگیری و با هم مقایسه کند.
این پروژه از برد NodeMCU ESP8266 در کنار دو سنسور ENS160 و یک نمایشگر OLED تشکیل شده است. سیستم ما علاوه بر نمایش اطلاعات روی صفحه نمایش، به شبکه وایفای متصل میشود و دادهها را به صورت زنده روی یک صفحه وب نمایش میدهد. به این ترتیب میتوانی از هر جایی کیفیت هوا را زیر نظر داشته باشی.
طراحی این گجت به گونهای است که یک سنسور هوای آزاد را میسنجد و سنسور دوم به محفظه پرورش جلبک متصل میشود تا تأثیر واقعی جلبکها در تصفیه هوا را به صورت عددی مقایسه کنیم. بریم سراغ معرفی قطعات تا این مانیتور کیفیت هوای دوگانه را با هم بسازیم.
قطعات موردنیاز
- یک شیشه کوچک هاگ جلبک
- دبه پلاستیکی 20 لیتری
- آب (به مقدار لازم برای پر کردن دبه)
- یک بسته رطوبتگیر (سیلیکا ژل)
- پمپ هوا و سنگ هوا (مخصوص آکواریوم)
- شلنگ هوا (به مقدار لازم)
- نوار چسب
- منبع نور (نور خورشید یا لامپ الایدی)
- ترازوی دیجیتال کوچک
- لیوان پلاستیکی
- دریل و مته 5 میلیمتری
- برد توسعه NodeMCU ESP8266
- دو عدد ماژول سنسور کیفیت هوا ENS160
- ماژول نمایشگر OLED مدل SSD1306
- برد سوراخدار (پرفبرد)
- پینهدر مادگی (دو عدد 11 پین، دو عدد 5 پین و یک عدد 4 پین)
- سیمهای اتصال مدار (پیشنهاد میشود برای تفکیک بخشهای مدار از سیمهایی با رنگهای مختلف استفاده کنید)
- سیم لحیم
- لوله خرطومی پاپتیوب (قطر 1.5 سانتیمتر)
- کابل USB
- سیم جامپر (برای تست روی بردبورد)
- بردبورد
- هویه
- سیمچین
- سیملختکن
- قلعکش
- چسب حرارتی
- پرینتر سهبعدی
- فیلامنت PLA
- گیره مونتاژ دست سوم (اختیاری)
- کامپیوتر مجهز به نرمافزار Arduino IDE
آمادهسازی محفظه جلبک برای تصفیه هوا
قبل از اینکه سراغ مدار و قطعات الکترونیکی بریم، اول باید فیلتر جلبکی خودمون رو آماده کنیم. این فیلتر قراره دیاکسید کربن هوا رو جذب کنه تا بتونیم خروجیش رو با هوای معمولی اتاق مقایسه کنیم.
اول دبه پلاستیکی رو با آب شیر پر کن، اما حواست باشه کمی از سرش خالی بمونه تا وقتی پمپ هوا روشن میشه و آب حباب میزنه، از دبه سرریز نکنه. حالا باید هاگ جلبک رو با دقت وزن کنی:
- لیوان پلاستیکی رو روی ترازوی دیجیتال بذار و ترازو رو صفر (Tare) کن تا فقط وزن پودر جلبک رو بهت نشون بده.
- طبق دستورالعملی که روی بسته جلبک نوشته، مقدار مورد نیاز رو جدا کن. مثلا من برای هر 100 لیتر آب به 5 گرم پودر جلبک نیاز داشتم.
- بعد از اندازهگیری، پودر رو داخل دبه بریز و به آرومی هم بزن تا کامل تو آب حل بشه و هیچ گلولهای از پودر باقی نمونه.
برای راهاندازی سیستم هوادهی:
- با استفاده از دریل و مته 5 میلیمتری، یک سوراخ روی درپوش دبه ایجاد کن.
- شلنگ رو به اندازهای ببر که به ته دبه برسه. یک سرش رو به پمپ هوا وصل کن، سر دیگهاش رو از سوراخ درب رد کن و به سنگ هوا متصل کن.
- سنگ هوا رو داخل دبه بنداز تا کاملا ته ظرف قرار بگیره.
با سوراخ کردن درپوش دبه، میتونی شلنگ رو طوری رد کنی که هوای خروجی (که توسط جلبکها تصفیه شده) دقیقا به سمت سنسور هدایت بشه. قبل از روشن کردن پمپ، حتما اون رو بالاتر از سطح آب قرار بده تا آب به داخل پمپ برنگرده.
حالا فقط باید صبر کنی! دبه رو در یک محیط با نور کافی (جلوی پنجره یا زیر لامپ الایدی) بذار و حدود 2 تا 3 هفته بهش زمان بده تا جلبکها رشد کنن. تو این مدت، رنگ آب کمکم کدر میشه که نشون میده جلبکها به خوبی در حال تکثیر و فعالیت هستن.
برنامهنویسی ESP8266 و راهاندازی سرور تحت وب
تو مدتی که جلبکها دارن رشد میکنن، میتونیم مدار و سیستم مانیتورینگ رو بسازیم. تو این بخش، کدی روی برد ESP8266 آپلود میکنیم تا هم به شبکه وایفای وصل بشه و هم یک وبسرور محلی برای نمایش زنده اطلاعات CO2 بسازه. اینطوری میتونی از طریق هر مرورگری روی گوشی یا کامپیوترت، اطلاعات رو از راه دور ببینی.
برد ESP8266 رو با کابل USB به کامپیوتر وصل کن و نرمافزار Arduino IDE رو باز کن. قبل از آپلود کد، باید این کتابخونهها رو از بخش Library Manager نصب کنی:
- کتابخانه Adafruit GFX
- کتابخانه Adafruit SSD1306
- کتابخانه SparkFun ENS160
- کتابخانه ESP8266WiFi
- کتابخانه ESP8266WebServer
بعد از نصب کتابخونهها، کدی که برای این پروژه در نظر گرفته شده رو تو محیط آردوینو کپی کن. یادت نره که باید نام و رمز عبور وایفای خودت رو تو این دو خط کد جایگزین کنی:
- const char* ssid = "نام وایفای شما";
- const char* password = "رمز عبور شما";
برد و پورت درست رو از منوی Tools انتخاب کن و دکمه Upload رو بزن. وقتی آپلود تموم شد، سریال مانیتور رو باز کن تا پس از اتصال، آدرس IP اختصاصی دستگاهت رو ببینی. این آدرس رو کپی کن و تو مرورگرت وارد کن.
با این کار یک داشبورد زنده برات باز میشه که مقدار دیاکسید کربن (ppm) و ترکیبات آلی فرار (TVOC) هر دو سنسور رو نشون میده. این صفحه وب طوری طراحی شده که هر 5 ثانیه به صورت خودکار رفرش میشه.
بررسی و تحلیل کدهای پروژه
برای اینکه دقیقا بدونی تو کدهای پروژه چه اتفاقی میافته، بخشهای مختلفش رو به زبان ساده بررسی کردیم تا منطق کار دستت بیاد.
فراخوانی کتابخانهها و تنظیمات نمایشگر:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <SparkFun_ENS160.h>
تو این بخش تمام کتابخونههای مورد نیاز برای اجرای پروژه فراخوانی میشن.
- کتابخانههای Adafruit وظیفه کنترل نمایشگر OLED رو بر عهده دارن.
- کتابخانه Wire.h ارتباط I2C رو فعال میکنه.
- کتابخانههای ESP8266 به مدیریت وایفای و وبسرور کمک میکنن.
- کتابخانه ENS160 برای ارتباط با سنسورهای کیفیت هوا استفاده میشه.
- ابعاد نمایشگر و پینهای ارتباط I2C اون هم در همین بخش پیکربندی میشن.
راهاندازی وایفای و وبسرور:
const char* ssid = "___";
const char* password = "___";
ESP8266WebServer server(80);
تو این قسمت اطلاعات شبکه وایفای ذخیره میشه و یک وبسرور روی پورت 80 ایجاد میشه تا بتونه اطلاعات رو روی مرورگر نمایش بده.
آدرسهای سنسور و پینهای ارتباط I2C:
#define ADDR_IN 0x52
#define ADDR_OUT 0x53
#define SDA_PIN D2
#define SCL_PIN D1
هر ماژول ENS160 آدرس I2C اختصاصی خودش رو داره، به همین دلیل میتونیم از دو سنسور به صورت همزمان روی یک خط ارتباطی استفاده کنیم. پینهای SDA و SCL برای ارتباط ESP8266 با سنسورها و نمایشگر مشخص شدن.
تعریف شیء سنسورها و متغیرهای داده:
SparkFun_ENS160 sensorIn;
SparkFun_ENS160 sensorOut;
uint16_t co2In = 0, tvocIn = 0;
uint16_t co2Out = 0, tvocOut = 0;
در این بخش دو شیء مجزا برای سنسورها تعریف میشه:
- یک سنسور برای اندازهگیری هوای محیط اتاق (IN)
- یک سنسور برای هوای خروجی از محفظه جلبک (OUT)
علاوه بر این، متغیرهایی هم برای ذخیره مقادیر دیاکسید کربن و ترکیبات آلی فرار ساخته میشه.
تابع راهاندازی سنسورها:
bool initSensor(SparkFun_ENS160 &sensor, const char* label, uint8_t address) {
if (!sensor.begin(Wire, address)) {
Serial.print(label); Serial.println(" init FAIL");
return false;
}
Serial.print(label); Serial.println(" init OK");
sensor.setOperatingMode(0x02);
return true;
}
این تابع، هر دو سنسور رو مقداردهی اولیه میکنه و چک میکنه که آیا به درستی متصل هستن یا نه. در صورت اتصال موفق، سنسورها روی حالت عملیاتی استاندارد تنظیم میشن تا شروع به کار کنن.
تابع خواندن دادههای سنسور:
void readSensor(SparkFun_ENS160 &sensor, const char* label, uint16_t &co2, uint16_t &tvoc) {
if (sensor.checkDataStatus()) {
co2 = sensor.getECO2();
tvoc = sensor.getTVOC();
Serial.printf("%s: CO2 = %d ppm, TVOC = %d ppb\n", label, co2, tvoc);
} else {
Serial.printf("%s: No data\n", label);
co2 = 0;
tvoc = 0;
}
}
این تابع وظیفه داره هر زمان که داده جدیدی آماده بود، مقادیر زیر رو بخونه:
- غلظت دیاکسید کربن (بر حسب ppm)
- میزان ترکیبات آلی فرار یا TVOC (بر حسب ppb)
این مقادیر در سریال مانیتور چاپ میشن و برای نمایش ذخیره خواهند شد.
تولید صفحه وب HTML:
void handleRoot() {
String html = "<!DOCTYPE html><html><head><meta charset='UTF-8'>";
...
server.send(200, "text/html", html);
}
این کد یک صفحه وب ساده HTML میسازه که موارد زیر رو شامل میشه:
- نمایش مقادیر هر دو سنسور
- طراحی ظاهری و استایل صفحه
- رفرش خودکار اطلاعات هر 5 ثانیه یکبار
با این صفحه میتونی از هر دیوایسی داخل شبکه، اطلاعات سنسورها رو چک کنی.
تابع راهاندازی (Setup):
void setup() {
Serial.begin(115200);
Wire.begin(SDA_PIN, SCL_PIN);
...
}
بخش Setup فقط یک بار در ابتدای روشن شدن دستگاه اجرا میشه و کارهای زیر رو انجام میده:
- فعالسازی ارتباط سریال
- اتصال به شبکه وایفای
- اجرای وبسرور
- راهاندازی هر دو سنسور
- پیکربندی نمایشگر OLED
حالا سیستم کاملا آماده شروع به کار است.
حلقه اصلی برنامه (Main Loop):
void loop() {
readSensor(sensorIn, "Sensor IN", co2In, tvocIn);
delay(500);
readSensor(sensorOut, "Sensor OUT", co2Out, tvocOut);
server.handleClient();
delay(3000);
display.clearDisplay();
...
display.display();
}
این حلقه به صورت پیوسته در حال اجراست و بخشهای مختلف رو مدیریت میکنه:
- خواندن مداوم اطلاعات سنسورها
- بهروزرسانی دادههای وبسرور
- نمایش مقادیر جدید روی صفحه نمایش OLED
این چرخه باعث میشه که مانیتورینگ اطلاعات بدون وقفه انجام بشه.
تست مدار روی بردبورد و لحیمکاری پینهدرها
قبل از اینکه قطعات رو به صورت دائمی روی برد سوراخدار لحیم کنی، پیشنهاد میکنم اول کل مدار رو روی یک بردبورد ببندی و با سیمهای جامپر تستش کنی. اینطوری خیالت راحت میشه که همهچیز به درستی کار میکنه و اتصالات مشکلی ندارن.
نقشه مدار و نحوه اتصال قطعات رو میتونی تو مرحله بعدی ببینی. وقتی از صحت عملکرد مدار مطمئن شدی، وقتشه که قطعات رو به پرفبرد منتقل کنی.
تو تصویر راهنما، ستونها با حروف و ردیفها با عدد مشخص شدن تا کار لحیمکاری برات راحتتر بشه (فعلا به سیمها کاری نداشته باش و فقط پینهدرها رو در نظر بگیر). طبق راهنمای رنگی زیر، پینهدرها رو سر جای خودشون قرار بده و لحیم کن. پینهدرهای 5 پین (رنگ قرمز):
- اولین پینهدر 5 پین رو از ردیف 14 ستون G تا ردیف 18 ستون G لحیم کن.
- دومین پینهدر 5 پین رو از ردیف 14 ستون W تا ردیف 18 ستون W لحیم کن.
پینهدر 4 پین (رنگ زرد):
- پینهدر 4 پین رو به صورت افقی از ردیف 10 ستون Z تا ردیف 10 ستون C لحیم کن.
پینهدرهای 11 پین (رنگ آبی):
- اولین پینهدر 11 پین رو از ردیف 22 ستون W تا ردیف 22 ستون G لحیم کن.
- دومین پینهدر 11 پین رو از ردیف 33 ستون W تا ردیف 33 ستون G لحیم کن.
سیمکشی نهایی روی برد سوراخدار
حالا که پینهدرها رو سر جای خودشون محکم کردی، باید سیمهای رابط رو برای برقراری اتصالات آماده کنی.
- سیمها رو به اندازه لازم برش بزن تا دقیقا به پایههای قطعات مورد نظر برسن.
- با سیملختکن یک تکه کوچک از روکش دو سر سیمها رو جدا کن تا بخش مسی اونها بیرون بزنه.
برای قرار دادن سیمها روی پرفبرد:
- سیم رو دقیقا از سوراخی رد کن که در همون ردیف یا ستون پایهای باشه که میخوای بهش وصل بشه.
- با هویه سیم رو به آرومی حرارت بده و کمی قلع اضافه کن تا سیم و پایه قطعه کاملا به هم لحیم بشن.
حتما قبل و بعد از لحیمکاری، اتصالات رو با نقشه مدار و جداول راهنما تطبیق بده تا اشتباهی پیش نیاد و قطعاتت آسیب نبینن.
چاپ سهبعدی قاب محافظ دستگاه
بعد از تکمیل بخش الکترونیک و لحیمکاری، برای اینکه پروژهات ظاهر تمیز و حرفهای داشته باشه، باید قاب محافظ اون رو چاپ کنی:
- فایلهای STL مربوط به قاب رو دانلود کن. یکی از اونها برای بدنه اصلی و دومی برای درپوش قاب است.
- نرمافزار اسلایسر (Slicer) رو باز کن و فایلها رو وارد کن.
- تنظیمات پرینت رو با توجه به نوع فیلامنت و پرینترت انجام بده و فایل رو برای چاپ آماده کن.
- وقتی چاپ قطعه اول تموم شد، همین مراحل رو برای قطعه دوم هم تکرار کن.
مونتاژ قطعات و جلوگیری از خطای رطوبت
حالا وقتشه که محفظه جلبکی، مدار کیفیت هوا و قاب پرینتشده رو با هم ترکیب کنیم تا سیستم نهایی شکل بگیره. اما قبلش باید یک مشکل مهم رو حل کنیم! تو تستهای اولیه متوجه شدم وقتی هوای داخل دبه به سمت مدار پمپ میشه، بخار آب هم همراهش وارد لوله خرطومی شده و قطرات آب تشکیل میده.
رطوبت بالا تو این لوله باعث میشه سنسور اعداد اشتباه و کمتری رو نشون بده. چون دیاکسید کربن به راحتی تو آب حل میشه، ممکنه سنسور به اشتباه فکر کنه جلبکها خیلی بیشتر از حد واقعی دارن هوا رو تصفیه میکنن.
برای حل این مشکل از بستههای سیلیکا ژل (رطوبتگیر) استفاده میکنیم تا رطوبت اضافی رو قبل از رسیدن به مدار جذب کنه و هوایی که به سنسور میرسه خشک باشه. برای نصب سیلیکا ژل:
- دو تکه چسب نواری رو به شکل ضربدری روی بسته سیلیکا ژل بچسبون تا بسته روی دهانه دبه مهار بشه و داخل آب نیفته.
- بسته رو دقیقا روی سوراخ درپوش دبه بذار، اما یک مسیر کوچیک رو باز بذار تا شلنگ هوا بتونه از کنارش رد بشه.
- در صورت نیاز با نوار چسب بیشتری اون رو محکم کن.
- یادت باشه که بعد از مدتی، این بستههای رطوبتگیر اشباع میشن و باید تعویضشون کنی.
حالا لوله خرطومی (پاپتیوب) رو با چسب حرارتی به سنسور ENS160 سمت راست (همون سنسور OUT) متصل کن. کافیه لوله رو روی سنسور قرار بدی و دورش رو کاملا با چسب حرارتی آببندی کنی.
در نهایت مدار رو داخل قاب قرار بده و حواست باشه که پورت USB میکرو روی برد ESP8266 دقیقا روبهروی سوراخ جانبی قاب قرار بگیره تا بتونی کابل تغذیه رو به راحتی بهش وصل کنی.
درپوش قاب رو به صورت کشویی سر جاش بنداز، لوله خرطومی رو به اندازه لازم بکش تا باز بشه و سر دیگهاش رو داخل سوراخ درب دبه جلبک قرار بده. سیستم رو روشن کن و چند ساعت بهش زمان بده تا سنسورها کالیبره بشن و اعداد دقیقی رو نشون بدن. اگر دوست داشتی میتونی قاب دستگاه رو با چسب دوطرفه یا آهنربا روی دیوار نصب کنی تا هم ثابت بمونه و هم خوندن نمایشگرش راحتتر باشه.
بررسی نتایج؛ آیا جلبکها هوا را تصفیه میکنند؟
حالا که سیستم تصفیه هوای جلبکی و مانیتورینگ دوگانه رو ساختی، با مقایسه اعداد متوجه یک تفاوت جالب میشی. سنسوری که به دبه جلبک متصل شده (سنسور OUT)، میزان CO2 کمتری رو نسبت به سنسور محیطی (سنسور IN) نشون میده. تو تستهای من، این اختلاف به صورت مداوم و پایدار قابل مشاهده بود.
این یعنی جلبکها به صورت فعال در حال انجام فتوسنتز هستن، دیاکسید کربن رو جذب میکنن و اکسیژن رو به هوا برمیگردونن. البته نباید فراموش کنی که میزان بازدهی این سیستم به عوامل محیطی مثل نور کافی، جریان مناسب هوا و کنترل رطوبت بستگی داره. همونطور که دیدیم، تراکم رطوبت تو لولهها میتونه نتایج رو با خطای بزرگی مواجه کنه، پس رطوبتگیری اصولی برای گرفتن دادههای دقیق بهشدت مهمه.
در مجموع، این پروژه نشون داد که هرچند جلبکها تو این مقیاس کوچک نمیتونن جایگزین سیستمهای تهویه هوای حرفهای بشن، اما وقتی با یک طراحی هوشمند ترکیب بشن، پتانسیل فوقالعادهای برای راهکارهای طبیعی و دوستدار محیطزیست دارن.
ساخت این دستگاه نه تنها اطلاعات جالبی در مورد کیفیت هوا به ما داد، بلکه ثابت کرد چطور با کمک الکترونیک و برنامهنویسی میتونیم تغییرات محیط زیستی رو به صورت زنده و عددی ارزیابی کنیم. نظرت در مورد استفاده از جلبک برای تصفیه هوا چیه؟ حتما برامون تو بخش دیدگاههای سایت آیسیمدار بنویس!
فایلهای پیوست
تو میتونی اولین سازنده باشی!
اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر
این آموزش با استانداردهای اختصاصی آیسیمدار بازنویسی و بهینهسازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.








































گفتگوهای کاربران
هنوز نظری ثبت نشده؛ تو شروع کن!
هنوز نظری ثبت نشده؛ تو شروع کن!