Programmierung Brausteuerung mit dem Arduino

Sketch Brausteuerung Arduino

Die einzelnen Teile der Brausteuerung zusammenzusuchen, zu verkabeln und zu verlöten ist nur der erste Schritt. Denn noch weiß der Arduino ja gar nicht was er damit überhaupt tun soll. Daher führe ich dich Schritt für Schritt durch die einzelnen Programmabschnitte (zumindest die meisten):

  1. Display ansteuern
  2. Temperatur auslesen
  3. Motor an- /ausschalten
  4. Gasbrenner starten/stoppen

Was ich hier noch nicht behandeln werde ist das Brau-Programm an sich. Also die Menüführung und die Eingabe der einzelnen Werte. Das wird später kommen, sobald ich mit meiner Steuerung zufrieden bin und die meisten Bugs ausgemerzt sind.

Meine Brausteuerung habe ich mittlerweile umgebaut, so dass ich den GFA gar nicht mehr benötige. Diese Anleitung bezieht sich dennoch auf die Arduino Brausteuerung selbstgemacht-Anleitung und allen dort verwendeten Teilen.

1. LCD Display mit Arduino kontrollieren

Damit wir uns später die Ausgabe über die Konsole bzw. den Seriellen Monitor sparen, richten wir zu erst das LCD-Display ein.

New LiquidCrystal-Library runterladen

Da wir das über ein I2C-Modul das Display steuern, benötigen wir zu erst die passende Bibliothek "New LiquidCrystal". Also von Github runterladen: New LiquidCrystal-Bibliothek und nach dortiger Anleitung installieren.

LCD-Display PINs belegen

Da wir das ganze über ein I2C-Modul realisieren brauchen wir nur 4 PINS: Ground, 5V, A4 und A5. Bitte auch genau A4 und A5 belegen. Dann die Arduino Entwicklungsumgebung öffnen und diesen Code ganz oben einfügen:

#include  
#include 

#define I2C_ADDR    0x27  // Define I2C Address where the PCF8574A is
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7
LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

Dann kommen wir auch schon zur setup()-Funktion. Die schaut so aus:

void setup() {
  lcd.begin(20,4); // Was für ein Display: 20x4 oder 12x2
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);  // Beleuchtung PIN festlegen
  lcd.setBacklight(HIGH); // Beleuchtung AN
  lcd.home();  // Cursor Links oben setzen
  lcd.print("Brauhelfer v1.0"); // Brauhelfer v1.0 in der ersten Zeile (=0te Zeile im Code) ausgeben
  lcd.setCursor(0,1); // Cursor auf die 2te Zeile (=1te Zeile im Code) setzen
  lcd.print("Initialisiere...");
  lcd.setCursor(0,3);
  lcd.print("[15.05.16] by  Hansi");
}

Damit können wir schon den ersten Text ausgeben. Glückwunsch :)

lcd.begin(20,4); Brauchen wir nur einmal aufrufen, um der Bibliothek zusagen, wie groß das Display ist und wie viele Zeichen zur Verfügung stehen

lcd.setBacklight(HIGH); Auch nur einmalig, damit die Hintergrundbeleuchtung angeht

lcd.home(); Werden wir noch öfter brauchen. Damit setzen wir den Cursor auf "0,0". Sprich 0te Spalte in der 0ten Zeile. In Programmiersprachen ist die 0 immer der erste Wert. Also 0te Zeile im Code ist die erste Zeile im Display.

lcd.print("..."); Text ausgeben, beginnend von der Position, wo der Cursor gerade steht

lcd.setCursor(0,1); Cursor Position verändern. Dabei ist die erste Zahl die Spalte und die zweite Zahl die Zeile. Also im Display wäre das das erste Zeichen in der 2ten Zeile.

lcd.clear(); Komplettes Display löschen und Cursor auf 0,0 setzen.

Fehlerquellen LiquidCrystal_I2C

Fehler 1: Falsche Verkabelung. Noch genau prüfen, ob alle Kabel richtig sind.

Fehler 2: Die Adresse I2C_ADDR 0x27 ist nicht korrekt. Die findet ihr über den Sketch heraus: I2C-Adresse herausfinden. Die 0x27 dann mit der gefunden Adresse ersetzen.

2. Temperatur auslesen mit Arduino

