Close

Termostat a vlhkomer na liaheň

Úvodní stránka Fórum Vaše projekty Arduino Termostat a vlhkomer na liaheň

  • Toto téma obsahuje celkem 1 odpověď. Do diskuze (2 diskutující) se naposledy zapojil uživatel BlindP a poslední změna proběhla před 8 roky a 8 měsíci.
Aktuálně jsou na stránce zobrazeny 2 příspěvky - 1. až 2. (celkem z 2)
  • Autor
    Příspěvky
  • #4049
    thomas4289
    Účastník

    Zdravím Vás
    Mám taký malý problém. V programovaní som začiatočník. Naprogramoval som si tento termostat ale potreboval by som to naprogramovať tak aby som vedel nastavovať aj desatiny stupňa. Program aj zapojenie funguje ale viem nastavovať iba celé stupne. Bol by som rád ak by mi vedel niekto pomôcť.

    #include <DHT.h>
    #include <EEPROM.h>
    #include <LiquidCrystal.h>
    #define DHTPin A0
    #define DHTTYPE DHT22

    DHT dht(DHTPin,DHTTYPE);

    LiquidCrystal lcd(5,4,3,2,1,0);
    int Rele = 8;
    int TlacPlus = 6;
    int TlacMinus = 7;
    float settemp;
    void setup()
    {
    pinMode(Rele,OUTPUT);
    pinMode(TlacPlus,INPUT);
    pinMode(TlacMinus,INPUT);
    digitalWrite(TlacPlus,HIGH); //zapnutie pull-up rezistora
    digitalWrite(TlacMinus,HIGH); //zapnutie pull-up rezistora
    lcd.begin(16,2);
    dht.begin();
    EEPROM.read(1);
    }
    void loop()
    {
    float vlhkost = dht.readHumidity();
    float teplota = dht.readTemperature();
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(„T:“); // T – Teplota
    lcd.print(teplota); //vypíš hodnotu zo senzora
    lcd.print((char)223); //znak stupeň celzius
    lcd.print(„C“);
    lcd.print(„H:“); // H – Vlhkosť
    lcd.print(vlhkost); //vypíš vlhkosť zo senzora
    lcd.print(„%“);
    settemp = EEPROM.read(1); //načítaj nastavenú teplotu do EEPROM pamäte

    if (digitalRead(TlacPlus)==LOW)
    {
    (settemp++);
    }
    else
    {
    }

    if (digitalRead(TlacMinus)==LOW)
    {
    (settemp–);
    }
    else
    {
    }
    lcd.setCursor(0,1);
    lcd.print(„I: „); //I – ideálna teplota
    lcd.print(settemp); //vypíš ideálnu teplotu
    lcd.print((char)223);
    lcd.print(„C“);
    EEPROM.write(1,settemp); //zapíš nastavenú teplotu do pamäte
    delay(100);

    if (teplota<settemp) //ak je teplota menšia ako nastavená teplota
    {
    digitalWrite(Rele,HIGH); //zopni Relé
    }
    else //inak
    {
    digitalWrite(Rele,LOW); //rozopni Relé
    }
    }

    #4067
    BlindP
    Účastník

    Ahoj,
    s eeprom nemám zkušenosti, ale to neustále přepisování nebude to pravé. Zkus zapisovat jen pokud se hodnoty liší. Mrkni se EEprom lekce 17.

    Nastavení teploty

    float krok = 0.5;
    float settemp = 25;
    
     if (digitalRead(TlacPlus)==LOW)
    {
    settemp = settemp + krok;
    }
    if (digitalRead(TlacMinus)==LOW)
    {
    settemp = settemp - krok;
    }

    Taky bych přidal hysterezi, jinak ti bude relé kolem nastavené hodnoty zapínat a vypínat

    
    boolean topeni = false;
    float temp_offset = 2; //hystereze
    
        if(topeni) { //topeni je zapnuto
          if(teplota > settemp) {
            if((teplota - settemp) > temp_offset) {
              topeni =  LOW;
              digitalWrite(rele, LOW);
            }
          }
        }
        else {
          if(teplota < settemp) {
            if((settemp - teplota) > temp_offset) {
              topeni = HIGH;
              digitalWrite(rele, HIGH);
            }
          }
        }
    
    

    Snad jsem pomohl 🙂

Aktuálně jsou na stránce zobrazeny 2 příspěvky - 1. až 2. (celkem z 2)
  • Pro reakci na toto téma se musíte přihlásit.