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
Regeltabelle Klappenansteuerung
27.01.2019, 18:57
Beitrag #1
Regeltabelle Klappenansteuerung
Hallo Leute,
wie schon angesagt komme ich jetzt zu meinen Fragen für die Programmierung!
An meinem Smoker wird eine Klappe zwischen Feuerbox und Garraum verbaut um die Temperatur im Garraum nachzuregulieren bzw. zu halten! Diese wird mit einem Servomotor angesteuert! Dabei wird je nach Programmmodus eine Solltemperatur zugewiesen, mit einem K-Type Thermoelement die Garraumtemperatur gemessen und mit dieser verglichen!
Für den Anfang wollte ich es mit folgendem Prinzip versuchen:
Klappenstellung bei 10°C unter Soll = 90Grad (komplett offen)
Für jeden °C mehr soll die Klappe um 10Grad geschlossen werden
Ab jeden °C über Solltemperatur sollte die Klappe dann vollständig schließen
Ich habe hier mal einen Code geschrieben aber habe die Vermutung dass es auch kürzer bzw. einfacher geht!
Hat vielleicht jemand eine Idee??
Danke
Code:
void klappe() {
  
   if (smoke) sollpit = 110;
   if (pizza) sollhbo = 350;

   istg = thermocouple1.readCelsius();
   ist = (int)istg;
   diff = sollpit-ist;

   if (diff >= 9) kval = 90;
   if (diff = 8) kval = 80;
   if (diff = 7) kval = 70;
   if (diff = 6) kval = 60;
   if (diff = 5) kval = 50;
   if (diff = 4) kval = 40;
   if (diff = 3) kval = 30;
   if (diff = 2) kval = 20;
   if (diff = 1 || 0) kval = 10;
   if (diff <= -1) kval = 0;
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2019, 19:18 (Dieser Beitrag wurde zuletzt bearbeitet: 27.01.2019 19:19 von Tommy56.)
Beitrag #2
RE: Regeltabelle Klappenansteuerung
Code:
kval = 10 * diff;
if (kval > 90) kval = 90;
if (kval < 10) kval = 10:

Besser ist aber zur Diskussion immer ein kompilierbarer Sketch, der den Problemkreis umreißt. Da kann man auch schnell mal was testen.
Vor allem sollten alle Variablendeklarationen erkennbar sein.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2019, 19:59
Beitrag #3
RE: Regeltabelle Klappenansteuerung
Sieht schon mal kürzer aus, danke!Smile
Um die Klappe bei Überschreiten der Temperatur komplett zu schließen müsste ich dann so ergänzen oder??
Code:
kval = 10 * diff;
if (kval > 90) kval = 90;
if (kval < 10) kval = 10;
if (diff < 0) kval = 0;
Zitat:Besser ist aber zur Diskussion immer ein kompilierbarer Sketch, der den Problemkreis umreißt. Da kann man auch schnell mal was testen.
Vor allem sollten alle Variablendeklarationen erkennbar sein.

Also sollte ich den kompletten Sketch posten oder??
Weil die Variablen usw. ja ganz am Anfang definiert sind..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2019, 20:03
Beitrag #4
RE: Regeltabelle Klappenansteuerung
Ja, würde gehen.

Wenn der Sketch nicht extrem lang ist, ja. Ansonsten wenigstens die Deklarationen der relevanten Variablen.

Noch ein Hinweis zu Deinem vorherigen Code:

a=b ist eine Zuweisung, a == b ist ein Vergleich. Da eine Zuweisung in einer Bedingung zulässig ist, meckert keiner, das Ergebnis ist aber nicht das, was Du erwartest.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2019, 20:18
Beitrag #5
RE: Regeltabelle Klappenansteuerung
Zitat:Wenn der Sketch nicht extrem lang ist, ja. Ansonsten wenigstens die Deklarationen der relevanten Variablen.

Werde ich in Zukunft versuchen Angel

Zitat:a=b ist eine Zuweisung, a == b ist ein Vergleich. Da eine Zuweisung in einer Bedingung zulässig ist, meckert keiner, das Ergebnis ist aber nicht das, was Du erwartest.

Achso, klar, müsste dann also überall == einfügen statt des einfachen GleichIdea

Vielen Dank für die Hilfe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.01.2019, 18:03
Beitrag #6
RE: Regeltabelle Klappenansteuerung
Hallo,

ich würde das lieber als array organsieren. Es muss ja nicht unbedingt ein linearer Zusammenhang gut sein. So kann man nach ein paar Versuchen die "Tabelle" schnell anpassen. Ich finde es übersichtlicher als eine Reihe von if's.

Gruß
GuaAck

Code:
byte diff;
const byte kvalfeld [10] ={0,10,20,30,40,50,60,70,80,90}; // Type wir kval!!
//....
if (diff<0)  diff = 0;
if (diff>9)  diff = 9;
kval = kvalfeld[diff];
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.01.2019, 16:12
Beitrag #7
RE: Regeltabelle Klappenansteuerung
Sorry für die späte Antwort!
Die Variante finde ich gut weil ich ja erst testen muss ob das linear überhaupt läuft, eventuell muss man da sowieso was abändern!
Da ich mit arrays noch nichts gemacht habe verstehe ich hier leider den Zusammenhang zwischen der verglichenen Temperatur (diff) und der Klappenstellung (kval)! Wie wird der Wert an kval übergeben?

Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.01.2019, 16:17
Beitrag #8
RE: Regeltabelle Klappenansteuerung
Durch den Zugriff über den Index des Arrays (0 bis 9). Der wird aus diff gebildet.
Wenn diff z.B. 5 ist, dann steht dort im Array (in der Tabelle) 50 und das wäre Dein kval.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


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