رباتیک و هوافضا

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

به نام خدا

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

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

طراحی مدار:

ایستگاه کوچک هوا شناسی ارائه شده که با آردوینو کار می کند داده ها را از سنسور ها دریافت می کند و سپس بعد از پردازش آن ها را روی ال سی دی نمایش می دهد. شما می توانید بورد آردوینو دلخواه خود را انتخاب کنید و با آن مدار را پیاده سازی کنید. مدار دارای سه سنسور MQ-135, BMP180 و DHT11 می باشد. در ادامه به بررسی سنسور MQ-135 می پردازیم.

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

بیشتر بخوانید...  کنترل دور موتور با pwm

 

شماتیک مدار اتصال MQ-135 :

 

سنسور DHT11:

از این سنسور برای اندازه گیری دما و رطوبت به طور همزمان استفاده می شود. این سنسور دارای ۴ پین است که فقط از سه تای آن استفاده ی می شود. بنظر ساده می رسد اما داخل خود یک میکروکنترل داراست که داده های آنالوگ را ب دیجیتال تبدیل می کند و به آردوینو می فرستد. این سنسور هر ثانیه ۸ بیت داده را ارسال می کند. برای دیکود کردن سیگنال دریافتی باید کتابخانه ی این سنسور را برای آردوینو دانلود کنیم.

 

 

شماتیک مدار DHT11 :

 

 

توجه شود که برای این سنسور از مقاومت پول آپ استفاده شده است که درون خود آردوینو ست. اگر این امکان رانداشتید از یک مقاومت ۴٫۷ کیلو در خروجی آن قرار دهید.

 

سنسور BMP180  :

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

 

شماتیک مدار:

 

این سنسور از پروتکل ۱۲C  برای ارتباط استفاده می کند پین SDA به پین A4 آردوینو متصل شده است و SCL به پین A5 آردوینو وصل می شود. Vcc و زمین نیز به پین تغذیه و زمین آردوینو متصل می شود.

بیشتر بخوانید...  اندازه گیری وزن با آردوینو و بوسیله ماژول HX711 و لودسل

 

اتصالات ال سی دی :

 

 

 

 

 

دانلود کتابخانه ها ی مورد نیاز:

DHT-lib:

دانلود فایل

BMP180 library:

دانلود فایل

 

دانلود کد برنامه:

دانلود فایل
#include <LiquidCrystal.h>
#include <dht.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#define DHTxxPIN A1
LiquidCrystal lcd(12,11,5,4,3,2);
dht DHT;
Adafruit_BMP085 bmp;
int ack;
int input = A0; 
unsigned long A = 1000L; 
unsigned long B = A * 60;
unsigned long C = B * 2;
int low = 300;
int med = 500;
int high = 700;
int x = 4000;
void setup() 
{ 
 Serial.begin(9600); 
 lcd.begin(16,2);
 lcd.setCursor(0,0);
 lcd.print("Sensors are");
 lcd.setCursor(0,1);
 lcd.print("getting ready");
 delay(C);
}

void loop() 
{
  ack=0;
  int chk = DHT.read11(DHTxxPIN);
  switch (chk)
  {
    case DHTLIB_ERROR_CONNECT:
        ack=1;
        break;
  }
  if(ack==0)
  {
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temp(*C)= ");
  lcd.print(DHT.temperature);
  lcd.setCursor(0,1);
  lcd.print("Humidity(%) = ");
  lcd.print(DHT.humidity);
  delay(x);
}
if(ack==1)
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("NO DATA");
  lcd.setCursor(0,1);
  lcd.print("Check Sensor");
  delay(x);
}
if (!bmp.begin())
  {
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("BMP180 sensor");
  lcd.setCursor(0,1);
  lcd.print("not found");
  while (1) {}
  }
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("----Pressure----  ");
    lcd.setCursor(0,1);
    lcd.print(bmp.readPressure());
    lcd.print("  Pascal");
    delay(x);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("----Altitude----");
    lcd.setCursor(0,1);
    lcd.print(bmp.readAltitude(101500));
    lcd.print("  meter");
    delay(x);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("  Air Quality:");
    if(analogRead(input)==0)
    {
      lcd.setCursor(0,1);
      lcd.print("  Sensor Error");
      delay(x);
    }
    if(analogRead(input)<=low && analogRead(input)>0)
    {
      lcd.setCursor(0,1);
      lcd.print("      GOOD");
      delay(x);
    }
    if(analogRead(input)>low && analogRead(input)<med)
    {
      lcd.setCursor(0,1);
      lcd.print("  GETTING BAD");
      delay(x);
    }
    if(analogRead(input)>=med && analogRead(input)<high)
    {
     lcd.setCursor(0,1);
     lcd.print("   VERY POOR");
     delay(x);
    }
    if(analogRead(input)>=high)
    {
      lcd.setCursor(0,1);
      lcd.print("     WORST");
      delay(x);
    }
}

 

دیدگاه‌ها (0)

*
*