Steuerung für meine Standheizung

Guten Tag,

Ich bin Chris und der neue hier :slight_smile: Ich bin seit kurzem auf Arduino gestoßen und hoffe ihr könnt mir helfen.

Kurz zu der Heizung, Ich habe eine gebrauchte Standheizung ohne Steuergerät in mein Fahrzeug gebaut und habe eine Funkfernbedienung zum ein und ausschalten im Fahrzeug installiert. Das ihnen raum Gebläse steuere ich momentan über einen Temp.Sensor im Motorraum.

Also Ich möchte mit diesem Projekt eine Kleine Steuerung für meine Heizung verwirklichen, dafür habe ich mir den Pro Micro Modul mit ATmega32U4, Arduino Leonardo Board ähnlich, 5V, 16MHz besorg.

Nun zur Aufgabe die er übernehmen soll.
Ich möchte das ab einer bestimmten Kühlwassertemperatur im Fahrzeug die Lüftung eingeschaltet wird, momentan regel ich das über einen simplen Temperaturfühler der dann ein Relais steuert was aber ziemlich ungenau ist.
Als zweites möchte ich das wenn die Heizung abgestellt wird sie sich noch mal für ein paar sek. ein schaltet.
Hinter Grund dafür ist wenn ich sie einfach abschalte das restliche abgas über den Luftansaugschlauch in den Motorraum gelangt und dann von der Lüftung in den Innenraum transportiert wird, was ziemlich unangenehm ist. Momentan Löse ich das Problem so das ich sie einfach noch mal für ein paar sek. einschalte, dann geht das Brennergebläse an und drückt das abgas aus dem Auspuff.

Wenn so etwas mit dem Arduino möglich ist würde ich noch gerne, da Ich morgens immer um die selbe zeit Los muss, eine art Timer oder so intigrieren welcher sie automatisch startet

Fielen Dank Schon mal :slight_smile:

Hallo Chris,
Crosspost wird nicht gerne gesehen, daher entscheide Dich bitte, ob Du bei a control for my heater oder hier weitermachen möchtest. Wenn Du den deutschsprachigen Teil erst jetzt entdeckt haben solltest, wird Dir niemand böse sein. Unser freundlicher Moderator Uwe ist Dir bei Bedarf sicher gerne behilflich.

Wie gut kannst Du programmieren? Wie gut beherrscht Du C++? Was Du vorhast, schätze ich schon als etwas ambitioniert ein. Grundsätzlich sollte es aber wohl machbar sein, mal grob geschätzt.

Wenn Du am Auto rumfummelst, mußt Du darlegen, daß dies weder sicherheitsrelevant noch gegen die Straßenverkehrszulassungsordnung verstößt, sonst wird Dir hier jegliche Hilfe versagt.

Damit willkommen in der Welt der Mikroprozessoren, egal in welchem Forum!

momentan regel ich das über einen simplen Temperaturfühler der dann ein Relais steuert was aber ziemlich ungenau ist.

Durch einen Arduino wird es nicht "genauer", außer du kannst definieren, was du anders/besser haben willst. Das verzögerte ausschalten geht natürlich leicht per µController.
Eine Uhr, die dem Arduino sagt, dass es 7:00 ist, brauchst du zusätzlich (z.B. als DS3231), ist aber keine große Sache außer der Schnittstelle, über die du sie stellen kannst.

Hallo,

zubeachten wäre noch, dass eine originale Steuerung die Batteriespannung und den Tankinhalt überwacht.
Ansonsten hast du ein warmes Auto, kannst jedoch nicht mehr starten. Mangels Batterie und/oder Tank.

Hi ja so ist es Ich habe erst das Eng Sprachige Forum gefunden und dann erst das De Sprachige.

Sicherheitsrelevant ist es in sofern nicht da es keinerlei Auswirkung auf das Fahr bzw Verzögerungsverhalten oder den umliegenden Straßenverkehr hat.

Wie gut ich C++ beherrsche, Ich würde sagen Blutiger Anfänger. Ein paar Begriffe verstehe Ich aber Ich habe mich ja auch hier angemeldet um zu lernen und zu verstehen, Dafür ist so ein Forum doch auch oder :wink:

@Doc_Arduino: Ja das ist so nicht ganz richtig, Die original Steuerung Überwacht die Batteriespannung aber nicht den Tankinhalt, Mann muss sich das so vorstellen, Die Heizung bekommt ja eine eigne Kraftstoff Einbindung in den Fahrzeug Tank über ein Kleines Metal röchen welchen in den Deckel bei der Originalen Kraftstoffpumpe eingebaut. Dieses Röchen reicht nicht bis auf den Boden des Tanks (nur ca. 3/4 in den Tank) damit ist gewährleistet das immer noch genügend Kraftstoff zur Verfügung steht um zur nächsten Tankstelle zu kommen.

Bei der Batteriespannung ist es etwas. Es gibt wie im Fahrzeug auch mehrere Steuergeräte bei der Heizung sind es 2. Das eine ist direkt in der Heizung intigriert welches die Verbrennung usw Regelt dieses Überwacht auch die Spannung, Liegt diese unter einem vom Hersteller festgelegten Grenzwert Startet die Heizung nicht bzw Schaltet sich ab. Das Zweite Stg ist sozusagen das Komfort stg es überwacht die Kühlwassertemperatur,Regelt über einen Timer das einschalten so wie ein herunterfahren der Heizung und noch andere dinge. Dies möchte ich nun mit dem Arduino Simulieren.

Warum Kaufe Ich mir nicht einfach eins, möchte der ein oder andere Vielleicht wissen.
Es ist schwierig genau so eines gebracht zu bekommen da die Heizung auch schon etwas älter ist und wenn man eins bekommt ist es irre Teuer. Außerdem Befasse ich mich gern mit solchen Problemen und Lerne gern neues, was mich dann zum Arduino gebracht hat.

Lg
Chris

Driv3r:
Hi ja so ist es Ich habe erst das Eng Sprachige Forum gefunden und dann erst das De Sprachige.

Dann fände ich es höflich, die Leser des englischsprachigen Teils auf die Fortsetzung im deutschen Teil mit einem Link darauf hinzuweisen. Ich habe Briten getroffen, die gut Deutsch verstanden und Niederländer sowieso.

Driv3r:
Sicherheitsrelevant ist es in sofern nicht ...

Gut.

Driv3r:
... Blutiger Anfänger ...

Dann solltest Du das Projekt in kleine Einzelaufgaben zerlegen. Meist ist die Sensorik am problematischsten. Zu den Sensoren gibt es meist eine Anleitung, bei manchen auch eine Programmbibliothek. Ohne Anleitung Finger weg! Jede Programmbibliothek liefert Beispiele mit, wo Du die relevanten testen solltest.

Wenn die Sensorik stimmt, kannst Du Dich daran machen, alles zusammenzuklöppeln. Dazu benötigst Du mindestens einen endlichen Automaten (=Schrittkette = finite state machine) und Zeitsteuerung mit millis().

Lernen mußt Du selbst, wir können nur Hinweise geben.

Wenn Du nach "agmue anleitung" suchst, findest Du Lesestoff und Links zu anderen Erklärungen.

Hier habe ich was zur Real Time Clock gelernt: Tutorial – Using DS1307 and DS3231 Real-time Clock Modules with Arduino

Im Winter 20/21 hast Du dann einen zeitgesteuerten warmen Poppo :slight_smile:

Driv3r:
@Doc_Arduino: Ja das ist so nicht ganz richtig, ...

Aha, ich dachte wirklich es gibt einen zusätzlichen Schwimmerschalter o.ä. im Tank. Ohne weitere Elektrik ist das natürlich auch okay. Danke für die Korrektur.

Also mein haupt Augenmerk liegt erstmal beim Temperatur Steuerung und das er nach dem manuellen abschalten die Heizung noch mal für ein paar sek einschaltet um halt das restliche abgas aus dem Gerät zu bekommen.

Für den Timer habe Ich mir auch etwas über legt, ist es möglich das man z.b. ein Taster drückt und dann einen fest eingestellte Zeit (z.b. 8h) abläuft und sie dann startet, das sollte denke ich mal einfacher zu realisieren sein als Anfänger.

Ich habe mir für nun einen Sketch für eine Temperatursteuerung aus dem Netz besorgt und möchte den nun für meine Bedürfnisse ändern, kann Ich den Sketch dann hier hoch laden damit Ihr mal drüber seht?

Und dann wollte ich noch fragen ob Ich einen bestimmten Temperaturfühler nehmen muss oder ist das egal?
Wenn nicht welchen nimmt man für so etwas?

Hier noch mal der Link für die Temp. Steuerung
https://funduino.de/anleitung#Anleitung_Nr10_Temperaturen_messen

Hi

Mein Favorit ist der DS18B20 - Den gibt's auch in Wasserdicht und Der rückt die Temperatur in 1/16tel Grad raus (Wert x 16 = Temperatur).
Das gilt für alle Auflösungen, also auch 9 Bit, wo der Sensor nur halbe Grad erfasst.

Den Sketch kannst Du gerne hier einbinden (bitte Code-tags).

8 Stunden Warten könnten wir mit einem Arduino halbwegs genau hinbekommen - denke, die eine oder andere Sekunde spielt hier keine größere Rolle.

MfG

Hallo,

den Sketch von funduino vergiss bitte ganz schnell. Der blockiert sich selbst vor lauter delays. Wenn du jederzeit auf Tastendrücke reagieren möchtest musst du zuerst den Umgang mit millis verstehen und anwenden.

Theseus erklärt millis()

GuntherB - BlinkwithoutDelay - Die Nachtwächtererklärung

Aber angenommen man setzt die abfrage Zeit höher alle 2 sek oder so ist es dann immer noch schlecht?

@postmaster-ino: Danke, den werde ich mir besorgen.

Hi

Der Sensor braucht ab dem 'Junge, mach Messung' die Wartezeit.
Je weiterem Bit die doppelte Zeit - oder, bei einem Bit weniger (halbe Auflösung) die halbe Zeit.
1/16.tel Grad (0,0625K) 750ms (12 Bit)
1/8.tel Grad (0,125K) 375ms (11 Bit)
1/4.tel Grad (0,25K) 187ms (10 Bit)
1/2 Grad (0,5K) 95ms (9 Bit)

Aber egal, wie lange die Wandlung dauert - der Funktion ist Das egal, ob der Messwert 'von vor einer Sekunde' war.
Messung anfordern & Uhrzeit merken.
Wenn ab der gemerkten Uhrzeit 750ms vorbei sind, ist die Messung fertig (bei weniger Bits eben auch früher) und kann abgeholt werden.
Egal, ob die Messung fertig ist, oder nicht - Du bekommst den letzten gültigen Messwert zurück gegeben - wenn zu ungeduldig, ist der Messwert halt nur noch eine Ecke älter.

In der IDE sind zum DS18B20 Beispiele enthalten.
Selber habe ich die User-Bytes so beschrieben, daß ich darin eine eigene ID speicher - spätestens nach Austausch des Sensor stimmt nämlich die 64-Bit ID des 1-wire-Sensor nicht mehr - Die ist nämlich EINZIG.
Bei mir kein Problem - ich suche eh immer 'den Nächsten Sensor', lese von Diesem die User-Bytes aus, erhalte so MEINE ID und weiß, wo der Sensor steckt.
Wenn ich einen Sensor austausche, packe ich nur MEINE ID in Dessen User-Bytes, klemme den Sensor an den Bus und schon liefert mein Sketch mir die Werte des neuen Sensor, als ob noch der Alte drin wäre.

Das ist So nicht in den Beispielen enthalten - soll ja noch Leute geben, Die nicht ganz so paranoid sind :wink:

MfG

unsigned long startzeit_1 = 0;// Definitionen der Schaltzeit

#define        laufzeit_1   1500UL// Definitionen der Schaltzeit
 
const int fan = A0;// Die Anschlusspins der einzelnen LEDs festlegen

int TMP36 = A0; // Über den Pin A0 kommt das Signal vom Temperaturfühler.
int sensorwert;
int temperatur = 0;//Unter der Variablen "temperatur" wird später der Temperaturwert abgespeichert.
int t=2500;//Der Wert für „t“ gibt im Code die zeitlichen Abstände zwischen den einzelnen Messungen vor.
int fan=5; //Das Wort „fan“ steht jetzt für die Zahl 5, also wird an Pin5 der Lüfter angeschlossen.

void setup() 
{
Serial.begin(9600);
pinMode (fan, OUTPUT); //Der Pin für den "Lüfter" wird als Ausgang definiert.
pinMode (TMP36,INPUT); //Der pin für das Temperatur eingangssignal. 

void loop() 
{
sensorwert=analogRead(TMP36); //Auslesen des Sensorwertes.
temperatur= map(sensorwert, 0, 410, -50, 150); //Umwandeln des Sensorwertes mit Hilfe des "map" Befehls.


if(millis() - startzeit_1 >= laufzeit_1) {
  startzeit_1 = millis();
  digitalWrite(fan,HIGH, digitalRead(fan,HIGH) ^ 1); //…Schaltet Lüftung an.
}

Ist das so die Richtige Richtung?

Diese Zeile wird Dir der Compiler um die Ohren hauen.

digitalWrite(fan,HIGH, digitalRead(fan,HIGH) ^ 1); //…Schaltet Lüftung an.

digitalWrite hat nur 2 Parameter.

Warum compilierst Du Deine Sketche nicht erstmal selbst? Dann siehst Du doch die Fehler.

Gruß Tommy

Die Messungen sollen ja nicht auf 0.1 Grad genau sein, Es ist nicht schlimm
wenn der Innenraumlüfter bei 40° oder 42° Grad an geht.

Ich habe es compiliert und das kam als Fehler.
Standheizung1:11:5: error: conflicting declaration 'int fan'

int fan=5; //Das Wort „fan“ steht jetzt für die Zahl 5, also wird an Pin5 der Lüfter angeschlossen.

^~~

C:\Users\Home -PC\Documents\Arduino\Standheizung1\Standheizung1.ino:5:11: note: previous declaration as 'const int fan'

const int fan = A0;// Die Anschlusspins der einzelnen LEDs festlegen

^~~

C:\Users\Home -PC\Documents\Arduino\Standheizung1\Standheizung1.ino: In function 'void setup()':

Standheizung1:20:1: error: a function-definition is not allowed here before '{' token

{

^

Standheizung1:28:1: error: expected '}' at end of input

}

^

exit status 1
conflicting declaration 'int fan'

Hi

Du benutzt 2x das Wort fan - 1x für den Lüfter-Pin, 1x für eine LED.

STRG+T in der IDE rückt den Sketch auf Klammerebene ein.
In Zeile 20 hast Du irgend etwas mit { gemacht, was dem Kompiler nicht schmeckt.

MfG

Hallo,

wenn man STR+T drückt oder im Menü draufklickt, sieht man das für setup und loop Klammern fehlen.
Die Variablennamen solltest du auch eindeutig machen und #define durch const + Datentyp ersetzen. Für Pins const byte Bezeichner ist auch hilfreich. Die digitalWrite Parameter wurden schon angesprochen.

Tipp. Lasse erstmal alles weg und versuche mit millis zyklisch eine LED an und wieder auszuschalten, also einen Blinker bauen. Danach programmierst du dir einen Sketch womit auf Tastendruck die Led angeht und diese nach vorgebener Zeit automatisch wieder ausgeht. Erst dann macht es Sinn die Sensoren einzubinden etc. sonst verzettelst du dich.

Du benutzt 2x das Wort fan - 1x für den Lüfter-Pin, 1x für eine LED.

Danke für die Hilfe, nun habe ich ein neues Problem :smiley:

#include <DS18B20.h>

unsigned long startzeit_1 = 0;// Definitionen der Schaltzeit

#define laufzeit_1   1500UL// Definitionen der Schaltzeit


const int fan = 5;// Die Anschlusspins 

int TMP36 = A0; // Über den Pin A0 kommt das Signal vom Temperaturfühler.
int sensorwert;
int temperatur = 0;//Unter der Variablen "temperatur" wird später der Temperaturwert abgespeichert.
int fan = 5; //Das Wort „fan“ steht jetzt für die Zahl 5, also wird an Pin5 der Lüfter angeschlossen.

void setup()
{
  Serial.begin(9600);
  pinMode (fan, OUTPUT); //Der Pin für den "Lüfter" wird als Ausgang definiert.
  pinMode (TMP36, INPUT); //Der pin für das Temperatur eingangssignal.

  void loop()
 {
    sensorwert = analogRead(TMP36); //Auslesen des Sensorwertes.
    temperatur = map(sensorwert, 0, 410, -50, 150); //Umwandeln des Sensorwertes mit Hilfe des "map" Befehls.


    if (millis() - startzeit_1 >= laufzeit_1) {
      startzeit_1 = millis();
      digitalWrite(fan, HIGH) ^ 1); //…Schaltet Lüftung an.
    }
rduino: 1.8.10 (Windows 7), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

In file included from C:\Users\Home -PC\Documents\Arduino\Standheizung1\Standheizung1.ino:1:0:

C:\Users\Home -PC\Documents\Arduino\libraries\DS18B20\src/DS18B20.h:5:10: fatal error: OneWire.h: No such file or directory

 #include <OneWire.h>

          ^~~~~~~~~~~

compilation terminated.

Mehrere Bibliotheken wurden für "DS18B20.h" gefunden
 Benutzt: C:\Users\Home
exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Mega or Mega 2560.

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Dann tu das doch:

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

Gruß Tommy

Ich verstehe nicht warum ein Problem mit fan besteht.