Das auslesen der Temperatur ist etwas "aufwendiger" aber simpel. Das gute an den OneWire-Thermometern ist, dass ihr mehrere Temperaturfühler an den selben PIN stecken könnt und dennoch jedes Thermometer einzeln ansprechen könnt. Damit ist es möglich einen genaueren Mittelwert der Temperatur zu berechnen.

OneWire Thermometer Beispiel:

Erweitere deinen Quelltext um folgende Zeilen vor der setup()-Funktion:

#include             // OneWire-Bibliothek einbinden
#include   // DS18B20-Bibliothek einbinden
#define DS18B20_PIN 7           // TemperaturPIN = D7
OneWire oneWire(DS18B20_PIN);          // OneWire Referenz setzen
DallasTemperature sensors(&oneWire);   // DS18B20 initialisieren

Die Setup-Funktion ergänzen wir um eine Zeile:

void setup() {
  sensors.begin();  // DS18B20 Temp starten
  lcd.clear();
}

Dann erstellen wir nach der loop()-Funktion eine Funktion, die die Temperatur anzeigt:

displayTemp(){
  sensors.requestTemperatures();
  float temp = sensors.getTempCByIndex(0);
  char buffer[10];
  String myTxt = String("Temperatur: ") + dtostrf(temp, 5, 2, buffer) + String("C");
  lcd.setCursor(0,3);
  lcd.print(myTxt);
}

sensors.requestTemperatures(); Anfordern der Temperaturen

sensors.getTempCByIndex(0); Temperatur des Thermometers mit Index 0. Falls mehr angeschlossen sind, kann es auch 1 oder noch höher werden.

dtostrf(temp, 5, 2, buffer) Funktion um aus einer Float einen String zu machen.

Jetzt müssen wir noch in der Loop-Funktion unsere displayTemp()-Funktion aufrufen:

void loop() {
   displayTemp();
   delay(500);
}

Um die Sensoren nicht zu überstrapazieren, reicht es aus, wenn wir nur alle halbe Sekunde die Werte aufrufen. Das macht das delay(500). Das ist eine Verzögerung von 500ms bevor die Funktion wieder aufgerufen wird.

Scheibenwischermotor mit Arduino steuern

Die Steuerung des Motors ist wirklich nicht kompliziert. Wir können danke der PWM-Pins (Pulsweitenmodulation) theoretisch die Geschwindigkeit von-255 vorgeben, wobei 0 = Stillstand und 255 = Vollgas ist. Theoretisch, da ein Scheibenwischermotor in der Regel eine Mindestpower braucht um überhaupt zu laufen. Wenn zu wenig Power kommt, brummt er nur, aber bewegt sich nicht. Der Schwellenwert bei uns liegt bei 50.

Scheibenwischermotor Sketch

Alte Spiel, wir definieren die PIN-Belegung über der setup()-Funktion, in der setup()-Funktion weisen wir den PINS den Status (HIGH,LOW,0-255) zu und in der Loop-Funktion können wir eine von uns geschrieben Funktion aufrufen:

int mPin1 = 10;                 // Motor an DigitalPin 10
int mPin2 = 11;                 // Motor PWM an DigitalPin 11

void setup(){
  pinMode(mPin1, OUTPUT);    // Motor initialisieren
  digitalWrite(mPin1,HIGH);      // Richtung des Motors HIGH oder LOW
}

void loop(){
  lcd.clear();
  lcd.print("Motor 250");
  setMotor(250);
  delay(500);
  lcd.print("Motor 100");
  setMotor(100);
  delay(500);
  lcd.print("Motor 50 ");
  setMotor(50);
  delay(500);
  lcd.print("Motor aus");
  setMotor(0);
  delay(500);
}

function setMotor(int speedNow){
  analogWrite(mPin2, speedNow); // Motor die Geschwindigkeit über den PWM mitteilen
}

Das war es schon. Das dürfte alles selbsterklärend sein und ist wirklich kein Hexenwerk ;)

Gaskocher mit dem Arduino steuern

Die Gassteuerung mit einem GFA ist noch simpler als die Steuerung des Motors. Hier gibt es nämlich nur AN oder AUS:

int gPin = 8;                   // Digital PIN GFA

void setup(){
  pinMode(gPin, OUTPUT);    // GFA initialisieren
  digitalWrite(gPin,HIGH);
}

void loop(){
  toggleGFA();
  delay(25000); // 25 Sekunden brennen lassen
  toggleGFA();
  delay(5000); // 5 Sekunden ausgeschaltet lassen
}
boolean gfaStatus = false;
void toggleGFA(){
  lcd.clear();
  if(!gfaStatus){
    lcd.print("Brenner einschalten.");
    digitalWrite(gPin, LOW); // GFA anschalten
    delay(1000);
    lcd.print("Brenner ist an...   ");
    gfaStatus = true;
  }else{
    lcd.print("Brenner ausschalten.");
    digitalWrite(gPin, HIGH); // GFA ausschalten
    delay(1000);
    lcd.print("Brenner ist aus...   ");
    gfaStatus = false;
  }
}

Da ich meinen GFA nicht mehr nutze, sondern alles über den Arduino löse, ist das etwas komplizierter. Denn jetzt kommen noch Magnetventil, Feuerdetektor, Gasdetektor und Zündelektrode dazu, die alle über den Arduino gesteuert werden. Entsprechend muss ich prüfen, wie lange das Magnetventil schon offen ist und kein Feuer brennt, damit ich es notfalls zumachen kann, um zu viel Gasaustritt zu verhindern. Das geschieht sowohl über den Feuerdektor als auch über den Gasdetektor, als doppelte Absicherung. Dazu werde ich eventuell später noch eine Anleitung schreiben.

Die nächsten Schritte

Was noch fehlt ist natürlich das komplette Menü und die Zusammenarbeit zwischen den einzelnen Funktionen. Außerdem fehlt noch die Funktion des Drehknopfs mit dem man sich durch das Menü navigieren kann. Aber hey, alles muss ich euch nicht fertig präsentieren ;)

Programmcode kaufen

Wem die Programmierung zu aufwendig ist, dem gebe ich gerne die hier vorgestellte Version an. Überweise einen beliebigen - aber hoffentlich fairen - Betrag per Paypal an mich: https://www.paypal.me/dahansi

Im Anschluss sende mir bitte eine E-Mail mit deinem Paypal Namen, dann schicke ich dir die entsprechende Arduino-Datei zu.

Aus Zeitgründen schaffe ich es leider nicht individuellen Support zum Programm zu geben. Das Programm entwickle ich nicht mehr weiter, da wir auf eine Brausteuerung auf Basis eines Raspberry Pi umgestiegen sind. Das Programm läuft, aber sollte noch ausgebaut werden (z.B. Rezepte einspeichern, etc.).

Weitere Artikel:

kamera-slider-programmierung.jpg

Kamera Slider Teil 3: Programmierung

Der letzte Teil des Kamera Sliders: Die Programmierung. Auch wenn es für die meisten der schwierigste Teil ist, ist das ganze gar nicht so kompliziert wie es auf den ersten Blick ausschaut. Bekommt jeder selbst hin.

brausteuerung-arduino-teil1.jpg

Eigene Brausteuerung mit Arduino

Der 1te Teil der Brausteuerung erklärt die Funktion der Brausteuerung, die einzelnen Komponenten und beschreibt den Zusammenbau. Schritt für Schritt - für jeden Nachbaubar auch ohne viel Elektrokenntnis.

5.0

2 Kommentare

Kommentar verfassen
Qualität:
Inhalt:
Lesefluss:
Name:
E-Mail
Bewertung Qualätit:
Bewertung Lesbarkeit:
Bewertung Inhalt:
Überschrift:
Kommentar:

- Welche E-Mail?

von:

Hallo Hansi,

bin vor kurzem erst auf diese Anleitung gestoßen und finde es Super was du machst.
Ich selber bin mit der Programmierung des Arduino noch nicht so vertraut und würde von dir gerne den Programmcode kaufen. Bring es aber leider nicht fertig deine E-Mail adresse zu finden. Kannst du mir diese bitte mitteilen?

Vielen Dank im Voraus.

Gruß
Eugen

Antwort von Hansi - 11.03.2017

Hallo Eugen,

meine E-Mailadresse: info@glohbe.de
Für die Paypal-Überweisung: https://www.paypal.me/dahansi

Schöne Grüße
Hansi

Auf Kommentar antworten
Name:
E-Mail
Kommentar:

Bewertung:

Qualität
Inhalt
Lesefluss

War dieser Kommentar hilfreich?

- Brausteuerung an Induktionskochplatte

von:

Hallo Hansi,

eine fantastische Brausteuerung hast Du da entworfen. Leider bin ich in der Programmierung des Arduino ein vollkommener Anfänger. Aus diesem Grunde würde mich interessieren, ob der von Dir zum Kauf angebotene Programmcode auch die unter der Überschrift "Die nächsten Schritte" enthaltenen Punkte enthält. In dem Video funktionieren ja sowohl das Menü als auch die Funktion des Drehknopfes. Ich wäre an der Kaufversion nämlich sehr interessiert.

Kann mit dem Programmcode anstelle des elektrischen Gasanzünders auch eine elektrische Induktionskochplatte betrieben werden und anstelle des Scheibenwischermotors ein 12-Volt Getriebemotor (Einmacherversion)?

Über eine Antwort würde ich mich sehr freuen.

Freundliche Grüße

Thomas

Antwort von Hansi - 19.12.2016

Hallo Thomas,

danke für Deine Nachricht. Freut mich, dass sie dir gefällt.

Also diese Funktionen sind im Programmcode vorhanden. Ich kann Dir die gerne auch vorab schicken und Du kannst sie nachträglich kaufen. So ehrlich ist ja jeder Brauer... bzw. freue ich mich fast mehr über ein paar Bier =)

Ich nutze die Steuerung leider gar nicht mehr, aber funktioniert hat sie und wir haben 3 oder 4 Sude mit ihr gebraut.

Die Steuerung kannst Du in einer früheren Version hier sehen: https://www.youtube.com/watch?v=xJLOh0BVbaM

Schöne Grüße
Hansi

Antwort von Eugen - 08.05.2017

Hallo Thomas,

habe gelesen das du eine Elektro Herdplatte mit der Software ansteuerst. Habe die Software vom Hansi erworben und bekomme es nicht hin das Relais die dauerhaft zu bestromen, so lange der Sud erhitzt werden soll.
Kannst du mir ein Tipp geben wie du das Problem gelöst hast?

Gruß

Eugen

Antwort von Thomas S. - 09.05.2017

Hallo Eugen,

ich betreibe die Steuerung über funkgesteuerte Steckdosen. Die Frage ist nur, ob wir beide denselben Sketch für die Brausteuerung verwenden. Eventuell kann es auch daran liegen, dass Du eine digitale Induktionskochplatte benutzt. Hier brauch man wohl eine analoge von Hendi. Bisher mache ich das nur mit dem Einkocher. Hier mal einen interessanten Link zu einer Seite, wo es den Sketch kostenlos gibt und das für verschiedene Versionen:

Link

Gruß,

Thomas

Antwort von Hansi - 12.05.2017

Hallo Eugen,

du kannst eigenltich auch mit meiner Steuerung die Kochplatte betreiben:
Du kaufst dir im Baumarkt Einbausteckdosen, dann musst du das Kabel von deiner Herdplatte nicht aufschneiden. Dann verbindest Du die Kabel so, dass die Phase durch das Relais geht. Im Code musst du ansich nichts ändern (zumindest was das an/ausschalten angeht).
Allerdings heizen Herdplatten in der Regel nach und brauchen auch wieder länger um auf Temperatur zu kommen. Daher müsstest Du beim prüfen der Temperatur eine kleine Logik einbauen, die das berücksichtigt (z.B. 3% vor erreichen der Zieltemperatur die Platte bereits ausschalten, da die Resthitze für den letzten 3% ausreicht).

Schöne Grüße
Hansi

Der Funktion für die Herdplatte:
void setGfa(int i){
if(i && !gfaStatus){
clearLine(2);
lcd.setCursor(0,2);
lcd.print("Herdplatte ein.");
digitalWrite(GFA, LOW);
clearLine(2);
lcd.setCursor(0,2);
lcd.print("Herdplatte ist an...");
gfaStatus = true;
}else if(!i && gfaStatus){
clearLine(2);
lcd.setCursor(0,2);
lcd.print("Herdplatte aus.");
digitalWrite(GFA, HIGH);
delay(1000);
clearLine(2);
lcd.setCursor(0,2);
lcd.print("Herdplatte ist aus...");
gfaStatus = false;
}else{}
}

Auf Kommentar antworten
Name:
E-Mail
Kommentar:

Bewertung:

Qualität
Inhalt
Lesefluss

War dieser Kommentar hilfreich?

www.godlike.de

Diese Webseite verwendet Cookies, damit wir die Inhalte und Funktionen der Webseite optimal gestalten können. Durch die weitere Nutzung der Webseite stimmen Sie der Nutzung von Cookies zu.