اطلاعیه

Collapse
No announcement yet.

برنامه کنترل دما و رطوبت با رله و سنسور DHT21

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

    برنامه کنترل دما و رطوبت با رله و سنسور DHT21

    سلام
    در بین سنسورهای دما و رطوبت سنسور am2301 حسنی که داره میشه طول سیم سنسور را با کابل 3 سیم تا 22 متر هم افزایش داد.
    این برنامه به شما کمک میکنه تا با اتصال یک آردینو و یک سنسور AM2301 و یک رله دو کانال که به کولر و یا هیتر متصل شده دمای محیط و رطوبت محیط را در بازه تعریف شده نگه دارید.
    مد سرمایش و یا گرمایشی را در خط 18 برنامه با صفر و یک تعیین کنید
    کد PHP:
    #include "DHT.h"

    #define DHTPIN A0     // what digital pin we're connected to
    #define RELAY_Hum 6
    #define RELAY_Temp 7

    // Uncomment whatever type you're using!
    #define DHTTYPE DHT21   // DHT 21 (AM2301)

    // Initialize DHT sensor.
    DHT dht(DHTPINDHTTYPE);

    //Moisturizing system
    float Low_humidity_level 30.50;
    float Maximum_humidity 45.50;

    //Heating=1 Cooling=0
    boolean Heating_Cooling 0;

    //Heating system
    float Low_heat_limit 33.50//hade aghale garma
    float Maximum_heating 36.50;  //hade aksare garma

    //Cooling system
    float Maximum_cooling 25.50//hade aksare sarma
    float Upper_limit_of_cooling 29.50//hade aghale sarma

    void setup() {
      
    pinMode(RELAY_HumOUTPUT);
      
    pinMode(RELAY_TempOUTPUT);
      
    digitalWrite (RELAY_HumHIGH );
      
    digitalWrite (RELAY_TempHIGH );
      
    Serial.begin(9600);
      
    Serial.println("Waiting for first reading");

      
    dht.begin();
    }

    void loop() {
      
    // Wait a few seconds between measurements.
      
    delay(1000);
      
    float h dht.readHumidity();
      
    // Read temperature as Celsius (the default)
      
    float t dht.readTemperature();
      
    // Read temperature as Fahrenheit (isFahrenheit = true)
      
    float f dht.readTemperature(true);

      
    // Check if any reads failed and exit early (to try again).
      
    if (isnan(h) || isnan(t) || isnan(f)) {
        
    Serial.println("Failed to read from DHT sensor!");
        return;
      }
      
    // Compute heat index in Fahrenheit (the default)
      //float hif = dht.computeHeatIndex(f, h);
      // Compute heat index in Celsius (isFahreheit = false)
      //  float hic = dht.computeHeatIndex(t, h, false);
      
    {

        
    //Moisturizing system
        
    if (Low_humidity_level )  //if humidity is less that Low_humidity_level that turn relay ON until Maximum_humidity
        
    {
          
    digitalWrite (RELAY_HumLOW);
          
    delay(1000);
        }  if (
    Maximum_humidity ) {
          
    digitalWrite (RELAY_HumHIGH );
        }

        if (
    Heating_Cooling) {

          
    //Heating system
          
    if (Low_heat_limit)  //if tempurature is less than Low_heat_limit C that turn relay ON until Maximum_heating
          
    {
            
    digitalWrite (RELAY_TempLOW);
            
    delay(1000);
          }  if (
    Maximum_heating) {
            
    digitalWrite (RELAY_TempHIGH);
          }
        }
        else {
          
    //Cooling system
          
    if (Upper_limit_of_cooling)  //if tempurature is more than Upper_limit_of_cooling C that turn relay ON until Maximum_cooling
          
    {
            
    digitalWrite (RELAY_TempLOW);
            
    delay(1000);
          }  if (
    Maximum_cooling) {
            
    digitalWrite (RELAY_TempHIGH);
          }
        }
      }
      
    Serial.print("Humidity: ");
      
    Serial.print(h);
      
    Serial.print(" %\t");
      
    Serial.print("Temperature: ");
      
    Serial.print(t);
      
    Serial.println(" *C ");

      
    //Serial.print("Heat index: ");
      //  Serial.print(hic);
      //Serial.print(" *C ");
      //Serial.print(hif);
      //Serial.println(" *F");

    صلوات برمحمد و آل محمد
    جدیدترین ویرایش توسط حمید حمید; ۱۴:۱۱ ۱۳۹۸/۱۲/۲۳.

    #2
    پاسخ : برنامه کنترل دما و رطوبت با رله و سنسور DHT21

    با سلام و تبریک به مناسبت عید مبعث رسول اکرم خدمت عزیزان

    پروژه فوق را با قطعات زیر گسترش دادم همنطور بخش نرم افزاریش را که قابلیت نگه داشتن وضعیت و مقادیر در زمان قطعی برق را در آن قرار دادم.
    1- شیلد LCD کاراکتری 2x16
    2- رله 2کانال 5 ولت
    3-آردوینو UNO
    4- سنسور رطوبت و دمای AM2301
    5-ترمینال پیچی مدل KF350-2Pin رنگ سبز 5 عدد
    6- سیم 2 زوج 0.05 شیلد و فویلدار 20 متری برای سنسور
    7-جعبه 15*15
    8- پزیر برق کوچک 2 عدد
    9- سیم برق نمره 1 مقدار 10 متر
    10-تک سوئیچ 6x6x13mm تعداد 6 عدد جهت تعویض از روی شیلد LCD
    11-مولتی ترن 10K اهم / یک عدد جهت تعویض از روی شیلد LCD

    کد PHP:
    #include <EEPROM.h>
    #include "DHT.h"
    #define DHTPIN A1    // modify to the pin we connected
    #define DHTTYPE DHT21   // AM2301 
    DHT dht(DHTPINDHTTYPE);
    #define RELAY_Hum 2
    #define RELAY_Temp 3
    boolean RELAY_T 0;
    #include <LiquidCrystal.h>


    #include <LCD4Bit_mod.h>

    int  adc_key_val[6] = { -130150360535760 };
    int NUM_KEYS 6;
    int adc_key_in;
    int key = -1;
    int oldkey = -1;
    boolean systemstate 0;
    LiquidCrystal lcd(894567);

    float temp,  mintemp 29maxtemp 29;

    void setup(void) {
      
    pinMode(RELAY_HumOUTPUT);
      
    pinMode(RELAY_TempOUTPUT);
      
    digitalWrite (RELAY_HumHIGH );
      
    digitalWrite (RELAY_TempHIGH );
      
    Serial.begin(9600);
      
    Serial.println("DHT21 test!");
      
    dht.begin();
      
    systemstate EEPROM.get(0systemstate);
      
    Serial.println(systemstate );
      
    mintemp EEPROM.get(10mintemp);
      
    maxtemp EEPROM.get(5maxtemp);
      
    lcd.begin(162);
      
    lcd.clear();
    }

    void loop(void) {
      
    lcd.setCursor(00);
      
    lcd.print("T:");
      
    lcd.setCursor(60);
      
    lcd.print("\337");
      
    lcd.setCursor(90);
      
    lcd.print("H:");
      
    lcd.setCursor(150);
      
    lcd.print("%");
      
    lcd.setCursor(21);
      
    lcd.print("Min");
      
    lcd.setCursor(91);
      
    lcd.print("Max");

      
    adc_key_in analogRead(0);
      
    key get_key(adc_key_in);           // convert into key press
      
    if (key )            // if keypress is detected
      
    {
        
    delay(50);    // wait for debounce time
        
    adc_key_in analogRead(0);    // read the value from the sensor
        
    key get_key(adc_key_in);            // convert into key press
        
    if (key )
        {
          
    //oldkey = key;
          
    if (key >= 1) {
            
    lcd.setCursor(20);  //line=2, x=0
            //        lcd.printIn(msgs[key]);

            
    if (key == ) {
              if (
    systemstate) {
                
    systemstate = !(systemstate);
                
    EEPROM.put(0systemstate);
                
    lcd.clear();
                
    digitalWrite(2HIGH);  //stop cooler
                
    digitalWrite(3HIGH);  //stop  heater
                
    lcd.setCursor(00);
                
    lcd.print("Cooler:OFF");
                
    lcd.setCursor(01);
                
    lcd.print("Heater:OFF");
                
    delay(2000);
                
    lcd.clear();
              } else {
                
    systemstate = !(systemstate);
                
    EEPROM.put(0systemstate);
                
    lcd.clear();
                
    //digitalWrite(2, LOW);  //start cooler
                //digitalWrite(3, LOW);  //start  heater
                
    lcd.setCursor(00);
                
    lcd.print("Cooler:ON");
                
    lcd.setCursor(01);
                
    lcd.print("Heater:ON");
                
    delay(2000);
                
    lcd.clear();
              }
            }
            if (
    key == 3maxtemp -=  0.1EEPROM.put(5maxtemp);
            if (
    key == 2maxtemp +=  0.1EEPROM.put(5maxtemp);
            if (
    key == 4mintemp -=  0.1EEPROM.put(10mintemp);
            if (
    key == 1mintemp +=  0.1EEPROM.put(10mintemp);
            
    delay(200);
          }
        }
      }

      
    float temp dht.readTemperature();
      
    float h dht.readHumidity();
      
    lcd.setCursor(20);
      
    lcd.print(temp1);
      
    lcd.setCursor(110);
      
    lcd.print(h1);
      
    lcd.setCursor(51);
      
    lcd.print(mintemp1);
      
    lcd.setCursor(121);
      
    lcd.print(maxtemp1);

      if (
    mintemp == maxtemp || !systemstate ) {
        
    lcd.setCursor(01);
        
    lcd.print("--");
      }

      if ( 
    mintemp != maxtemp && mintemp maxtemp ) {
        
    //Cooling mode system
         
    if (temp mintemp && systemstate) { //if tempurature is  more than Upper_limit_of_cooling C that turn relay ON until  Maximum_cooling
          
    digitalWrite (RELAY_TempLOW);
          
    lcd.setCursor(01);
          
    lcd.print("Co");
        }
        if (
    temp maxtemp && systemstate) {
          
    digitalWrite (RELAY_TempHIGH);
          
    lcd.setCursor(01);
          
    lcd.print("Co");
        }
      }

      if (
    mintemp != maxtemp && mintemp maxtemp) {
        
    //Heating mode system
         
    if (temp mintemp && systemstate) { //if tempurature is  less than Low_heat_limit C that turn relay ON until Maximum_heating
          
    digitalWrite (RELAY_TempLOW);
          
    lcd.setCursor(01);
          
    lcd.print("He");
        }
        if (
    temp maxtemp && systemstate) {
          
    digitalWrite (RELAY_TempHIGH);
          
    lcd.setCursor(01);
          
    lcd.print("He");
        }
      }
    }

    // Convert ADC value to key number
    int get_key(unsigned int input)
    {
      
    int k;

      for (
    1NUM_KEYSk++)
      {
        if (
    input adc_key_val[k])
        {

          return 
    k;
        }
      }

      if (
    >= NUM_KEYS)
        
    = -1;     // No valid key pressed

      
    return k;

    جدیدترین ویرایش توسط حمید حمید; ۱۸:۵۶ ۱۳۹۹/۰۱/۰۲.

    دیدگاه

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