مانیتورینگ کیفیت هوا با ESP32 (PM2.5، PM10 و مونوکسید کربن)
محتویات
- قطعات لازم
- سنسور Nova PM SDS011 برای اندازه گیری PM2.5 و PM10
- مشخصات سنسور SDS011
- اصول اولیه ماژول نمایشگر اولد 0.96 اینچی
- آماده سازی سنسور MQ-7 برای اندازه گیری کربن مونوکسید
- محاسبه شاخص کیفیت هوا
- مدار اتصال مانیتورینگ کیفیت هوا IoT
- ساخت مدار سیستم مانیتورینگ کیفیت هوا روی پرف بورد
- راه اندازی Adafruit IO
- کد سیستم مانیتورینگ شاخص کیفیت هوا مبتنی بر IoT
- تبدیل مقادیر
- محاسبه غلظت متوسط درمدت 24 ساعت
- قاب چاپ سه بعدی برای سیستم مانیتورینگ AQI
- تست سیستم مانیتورینگ AQI
با فرا رسیدن زمستان، هوای اطراف ما به دلیل انتشار دود و گازهای حاصل از سوختن مزارع، کارخانه های صنعتی و تردد وسایل نقلیه سنگین شده، مسیر خورشید را مسدود کرده و نفس کشیدن را سخت میکند. کارشناسان معتقدند که سطوح بالا آلودگی هوا و پاندمی کووید-19 میتواند یک ترکیب بسیار خطرناک با عواقب جدی باشد. در این شرایط لزوم نظارت real-time بر شاخص هوا بسیار مشهود است.
پس در این پروژه، قصد داریم که با استفاده از ESP32، سنسور Nova PM SDS011، سنسور MQ-7 و سنسور DHT11 یک سیستم مانیتورینگ کیفیت هوا بسازیم.
ما همچنین از ماژول نمایشگر اولد برای نمایش مقادیر کیفیت هوا استفاده میکنیم. شاخص کیفیت هوا (AQI) در هند براساس هشت آلاینده سنجیده میشود. این آلایند ها PM10، PM2.5، نیتروژن دی اکسید، مونوکسید کربن، اوزون، آمونیاک و سرب هستند. هرچند که نیازی به اندازی گیری تمام آلاینده ها نداریم. ما در این پروژه، تمرکز خود را بر اندازه گیری غلظت PM2.5، PM10 و مونوکسید کربن گذاشته و شاخص کیفیت هوا را بر اساس این سه آلاینده محاسبه میکنیم. AQI روی Adafruit IO منتشر میشود. در نتیجه میتوانیم از هر جای دنیا بر داده خود نظارت کنیم. درگذشته غلظت گاز مایع (LPG)، دود و گاز آمونیاک را به کمک آردوینو اندازه گرفته ایم.
قطعات لازم
- ESP32
- سنسور Nova PM SDS011
- ماژول نمایشگر 0.96 اینچی اولد SPI
- سنسور DHT11
- سنسور MQ-7
- سیم های جامپر
سنسور Nova PM SDS011 برای اندازه گیری PM2.5 و PM10
سنسور SDS011 یک سنسور کیفیت هوا بسیار جدید است که توسط Nova fitness توسعه داده شده است. این سنسور براساس اصل پراکندگی لیزر عمل کرده و میتواند غلظت ذرات بین 0.3 تا 10 میکرومتر در هوا را به دست آورد. این سنسور از یک فن کوچک، شیر ورودی هوا، دیود لیزری و فوتودیود تشکیل شده است. هوا، از طریق شیر ورودی وارد شده و منبع نور ( لیزر) ذرات را روشن میکند. نور پراکنده شده توسط فوتودیود به یک سیگنال تبدیل میشود. این سیگنال در ادامه تقویت و پردازش شده تا غلظت ذرات PM2.5 و PM10 به دست آید. ما در گذشته از سنسور Nova PM SDS011 به همراه آردوینو برای محاسبه غلظت PM10 و PM2.5 استفاده کرده ایم.
مشخصات سنسور SDS011
- خروجی : PM2.5 و PM10
- محدوده اندازه گیری : 0.0 تا 999.9 میکروگرم بر مترمکعب
- ولتاژ ورودی: 4.7 تا 5.3 ولت
- ماکزیمم جریان مصرفی: 100 میلی آمپر
- جریان مصرفی در مد خواب: 2 میلی آمپر
- زمان پاسخگویی: 1 ثانیه
- فرکانس داده سریال خروجی: کمتر از 0.3 میکرومتر
- خطای نسبی: 10 درصد
- محدوده دمایی: 20- تا 50 درجه سلسیوس
اصول اولیه ماژول نمایشگر اولد 0.96 اینچی
نمایشگر اولد یا همان دیود نورگسیل ارگانیک، یک نوع LEDست که از ترکیبات ارگانیک ساخته شده و هنگامی که جریان الکتریکی از آن عبور میکند، تحریک میشود. این ترکیبات ارگانیک از خود نور گسیل میکنند. در نتیجه این نمایشگر مانند LCD های معمولی نیازی به مدار نور پس زمینه ندارد. به این دلیل تکنولوژی نمایشگر اولد کارآمدتر بوده و به طور گسترده هم در تلویزیون ها و دیگر محصولات نمایشی کاربرد دارد.
انواع مختلفی از نمایشگرهای اولد براساس رنگ صفحه نمایش، تعداد پایه ها، سایز و تراشه کنترلر در بازار موجود هستند. در این آموزش، ما از ماژول اولد SSD1306 آبی تک رنگ، 7 پایه و 0.96 اینچی استفاده میکنیم که عرض آن 128 پیکسل و طول آن 64 پیکسل است. این اولد 7 پایه، از پروتکل SPI پشتیبانی کرده و تراشه کنترلر SSD1306 به اولد در نمایش کاراکترهای دریافتی کمک میکند. برای جزئیات بیشتر میتوانید به مقاله “نمایشگر OLED و اتصال آن به میکروکنترلرهای مختلف” مراجعه کنید.
آماده سازی سنسور MQ-7 برای اندازه گیری کربن مونوکسید
ماژول سنسور گاز مونوکسید کربن MQ-7، غلظت مونوکسید کربن موجود در هوا را تشخیص میدهد. این سنسور میتواند غلظت بین 10 تا 10000 ppm ( قسمت در میلیون) را اندازه گیری کند. سنسور MQ-7 را میتوانید در فرم یک ماژول و یا یک سنسور تنها خریداری کنید. در گذشته از انواع مختلفی از سنسورهای گاز برای اندازه گیری و تشخیص گازهای مختلف استفاده کردیم. اگر به آن ها علاقه مندید، میتوانید آن مطالب را نیز مطالعه کنید.
در این پروژه با استفاده از سنسور MQ-7 غلظت مونوکسید کربن را برحسب ppm اندازه گیری میکنیم. مدار اتصال بورد MQ-7 در تصویر زیر نشان داده شده است.
مقاومت بار (RL) نقش مهمی در به کار انداختن سنسور بازی میکند. این مقاومت مقدار خود را متناسب با غلظت گاز تغییر میدهد.
بورد سنسور MQ-7 به همراه یک مقاومت بار 1 کیلویی که بلااستفاده بوده اما در صحت و دقت داده های خوانده شده توسط سنسور اثر میگذارد عرضه میشود. پس برای اندازه گیری درست و دقیق غلظت کربن مونوکسید باید مقاومت 1 کیلویی را با یک مقاومت 10 کیلویی جایگزین کنید.
محاسبه شاخص کیفیت هوا
AQI در هند، براساس غلظت متوسط یک نوع آلاینده خاص در یک بازه زمانی استاندارد محاسبه میشود. این بازه زمانی برای اغلب آلاینده ها 24 ساعت است اما برای کربن مونوکسید و ازون 8 ساعت است.
برای مثال AQI برای PM2.5 و PM10 براساس غلظت متوسط این آلاینده ها در مدت 24 ساعت و AQI برای مونوکسید کربن براساس غلظت متوسط آن در 8 مدت ساعت محاسبه میشود. محاسبات AQI شامل 8 آلاینده است. این آلاینده ها، PM10، PM2.5، نیتروژن دی کسید (NO2)، گوگرد دی کسید (SO2)، کربن مونوکسید (CO)، ازون در سطح زمین (O3)، آمونیاک (NH3) و سرب (Pb) هستند. هرچند در همه موقعیت ها، نیازی به اندازه گیری غلظت تمام آلاینده ها نداریم.
براساس غلظت محیطی اندازه گیری شده یک آلاینده درطول 24 ساعت، یک زیرشاخص محاسبه شده که یک تابع خطی از غلظت است. برای مثال زیرشاخص PM2.5 در غلظت 31 میکروگرم بر مترمکعب 51، در غلظت 60 میکروگرم بر متر مکعب 100 و در غلظت 45 میکروگرم بر مترمکعب 45 است. بدترین زیرشاخص (ماکزیمم همه پارامترها) AQI کلی را تعیین میکند.
مدار اتصال مانیتورینگ کیفیت هوا IoT
مدار اتصال سیستم مانیتورینگ کیفیت هوا مبتنی برIoT بسیار ساده بوده و در تصویر زیر نشان داده شده است.
سنسورهای SDS011، DHT11 و MQ-7 با 5 ولت تغذیه شده در حالیکه ماژول نمایشگر اولد با ولتاژ 3.3 ولت تغذیه میشود. پایه های فرستنده و گیرنده سنسور SDS011 به پایه های GPIO16 و GPIO17 بورد ESP32 متصل شده اند. پایه خروجی آنالوگ سنسور MQ-7 به پایه GPIO25، و پایه داده سنسور DHT11 به پایه GPIO27 متصل شده است. از آنجایی که ماژول نمایشگر اولد از ارتباط SPI استفاده میکند، ما یک ارتباط SPI بین ماژول اولد و ESP32 برقرار کرده ایم. این اتصالات در جدول زیر مشخص شده اند.
پایه ESP32 | پایه ماژول اولد | ردیف |
Ground | GND | 1 |
5v | VCC | 2 |
18 | D0 | 3 |
23 | D1 | 4 |
2 | RES | 5 |
4 | DC | 6 |
5 | CS | 7 |
پایه ESP32 | پایه سنسور SDS011 | ردیف |
5V | 5V | 1 |
GND | GND | 2 |
17 | RX | 3 |
16 | TX | 4 |
پایه ESP32 | پایه سنسور DHT11 | ردیف |
5V | VCC | 1 |
GND | GND | 2 |
27 | Data | 3 |
پایه ESP32 | پایه سنسور MQ-7 | ردیف |
5V | VCC | 1 |
GND | GND | 2 |
25 | A0 | 3 |
ساخت مدار سیستم مانیتورینگ کیفیت هوا روی پرف بورد
همانگونه که میتوانید در تصویر اصلی مشاهده کنید، هدف ما استفاده از این مدار در یک قاب چاپ سه بعدی است. در تصویر زیر، مدار کامل را که روی یک پرف بورد لحیم شده است، مشاهده میکنید. حتما برای اینکه فضای کافی برای نصب سنسورها و ماژول اولد داشته باشید، از سیم استفاده کنید. پرف بورد لحیم شده به نمایشگر اولد و ماژول سنسور را در تصویر زیر مشاهده میکنید.
راه اندازی Adafruit IO
Adafruit IO یک پلتفرم داده باز برای جمع آوری، نمایش و آنالیز داده لایو در فضای ابری است. شما میتوانید با استفاده از Adafruit IO داده خود را روی اینترنت آپلود کرده و نمایش دهید. همچنین میتوانید بر آن نظارت کرده و به این شکل پروژه خود را به یک پروژه اینترنت اشیا تبدیل کنید. با استفاده از Adafruit IO میتوانید موتورها را کنترل کرده، داده سنسور را خوانده و اپلیکیشن های جالب IoT در اینترنت بسازید.
برای استفاده از Adafruit IO، ابتدا باید یک حساب در Adafruit IO بسازید. برای ساخت حساب کاربری به وب سایت https://io.adafruit.com/ مراجعه کرده و بر گزینه Get Started for Free در بالای صفحه سمت راست کلیک کنید.
پس از ساخت حساب کاربری، به حساب خود وارد شده و بر View AIO Key در گوشه سمت راست و بالای صفحه کلیک کنید تا نام کاربری و کلید AIO حساب خود را دریافت کنید.
با کلیک بر AIO Key، یک پنجره شامل نام کاربری و کلید AIO نمایش داده میشود. این کلید و نام کاربری را کپی کنید. از آن ها در قسمت کد استفاده خواهیم کرد.
حال، پس از دریافت کلید AIO، برای ذخیره داده سنسور DHT11 یک feed ایجاد کنید.
برای ایجاد feed، روی Feed کلیک کنید. سپس روی Actions کلیک کرده و در ادامه هم Create a New Feed را از میان گزینه های موجود انتخاب کنید.
پس از این مرحله، یک پنجره باز میشود که باید نام و توضیحات feed خود را در آن وارد کنید. درج توضیحات اختیاری است.
پس از وارد کردن اطلاعات لازم بر Create کلیک کنید. در ادامه شما به feed اخیرا ایجاد شده هدایت خواهید شد. برای این پروژه، در مجموع شش feed برای PM10، PM2.5، CO، دما، رطوبت و مقادیر AQI ایجاد کرده ایم.
همین پروسه را برای ساخت سایر feed ها نیز طی کنید.
پس از ایجاد feed ها، یک داشبورد Adafruit IO برای نمایش داده سنسورها در یک صفحه ایجاد میکنیم. برای اینکار ابتدا یک داشبورد ساخته و سپس تمام feedها را در آن اضافه کنید. برای ایجاد داشبورد، روی گزینه Dashboard و سپس Action کلیک کنید. در ادامه هم Create a New Dashboard را انتخاب کنید.
حال که داشبورد ایجاد شد، ما از بلوک های Adafruit IO مانند Gauge و Slider برای نمایش داده استفاده میکنیم.
برای افزودن بلوک، بر آیکون + در گوشه سمت راست بالای صفحه کلیک کنید.
سپس بلوک Guage را انتخاب کنید.
در پنجره بعدی، feed داده ای که قصد نمایش آن را دارید، انتخاب کنید.
در گام نهایی، تنظیمات بلوک را مطابق میل خود تغییر داده و آن ها را شخصی سازی کنید.
برای افزودن بلوک های نمایش به دیگر feedها نیز مراحل بالا را تکرار کنید. داشبورد Adafruit IO من به شکل زیر درآمد:
کد سیستم مانیتورینگ شاخص کیفیت هوا مبتنی بر IoT
کد کامل این پروژه، در انتهای این مطلب قرار داده شده است. در اینجا ما بعضی از قسمت های مهم کد را توضیح میدهیم.
کد از کتابخانه های Adafruit_GFX، Adafruit_SSD1306، SDS011، Adafruit_MQTT و DHT.h استفاده میکند. کتابخانه های SDS011، Adafruit_GFX و Adafruit_SSD1306 را میتوانید از بخش Library Manager در IDE آردوینو دانلود کرده و نصب کنید. برای اینکار، ابتدا IDE آردوینو را باز کرده و از منو Sketch، گزینه Include Library و سپس Manage Libraries را انتخاب کنید. حال SDS011 را جست و جو کرده و SDS sensor library از R.Zschigner را نصب کنید.
به صورت مشابه، کتابخانه های Adafruit_GFX و Adafruit_SSD1306 از Adafruit را نصب کنید.
Adafruit MQTT.h و DHT11.h را میتوانید از لینک هایی که برایتان قرار داده ایم دانلود کنید.
پس از نصب کتابخانه ها در IDE آردوینو، کد را با فراخوانی کتابخانه های ضروری شروع میکنیم.
#include <SDS011.h> #include <SPI.h> #include <WiFi.h> #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" #include "DHT.h" #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>
در خط های بعدی، عرض و طول نمایشگر اولد را تعریف کردیم. در این پروژه از یک نمایشگر اولد SPI با رزولوشن 64*128 استفاده کرده ام. شما میتوانید متغیرهای SCREEN_WIDTH و SCREEN_HEIGHT را براساس نمایشگر خود تغییر دهید.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
سپس پایه های ارتباط SPI که به نمایشگر اولد متصل شده اند را تعریف کنید.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
سپس یک نمونه برای نمایشگر Adafruit با طول و عرض و پروتکل ارتباط SPI که پیشتر تعریف شده، ایجاد کنید.
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
در ادامه مشخصات وایفای و Adafruit IO را که از سرور Adafruit IO کپی کرده بودید، در کد پیست کنید. این مشخصات شامل سرور MQTT، شماره پورت، نام کاربری و کلید AIO است.
const char *ssid = "Galaxy-M20"; const char *pass = "ac312124"; #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
سپس feedهای Adafruit IO را برای ذخیره داده سنسور تنظیم کنید. من شش feed برای ذخیره داده سنسورهای مختلف ایجاد کرده ام که نام آن ها را PM2.5، PM10، Humidity، Temperature، AirQuality و CO گذاشته ام.
Adafruit_MQTT_Client mqtt(&client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish(&mqtt,MQTT_NAME "/f/AirQuality"); Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish(&mqtt,MQTT_NAME "/f/Temperature"); Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish(&mqtt,MQTT_NAME "/f/Humidity"); Adafruit_MQTT_Publish PM10 = Adafruit_MQTT_Publish(&mqtt,MQTT_NAME "/f/PM10"); Adafruit_MQTT_Publish PM25 = Adafruit_MQTT_Publish(&mqtt,MQTT_NAME "/f/PM25"); Adafruit_MQTT_Publish CO = Adafruit_MQTT_Publish(&mqtt,MQTT_NAME "/f/CO");
حال به منظور دیباگ کردن و اشکال زدایی، سریال مانیتور را با نرخ باد 9600 درون تابع ()setup آغاز میکنیم.
همچنین نمایشگر اولد، سنسور DHT11 و SDS011 را با استفاده از تابع ()begin مقداردهی و راه اندازی کنید.
void setup() { my_sds.begin(16,17); Serial.begin(9600); dht.begin(); display.begin(SSD1306_SWITCHCAPVCC);
در تابع ()setup، ازیک حلقه for برای جمع آوری مقادیر تا یک مقدار مشخص و سپس صفر کردن کانتر استفاده شده است.
for (int thisReading1 = 0; thisReading1 < numReadingsPM10; thisReading1++) { readingsPM10[thisReading1] = 0; }
خواندن داده سنسورها
درون تابع ()loop، برای خوانده شدن داده سنسورها با فرکانس 1 ساعت، از متد ()millis استفاده میکنیم. هر سنسور گاز یک مقدار آنالوگ از 0 تا 4095 را به عنوان خروجی به ما تحویل میدهد. برای تبدیل این مقدار به ولتاژ، از معادله زیر استفاده کنید.
RvRo = MQ7Raw * (3.3 / 4095)
در این معادله MQ7Raw داده آنالوگ خوانده شده از پایه سنسور MQ7 است. همچنین داده PM10 و PM2.5 را به همین شکل از سنسور SDS011 بخوانید.
if ((unsigned long)(currentMillis - previousMillis) >= interval) { MQ7Raw = analogRead( iMQ7 ); RvRo = MQ7Raw * (3.3 / 4095); MQ7ppm = 3.027*exp(1.0698*( RvRo )); Serial.println(MQ7ppm); error = my_sds.read(&p25,&p10); if (! error) { Serial.println("P2.5: "+String(p25)); Serial.println("P10: "+String(p10)); } }
تبدیل مقادیر
مقادیر PM2.5 و PM10 بر حسب میکروگرم بر مترمکعب هستند و نیازی به تبدیل ندارند. اما مقادیر کربن مونوکسید را باید از PPM به میلی گرم بر مترمکعب تبدیل کنیم. فرمول تبدیل واحد در زیر آورده شده است:
Concentration (mg/m3) = Concentration (PPM) × (Molecular Mass (g/mol) / Molar Volume (L))
در این فرمول، جرم مولی کربن مونوکسید 28.06 گرم بر مول و حجم مولی هم در دمای 25 درجه سلسیوس 24.45 لیتر است.
ConcentrationINmgm3 = MQ7ppm* (28.06/24.45); Serial.println(ConcentrationINmgm3);
محاسبه غلظت متوسط درمدت 24 ساعت
در قطعه کد بعدی، غلظت متوسط PM2.5 و PM10 را در مدت 24 ساعت و غلظت متوسط کربن مونوکسید را در مدت 8 ساعت محاسبه کردیم.
در خط اول کد، از جریان کل (totalPM10)، اولین المان آرایه را کم کنید. حال حاصل این تفریق را دوباره در متغیر totalPM10 به عنوان جریان کل جدید ذخیره کنید. درابتدای کار، حاصل این تفریق صفر خواهد شد. سپس داده سنسور را خوانده و جریان خوانده شده را به جریان کل اضافه کنید تا شماره اندیس افزایش یابد. اگر مقدار اندیس برابر یا بزرگتر از numReadings بود، اندیس را دوباره روی صفر تنظیم کنید.
totalPM10 = totalPM10 - readingsPM10[readIndexPM10]; readingsPM10[readIndexPM10] = p10; totalPM10 = totalPM10 + readingsPM10[readIndexPM10]; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10 >= numReadingsPM10) { readIndexPM10 = 0; }
درنهایت، این مقادیر را روی Adafruit IO منتشر کنید.
if (! Temperature.publish(temperature)) { delay(30000); } if (! Humidity.publish(humidity)) { delay(30000); ………………………………………………………. ……………………………………………………….
قاب چاپ سه بعدی برای سیستم مانیتورینگ AQI
به کمک ورینه ابعاد setup را اندازه گرفتم. در ادامه، ابعاد سنسورها و اولد را هم برای طراحی یک قاب اندازه گیری کردم. طرح من پس از کامل شدن، چیزی شبیه به تصویر زیر بود:
پس از اینکه از طرح خود رضایت کامل پیدا کردم، آن را به عنوان یک فایل export STL کرده و آن را براساس تنظیمات چاپگر برش زدم. در نهایت نیز آن را چاپ کردم. فایل STL این پروژه را میتوانید از Thingiverse دانلود کرده و در چاپ قاب خود از آن استفاده کنید. پس از چاپ قاب، مدار پروژه را در یک محفظه دائمی مونتاژ کردم تا نصب مجموعه درون قاب آسانتر شود.
پس از کامل کردن اتصالات، مدار را در قاب چاپ شده مونتاژ کردم و همانطور که میتوانید مشاهده کنید، همه چیز به خوبی درجای خود قرار گرفته و فیکس شده است.
تست سیستم مانیتورینگ AQI
بعد از آماده شدن سخت افزار و کد، نوبت به تست دستگاه میرسد.
من برای تغذیه دستگاه از یک آداپتور خارجی 1 آمپر و 12 ولت استفاده کردم. همانطور که مشخص است، دستگاه غلظت PM10، PM2.5 و کربن مونوکسید را روی نمایشگر اولد نشان میدهد. غلظت PM2.5 و PM10 بر حسب میکروگرم بر مترمکعب و غلظت کربن مونواکسید برحسب میلی گرم بر مترمکعب گزارش میشوند.
این داده همچنین در داشبورد Adafruit IO منتشر خواهد شد. ماکزیمم مقدار از بین سه پارامتر PM10، PM2.5 و CO، شاخص کیفیت هوا خواهد بود.
مقدار AQI همانطور که در نمودار نشان داده شده است به مدت 30 روز باقی میماند.
شما اینگونه میتوانید از سنسورهای MQ-7 و SDS011 برای محاسبه شاخص کیفیت هوا استفاده کنید. امیدواریم از این پروژه لذت برده باشید و ساخت این سیستم برای شما جالب بوده باشد.
اگر هرگونه سوالی درباره این پروژه دارید، لطفا آن را در قسمت نظرات با ما درمیان بگذارید.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود