Temperaturregelung Kohlegrill (ähnl. PartyQ)

Hallo Arduino-Gemeinde,

ich habe vor einigen Wochen begonnen mich mit Arduino und allem was dazugehört zu beschäftigen. Meine Vorkenntnisse beschreibe ich mal als grobe Vorahnung, aber keineswegs Fachkenntnisse.
Der Grund für meinen Entschluss ist ein Problem gewesen, welches beim Grillen über einen langen Zeitraum aufgetreten ist. Es ist nämlich nicht so einfach, mit Kohle oder Briketts die Temperatur im Grill über mehrere Stunden konstant auf einer Temperatur zu halten.
Mein Bruder hatte sich dann dazu entschlossen, sich eine fertige Apparatur für dieses Problem zu kaufen. Jedoch hat dieses Gerät mit ca. 160€ schon einen recht stolzen Preis (PartyQ). Also habe ich mir gesagt, das muss auch billiger gehen. Zudem kommt es bei einer Grillsession von 24 Std durchaus vor, dass man 4x die 4 AAA Batterien tauschen darf. Nachts um 4 Uhr sehr lästig. Tongue

Ich habe mich in den letzten Wochen durch etliche Foren und Sketches gelesen und habe mir hier und da ein Häppchen abgeschaut. Herausgekommen ist ein im Prinzip funktionierende Regelung, d.h. auf dem Schreibtisch funktioniert alles, am Grill habe ich es noch nicht ausprobiert. Das Verhalten ist jedoch sehr nahe an dem Luxusteil von PartyQ.

Ich habe versucht folgende Features unterzubringen:

  • beleuchtetes Display (über Timer abschaltbar)
  • Anzeige von SOLL und IST Temperatur
  • Menüführung und Auswahl durch Taster
  • Verwendung eines Thermofühlers vom Maverick Grillthermometer ET-732
  • LED Anzeige für optische Anzeige SOLL-IST-Temperatur
  • Spannungsversorgung über 12V Netzteil
  • Vorwahl der Lüfterdrehzahl

Den Code habe ich aufgrund der Länge als .zip angehängt. Anscheinend wird der Code bei der max. Anzahl von 9000 Zeichen mitgezählt.

Wie gesagt, ich bin blutiger Anfänger und wenn jemandem noch Fehler auffallen oder eine Idee hat, wie man etwas schöner gestalten kann, bin ich sehr dankbar über eure Kommentare.

Vielleicht sieht ja jemand von euch auch auf Anhieb die beiden kleinen Fehler, die ich noch nicht wegbekommen habe. Zum Einen habe ich das Phänomen, dass bei der Spannungsversorgung über das 12V Netzteil (1000mA) die Einer-Stelle der berechneten BBQ-Temperatur immer zittert. Das heißt sie springt immer sehr schnell (Millisekunden) um ±2 °C um die tatsächliche Temperatur. Verwende ich einen 9V Block oder die USB-Spannungsversorgung, ist das Flackern weg. Bei einem Aufbau zuvor hatte ich einen 100k NTC, da war das PRoblem auch nicht vorhanden. Kann es etwas mit dem hochohmigen NTC zu tun haben?
Das Zweite ist, dass ich für die LED Anzeige eigentlich die Farben blau (zu kalt), grün (optimal) und rot (zu heiß) verwenden wollte. Ich musste jedoch die grüne LED durch eine gelbe ersetzen, da ich die grüne nicht zum Leuchten bekommen habe. Ich habe sie einzeln auf dem Breadbord mit dem gleichen Funduino Uno am gleichen Pin getestet und siehe da: sie leuchtet. Aber in der Schaltung tut sie es nicht. Auch keine rote oder blaue, nur die gelbe. Hat da jemand eine Erklärung für?

Vielen Dank schon mal für eure konstruktiven Rückmeldungen.

Gruß Stefan

NTC_1M_beta_facor_methode_v1_2_ino.zip (3.33 KB)

Hallo Stefan,

160€ für ein fertiges Gerät im Gehäuse finde ich jetzt noch nicht wirklich teuer und würde das nicht als Luxusgerät ansehen. Ich selber habe einen Smoker, bei dem die Temperaturregelung entscheidend ist. Habe da aber nie das Problem, dass die Temperatur nicht sonderlich passt. Man schaut jede halbe Stunde nach, wie weit das Kirschholz runtergebrannt ist und passt ggf. die Lüftungsschlitze minimal an. Soweit dazu.

Der Code ist für mich zu wenig strukturiert, als dass ich mich da mit einem kurzen Blick ein Urteil verschaffen könnte. Hier gibt es aber bessere Lösung.
Lagere das Menu und die Displayausgabe in eine Funktion aus. Dann soll sich das Display nur jede Sekunde oder bei einer Änderung verändern.

Ein 1MOhm /100 kOhm NTC ist etwas zu hoch. Ein 10k sollte hier deutlich besser arbeiten und weniger Störungen einfangen.

Die Led Vorwiderstände hast du falsch berechnet. Der Widerstand von 100 Ohm passt zu keiner Led. Bis auf die blaue Led sollten alle anderen Leds ziemlich schnell gestorben sein.

Was soll die gelbe LED im Gatestrang des Mosfets? Ein 330 Ohm Widerstand sollte hier anstatt der gelben Led und dem 1k Widerstand besser funktionieren. Der 330 Ohm Widerstand dient lediglich als Schutz und ist die Funktion nicht entscheidend.

Eine weitere Diode zwischen Drain und Source wäre nicht verkehrt. Zwar haben Mosfets eine verbaut, jedoch ist diese nicht gerade sondernlich gut.

Hallo sschultewolter,

Danke erstmal für deine schnelle Rückmeldung.

klar, das Ding ist schon komplett fertig und in einem ordentlichen Gehäuse. Aber ich habe jetzt effektiv das Gleiche für gerade einmal 27€. Und Grillen ohne Technik ist eh am Schönsten, aber es hat mich halt irgendwie gereizt.

Kannst du mir nen Tipp geben was du mit "Auslagern in eine Funktion" meinst? Prinzipiell verstehe ich was du meinst, aber ich kann mir gerade nicht vorstellen, wie ich das umsetzen sollte.

Das der Fühler von Maverick 1MOhm hat, hat mich auch sehr verwundert. Ich hätte gerne einen mit 10k gehabt, habe aber keinen fertigen, also in Edelstahlhülse mit Stahlflexkabel, finden können.

Ok, mit den Widerständen der LEDs gebe ich dir recht. Da habe ich wohl irgendein Bockmist gemacht. Es wundert mich jedoch, dass ich an den Ausgängen der LED Pins nur 2,5V messe (Pin -> GND). Das macht mich etwas stutzig.

Die LED im Gatestrang dient nur dafür, dass ich sehen kann, ob der Lüfter an ist. Ich gebe zu, kann man schöner lösen. Ich vermute, dass der Mosfet dadurch auch nicht ganz öffnet, oder?

Und was meinst du mit einer Diode? Wie kann ich die auslegen und welchen Zweck erfüllt diese? Wie gesagt, ich bin Neuling, aber bestrebt zu lernen :grinning:

Gruß Stefan

Ich stimme sschultewolter in vollem Umfang zu.

Der NTC mit 1 Meg ist sehr hochohmig, da fängst du dir ja wirklich alles ein, was da an elektromagnetischen Sauerein durch die Lüfte fliegt.

besser ist da dein NTC mit 100k. Der hat dann im Arbeitspunkt bei ca. 110°C ca 4k damit kannst du dann den sinnvollen Vorwiderstand bestimmen: am besten auch ca. 4K.
Schliesslich willst du ja die Temperatur genau messen, wenn du grillst, und nicht wenn der Grill kalt ist.

Und dann empfehle ich dringend einen Längswiderstand 10k und einen Kerko 100nF vor A0. Damit wenigstens der gröbste Dreck rausgefiltert wird.
Die Erfassung der IST-Temperatur ist das absolute Herzstück des Reglers! Wenn die Messung Fehler erezugt, dann wird auch der Rest falsch laufen.

Ich habe ein ähnliches Projekt verwirklicht, ist im Grillforum vorgestellt.

Dein Code ist mir zu unübersichtlich um mich da einzuarbeiten.

aber das flackern der Temperaturanzeige ist sicherlich kein Softwareproblem.

sschultewolter:
Eine weitere Diode zwischen Drain und Source wäre nicht verkehrt. Zwar haben Mosfets eine verbaut, jedoch ist diese nicht gerade sondernlich gut.

Der TIP120 ist eigentlich gar kein FET sondern ein Darlington NPN. Freilaufdiode wird also definitiv benötigt. Einfach eine Standard Diode nehmen:

1MOhm ist für den ADC definitiv zu viel. Nicht nur wegen den Störungen. Siehe Datenblatt:

The ADC is optimized for analog signals with an output impedance of approximately 10 kΩ or less. If such a source is used, the sampling time will be negligible. If a source with higher impedance is used, the sampling time will depend on how long time the source needs to charge the S/H capacitor, with can vary widely. The user is recommended to only use low impedance sources with slowly varying signals, since this minimizes the required charge transfer to the S/H capacitor

Eine Lösung dafür wäre ein Operationsverstärker als Impendanzwandler:

williwurm12:
Kannst du mir nen Tipp geben was du mit "Auslagern in eine Funktion" meinst? Prinzipiell verstehe ich was du meinst, aber ich kann mir gerade nicht vorstellen, wie ich das umsetzen sollte.

Du nutzt ja bereits zwei Funktionen, die setup() und die loop(). Das sind in der Arduino-Umgebung feste Programmteile. Du kannst aber auch eigene Funktionen mit oder ohne Rückgabewert programmieren. Ein großer Vorteil liegt darin, dass man den Code strukturieren kann, um bspw. das EVA-Prinzip sauber abarbeiten zu können. Auch wiederkehrende Codezeilen kann man so leicht vermeiden, indem man ganze Funktionen eben zweimal aufruft. Das ist auch ein Zeichen eines guten Programmierstils, wenn der Quellcode auch schnell von anderen erfasst werden kann bzw. man auch ganze Passagen für andere Projekte nutzen kann. Aber keine Sorge, sowas entwickelt sich auch mit der Zeit.

williwurm12:
Ok, mit den Widerständen der LEDs gebe ich dir recht. Da habe ich wohl irgendein Bockmist gemacht. Es wundert mich jedoch, dass ich an den Ausgängen der LED Pins nur 2,5V messe (Pin -> GND). Das macht mich etwas stutzig.

Wenn du zwischen Widerstand und LED, also am LED-Pin misst, misst du den Spannungsabfall über der LED, das kommt in dieser Größenordnung hin.

williwurm12:
Die LED im Gatestrang dient nur dafür, dass ich sehen kann, ob der Lüfter an ist. Ich gebe zu, kann man schöner lösen. Ich vermute, dass der Mosfet dadurch auch nicht ganz öffnet, oder?

Die Beschaltung ist Käse. Ist einfach so. :smiley: Aber wir wissen ja, was du erreichen wolltest. Die LED sollte nicht in Reihe, sondern parallel zur Gateansteuerung liegen. Das sind zwar Elektronikgrundlagen, aber wenn man das zwei- dreimal gebaut hat sitzt ddas auch.

williwurm12:
Und was meinst du mit einer Diode? Wie kann ich die auslegen und welchen Zweck erfüllt diese? Wie gesagt, ich bin Neuling, aber bestrebt zu lernen :grinning:

Induktive Lasten erfordern eine Löschdiode, also eine Diode, die parallel zur Last in Sperrrichtung eingesetzt wird. Der Hintergrund ist, dass in Spulen eine Spannung induziert wird, wenn die Versorgungsspannung wegbricht. Diese Induktionsspannung ist entgegengesetzt der zuvor angelegten Spannung gerichtet - die Löschdiode schaltet dann diese Spannungsspitze einfach kurz. Bei Relais ist diese Diode ganz wichtig, bei Motoren (hier dein Lüfter) nach meiner Meinung eher von geringerer Bedeutung, der Motor läuft ja noch träge nach...

williwurm12:
Gruß Stefan

Boah, noch so einer... :smiley: Haben wir davon nicht schon genug?

Schönen Gruß
Stefan

Hallo Gunther,

meinst du das mit KerKo und Widerstand so?

Bezüglich Struktur habe ich definitiv noch Lernbedarf. Würdest du mir ggf. deinen Sketch zur Verfügung stellen, dass ich mir das mal bei einem Experten angucken kann? Wäre echt super.

Gruß Stefan

Ich würde auch den Lüfter nicht mittels PWM ansteuern sondern einen nehmen der einen PWM Eingang hat.
Grüße Uwe

uwefed:
Ich würde auch den Lüfter nicht mittels PWM ansteuern sondern einen nehmen der einen PWM Eingang hat.
Grüße Uwe

Dies Lüfter haben aber in der Regel einen engen Frequenzbereich, sofern ich mich recht erinnere 20 bis 25 kHz. Da liegt man mit den Arduino-Standardmitteln weit ab...

[edit] Pighixxx hat folgende Schaltung vorgeschlagen: http://www.pighixxx.com/test/portfolio-items/connect-a-computer-fan-4-wires/?portfolioID=610
Da steht was von 21 bis 28 kHz.

williwurm12:
meinst du das mit KerKo und Widerstand so?

Nein, das meinte ich so:

Meinen Sketch kannst du schon haben aber ich bin bei weitem kein Experte. Ich habe Ahnung von Hardware.
Software habe ich mir auch größtenteils selbst beigebracht. Und auch in dem Sketch ist vieles, was ich heute anders machen würde.

Aber trotzdem, viel Spaß damit.

Aber mal ganz jenseits von Bits und Bytes:
Hast du denn schon mal ausprobiert, ob sich dein Grill mit der von dir angedachten Methode regeln läßt?
Ich meine damit die Basics: wird er heisser, wenn der Lüfter läuft und wird er kälter, wenn der Lüfter steht?
Das in den Griff zu kriegen hat bei mir am allermeisten Zeit gekostet!

Grill_o_Mat_V105.zip (30.4 KB)

Erstmal Danke an alle für die Rückmeldungen. Wie ich sehe, muss man das entweder gelernt haben oder jahrelang üben. Da habe ich wohl noch einiges zu tun. ::slight_smile:

@Stefan: Ich habe ja bereits ein paar Funktionen geschrieben, stehen ganz am Ende. Das meintest du damit? Also würdest du die Anzeige und das Menü auch so programmieren und dann alle x Sekunden aktualisieren, bzw durchlaufen?

@Uwe: Ich habe einen Lüfter mit 3-Pin-Anschluss. Der dritte (gelb) ist für die Drehzahl, aber ist der zum Auslesen der Drehzahl oder zum Vorgeben? Hieße das, ich kann das PWM Signal vom Arduino auf den gelben Anschluss geben und damit wird die Drehzahl geregelt?

@Serenifly: Ok, das leuchtet mir ein. Wie gesagt, mit steigendem Widerstand traten mehr und mehr Fehler auf. Ich habe mit 10k angefangen, dann 100k und zum Schluss 1M. Dann suche ich lieber nach einem robusten 10k Fühler. Meine vorherige Überlegung war auch ein PT100, jedoch wollte ich erstmal aus finanzieller Sicht auf den "Thermocouple Amplifier MAX31855" verzichten.

@Gunther: Vielen Dank! Ich werde die Änderungen mal umsetzen und über das Ergebnis berichten. Wie gesagt, am Grill habe ich es noch nicht getestet. Aber da ich den PartyQ von meinem Bruder als Vorlage hatte, konnte ich mir das Verhalten des Lüfters in Abhängigkeit zur Temperatur gut abgucken. Und das Ding funktioniert einwandfrei, bis auf den Verbrauch an Mignon Batterien. :sunglasses:
Darf ich noch fragen was der IRLZ44 anders macht als ein TIP120?

Vielen Dank!
Gruß Stefan

Der MAX31855 ist für Thermoelemente und nicht für PT100.

Nur PC-Lüfter mit 4 Anschlüßen haben auch einen PWM Signal Eingang. mit 3 Anchlüssen haben sie lediglich einen Drehzahlausgang.

@sth77
Diese Schaltung finde ich nicht richtig, muß mich aber dokumentieren um etwas anderes vorschlagen zu können.

Grüße Uwe

williwurm12:
Darf ich noch fragen was der IRLZ44 anders macht als ein TIP120?

Das ist ein Feldeffekt-Transistor. Die werden mit Spannung gesteuert und nicht mit Strom. Und das wichtigste: sie haben eine viel geringere Verlustleistung. Gerade an einem Darlington-Transistor fällt mal gleich 0,9-1V ab.

Der TIP120 aber in diesem Fall auch, da nicht viel Strom fließt. Da hält sich die Wärme-Entwicklung in Grenzen.

So, ich habe nun einmal einige eurer Ratschläge umgesetzt. Ich habe die KerKo-Widerstand-Kombi eingebaut und die LED parallel zum Darlington gesetzt. Es ist jetzt zumindest das Flackern der Anzeige verschwunden.
Ich habe leider weder eine Diode, noch den IRLZ44 da, aber schon geordert.
Und obwohl der Messfühler mit 1MOhm zu groß ist, sind die Ergebnisse erstaunlich genau. Ich habe mal den Bereich zwischen 20°C und ca. 80°C mit meinem Grillthermometer verglichen und ich hatte eine Abweichung von max. 2°C.
Ich werde also weitermachen und euch berichten.

guntherb:
Aber trotzdem, viel Spaß damit.

Das ist ja völlig irre! :o Da hört es bei mir definitiv auf. Ich verstehe da nichts mehr, aber was ich erkennen kann, ist eine saubere Struktur. Respekt! Hast du sowas gelernt oder jahrelanges Selbststudium?

Schönen Abend noch.
Gruß Stefan

williwurm12:
Hast du sowas gelernt oder jahrelanges Selbststudium?

Ich habe vor Jahrzehnten mal die Grundlagen der Softwareentwickung gelernt. Dann habe ich zwar Hardware entwickelt, aber immer mit Softwerkern zusammengearbeitet, da kriegt man auch das eine oder andere mit. Naja, und als ich mit Arduino anfing, musste ich zwar auch von Null anfangen, aber es kam dann vieles nach und nach wieder hoch.

williwurm12:
Und obwohl der Messfühler mit 1MOhm zu groß ist, sind die Ergebnisse erstaunlich genau. Ich habe mal den Bereich zwischen 20°C und ca. 80°C mit meinem Grillthermometer verglichen und ich hatte eine Abweichung von max. 2°C.

Das mit dem 1 MegOhm Messfühler ist nicht so schlimm. Der hat immerhin im Arbeitsbereich bei 110°C nur noch ca. 20k - 30k. Das ist nicht soo schlimm, auch wenn der 100k NTC besser wäre. Aber der Vorwiderstand sollte auf alle Fälle angepaßt werden. Welchen NTC verwendest du denn?

Hallo,

ich verwende derzeit den 1MOhm Fühler von dem Grillthermometer Maverick ET-732. Auf Anfrage bei MAverick war man so freundlich und hat mir das Datenblatt zu dem NTC geschickt. Hier ist der Link dazu: DB_Maverick_ET_732_1M

Davor habe ich sowohl den 10k als auch den 100k von Ebay verwendet (siehe Anhang). Die sind leider “nackig” und ich habe noch keine Lösung gefunden, wie ich die in eine Schutzhülse mit Stahlflexkabel bekomme. Falls da jemand eine Idee hat, wäre ich sehr dankbar.

Gruß Stefan

Du wirst kaum ein Kabel selbst bauen können, das sowohl halbwegs dicht, also auch temperaturfest ist.

Du kannst natürlich andere, fertige Fühler von Grillthermometern verwenden, zum Beispiel den Ikea Fantast, oder irgendwelche billigen China Importe bei Ebay.

Meiner Erfahrung nach halten die alle nicht lange.
Das Kabel der billig Sensoren ist zu empfindlich um den rauen Grillbetrieb länger als ein paar Monate zu überstehen.

Die Maverik-Sensoren hingegen halten recht lange, und sind auch nicht so teuer.

Welchen Vorwiderstand hast du jetzt für den Sensor?

Hallo!

Ich habe im Moment die Apparatur im Probelauf, leider noch ohne Fleisch :frowning:
Und ich muss sagen, so schlecht sieht es gar nicht aus. Beim Anheizen hat er die Zieltemperatur von 110°C überfahren, weil ich irgendwo einen Bock im Sketch habe. Der Lüfter hat nicht aufgehört zu pusten. Er hing wohl irgendwie in der Schleife lueftercontrol. Nachdem ich dann einmal die Boost-Taste gedrückt habe, hat er auch angefangen zu regeln. Und siehe da, er läuft jetzt seit ca. 5 Stunden ohne Eingriff mit einem Smokenator-Einsatz und er pendelt zwischen 104 und 111°C. Ich habe mal den Maverick daneben gestellt und die Differenz ist relativ konstant 17°C. Woran das liegt muss ich noch herausfinden. Es wird der Widerstand sein, der im Moment noch 1MOhm ist, ggf. noch die Tatsache, dass ich die Fühler nicht auf die gleiche Stelle gesetzt habe.
Wenn ich das jetzt richtig verstehe, verwende ich einen Referenzwiderstand, der ungefähr meiner üblichen Grilltemperatur entspricht. Also gemäß Datenblatt von Maverick ca. 31kOhm (siehe Anhang). Hab ich das richtig verstanden? Du hast in deinem Schaltplan nämlich 3,9k angegeben. (Edit: die 3,9k beziehen sich ja auf den 100k Fühler, sehe ich gerade.)

Gruß Stefan

Maverick_Widerstand_110Grad.JPG

Glücjwunsch, dass dein Regler läuft!

Ja, richtig, die 3,9k waren für den 100k NTC.

letztlich legt man den Vorwiderstand so aus, dass er in etwa genauso groß ist wie der Widerstand des Sensors im Arbeitspunkt. (in deinem Falle also bei ca. 110°C, also etwa 30k).
Das macht man, damit man im Arbeitspunkt die größtmögliche Auflösung hat (bit pro °C)

Hallo,

so, habe heute den IRLZ44 und die 30k Widerstände bekommen. Dazu habe ich noch eine Frage: Muss ich trotzdem eine Diode zwischen Drain und Source verbauen? Wenn ja, ist diese z.B. das Richtige dafür:
UNIVERSALDIODE 1N4148 75V 0,2A (ebay)

Besten Dank schon mal für eure Rückmeldung.

Gruß Stefan