صفحه 3 از 4 نخستنخست 1234 آخرینآخرین
نمایش نتایج: از 21 به 30 از 37
Like Tree13 لایک

موضوع: تنظیم رطوبت و دمای گلخانه توسط آردینو

  1. #21
    Senior Member
    تاریخ عضویت
    Dec 2013
    محل سکونت
    ایران - شیراز
    نوشته ها
    220
    تجزیه و تحلیل رو ول کن.:d
    کد رو بزار تا نگاش کنیم
    لایک کردن

  2. #22
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    کد:
    #include <Bounce2.h>
    #include <DHT.h>
    #include <LiquidCrystal.h>
    
    
    #define setBUTTON 13
    #define upBUTTON 12
    #define downBUTTON 11
    #define DHTPIN 2
    #define DHTTYPE DHT21
    
    Bounce set;
    Bounce up;
    Bounce down;
    
    DHT dht(DHTPIN, DHTTYPE);
    LiquidCrystal lcd(8, 7, 6, 5, 4, 3);
    
    const int temprelay = 10, humidityrelay = 9;
    
    float temp,hum;
    const float i=temp, j=hum;
    
    
    void setup() {
      
      lcd.begin(16, 2);
      lcd.clear();
    
      dht.begin();
    
        set.attach (setBUTTON);
        set.interval(50);
        
        up.attach (upBUTTON);
        up.interval(50);
    
        down.attach (downBUTTON);
        down.interval(50);
    
        
          pinMode (setBUTTON, INPUT_PULLUP);
          pinMode (upBUTTON, INPUT_PULLUP);
          pinMode (downBUTTON, INPUT_PULLUP);
    
    }
    
    void loop() {
    
    
      set.update();
      up.update();
      down.update();
    
      float h = dht.readHumidity();
      float t = dht.readTemperature();
    
      if (isnan(h) || isnan(t)) {
        lcd.clear();
        lcd.setCursor(1,0);
        lcd.print("Failed to read ");
        lcd.setCursor(0,1);
        lcd.print("from DHT sensor!");
        delay(2000);
        lcd.clear();
        return;
      }
    
          
    
      if ((t) >= i){
      digitalWrite (temprelay, HIGH);
      }
           else if ((t) <= i-5) 
           {
           digitalWrite (temprelay, LOW);
           }
      
           if ((h) >= j){
           digitalWrite (humidityrelay, LOW);
           }
           else if ((h) <=j-12)
           {
           digitalWrite (humidityrelay, HIGH);
           }
    
      
       lcd.print("Humidity:");
       lcd.setCursor(10,0);
       lcd.print(h);
       lcd.setCursor(15,0);
       lcd.print("%");
       lcd.setCursor(1,1);
       lcd.print("Temp:");
       lcd.setCursor(7,1);
       lcd.print(t);
       lcd.setCursor(12,1);
       lcd.print(" *C ");
    }
    ویرایش توسط cjmj : 02-08-2016 در ساعت 09:58 AM

  3. #23
    Senior Member
    تاریخ عضویت
    Dec 2013
    محل سکونت
    ایران - شیراز
    نوشته ها
    220
    الان مشکل کجاست؟

  4. #24
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    توی این کد هیچ مشکلی نیست ، قبلا هم گفتم که میخوام سه تا کلید وصل کنم به آردینو یک کلید بالا و یک کلید پایین برای کم و زیاد کردن و یک کلید هم برای رفتن به تنظیمات.
    در واقع میخوام وقتی که دفعه ی اول که کلید تنظیمات رو فشار دادم تنظیمات temp نمایش داده بشه و با دو کلید up و down دما رو کم و زیاد کنم و دفعه ی دوم که کلید تنظیمات رو فشار دادم بتونم رطوبت رو توش تنظیم کنم با کلید up و down.
    حالا چرا میخوام دما و رطوبت رو تنظیم کنم؟؟؟
    چون توی این گلخانه ای که قراره سنسور نصب بشه رطوبت باید 80 تا 90 درصد باشه و دما هم باید 20 تا 25 درجه. برای مثال ما دما رو روی 20 درجه توسط کلید تنظیم و کلید های up و down و رطوبت رو روی 85 درصد تنظیم میکنیم. خوب آردینو این اعداد رو که بهش دادیم رو میگیره و یه عمل مقایسه بین این اعدادی که ما بهش دادیم و اعدادی که سنسور dht21 نشون میده انجام میده. خوب ما دما رو روی 20 درجه تنظیم کرده بودیم حالا اگر دمای گلخانه بالای 20 رفت مثلا شد 25 ، اردینو یک رله رو که به یکی از این پین ها متصله فعال کرده و رله هواکش رو روشن میکنه و تهویه انجام میشه تا دما به چند درجه زیر 20 برسه مثلا 16 یا 17. حالا چرا زیر 20؟ چون اگه دما دوباره روی 20 بیاد و آردینو تهویه رو خاموش کنه خوب مسلمه که دقت سنسور نیم درجه است و اگه یک لحظه بیشتر از 20 درجه تشخیص بده دوباره فن روشن میشه.

    حالا در مورد رطوبت: خوب ما رطوبت رو روی 85 درصد تنظیم کرده بودیم ، حالا فرض کنید رطوبت محیط 50 درصد باشه خوب مسلمه که آردینو رله ی مخصوص رطوبت رو فعال میکنه و بدین ترتیب دستگاه رطوبت ساز فعال میشه و اونقدر رطوبت تولید میکنه تا رطوبت برسه به 85 درصد و رله قطع بشه و دستگاه رطوبت ساز خاموش شه و تا وقتی دوباره رطوبت به زیر 80 نرسیده رطوبت ساز توسط آردینو روشن نشه.
    من فقط تونستم تا یه جایی کد نویسی کنم که کد هم گذاشتم واستون. و تمام چیز هایی که اینجا گفتم رو دیگه در توان من نیست برنامه نویسی کنم چون بیش از یک ماه نیست که دارم با آردینو کار میکنم لطفا کمکم کنید و راه های نوشتن این برنامه رو بگید که از چه دستوراتی میتونم استفاده کنم تا پروژه رو تکمیل کنم.

    سپاس فراوان از شما و ببخشید که زیاد نوشتم.
    ویرایش توسط cjmj : 02-08-2016 در ساعت 08:12 PM

  5. #25
    Senior Member
    تاریخ عضویت
    Dec 2013
    محل سکونت
    ایران - شیراز
    نوشته ها
    220
    اول یه نکته بگم:
    متغیر از نوع float ، اعشاری می باشد.
    تو این مواقع باید از نوع int (عدد صحیح) تعریف کنی تا مثلا توی برنامه وقتی می خوای بگی

    اگه برابر 80 درصد شدی:
    تابع مثلا سلام رو اجرا کن.


    حالا برنامه رو نگاه می کنم و مورد های بعدی رو بهت می گم.

  6. #26
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط cjmj نمایش پست ها
    توی این کد هیچ مشکلی نیست ، قبلا هم گفتم که میخوام سه تا کلید وصل کنم به آردینو یک کلید بالا و یک کلید پایین برای کم و زیاد کردن و یک کلید هم برای رفتن به تنظیمات.
    در واقع میخوام وقتی که دفعه ی اول که کلید تنظیمات رو فشار دادم تنظیمات temp نمایش داده بشه و با دو کلید up و down دما رو کم و زیاد کنم و دفعه ی دوم که کلید تنظیمات رو فشار دادم بتونم رطوبت رو توش تنظیم کنم با کلید up و down.
    حالا چرا میخوام دما و رطوبت رو تنظیم کنم؟؟؟
    چون توی این گلخانه ای که قراره سنسور نصب بشه رطوبت باید 80 تا 90 درصد باشه و دما هم باید 20 تا 25 درجه. برای مثال ما دما رو روی 20 درجه توسط کلید تنظیم و کلید های up و down و رطوبت رو روی 85 درصد تنظیم میکنیم. خوب آردینو این اعداد رو که بهش دادیم رو میگیره و یه عمل مقایسه بین این اعدادی که ما بهش دادیم و اعدادی که سنسور dht21 نشون میده انجام میده. خوب ما دما رو روی 20 درجه تنظیم کرده بودیم حالا اگر دمای گلخانه بالای 20 رفت مثلا شد 25 ، اردینو یک رله رو که به یکی از این پین ها متصله فعال کرده و رله هواکش رو روشن میکنه و تهویه انجام میشه تا دما به چند درجه زیر 20 برسه مثلا 16 یا 17. حالا چرا زیر 20؟ چون اگه دما دوباره روی 20 بیاد و آردینو تهویه رو خاموش کنه خوب مسلمه که دقت سنسور نیم درجه است و اگه یک لحظه بیشتر از 20 درجه تشخیص بده دوباره فن روشن میشه.

    حالا در مورد رطوبت: خوب ما رطوبت رو روی 85 درصد تنظیم کرده بودیم ، حالا فرض کنید رطوبت محیط 50 درصد باشه خوب مسلمه که آردینو رله ی مخصوص رطوبت رو فعال میکنه و بدین ترتیب دستگاه رطوبت ساز فعال میشه و اونقدر رطوبت تولید میکنه تا رطوبت برسه به 85 درصد و رله قطع بشه و دستگاه رطوبت ساز خاموش شه و تا وقتی دوباره رطوبت به زیر 80 نرسیده رطوبت ساز توسط آردینو روشن نشه.
    من فقط تونستم تا یه جایی کد نویسی کنم که کد هم گذاشتم واستون. و تمام چیز هایی که اینجا گفتم رو دیگه در توان من نیست برنامه نویسی کنم چون بیش از یک ماه نیست که دارم با آردینو کار میکنم لطفا کمکم کنید و راه های نوشتن این برنامه رو بگید که از چه دستوراتی میتونم استفاده کنم تا پروژه رو تکمیل کنم.

    سپاس فراوان از شما و ببخشید که زیاد نوشتم.

    ببین کدت رو به شکل تابع نویسی در آوردم
    اینو آپلود کن ببین همه چیز درسته یا نه
    و این که یه نکته تو وقتی از شرط خارج میشی داری به پین دیجیتال متصل به رله دستور high میدی مگه رله تو 1 فعاله ؟
    مدل رله ای که استفاده می کنی چیه؟
    کد:
    #include <Bounce2.h>
    #include <DHT.h>
    #include <LiquidCrystal.h>
    
    
    
    
    #define setBUTTON 13
    #define upBUTTON 12
    #define downBUTTON 11
    #define DHTPIN 2
    #define DHTTYPE DHT21
    
    
    Bounce set;
    Bounce up;
    Bounce down;
    
    
    DHT dht(DHTPIN, DHTTYPE);
    LiquidCrystal lcd(8, 7, 6, 5, 4, 3);
    
    
    float h, t, tset = 25, hset = 80;
    
    
    
    
    void setup() {
      project_config();
    }
    //*******************
    void loop() {
      button_update();
      DHT_Read();
      compare_setpoint(tset, hset, t, h);
      data_Show(h, t);
    
    
    }
    //*******************
    void project_config() {
      lcd.begin(16, 2);
      lcd.clear();
      dht.begin();
      set.attach (setBUTTON);
      set.interval(50);
      up.attach (upBUTTON);
      up.interval(50);
      down.attach (downBUTTON);
      down.interval(50);
      pinMode (setBUTTON, INPUT_PULLUP);
      pinMode (upBUTTON, INPUT_PULLUP);
      pinMode (downBUTTON, INPUT_PULLUP);
    }
    //*******************
    void DHT_Read() {
      h = dht.readHumidity();
      t = dht.readTemperature();
      if (isnan(h) || isnan(t)) {
        lcd.clear();
        lcd.setCursor(1, 0);
        lcd.print("Failed to read ");
        lcd.setCursor(0, 1);
        lcd.print("from DHT sensor!");
        delay(2000);
        lcd.clear();
        return;
      }
    }
    //*******************
    void data_Show(float temprature, float humidity) {
      lcd.print("Humidity:");
      lcd.setCursor(10, 0);
      lcd.print(humidity);
      lcd.setCursor(15, 0);
      lcd.print("%");
      lcd.setCursor(1, 1);
      lcd.print("Temp:");
      lcd.setCursor(7, 1);
      lcd.print(temprature);
      lcd.setCursor(12, 1);
      lcd.print(" *C ");
    }
    //*******************
    void compare_setpoint(float tempsetpint , float humidsetpoint, float tempr, float humidi) {
      const int temprelay = 10, humidityrelay = 9;
      if (tempr >= tempsetpint) {
        digitalWrite (temprelay, HIGH);
      }
      else if (tempr <= tempsetpint - 5)
      {
        digitalWrite (temprelay, LOW);
      }
    
    
      if (humidi >= humidsetpoint) {
        digitalWrite (humidityrelay, LOW);
      }
      else if (humidi <= humidsetpoint - 12)
      {
        digitalWrite (humidityrelay, HIGH);
      }
    }
    //*******************
    void button_update() {
      set.update();
      up.update();
      down.update();
    
    
    }
    لایک کردن

  7. #27
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    ببین کدت رو به شکل تابع نویسی در آوردم
    اینو آپلود کن ببین همه چیز درسته یا نه
    و این که یه نکته تو وقتی از شرط خارج میشی داری به پین دیجیتال متصل به رله دستور high میدی مگه رله تو 1 فعاله ؟
    مدل رله ای که استفاده می کنی چیه؟
    سپاس گزارم ازشما برای وقتی که برای حل شدن مشکلم گذاشتید.

    کد هایی که تغییر دادین رو آپلود کردم و تا اینجای برنامه مثل قبل درست کار میکنه.
    درسته رله توی 1 فعال میشه ، پین میکرو به بیس یک ترانزیستور متصل میشه و رله توسط ترانزیستور فعال میشه.
    در مورد دستورات شرطی که توی کد قرار داره مطمئنم چون به جای قرار دادن متغیر در کد ؛ از عدد استفاده کردم و دیدم که کارش رو درست داره انجام میده.

    در مورد کلید تنظیم که قراره یک بار تنظیمات دما رو بیاره و یک بار تنظیمات رطوبت رو فکر کنم باید از switch / case استفاده کرد درسته؟؟؟؟
    ویرایش توسط cjmj : 02-09-2016 در ساعت 11:18 AM
    لایک کردن

  8. #28
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    بچه ها بالاخره موفق شدم :d :d

    پس از روز ها و شب ها بیداری خلاصه تونستم با کمک شما و کمک خدا و سلام و صلوات و با رمز یا زهرا برنامه ای رو که میخواستم درست کنم.
    الان که خیلی خسته ام و خوابم میاد فردا یک فیلم از نحوه کار کردش میگیرم و میذارمش اینجا تا بقیه هم ببینند.
    لایک کردن

  9. #29
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    سلام
    یه فیلم گرفتم از روش کار کردنش:

    http://s7.picofile.com/file/82383647...22004.zip.html

    کد:
    #include <EEPROM.h>
    #include <Bounce2.h>
    #include <DHT.h>
    #include <LiquidCrystal.h>
    
    #define setBUTTON 13
    #define upBUTTON 12
    #define downBUTTON 11
    #define DHTPIN 2
    #define DHTTYPE DHT21
    
    Bounce set;
    Bounce up;
    Bounce down;
    
    DHT dht(DHTPIN, DHTTYPE);
    LiquidCrystal lcd(8, 7, 6, 5, 4, 3);
    
      const byte temprelay = 10, humidityrelay = 9;
      byte humiditySetpoint = 85;
      byte tempSetpoint = 20;
      unsigned long prevMillis = 0;
      unsigned long currentmillis = millis();
      static byte prevdownButton;
      static byte prevupButton;
      static byte prevsetButton;
      static byte  prevSetMode;
      byte setMode;
      
    void setup() {
    
      lcd.begin(16, 2);
      lcd.clear();
    
      dht.begin();
    
        set.attach (setBUTTON);
        set.interval(30);
        up.attach (upBUTTON);
        up.interval(30);
        down.attach (downBUTTON);
        down.interval(30);
    
          pinMode (setBUTTON, INPUT_PULLUP);
          pinMode (upBUTTON, INPUT_PULLUP);
          pinMode (downBUTTON, INPUT_PULLUP);
    
      humiditySetpoint = EEPROM.read(0);
      tempSetpoint = EEPROM.read(1);
    }
    
    void loop() {
      
      set.update();
      up.update();
      down.update();
    
      float h = dht.readHumidity();
      float t = dht.readTemperature();
    
      if (isnan(h) || isnan(t)) {
        lcd.clear();
        lcd.setCursor(1,0);
        lcd.print("Failed to read ");
        lcd.setCursor(0,1);
        lcd.print("from DHT sensor!");
        delay(2000);
        lcd.clear();
        return;
      }
    
      if ((t) >= tempSetpoint){
      digitalWrite (temprelay, HIGH);
      }
           else if ((t) <= tempSetpoint-5) 
           {
           digitalWrite (temprelay, LOW);
           }
      
       if ((h) >= humiditySetpoint){
       digitalWrite (humidityrelay, LOW);
       }
           else if ((h) <=humiditySetpoint-10)
           {
           digitalWrite (humidityrelay, HIGH);
           }
    
      if ( setMode != 0) {
        if (currentmillis - prevMillis >= 10000UL) {
          setMode = 0;
          prevMillis = currentmillis;
        }
      }
    
        if (set.fell()) {
          setMode++;
        }
        prevsetButton = setBUTTON;
      
      if (setMode >= 3) {
        setMode = 0;
      }
      if (setMode != prevSetMode) {
        lcd.clear();
        prevSetMode = setMode;
      }
    
      switch (setMode) {
          case 0://normal
       lcd.print("Humidity:");
       lcd.setCursor(10,0);
       lcd.print(h);
       lcd.setCursor(15,0);
       lcd.print("%");
       lcd.setCursor(1,1);
       lcd.print("Temp:");
       lcd.setCursor(7,1);
       lcd.print(t);
       lcd.setCursor(12,1);
       lcd.print(" *C ");
       prevMillis = currentmillis;
          break;
        
        case 1://edit temp
          if ('upButton' != prevupButton) {
            if (up.fell()) {
              tempSetpoint = tempSetpoint + 1;
            }
            prevupButton = 'upButton';
          }
          if ('downButton' != prevdownButton) {
            if (down.fell()) {
              tempSetpoint = tempSetpoint - 1;
            }
            prevdownButton = 'downButton';
          }
          lcd.setCursor(0, 0);
          lcd.print("Set temp:");
          lcd.setCursor(7, 1);
          lcd.print(tempSetpoint);
          lcd.setCursor(9,1);
          lcd.print("*C");
          EEPROM.write(1, tempSetpoint);
          break;
     
        case 2://edit humidity
          if ('upButton' != prevupButton) {
            if (up.fell()) {
              humiditySetpoint = humiditySetpoint + 1;
            }
            prevupButton = 'upButton';
          }
          if ('downButton' != prevdownButton) {
            if (down.fell()) {
              humiditySetpoint = humiditySetpoint - 1;
            }
            prevdownButton = 'downButton';
          }
          lcd.setCursor(0, 0);
          lcd.print("Set Humidity:");
          lcd.setCursor(7, 1);
          lcd.print(humiditySetpoint);
          lcd.setCursor(9,1);
          lcd.print("%");
          EEPROM.write(0, humiditySetpoint);
          break;
      }}
    ویرایش توسط cjmj : 02-11-2016 در ساعت 06:45 PM
    لایک کردن

  10. #30
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط cjmj نمایش پست ها
    بچه ها بالاخره موفق شدم :d :d

    پس از روز ها و شب ها بیداری خلاصه تونستم با کمک شما و کمک خدا و سلام و صلوات و با رمز یا زهرا برنامه ای رو که میخواستم درست کنم.
    الان که خیلی خسته ام و خوابم میاد فردا یک فیلم از نحوه کار کردش میگیرم و میذارمش اینجا تا بقیه هم ببینند.

    خدا رو شکر که پیروز شدید.

صفحه 3 از 4 نخستنخست 1234 آخرینآخرین

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO