Dreipunktregelung

Hallo an alle, ich bin ein absoluter Neuling, suche aber eine Lösung für mein Arduino Duemillanove, mit der eine Dreipunktregelung für Heizung und Lüftung realisiert werden kann. Ich habe eine Temperatursensor, möchte die Werte auf einem Display ablesen können und was wichtig ist das ich die Werte ohne Computer ändern kann. Ich dacht dabei an Taster, je einen für "set" , "+" ,"-".
Für eine Lösung wäre ich dankbar.

Herzlich willkommen! Hast du schon ein par Zeilen Code zusammengebastelt oder erwartest du hier ein komplette Lösung? Hier im Forum ist eher "Hilfe zur Selbsthilfe" angesagt. :wink:
Um welchen Temperatursensor handelt es sich denn?

Ich hab ähnliches mit einem Encoder gemacht.

Nach rechts drehen: Wert erhöhen
nach links drehen: Wert verringern
Encoder-Taste betätigen: Wert übernehmen, (oder auf Default setzen, oder......)

Beispiele und eine Lib findest du z.B. hier
http://www.pjrc.com/teensy/td_libs_Encoder.html

Alex875:
Hallo und Danke erstmal, das mit den Temperaturen messen und dem Display klappt schon, nur habe ich keine Idee wie ich das mit den Veränderbaren werten hinkriegen soll. Als Temperatursensor habe ich einen Dallas.

Entweder baust Du zwei Stell-Potentiometer in die Schaltung, deren Stellung Du über einen Analog-Input abfragen kannst, um die Sollwerte vorzugeben.

Oder Du machst eine Tastensteuerung über digitale Pins. Zwei Taster für Temperatur hoch/runter um den Schaltpunkt der Heizung einzustellen und zwei Taster für den Schaltpunkt des Lüfters. Damit bei Stromausfall die Einstellwerte nicht verlorengehen, müßten die Einstellwerte im Eprom-Speicher gespeichert werden, von wo aus sie beim Reset des Controllers dann jeweils gelesen werden.

Ich gehe mal davon aus, dass dein Dreipunktregler mit festen Sollwerten schon funktioniert. Die Einstellung der Sollwerte würde ich in etwa so realisieren:

int ButtonPlus = 2;
int ButtonMinus = 4;
int ButtonSet = 3;

int Sollwert1 = 20;   
int Sollwert2 = 25;
boolean SetSW1 = false;
boolean SetSW2 = false;

unsigned long Zeitstempel;

void setup(){
  Serial.begin (9600);
  pinMode (ButtonPlus, INPUT_PULLUP);
  pinMode (ButtonMinus, INPUT_PULLUP);
  pinMode (ButtonSet, INPUT_PULLUP);
}

void loop (){
  if (digitalRead(ButtonSet)==LOW && SetSW1==false && SetSW2==false){
    SetSW1 = true;
    Zeitstempel = millis();
    Ausgabe();
    delay (200);
  }
  if (digitalRead(ButtonSet)==LOW && SetSW1==true && SetSW2==false){
    SetSW2 = true;
    SetSW1 = false;
    Zeitstempel = millis();    
    Ausgabe();
    delay (200);
  }
  if (digitalRead(ButtonPlus)==LOW){
    if (SetSW1==true){
      Sollwert1++;   
      Ausgabe();
    delay (200);
    }
    if (SetSW2==true){
      Sollwert2++;   
      Ausgabe();      
      delay (200);
    }  
  }  
  if (digitalRead(ButtonMinus)==LOW){
    if (SetSW1==true){
      Sollwert1--;   
      Ausgabe();      
      delay (200);
    }
    if (SetSW2==true){
      Sollwert2--;   
      Ausgabe();      
      delay (200);
    }  
  }
  if (millis()-Zeitstempel>3000){
    SetSW1 = false;
    SetSW2 = false;
  }  
}

void Ausgabe(){
  Serial.print (SetSW1);
  Serial.print (" SW1: ");
  Serial.print (Sollwert1);
  Serial.print (" ");
  Serial.print (SetSW2);
  Serial.print (" SW2: ");
  Serial.println (Sollwert2);
}

Dabei gibt es noch einige Verbesserungen, die man einpflegen könnte und auch sollte. Das wäre vor allem das Entprellen der Taster, ich habe hier einfach mit einem delay gearbeitet. Weiterhin sollte man noch die eingestellten Sollwerte auf ihre Gültigkeit prüfen: SW2 muss immer größer sein als SW1, beide Werte dürfen nicht negativ werden usw.. Günstig wäre es auch die Sollwerte im Eeprom zu speichern, dass die nach einem Stromausfall auch wieder die richtigen Daten vorliegen. Die Ausgabe müsste selbstverständlich auf dein LCD angepasst werden, selbst lasse ich das ja nur im seriellen Monitor anzeigen.
Ich bin jetzt einfach davon ausgegangen, dass dein Dreipunktregler ansonsten schon funktioniert und habe den nicht implementiert.

Ansonsten solltest du dich nicht so bedeckt halten und ruhig deinen bisherigen Code posten. :wink: