INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Heizungssteuerung realisieren
22.02.2016, 17:17
Beitrag #25
RE: Heizungssteuerung realisieren
(22.02.2016 16:27)ArdHolger schrieb:  ich könnte mir vorstellen, dass der kleine Ardunio schnell an seine Grenzen kommt bei so einer Heizungssteuerung.
Vor allem wenn du mehr in Richtung richtige Regelung und Visualisierung gehen willst.
Hast du mal die Pins gezählt, die du für deine Funktion benötigst: Eingänge, Ausgänge, Display, Tastatur. Passt das überhaupt noch?
Dann könnte man immer noch auf I2C erweitern.
Das spart reichlich Ports des Arduino. Idea

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2016, 10:18
Beitrag #26
RE: Heizungssteuerung realisieren
Moin,

ich hab hier n Mega. Da sollten die Ein- und Ausgänge reichen.

Mfg Uwe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2016, 10:51
Beitrag #27
RE: Heizungssteuerung realisieren
(23.02.2016 10:18)Uwa schrieb:  ich hab hier n Mega. Da sollten die Ein- und Ausgänge reichen.
Das sollte dann reichen. Wink

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.08.2016, 13:00 (Dieser Beitrag wurde zuletzt bearbeitet: 14.08.2016 13:03 von Uwa.)
Beitrag #28
RE: Heizungssteuerung realisieren
Moin moin,

hab ja schon länger nichts mehr zu meinem Projekt geschrieben.
Falls wer gedacht hat: "Wieder ein Projekt, das nicht weiter geführt wurde".......Big Grin
Es geht endlich weiter.

Letzte Woche war es endlich so weit, der Kachelofen wurde angeheizt:

[Bild: 400_3337383866643733.jpg]

Rücklauftemperaturanhebung läuft über einen 3-Wegemischer. Zum testen hab ich erstmal was kleines zusammengebraten:

[Bild: 1366_6636336464386535.jpg]

Nach kleinen Anpassungen läuft´s

[Bild: 1366_6339346263633164.jpg]
[Bild: 1366_3165326265623836.jpg]

Hier noch der Code:

PHP-Code:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define Mischer_AUF 3
#define Mischer_ZU 4
#define Kesselpumpe 5
#define Speicherladepumpe 6
/********************************************************************************​/
// Solltemperatur
int tempsoll 60;
int tempspeichersoll 55;
int tempkessel 60;
int hyst 1;
unsigned long MischenA;   
unsigned long WartenA,WartenB;
/********************************************************************************​/
void setup() {               
  
pinMode(Mischer_AUFOUTPUT);
  
pinMode(Mischer_ZUOUTPUT);
  
pinMode(KesselpumpeOUTPUT);
  
pinMode(SpeicherladepumpeOUTPUT);
  
digitalWrite(Mischer_AUFLOW);
  
digitalWrite(Mischer_ZULOW);
  
digitalWrite(SpeicherladepumpeLOW);
  
digitalWrite(KesselpumpeHIGH);
  
Serial.begin(9600);
  
sensors.begin(); 
}
/********************************************************************************​/
void loop() {
  
sensors.requestTemperatures();
  
int tempist sensors.getTempCByIndex(0);
  
Serial.print("Ist Temp: ");
  
Serial.println(tempist);
  
Serial.print("tempsoll ist :");Serial.println(tempsoll);
  
WartenA millis(); 
       if (
WartenA WartenB 10000){
          if (
tempist > (tempsoll hyst)) {    
             
MischenA millis();   
            while (
millis() - MischenA < ((tempist tempsoll) * 300)) { 
                
digitalWrite(Mischer_ZUHIGH);
                
Serial.println("Mischer faehrt ZU");
             }
                
digitalWrite(Mischer_ZULOW);
           }
          if (
tempist < (tempsoll hyst)) { 
             
MischenA millis();   
            while (
millis() - MischenA < ((tempsoll tempist) * 300)) {   
                
digitalWrite(Mischer_AUFHIGH);

                
Serial.println("Mischer faehrt AUF");
             }
                
digitalWrite(Mischer_AUFLOW);
           }
          
WartenB millis(); 
       } 
  } 
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.08.2016, 15:14
Beitrag #29
RE: Heizungssteuerung realisieren
Das sieht doch auf den ersten Blick sehr gut aus, weiter so!

Hier könnte ihre Werbung stehen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.10.2016, 22:24 (Dieser Beitrag wurde zuletzt bearbeitet: 11.10.2016 22:31 von Uwa.)
Beitrag #30
RE: Heizungssteuerung realisieren
Nabend,

gestern und heute ging es mal wieder weiter.....

Läuft soweit ganz geschmeidigTongue

[Bild: 1366_3731326662373038.jpg]

[Bild: 1366_6165393933396162.jpg]

PHP-Code:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(012345);
#define ONE_WIRE_BUS A1
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define Mischer_AUF 6
#define Mischer_ZU 7
#define MischerFBH_AUF 8
#define MischerFHB_ZU 9
#define Kesselpumpe 10
#define FBH_Pumpe 11
#define Speicherladepumpe 12
/********************************************************************************​/
// Solltemperatur
int tempsoll 60;
int tempspeichersoll 55;
int tempkessel 60;
int hyst 1;
unsigned long MischenA;   
unsigned long WartenA,WartenB;
/********************************************************************************​/
void setup() {               
  
pinMode(Mischer_AUFOUTPUT);
  
pinMode(Mischer_ZUOUTPUT);
  
pinMode(KesselpumpeOUTPUT);
  
pinMode(SpeicherladepumpeOUTPUT);
  
digitalWrite(Mischer_AUFLOW);
  
digitalWrite(Mischer_ZULOW);
  
digitalWrite(SpeicherladepumpeLOW);
  
digitalWrite(KesselpumpeHIGH);
  
sensors.begin(); 


  
lcd.begin(204);
  
lcd.setCursor(21);
  
lcd.print("Heizungsregelung");
  
lcd.setCursor(72);
  
lcd.print("ver1.0");
  
delay(1000);
  
lcd.clear();

  
lcd.setCursor(00);
  
lcd.print("Puffer O=");
  
lcd.setCursor(110);
  
lcd.print("M=");
  
lcd.setCursor(150);
  
lcd.print("U=");
  
lcd.setCursor(01);
  
lcd.print("Kessel=");
  
lcd.setCursor(91);
  
lcd.print("KesselRL=");
  
lcd.setCursor(02);
  
lcd.print("FBHsoll=");
  
lcd.setCursor(112);
  
lcd.print("FBHist=");
  
lcd.setCursor(03);
  
lcd.print("WWsoll=");
  
lcd.setCursor(123);
  
lcd.print("WWist=");
}
/********************************************************************************​/
void loop() {
  
sensors.requestTemperatures();
  
int tempist sensors.getTempCByIndex(0);
  
Serial.print("Ist Temp: ");
  
Serial.println(tempist);
  
Serial.print("tempsoll ist :");Serial.println(tempsoll);
  
WartenA millis(); 
       if (
WartenA WartenB 10000){
          if (
tempist > (tempsoll hyst)) {    
             
MischenA millis();   
            while (
millis() - MischenA < ((tempist tempsoll) * 300)) { 
                
digitalWrite(Mischer_ZUHIGH);
                
Serial.println("Mischer faehrt ZU");
             }
                
digitalWrite(Mischer_ZULOW);
           }
          if (
tempist < (tempsoll hyst)) { 
             
MischenA millis();   
            while (
millis() - MischenA < ((tempsoll tempist) * 300)) {   
                
digitalWrite(Mischer_AUFHIGH);

                
Serial.println("Mischer faehrt AUF");
             }
                
digitalWrite(Mischer_AUFLOW);
           }
          
WartenB millis(); 
       } 
  } 

PS.: Ich weiß noch immer nicht, was "deployen" ist!!!!

MFG Uwe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.10.2016, 21:02
Beitrag #31
RE: Heizungssteuerung realisieren
Nabend Folks,

nachdem ich gesstern fast alle Fühler rausgeschmissen, und über 10h nen neuen Sketch aufgesetzt hab, läuft das Mopped endlich.

beide Mischer regeln taddellosTongue

Was jedoch etwas ätzdend ist: Der Encoder reagiert nur, wenn keines der 4 Relais angesteuert wird. Und auch auch sonst, reagiert er sehr sperrig. Und das, obwohl ich alle Delays eliminiert habe.
Was kann ich da noch verbessern?

PHP-Code:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(012345);

#define ONE_WIRE_BUS A0
#define Mischer_AUF 6
#define Mischer_ZU 7
#define FBH_AUF 8
#define FBH_ZU 9

char sensor2Name[] = "Ruecklauftemp: ";
char sensor3Name[] = "Vorlauf_FBH";
char sensor4Name[] = "Pufferspeicher: ";

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

float tempSoll 25;
int tempRL 55;
int hyst 1;
int hystFBH 1;
int min 25;
int max 60;
int encoder 5;
const 
int pinA A1;
const 
int pinB A2;
boolean encA;
boolean encB;
boolean lastA false;
unsigned long currentTime;
unsigned long lastTime;
unsigned long MischenA;
unsigned long WartenAWartenB;
unsigned long FBH_MischenA;
unsigned long FBH_WartenAFBH_WartenB;

void setup() {

  
pinMode(pinAINPUT_PULLUP);
  
pinMode(pinBINPUT_PULLUP);
  
pinMode(Mischer_AUFOUTPUT);
  
pinMode(Mischer_ZUOUTPUT);
  
pinMode(FBH_AUFOUTPUT);
  
pinMode(FBH_ZUOUTPUT);

  
currentTime millis();
  
lastTime currentTime;
  
sensors.begin();

}

void loop() {
  
  
digitalWrite(Mischer_ZULOW);
  
digitalWrite(Mischer_AUFLOW);
  
digitalWrite(FBH_ZULOW);
  
digitalWrite(FBH_AUFLOW);
  
sensors.requestTemperatures();
  
float tempRuecklauf sensors.getTempCByIndex(0);
  
float tempPuffer sensors.getTempCByIndex(1);
  
float tempFBH sensors.getTempCByIndex(2);
  
  
lcd.begin(204);
  
lcd.clear();
  
lcd.setCursor(00);
  
lcd.print("Ruecklauftemp: ");
  
lcd.setCursor(150);
  
lcd.print(tempRuecklauf);
  
lcd.setCursor(01);
  
lcd.print("Vorlauftemp: ");
  
lcd.setCursor(02);
  
lcd.print("VorlaufSoll: ");
  
lcd.setCursor(151);
  
lcd.print(tempFBH);
  
lcd.setCursor(152);
  
lcd.print(tempSoll);
  
lcd.setCursor(03);
  
lcd.print("Puffertemp: ");
  
lcd.setCursor(153);
  
lcd.print(tempPuffer);


  
currentTime millis();
  if (
currentTime >= (lastTime 5))
  {
    
encA digitalRead(pinA);
    
encB digitalRead(pinB);
    if ((!
encA) && (lastA))
    {
      if (
encB)
      {
        if (
tempSoll encoder <= max)
        {
          
tempSoll tempSoll encoder;
        }
      }
      else
      {
        if (
tempSoll encoder >= min)
        {
          
tempSoll tempSoll encoder;
        }
      }
    }
    
lastA encA;
    
lastTime currentTime;
  }
  
WartenA millis();
  if (
WartenA WartenB 10000) {
    if (
tempRuecklauf > (tempRL hyst)) {
      
MischenA millis();
      while (
millis() - MischenA < ((tempRuecklauf tempRL) * 500)) {
        
digitalWrite(Mischer_ZUHIGH);
      }
      
digitalWrite(Mischer_ZULOW);
    }
    if (
tempRuecklauf < (tempRL hyst)) {
      
MischenA millis();
      while (
millis() - MischenA < ((tempRL tempRuecklauf) * 500)) {
        
digitalWrite(Mischer_AUFHIGH);

      }
      
digitalWrite(Mischer_AUFLOW);
    }
    
WartenB millis();
  }
  
FBH_WartenA millis();
  if (
FBH_WartenA FBH_WartenB 10000) {
    if (
tempFBH > (tempSoll hystFBH)) {
      
FBH_MischenA millis();
      while (
millis() - FBH_MischenA < ((tempFBH tempSoll) * 500)) {
        
digitalWrite(FBH_ZUHIGH);
      }
      
digitalWrite(FBH_ZULOW);
    }
    if (
tempFBH < (tempSoll hystFBH)) {
      
FBH_MischenA millis();
      while (
millis() - FBH_MischenA < ((tempSoll tempFBH) * 500)) {
        
digitalWrite(FBH_AUFHIGH);

      }
      
digitalWrite(FBH_AUFLOW);
    }
    
FBH_WartenB millis();
  }

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.10.2016, 21:51
Beitrag #32
RE: Heizungssteuerung realisieren
Hallo Uwe,
ich habe den Sketch mal kurz überflogen.

Erst mal ist es schön dass es überhaupt "rund" läuft.

"Der Encoder reagiert nur, wenn keines der 4 Relais angesteuert wird."
Das könnte daran liegen dass es bei
Code:
if ((!encA) && (lastA))
und den folgenden Zeilen irgendwas todverriegelt ist.

"Und auch auch sonst, reagiert er sehr sperrig."
Das könnte an
Code:
while (millis() - MischenA < ((tempRuecklauf - tempRL) * 500)) {
        digitalWrite(Mischer_ZU, HIGH);
liegen. Diese Programmteile werden, wenn ich das richtig sehe, erst verlassen wenn die Zeit abgelaufen ist.

Dann ist da noch die Zeile
Code:
sensors.requestTemperatures();
Die bei jedem loop() Zyklus durchlaufen wird.
Wenn die Auflösung der DS18B20 auf 12Bit steht dauert es bis zu 750ms bis das Programm weiter abgearbeitet wird. Ich bin mir nicht sicher ob es nicht sogar pro angeschlossenen Sensor 750ms dauert.
sensors.requestTemperatures(); startet erst mal die A/D Wandlung in den Sensoren und holt dann wenn die Wandlung abgeschlossen ist die Messwerte ab.
Diesen Vorgang kann man auch in zwei teile aufteilen.
Erst die A/D Wandlung für alle Sensoren starten und 1 Sekunde später alle Ergebnisse auslesen. Dann blockiert da nix mehr.

Dann würde ich für die Mischersteuerungen je einen PID-Regler mit angepasstem PID RelayOutput verwenden.

Da ist in deinem Sketch also noch Potential für Optimierungen vorhanden.

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Fräsmaschine mit Arduino Uno und Grbl realisieren Chef_2 8 530 07.11.2016 11:42
Letzter Beitrag: Nimes
  Heizungssteuerung Webasto HL 10011 Vinreeb 8 3.681 10.04.2015 09:29
Letzter Beitrag: Vinreeb
Rainbow Überarbeitung Heizungssteuerung JoeDorm 1 1.762 05.01.2015 03:37
Letzter Beitrag: JoeDorm

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste