اطلاعیه

Collapse
No announcement yet.

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

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

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

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

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

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

    کد:
    #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 ");
    }

    #2
    پاسخ : راهنمایی جهت تنظیم رطوبت و دمای گلخانه توسط آردینو

    سلام
    اینطوری که نمیشه کتابخانه ها رو هم قرار بده اگر می خوای زودتر به نتیجه برسی
    برد جوجه کشی:
    مطالعه پست 1 (حتما مطالعه کنید)


    مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

    دانلود

    توجه:
    این برد نیمه صنعتی و خانگی هست...
    برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

    آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

    دیدگاه


      #3
      پاسخ : راهنمایی جهت تنظیم رطوبت و دمای گلخانه توسط آردینو

      نوشته اصلی توسط mohammad...
      سلام
      اینطوری که نمیشه کتابخانه ها رو هم قرار بده اگر می خوای زودتر به نتیجه برسی
      دوست عزیز من چند ماه پیش این پست رو گذاشتم و همون موقع ها به نتیجه رسیدم و پروژه رو کامل کردم. اگه خواستنین کدهاش رو با فایل pcb رو قرار میدم.

      دیدگاه


        #4
        پاسخ : راهنمایی جهت تنظیم رطوبت و دمای گلخانه توسط آردینو

        نوشته اصلی توسط cjmj
        دوست عزیز من چند ماه پیش این پست رو گذاشتم و همون موقع ها به نتیجه رسیدم و پروژه رو کامل کردم. اگه خواستنین کدهاش رو با فایل pcb رو قرار میدم.
        سلام
        بله این هم یه سوتی می تونه باشه در کل :rolleyes: اگر تاریخشو می دیدم با احتیاط سوال می پرسیدم :biggrin:
        اگر که قرار بدین به بقیه کاربران عزیز که با اردیونو می خوان شروع کنن کمک بزرگی می کنید
        ممنون از شما
        برد جوجه کشی:
        مطالعه پست 1 (حتما مطالعه کنید)


        مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

        دانلود

        توجه:
        این برد نیمه صنعتی و خانگی هست...
        برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

        آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

        دیدگاه


          #5
          پاسخ : راهنمایی جهت تنظیم رطوبت و دمای گلخانه توسط آردینو

          اینم از کد ها:




          کد:
          #include <EEPROM.h>
          #include <Bounce2.h>
          #include <DHT.h>
          #include <LiquidCrystal.h>
          
          #define setBUTTON 11
          #define upBUTTON 12
          #define downBUTTON 14
          #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 - 3)
           {
            digitalWrite (temprelay, LOW);
           }
          
           if ((h) >= humiditySetpoint) {
            digitalWrite (humidityrelay, LOW);
           }
           else if ((h) <= humiditySetpoint - 7)
           {
            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;
           }
          }

          دیدگاه

          لطفا صبر کنید...
          X