صفحه 1 از 4 123 ... آخرینآخرین
نمایش نتایج: از 1 به 10 از 37
Like Tree13 لایک

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

  1. #1
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85

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

    سلام و عرض خسته نباشید
    من یه سنسور دما و رطوبت am2301 با آردینو uno راه اندازی کردم که دما و رطوبت رو روی یک ال سی دی 2*16 نمایش میده.
    حالا من میخواستم که یکم این پروژه رو حرفه ای تر کنم ولی بیشتر از این در توانم نیست
    میخوام که بتونم دما و رطوبت دلخواه خودم رو به آردینو بدم و وقتی که دما و رطوبت ثبت شده توسط سنسور به سطح دلخواه من رسید دو عدد رله یکی برای دما و یکی برای رطوبت فعال بشه.
    برای مثال: میخوایم که دمای یک گلخونه رو روی دمای 30 درجه و رطوبت 80 درصد نگه داریم مثلا در حالت عادی دمای گلخانه 40 درجه و رطوبتش 50 درصده. خوب ما تعیین کریم که دما باید روی 30 درجه باشه و بالا نره و رطوبت باید روی 80 درصد باشه و پایین نیاد.
    پس باید توسط دو تا رله که به آردینو وصله و یکی رو به تهویه کننده ی هوا و یکی رو به رطوبت ساز وصل کردیم دما و رطوبت رو کنترل کنیم.
    خوب من توی این پروژه میخوام از سه تا کلید استفاده کنم یکی Set و یکی UP و یکی DOWN.
    وفتی دکمه ی set رو یک بار زدم با کلید های UP و DOWN بتونم دمای دلخواهم رو کم و زیاد کنم ، و بار دوم که دکمه ی set رو زدم بتونم رطوبت دلخواهم رو کم و زیاد کنم و وقتی دکمه ی set رو نگه داشتم اطلاعات ذخیره بشه همین

    ممنون میشم اگه دوستان مرا راهنمایی کنند.

    اینم از کد هایی که تا اینجا تونستم بنویسم:

    D.zip
    لایک کردن

  2. #2
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    این مدلی باید شرط if بزاری

    کد:
      if (t != 30) digitalWrite (relay1, LOW);
      else  digitalWrite (relay1, HIGH);
      if (h != 80) digitalWrite (relay2, LOW);
      else  digitalWrite (relay2, HIGH);

  3. #3
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط cjmj نمایش پست ها
    سلام و عرض خسته نباشید
    من یه سنسور دما و رطوبت am2301 با آردینو uno راه اندازی کردم که دما و رطوبت رو روی یک ال سی دی 2*16 نمایش میده.
    حالا من میخواستم که یکم این پروژه رو حرفه ای تر کنم ولی بیشتر از این در توانم نیست
    میخوام که بتونم دما و رطوبت دلخواه خودم رو به آردینو بدم و وقتی که دما و رطوبت ثبت شده توسط سنسور به سطح دلخواه من رسید دو عدد رله یکی برای دما و یکی برای رطوبت فعال بشه.
    برای مثال: میخوایم که دمای یک گلخونه رو روی دمای 30 درجه و رطوبت 80 درصد نگه داریم مثلا در حالت عادی دمای گلخانه 40 درجه و رطوبتش 50 درصده. خوب ما تعیین کریم که دما باید روی 30 درجه باشه و بالا نره و رطوبت باید روی 80 درصد باشه و پایین نیاد.
    پس باید توسط دو تا رله که به آردینو وصله و یکی رو به تهویه کننده ی هوا و یکی رو به رطوبت ساز وصل کردیم دما و رطوبت رو کنترل کنیم.
    خوب من توی این پروژه میخوام از سه تا کلید استفاده کنم یکی Set و یکی UP و یکی DOWN.
    وفتی دکمه ی set رو یک بار زدم با کلید های UP و DOWN بتونم دمای دلخواهم رو کم و زیاد کنم ، و بار دوم که دکمه ی set رو زدم بتونم رطوبت دلخواهم رو کم و زیاد کنم و وقتی دکمه ی set رو نگه داشتم اطلاعات ذخیره بشه همین

    ممنون میشم اگه دوستان مرا راهنمایی کنند.

    اینم از کد هایی که تا اینجا تونستم بنویسم:

    D.zip
    فعلا شرط if رو بگنجون تو کدت ببین اوکی میشه یا نه بعد بیا با کلیدها setpoint رو تغییر بدیم

  4. #4
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    این مدلی باید شرط if بزاری

    کد:
      if (t != 30) digitalWrite (relay1, LOW);
      else  digitalWrite (relay1, HIGH);
      if (h != 80) digitalWrite (relay2, LOW);
      else  digitalWrite (relay2, HIGH);

    من فکر میکنم در قسمت( 30=! t) به جای 30 باید یک متغیر i تعریف کنیم تا وقتی که توسط کلید های up و down دمای دلخواه رو کم یا زیاد میکنیم ، دمای دلخواه روی i قرار بگیره و در مورد رطوبت هم همینطور ، باید یک متغیر برای مثال j هم برای رطوبت در نظر گرفت.

    من اولین باره که اینطور دارم برنامه نویسی میکنم. میتونم توی ذهنم تصور کنم که چه جوری باید کد ها رو نوشت ولی موقع کد نویسی که میشه به کل ذهنم هنگ میکنه الانم تو هنگم

  5. #5
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    آقا یکم بیشتر سر کد ها فکر کردم و تونستم که دستورات if رو به نحوی تو برنامه جا بدم

    اینم کدهایی که تا اینجا نوشته شده:

    کد:
    #include "Bounce2.h"
    #include "DHT.h"
    #include "LiquidCrystal.h"
    
    #define setBUTTON 13
    #define upBUTTON 12
    #define downBUTTON 11
    
    Bounce setBUTTONDebouncer;
    Bounce upBUTTONDebouncer;
    Bounce downBUTTONDebouncer;
    
    volatile  int up = 30;
    
    #define DHTPIN 2
    #define DHTTYPE DHT21
    
    DHT dht(DHTPIN, DHTTYPE);
    LiquidCrystal lcd(8, 7, 6, 5, 4, 3);
    
    const int temprelay = 10;
    const int humidityrelay = 9;
    
    
    void setup() {
      lcd.begin(16, 2);
      lcd.clear();
    
      dht.begin();
    
        setBUTTONDebouncer.attach (setBUTTON);
        setBUTTONDebouncer.interval(50);
        
        upBUTTONDebouncer.attach (upBUTTON);
        upBUTTONDebouncer.interval(50);
    
        downBUTTONDebouncer.attach (downBUTTON);
        downBUTTONDebouncer.interval(50);
    
        
          pinMode (setBUTTON, INPUT_PULLUP);
          pinMode (upBUTTON, INPUT_PULLUP);
          pinMode (downBUTTON, INPUT_PULLUP);
    }
    
    void loop() {
      
    setBUTTONDebouncer.update();
    upBUTTONDebouncer.update();
    downBUTTONDebouncer.update();
    
      
    if (setBUTTONDebouncer.fell ())
    {
       lcd.clear();
       lcd.print("Set Humidity:");
       delay(10000);
       lcd.clear();
    }
    
     if(upBUTTONDebouncer.fell())
     {
      up++;
      
       lcd.setCursor(7,2);
       lcd.print(up);
    
     }
    
       
      
    
      delay(1000);
    
      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) >= 28){
      digitalWrite (temprelay, HIGH);
      }
           else if ((t) <= 24) 
           {
           digitalWrite (temprelay, LOW);
           }
      
           if ((h) <= 78){
           digitalWrite (humidityrelay, HIGH);
           }
           else if ((h) >=92)
           {
           digitalWrite (humidityrelay, LOW);
           }
    
      
       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 ");
    }

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

  7. #7
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط cjmj نمایش پست ها
    من فکر میکنم در قسمت( 30=! t) به جای 30 باید یک متغیر i تعریف کنیم تا وقتی که توسط کلید های up و down دمای دلخواه رو کم یا زیاد میکنیم ، دمای دلخواه روی i قرار بگیره و در مورد رطوبت هم همینطور ، باید یک متغیر برای مثال j هم برای رطوبت در نظر گرفت.

    من اولین باره که اینطور دارم برنامه نویسی میکنم. میتونم توی ذهنم تصور کنم که چه جوری باید کد ها رو نوشت ولی موقع کد نویسی که میشه به کل ذهنم هنگ میکنه الانم تو هنگم

    اره روندی که تو ذهنته درسته اما من تو فکرمه واسه تغییر setpoint تابع بنویسیم که کد یه کم مرتب تر بشه

  8. #8
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط cjmj نمایش پست ها
    آقا یکم بیشتر سر کد ها فکر کردم و تونستم که دستورات if رو به نحوی تو برنامه جا بدم

    اینم کدهایی که تا اینجا نوشته شده:

    کد:
    #include "bounce2.h"
    #include "dht.h"
    #include "liquidcrystal.h"
    
    #define setbutton 13
    #define upbutton 12
    #define downbutton 11
    
    bounce setbuttondebouncer;
    bounce upbuttondebouncer;
    bounce downbuttondebouncer;
    
    volatile  int up = 30;
    
    #define dhtpin 2
    #define dhttype dht21
    
    dht dht(dhtpin, dhttype);
    liquidcrystal lcd(8, 7, 6, 5, 4, 3);
    
    const int temprelay = 10;
    const int humidityrelay = 9;
    
    
    void setup() {
      lcd.begin(16, 2);
      lcd.clear();
    
      dht.begin();
    
        setbuttondebouncer.attach (setbutton);
        setbuttondebouncer.interval(50);
        
        upbuttondebouncer.attach (upbutton);
        upbuttondebouncer.interval(50);
    
        downbuttondebouncer.attach (downbutton);
        downbuttondebouncer.interval(50);
    
        
          pinmode (setbutton, input_pullup);
          pinmode (upbutton, input_pullup);
          pinmode (downbutton, input_pullup);
    }
    
    void loop() {
      
    setbuttondebouncer.update();
    upbuttondebouncer.update();
    downbuttondebouncer.update();
    
      
    if (setbuttondebouncer.fell ())
    {
       lcd.clear();
       lcd.print("set humidity:");
       delay(10000);
       lcd.clear();
    }
    
     if(upbuttondebouncer.fell())
     {
      up++;
      
       lcd.setcursor(7,2);
       lcd.print(up);
    
     }
    
       
      
    
      delay(1000);
    
      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) >= 28){
      digitalwrite (temprelay, high);
      }
           else if ((t) <= 24) 
           {
           digitalwrite (temprelay, low);
           }
      
           if ((h) <= 78){
           digitalwrite (humidityrelay, high);
           }
           else if ((h) >=92)
           {
           digitalwrite (humidityrelay, low);
           }
    
      
       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 ");
    }

    با تابع نویسی آشنایی؟
    الان تمام اتفاقات کدت داره تو loop میفته یه کم کدتو خوانا تر کن و براش تابع بنویس تا بعد سوئیچ ها رو به عنوان به تابع به مجموعه تابع هات اصافه کنیم

  9. #9
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    نقل قول نوشته اصلی توسط solxsado نمایش پست ها
    درسته دقیقا سنسور و ال سی دی که به کار بردم همین هست که توی پروژه ی این لینک بود. ولی سورس کدش توی سایت نبود
    ویرایش توسط cjmj : 02-04-2016 در ساعت 09:51 PM

  10. #10
    Member
    تاریخ عضویت
    Jan 2016
    محل سکونت
    ایران
    نوشته ها
    85
    با تابع نویسی زیاد آشنا نیستم ولی اگه لینکی دارین که آموزش تابع نویسی رو داره قرار بدید تا برم یاد بگیرم.
    از تمام کسانی که تا اینجا توی انجمن بهم کمک کردن بسیار سپاس گزارم.
    ویرایش توسط cjmj : 02-04-2016 در ساعت 09:45 PM
    لایک کردن

صفحه 1 از 4 123 ... آخرینآخرین

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

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

SEO by vBSEO