Sporadische Probleme mit dem Arduino

Hi,

ich bin neu im Forum und hoffe auf eure Hilfe.

Ich habe zusammen mit einem Kumpel eine Cocktailmaschine gebaut, die von einem Arduino Mega2560 gesteuert wird.

Über Taster kann man den Cocktail auswählen, mit einen weiteren Bestätigungstaster den Zapfvorgang starten.
Dazu steuert der Arduino 5V Relais an, die wiederum kleine Pumpen ansteuern.
Die Pumpen wurden mit Freilaufdioden versehen und die Relais werden von einer separaten 5V Stromquelle versorgt, nicht vom Arduino.
Der Arduino wird mit 10V versorgt.

Das funktioniert meistens auch problemlos, doch manchmal kann es sein, dass die Pumpen nicht aufhören zu zapfen und oder die LED's der Cocktailauswahl nicht aufhört zu leuchten.

Das seltsame ist, mal funktioniert es nach dem Einschalten der Maschine 20 Mal, es kann aber auch vorkommen dass es beim 3. Mal nicht mehr funktioniert.

Zur Diagnose habe ich Logausgaben eingebaut.
Bei einem normalen Ablauf, wird die Zapffunktion aufgerufen, Pumpe 1 abgearbeitet, wenn fertig dann Pumpe 2 usw..
In dem Fall wo es nicht funktioniert, springt er z.B. von Pumpe 8 wieder zu Pumpe 7, was vom Code Ablauf garnicht sein kann oder gibt hieroglypische Zeichen im seriellen Monitor.

Mittlerweile haben wir die Pumpen mit Alufolie umwickelt und es scheint jetzt auch erst mal zu funktionieren, ich traue der Sache aber noch nicht, da ich schon mehrfach der Meinung war, dass das Problem gelöst ist.

Ich würde auch gerne einen Schaltplan hier einstellen wenn es hilft, weiß jedoch nicht mit welchem kostenlosen Tool ich das zeichnen soll, hat jemand Vorschläge?

Das Verhalten bzw. das eigentliche Problem besteht in der Funktion "void zapfen()" ab Zeile 598.

Hat Jemand eine Idee was dieses Verhalten verursachen könnte?

Gruß
rlpp0r

Screenshot 1 ohne Fehler, 2 und 3 mit Fehler.

1
2
3

/* Version 1.2.5: Änderung von gleichzeitigem Starten der Pumpen auf nacheinander geaendert */
/* Version 1.2.4: Funktionen zum Taster LED 1-10 auszuschalten angelegt, Funktion zum Nullen der Zapfzeiten angelegt */
/* Version 1.2.3: Mit Taster LED die nach 10 Sekunden ein Farbspiel ablaufen */ 
/* Version 1.2.2: Namen von Pumpen und Zapfzeit geandert */
/* Version 1.2.1: Mojito gegen Sweet Summertime ausgetauscht, Pumpe 10 -> Cola durch, Licoer 43 ersetzt */
/* Version 1.2: Schlaeuche fuellen solange Taster gedruckt */
/* Version 1.1: Schlaeuche fuellen ueber Zeit, Dauer 2 Sekunden */

// Cocktailmaschine mit Pumpen    
// Variablendeklaration
unsigned long Zapfzeit_1   = 0;  // Wodka
unsigned long Zapfzeit_2   = 0;  // Brauner_Rum
unsigned long Zapfzeit_3   = 0;  // Weisser_Rum
unsigned long Zapfzeit_4   = 0;  // Tequila
unsigned long Zapfzeit_5   = 0;  // Orangenlikoer
unsigned long Zapfzeit_6   = 0;  // Pfirsichlikoer
unsigned long Zapfzeit_7   = 0;  // Limettensaft
unsigned long Zapfzeit_8   = 0;  // Ananassaft
unsigned long Zapfzeit_9   = 0;  // Cranberrysaft
unsigned long Zapfzeit_10  = 0;  // Licoer_43

int Merker_Zapfbits          = 0; // Je Pumpe wird ein Bit gesetzt, wenn Pumpe fertig gezapft hat
unsigned long Verstrichene_Zapfzeit    = 0; // Verstrichene Zapfzeit
unsigned long Verstrichene_LED_Gruen_An_Zeit  = 0; // Verstrichene LED gruen an Zeit
unsigned long PreviousMillis = 0; // Zeitstempel
bool Cocktail_ausgewaehlt    = 0; // Merker ob Cocktail ausgewaehlt
byte Sekundenzaehler         = 0; // Sekundenzaehler fur LED blinken 
byte Schlauch_fuellen_fertig = 0; // Merker ob Schlauch/Schläuche gefüllt

// Defines
#define FALSE 0
#define TRUE  1
#define OFF   1       // Pumpenrelais sind invertiert
#define ON    0
#define Gedrueckt LOW
#define _1cl  425     // Zapfzeit in ms, der Compiler ersetzt ueberall wo _1cl auftaucht, _1cl durch 425
#define _2cl  850     // Zapfzeit in ms, ""
#define _3cl  1275    // Zapfzeit in ms, ""
#define _4cl  1700    // Zapfzeit in ms, ""
#define _6cl  2550    // Zapfzeit in ms, ""
#define _8cl  3400    // Zapfzeit in ms, ""
#define _10cl 4250    // Zapfzeit in ms, ""
#define _12cl 5100    // Zapfzeit in ms, ""
#define _20cl 8500    // Zapfzeit in ms, ""

// Ein- & Ausgaenge
const int Taster1       = 22; // Pin Taster1 Long Island Icetea 
const int LED_Taster1   = 24; // LED Taster1
const int Taster2       = 26; // Pin Taster2 Cuba Libre
const int LED_Taster2   = 28; // LED Taster2
const int Taster3       = 30; // Pin Taster3 Hurricane
const int LED_Taster3   = 32; // LED Taster3
const int Taster4       = 34; // Pin Taster4 Planters Punch
const int LED_Taster4   = 36; // LED Taster4  
const int Taster5       = 38; // Pin Taster5 Sex on the Beach
const int LED_Taster5   = 40; // LED Taster5 
const int Taster6       = 23; // Pin Taster6 Tequila Sunrise
const int LED_Taster6   = 25; // LED Taster6  
const int Taster7       = 27; // Pin Taster7 Mai Tai
const int LED_Taster7   = 29; // LED Taster7  
const int Taster8       = 31; // Pin Taster8 Mojito
const int LED_Taster8   = 33; // LED Taster8  
const int Taster9       = 35; // Pin Taster9 Virgin Sunrise
const int LED_Taster9   = 37; // LED Taster9 
const int Taster10      = 39; // Pin Taster10 Flamingo
const int LED_Taster10  = 41; // LED Taster10 

const int Taster11_Auswahl_bestaetigen     = 8; // Pin Taster11_Auswahl_bestaetigen 
const int LED_Taster11_Auswahl_bestaetigen = 9; // Pin LED_Taster11_Auswahl_bestaetigen
const int Taster12_Fertig                  = 3; // Pin Taster12_Fertig 
const int LED_Fertig                       = 4; // Pin LED_fertig 

// Linke Reihe
const int Pumpe_1  = 44;   // Ausgang Pumpe Wodka
const int Pumpe_2  = 46;   // Ausgang Pumpe Weisser_Rum
const int Pumpe_3  = 48;   // Ausgang Pumpe Orangenlikör
const int Pumpe_4  = 50;   // Ausgang Pumpe Cranberrysaft
const int Pumpe_5  = 52;   // Ausgang Pumpe Limettensaft
// Rechte Reihe
const int Pumpe_6  = 45;   // Ausgang Pumpe Tequila
const int Pumpe_7  = 47;   // Ausgang Pumpe Brauner_Rum
const int Pumpe_8  = 49;   // Ausgang Pumpe Pfirsichlikoer
const int Pumpe_9  = 51;   // Ausgang Pumpe Ananassaft
const int Pumpe_10 = 53;   // Ausgang Pumpe Licoer 43

const int RGB_LED_GRUEN        = 7;    // LED Band ueber Zapfstelle
const int RGB_LED_BLAU         = 6;
const int RGB_LED_ROT          = 5;


// Initialisierung von Ein- und Ausgaengen
void setup() 
{
// Funktionsprototypen
void Zapfen();	               // Funktion zum Zapfen 
void TasterLEDsAusschalten();    // Funktion um alle LEDs auszuschalten
void Zapfzeiten_nullen();      // Funktion um alle Zapfzeiten zu nullen

// Anmeldung Eingaenge
pinMode(Taster12_Fertig, INPUT);
digitalWrite(Taster12_Fertig, INPUT_PULLUP);   // Internen Pull-Up Widerstand aktivieren  
pinMode(Taster11_Auswahl_bestaetigen, INPUT);     
digitalWrite(Taster11_Auswahl_bestaetigen, INPUT_PULLUP);  // Internen Pull-Up Widerstand aktivieren

pinMode(Taster1, INPUT);              // Long Island iced tea
digitalWrite(Taster1, INPUT_PULLUP);  // Internen Pull-Up Widerstand aktivieren  
pinMode(Taster2, INPUT);              // Cuba Libre
digitalWrite(Taster2, INPUT_PULLUP);  // Internen Pull-Up Widerstand aktivieren  
pinMode(Taster3, INPUT);              // Hurricane
digitalWrite(Taster3, INPUT_PULLUP);  // Internen Pull-Up Widerstand aktivieren  
pinMode(Taster4, INPUT);              // Planters Punch
digitalWrite(Taster4, INPUT_PULLUP);  // Internen Pull-Up Widerstand aktivieren  
pinMode(Taster5, INPUT);              // Sex on the Beach
digitalWrite(Taster5, INPUT_PULLUP);  // Internen Pull-Up Widerstand aktivieren  
pinMode(Taster6, INPUT);              // Tquila Sunrise
digitalWrite(Taster6, INPUT_PULLUP);  // Internen Pull-Up Widerstand aktivieren
pinMode(Taster7, INPUT);              // Mai Tai
digitalWrite(Taster7, INPUT_PULLUP);  // Internen Pull-Up Widerstand aktivieren
pinMode(Taster8, INPUT);              // Mojito
digitalWrite(Taster8, INPUT_PULLUP);  // Internen Pull-Up Widerstand aktivieren
pinMode(Taster9, INPUT);              // Virgin Sunrise
digitalWrite(Taster9, INPUT_PULLUP);  // Internen Pull-Up Widerstand aktivieren
pinMode(Taster10, INPUT);             // Flamingo
digitalWrite(Taster10, INPUT_PULLUP); // Internen Pull-Up Widerstand aktivieren

// Anmeldung Ausgaenge Pumpen und LED's
pinMode(Pumpe_1, OUTPUT); // Pumpe Wodka
pinMode(Pumpe_2, OUTPUT); // Pumpe Weisser_Rum
pinMode(Pumpe_3, OUTPUT); // Pumpe Orangenlikoer
pinMode(Pumpe_4, OUTPUT); // Pumpe Cranberrysaft 
pinMode(Pumpe_5, OUTPUT); // Pumpe Limettensaft
pinMode(Pumpe_6, OUTPUT); // Pumpe Tequila
pinMode(Pumpe_7, OUTPUT); // Pumpe Brauner_Rum
pinMode(Pumpe_8, OUTPUT); // Pumpe Pfirsichlikoer
pinMode(Pumpe_9, OUTPUT); // Pumpe Ananassaft
pinMode(Pumpe_10,OUTPUT); // Pumpe Licoer_43

digitalWrite(Pumpe_1, OFF);  // Pumpe Wodka ausschalten    
digitalWrite(Pumpe_2, OFF);  // Pumpe Weisser_Rum ausschalten
digitalWrite(Pumpe_3, OFF);  // Pumpe Orangenlikoer ausschalten
digitalWrite(Pumpe_4, OFF);  // Pumpe_Cranberrysaft ausschalten 
digitalWrite(Pumpe_5, OFF);  // Pumpe Limettensaft ausschalten         
digitalWrite(Pumpe_6, OFF);  // Pumpe Tequila ausschalten
digitalWrite(Pumpe_7, OFF);  // Pumpe Brauner_Rum ausschalten
digitalWrite(Pumpe_8, OFF);  // Pumpe Pfirsichlikoer ausschalten     
digitalWrite(Pumpe_9, OFF);  // Pumpe_Ananassaft ausschalten 
digitalWrite(Pumpe_10, OFF); // Pumpe Licoer_43 ausschalten

pinMode(LED_Taster1, OUTPUT); // Long Island iced tea
pinMode(LED_Taster2, OUTPUT); // Cuba Libre
pinMode(LED_Taster3, OUTPUT); // Hurricane
pinMode(LED_Taster4, OUTPUT); // Planters Punch
pinMode(LED_Taster5, OUTPUT); // Sex on the Beach
pinMode(LED_Taster6, OUTPUT); // Tequila Sunrise
pinMode(LED_Taster7, OUTPUT); // Mai Tai
pinMode(LED_Taster8, OUTPUT); // Sweet Summertime
pinMode(LED_Taster9, OUTPUT); // Virgin Sunrise
pinMode(LED_Taster10, OUTPUT);// Flamingo
pinMode(LED_Fertig, OUTPUT);
pinMode(LED_Taster11_Auswahl_bestaetigen, OUTPUT);

pinMode(RGB_LED_GRUEN, OUTPUT); // LED Band ueber Zapfstelle
pinMode(RGB_LED_BLAU,  OUTPUT);
pinMode(RGB_LED_ROT,   OUTPUT);
digitalWrite(RGB_LED_GRUEN, LOW); // Alle 3 Farben einschalten, um direkt weiss zu erzeugen
digitalWrite(RGB_LED_BLAU, LOW);
digitalWrite(RGB_LED_ROT, ON); 

PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern

Serial.begin(9600); // Oeffnet die serielle Schnittstelle
//Serial.PrintIn("Text") // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
}

void loop() // Ab hier beginnt der eigentliche Code
 {

if(digitalRead(LED_Fertig) == HIGH && ((millis() - PreviousMillis) >= 3000) && (millis() - PreviousMillis) < 30000) // RGB LED 3 Sekunden nach Zapfvorgang fertig in weiss aendern
  {
  Serial.println("RGB aus\n"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
  digitalWrite(LED_Fertig, LOW); // "LED Fertig" ausschalten
  // RGB Gruen ist schon an, um weiss zu erzeugen zusaetzlich blau und rot einschalten  
  digitalWrite(RGB_LED_BLAU, LOW); 
  digitalWrite(RGB_LED_ROT,LOW);
  }

if(digitalRead(Taster12_Fertig) == Gedrueckt && !Schlauch_fuellen_fertig && !Cocktail_ausgewaehlt) // Schlaeuche fuellen
  {  
    Serial.println("Schlaueche fuellen"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
  digitalWrite(LED_Taster11_Auswahl_bestaetigen, LOW); // "LED Fertig" ausschalten
  digitalWrite(LED_Fertig, LOW); // "LED Fertig" ausschalten
  Cocktail_ausgewaehlt = FALSE;  // Merker, das Auswahl getroffen, zuruecksetzen
  Zapfzeiten_nullen();  // Zapfzeiten nullen
  delay(2000);
  
  if(digitalRead(Taster12_Fertig) == Gedrueckt && digitalRead(Taster11_Auswahl_bestaetigen) == Gedrueckt)  // Alle Schlaueche fuellen
    {   
    Serial.println("Alle Schlauche fuellen"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe 
    // Linke Reihe  
    Zapfzeit_1  = 2000; // Wodka  
    Zapfzeit_2  = 2000; // Weisser Rum  
    Zapfzeit_3  = 2000; // Orangenlikoer  
    Zapfzeit_4  = 2000; // Cranberrysaft
    Zapfzeit_5  = 2000; // Limettensaft   
    digitalWrite(Pumpe_1, ON); // Pumpe Wodka einschalten    
    digitalWrite(Pumpe_2, ON); // Pumpe Weisser_Rum einschalten
    digitalWrite(Pumpe_3, ON); // Pumpe Orangenlikoer einschalten
    digitalWrite(Pumpe_4, ON); // Pumpe_Cranberrysaft einschalten 
    digitalWrite(Pumpe_5, ON); // Pumpe Limettensaft einschalten
    PreviousMillis = millis();             // Zeitpunkt von Pumpenstart in PreviousMillis speichern   
    digitalWrite(LED_Taster1, HIGH); 
    digitalWrite(LED_Taster2, HIGH); 
    digitalWrite(LED_Taster3, HIGH); 
    digitalWrite(LED_Taster4, HIGH); 
    digitalWrite(LED_Taster5, HIGH); 
    Zapfen();

    // Rechte Reihe
    Zapfzeiten_nullen();  // Zapfzeiten nullen 
    Zapfzeit_6  = 2000; // Tequila
    Zapfzeit_7  = 2000; // Brauner Rum
    Zapfzeit_8  = 2000; // Pfirsischlikoer
    Zapfzeit_9  = 2000; // Ananassaft  
    Zapfzeit_10 = 2000; // Licoer 43
    digitalWrite(Pumpe_6, ON);  // Pumpe Tequila einschalten
    digitalWrite(Pumpe_7, ON);  // Pumpe Brauner_Rum einschalten
    digitalWrite(Pumpe_8, ON);  // Pumpe Pfirsichlikoer einschalten     
    digitalWrite(Pumpe_9, ON);  // Pumpe_Ananassaft einschalten       
    digitalWrite(Pumpe_10, ON); // Pumpe Licoer_43 einschalten
    PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
    digitalWrite(LED_Taster6, HIGH); 
    digitalWrite(LED_Taster7, HIGH); 
    digitalWrite(LED_Taster8, HIGH); 
    digitalWrite(LED_Taster9, HIGH); 
    digitalWrite(LED_Taster10, HIGH);     
    Zapfen(); 
    }

  PreviousMillis = millis();           // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  while(digitalRead(Taster1) == Gedrueckt)  // Wodka
      { 
      digitalWrite(Pumpe_1, ON);        // Pumpe Wodka einschalten
      delay(500);
      }
  while(digitalRead(Taster2) == Gedrueckt)  // Weisser_Rum 
      { 
      digitalWrite(Pumpe_2, ON);  // Pumpe Weisser Rum einschalten
      delay(500);
      }
  while(digitalRead(Taster3) == Gedrueckt)  // Orangenlikoer
      {
      digitalWrite(Pumpe_3, ON); // Pumpe Orangenlikoer einschalten
      delay(500);
      }
  while(digitalRead(Taster4) == Gedrueckt)  // Cranberrysaft
      { 
      digitalWrite(Pumpe_4, ON); // Pumpe Cranberrysaft einschalten
      delay(500);
      }
  while(digitalRead(Taster5) == Gedrueckt)  // Limettensaft
      {
      digitalWrite(Pumpe_5, ON);  // Pumpe Limettensaft einschalten
      delay(500);
      }
  while(digitalRead(Taster6) == Gedrueckt)  // Tequila
      {
      digitalWrite(Pumpe_6, ON);       // Pumpe Tequuila einschalten
      delay(500);
      }
  while(digitalRead(Taster7) == Gedrueckt)  // Brauner Rum
      {
      digitalWrite(Pumpe_7, ON);   // Pumpe Brauner Rum einschalten
      delay(500);
      }
  while(digitalRead(Taster8) == Gedrueckt)  // Pfirsichlikoer
      { 
      digitalWrite(Pumpe_8, ON);// Pumpe Pfirsichlikoer einschalten
      delay(500);
      }
  while(digitalRead(Taster9) == Gedrueckt)  // Ananassaft
      { 
      digitalWrite(Pumpe_9, ON);    // Pumpe Ananassaft einschalten
      delay(500); 
      }
  while(digitalRead(Taster10) == Gedrueckt) // Licoer_43
      {  
      digitalWrite(Pumpe_10, ON); // Pumpe Licoer_43 einschalten
      delay(500);
      }
  digitalWrite(Pumpe_1, OFF);  // Pumpe Wodka ausschalten    
  digitalWrite(Pumpe_2, OFF);  // Pumpe Weisser_Rum ausschalten
  digitalWrite(Pumpe_3, OFF);  // Pumpe Orangenlikoer ausschalten
  digitalWrite(Pumpe_4, OFF);  // Pumpe_Cranberrysaft ausschalten 
  digitalWrite(Pumpe_5, OFF);  // Pumpe Limettensaft ausschalten         
  digitalWrite(Pumpe_6, OFF);  // Pumpe Tequila ausschalten
  digitalWrite(Pumpe_7, OFF);  // Pumpe Brauner_Rum ausschalten
  digitalWrite(Pumpe_8, OFF);  // Pumpe Pfirsichlikoer ausschalten     
  digitalWrite(Pumpe_9, OFF);  // Pumpe_Ananassaft ausschalten       
  digitalWrite(Pumpe_10, OFF); // Pumpe Licoer_43 ausschalten
  Schlauch_fuellen_fertig = TRUE;
  delay(2000);
  }
else if(digitalRead(Taster12_Fertig) != Gedrueckt) { Schlauch_fuellen_fertig = FALSE; }
if(digitalRead(Taster1) == Gedrueckt && digitalRead(Taster12_Fertig) != Gedrueckt)  // Long island iced Tea
   {
    Serial.println("Long island"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
   Zapfzeiten_nullen();  // Zapfzeiten nullen
   Zapfzeit_1    = _2cl; // Wodka
   Zapfzeit_2    = _3cl; // Weisser Rum       
   Zapfzeit_3    = _2cl; // Orangenlikoer   
   Zapfzeit_5    = _1cl; // Limettensaft
   Zapfzeit_6    = _2cl; // Tequila
   
   //Zapfzeit_Gin          = _2cl; 
   //Zapfzeit_Orangensaft  = _2cl; // 
   //Zapfzeit_Cola         = _20cl; //     

   // Alle Taster LED's ausschalten
   TasterLEDsAusschalten(); // Taster 1-10 LEDs ausschalten
   digitalWrite(LED_Fertig,  LOW); // "LED Fertig" ausschalten
   digitalWrite(LED_Taster1, HIGH);  // LED des gewaehlten Cocktails einschalten    
   digitalWrite(LED_Taster11_Auswahl_bestaetigen, HIGH); // "LED Auswahl bestaetigen" einschalten
   digitalWrite(RGB_LED_GRUEN, OFF);    // "RGB LED GRUEN" ausschalten
   digitalWrite(RGB_LED_BLAU, OFF); // "RGB LED BLAU" ausschalten
   digitalWrite(RGB_LED_ROT, ON); // "RGB LED ROT"  einschalten
   Sekundenzaehler = 0;  // Blinkzeit fuer "LED Auswahl bestaetigen" zuruecksetzen
   PreviousMillis = millis(); // Zeitpunkt merken
   Cocktail_ausgewaehlt   = TRUE;  // Merker, das Auswahl getroffen, setzen
   }    
   
if(digitalRead(Taster2) == Gedrueckt && digitalRead(Taster12_Fertig) != Gedrueckt)  // Cuba Libre
   {
    Serial.println("Cuba Libre"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe   
   Zapfzeiten_nullen();  // Zapfzeiten nullen
   Zapfzeit_2    = _8cl; // Weisser Rum  
   Zapfzeit_5    = _1cl; // Limettensaft
   //Zapfzeit_Cola           = _20cl;

   // Alle Taster LED's ausschalten
   TasterLEDsAusschalten(); // Taster 1-10 LEDs ausschalten
   digitalWrite(LED_Fertig,  LOW); // "LED Fertig" ausschalten
   digitalWrite(LED_Taster2, HIGH);  // LED des gewaehlten Cocktails einschalten    
   digitalWrite(LED_Taster11_Auswahl_bestaetigen, HIGH); // "LED Auswahl bestaetigen" einschalten
   digitalWrite(RGB_LED_GRUEN, OFF);  // "RGB LED GRUEN" ausschalten
   digitalWrite(RGB_LED_BLAU, OFF);   // "RGB LED BLAU" ausschalten
   digitalWrite(RGB_LED_ROT, ON);     // "RGB LED ROT"  einschalten
   Sekundenzaehler = 0;  // Blinkzeit fuer "LED Auswahl bestaetigen" zuruecksetzen
   PreviousMillis = millis(); // Zeitpunkt merken
   Cocktail_ausgewaehlt   = TRUE;  // Merker, das Auswahl getroffen, setzen
   }    

if(digitalRead(Taster3) == Gedrueckt && digitalRead(Taster12_Fertig) != Gedrueckt)  // Hurricane
   {
    Serial.println("Hurricane"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
   Zapfzeiten_nullen();  // Zapfzeiten nullen
   Zapfzeit_2    = _4cl; // Weisser Rum
   Zapfzeit_5    = _8cl; // Limettensaft
   Zapfzeit_7    = _4cl; // Brauner_Rum
   Zapfzeit_9    = _6cl; // Ananassaft

   // Alle Taster LED's ausschalten
   TasterLEDsAusschalten(); // Taster 1-10 LEDs ausschalten
   digitalWrite(LED_Fertig,  LOW); // "LED Fertig" ausschalten
   digitalWrite(LED_Taster3, HIGH);  // LED des gewaehlten Cocktails einschalten    
   digitalWrite(LED_Taster11_Auswahl_bestaetigen, HIGH); // "LED Auswahl bestaetigen" einschalten
   digitalWrite(RGB_LED_GRUEN, OFF);  // "RGB LED GRUEN" ausschalten
   digitalWrite(RGB_LED_BLAU, OFF);   // "RGB LED BLAU" ausschalten
   digitalWrite(RGB_LED_ROT, ON);     // "RGB LED ROT"  einschalten
   Sekundenzaehler = 0;  // Blinkzeit fuer "LED Auswahl bestaetigen" zuruecksetzen
   PreviousMillis = millis(); // Zeitpunkt merken
   Cocktail_ausgewaehlt   = TRUE;  // Merker, das Auswahl getroffen, setzen
   }    

if(digitalRead(Taster4) == Gedrueckt && digitalRead(Taster12_Fertig) != Gedrueckt)  // Planters Punch
   {
    Serial.println("Planters Punch"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
   Zapfzeiten_nullen();  // Zapfzeiten nullen
   Zapfzeit_5    = _2cl; // Limettensaft
   Zapfzeit_7    = _6cl; // Brauner_Rum  
   Zapfzeit_9    = _6cl; // Ananassaft

   // Alle Taster LED's ausschalten
   TasterLEDsAusschalten(); // Taster 1-10 LEDs ausschalten
   digitalWrite(LED_Fertig,  LOW); // "LED Fertig" ausschalten
   digitalWrite(LED_Taster4, HIGH);  // LED des gewaehlten Cocktails einschalten    
   digitalWrite(LED_Taster11_Auswahl_bestaetigen, HIGH); // "LED Auswahl bestaetigen" einschalten
   digitalWrite(RGB_LED_GRUEN, OFF);  // "RGB LED GRUEN" ausschalten
   digitalWrite(RGB_LED_BLAU, OFF);   // "RGB LED BLAU" ausschalten
   digitalWrite(RGB_LED_ROT, ON);     // "RGB LED ROT"  einschalten
   Sekundenzaehler = 0;  // Blinkzeit fuer "LED Auswahl bestaetigen" zuruecksetzen
   PreviousMillis = millis(); // Zeitpunkt merken
   Cocktail_ausgewaehlt   = TRUE;  // Merker, das Auswahl getroffen, setzen
   }   

if(digitalRead(Taster5) == Gedrueckt && digitalRead(Taster12_Fertig) != Gedrueckt)  // Sex on the Beach
   {
    Serial.println("Sex on the beach"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
   Zapfzeiten_nullen();   // Zapfzeiten nullen
   Zapfzeit_1    = _6cl;  // Wodka
   Zapfzeit_4    = _10cl; // Cranberrysaft
   Zapfzeit_8    = _3cl;  // Pfirsichlikoer 

   // Alle Taster LED's ausschalten
   TasterLEDsAusschalten(); // Taster 1-10 LEDs ausschalten
   digitalWrite(LED_Fertig,  LOW); // "LED Fertig" ausschalten
   digitalWrite(LED_Taster5, HIGH);  // LED des gewaehlten Cocktails einschalten    
   digitalWrite(LED_Taster11_Auswahl_bestaetigen, HIGH); // "LED Auswahl bestaetigen" einschalten
   digitalWrite(RGB_LED_GRUEN, OFF);  // "RGB LED GRUEN" ausschalten
   digitalWrite(RGB_LED_BLAU, OFF);   // "RGB LED BLAU" ausschalten
   digitalWrite(RGB_LED_ROT, ON);     // "RGB LED ROT"  einschalten
   Sekundenzaehler = 0;  // Blinkzeit fuer "LED Auswahl bestaetigen" zuruecksetzen
   PreviousMillis = millis(); // Zeitpunkt merken
   Cocktail_ausgewaehlt   = TRUE;  // Merker, das Auswahl getroffen, setzen
   }    

if(digitalRead(Taster6) == Gedrueckt && digitalRead(Taster12_Fertig) != Gedrueckt)  // Tequila Sunrise
   {
    Serial.println("Tequila sunrise"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
   Zapfzeiten_nullen();  // Zapfzeiten nullen
   Zapfzeit_5    = _2cl;  // Limettensaft
   Zapfzeit_6    = _6cl;  // Tequila

   // Alle Taster LED's ausschalten
   TasterLEDsAusschalten(); // Taster 1-10 LEDs ausschalten
   digitalWrite(LED_Fertig,  LOW); // "LED Fertig" ausschalten

   digitalWrite(LED_Taster6, HIGH);  // LED des gewaehlten Cocktails einschalten    
   digitalWrite(LED_Taster11_Auswahl_bestaetigen, HIGH); // "LED Auswahl bestaetigen" einschalten
   digitalWrite(RGB_LED_GRUEN, OFF);  // "RGB LED GRUEN" ausschalten
   digitalWrite(RGB_LED_BLAU, OFF);   // "RGB LED BLAU" ausschalten
   digitalWrite(RGB_LED_ROT, ON);     // "RGB LED ROT"  einschalten
   Sekundenzaehler = 0;  // Blinkzeit fuer "LED Auswahl bestaetigen" zuruecksetzen
   PreviousMillis = millis(); // Zeitpunkt merken
   Cocktail_ausgewaehlt   = TRUE;  // Merker, das Auswahl getroffen, setzen
   }    

if(digitalRead(Taster7) == Gedrueckt && digitalRead(Taster12_Fertig) != Gedrueckt)  // Mai Tai
   {
    Serial.println("Mai Tai"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
   Zapfzeiten_nullen();  // Zapfzeiten nullen
   Zapfzeit_2    = _3cl;  // Weisser Rum       
   Zapfzeit_3    = _3cl;  // Orangenlikoer
   Zapfzeit_5    = _1cl;  // Limettensaft
   Zapfzeit_7    = _3cl;  // Brauner_Rum 
   Zapfzeit_9    = _6cl;  // Ananassaft  

   // Alle Taster LED's ausschalten
   TasterLEDsAusschalten(); // Taster 1-10 LEDs ausschalten
   digitalWrite(LED_Fertig,  LOW); // "LED Fertig" ausschalten

   digitalWrite(LED_Taster7, HIGH);  // LED des gewaehlten Cocktails einschalten    
   digitalWrite(LED_Taster11_Auswahl_bestaetigen, HIGH); // "LED Auswahl bestaetigen" einschalten
   digitalWrite(RGB_LED_GRUEN, OFF);  // "RGB LED GRUEN" ausschalten
   digitalWrite(RGB_LED_BLAU, OFF);   // "RGB LED BLAU" ausschalten
   digitalWrite(RGB_LED_ROT, ON);     // "RGB LED ROT"  einschalten
   Sekundenzaehler = 0;  // Blinkzeit fuer "LED Auswahl bestaetigen" zuruecksetzen
   PreviousMillis = millis(); // Zeitpunkt merken
   Cocktail_ausgewaehlt   = TRUE;  // Merker, das Auswahl getroffen, setzen
   } 

/*if(digitalRead(Taster8) == Gedrueckt && digitalRead(Taster12_Fertig) != Gedrueckt)  // Mojito
   {
   Zapfzeiten_nullen();  // Zapfzeiten nullen
   Zapfzeit_2    = _8cl; // Weisser Rum
   Zapfzeit_5    = _1cl; // Limettensaft
   Zapfzeit_Cola           = _20cl;

   // Alle Taster LED's ausschalten
   TasterLEDsAusschalten(); // Taster 1-10 LEDs ausschalten
   digitalWrite(LED_Fertig,  LOW); // "LED Fertig" ausschalten

   digitalWrite(LED_Taster8, HIGH);  // LED des gewaehlten Cocktails einschalten    
   digitalWrite(LED_Taster11_Auswahl_bestaetigen, HIGH); // "LED Auswahl bestaetigen" einschalten
   digitalWrite(RGB_LED_GRUEN, OFF);  // "RGB LED GRUEN" ausschalten
   digitalWrite(RGB_LED_BLAU, OFF);   // "RGB LED BLAU" ausschalten
   digitalWrite(RGB_LED_ROT, ON);     // "RGB LED ROT"  einschalten
   Sekundenzaehler = 0;  // Blinkzeit fuer "LED Auswahl bestaetigen" zuruecksetzen
   PreviousMillis = millis(); // Zeitpunkt merken
   Cocktail_ausgewaehlt   = TRUE;  // Merker, das Auswahl getroffen, setzen
   }
   */
if(digitalRead(Taster8) == Gedrueckt && digitalRead(Taster12_Fertig) != Gedrueckt)  // Sweet Summertime
   {
    Serial.println("sweet Summertime"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
   Zapfzeiten_nullen();  // Zapfzeiten nullen
   Zapfzeit_5    = _1cl;  // Limettensaft
   Zapfzeit_10   = _6cl;  // Licoer_43  
   //Zapfzeit_Cola           = 0; 

   // Alle Taster LED's ausschalten
   TasterLEDsAusschalten(); // Taster 1-10 LEDs ausschalten
   digitalWrite(LED_Fertig,  LOW); // "LED Fertig" ausschalten

   digitalWrite(LED_Taster8, HIGH);  // LED des gewaehlten Cocktails einschalten    
   digitalWrite(LED_Taster11_Auswahl_bestaetigen, HIGH); // "LED Auswahl bestaetigen" einschalten
   digitalWrite(RGB_LED_GRUEN, OFF);  // "RGB LED GRUEN" ausschalten
   digitalWrite(RGB_LED_BLAU, OFF);   // "RGB LED BLAU" ausschalten
   digitalWrite(RGB_LED_ROT, ON);     // "RGB LED ROT"  einschalten
   Sekundenzaehler = 0;  // Blinkzeit fuer "LED Auswahl bestaetigen" zuruecksetzen
   PreviousMillis = millis(); // Zeitpunkt merken
   Cocktail_ausgewaehlt   = TRUE;  // Merker, das Auswahl getroffen, setzen
   }
  
if(digitalRead(Taster9) == Gedrueckt && digitalRead(Taster12_Fertig) != Gedrueckt)  // Virgin Sunrise
   {
    Serial.println("Virgin Sunrise"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
   Zapfzeiten_nullen();  // Zapfzeiten nullen
   Zapfzeit_5    = _1cl;  // Limettensaft  
   Zapfzeit_9    = _8cl;  // Ananassaft
   //Zapfzeit_Cola           = 0;  

   // Alle Taster LED's ausschalten
   TasterLEDsAusschalten(); // Taster 1-10 LEDs ausschalten
   digitalWrite(LED_Fertig,  LOW); // "LED Fertig" ausschalten

   digitalWrite(LED_Taster9, HIGH);  // LED des gewaehlten Cocktails einschalten    
   digitalWrite(LED_Taster11_Auswahl_bestaetigen, HIGH); // "LED Auswahl bestaetigen" einschalten
   digitalWrite(RGB_LED_GRUEN, OFF);  // "RGB LED GRUEN" ausschalten
   digitalWrite(RGB_LED_BLAU, OFF);   // "RGB LED BLAU" ausschalten
   digitalWrite(RGB_LED_ROT, ON);     // "RGB LED ROT"  einschalten
   Sekundenzaehler = 0;  // Blinkzeit fuer "LED Auswahl bestaetigen" zuruecksetzen
   PreviousMillis = millis(); // Zeitpunkt merken
   Cocktail_ausgewaehlt   = TRUE;  // Merker, das Auswahl getroffen, setzen
   }

if(digitalRead(Taster10)== Gedrueckt && digitalRead(Taster12_Fertig) != Gedrueckt)  // Flamingo
   {
    Serial.println("Flamingo"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
   Zapfzeiten_nullen();   // Zapfzeiten nullen
   Zapfzeit_4    = _2cl;  // Cranberrysaft
   Zapfzeit_5    = _2cl;  // Limettensaft     

   // Alle Taster LED's ausschalten
   TasterLEDsAusschalten(); // Taster 1-10 LEDs ausschalten
   digitalWrite(LED_Fertig,  LOW); // "LED Fertig" ausschalten

   digitalWrite(LED_Taster10, HIGH);  // LED des gewaehlten Cocktails einschalten    
   digitalWrite(LED_Taster11_Auswahl_bestaetigen, HIGH); // "LED Auswahl bestaetigen" einschalten
   digitalWrite(RGB_LED_GRUEN, OFF);  // "RGB LED GRUEN" ausschalten
   digitalWrite(RGB_LED_BLAU, OFF);   // "RGB LED BLAU" ausschalten
   digitalWrite(RGB_LED_ROT, ON);     // "RGB LED ROT"  einschalten
   Sekundenzaehler = 0;  // Blinkzeit fuer "LED Auswahl bestaetigen" zuruecksetzen
   PreviousMillis = millis(); // Zeitpunkt merken
   Cocktail_ausgewaehlt   = TRUE;  // Merker, das Auswahl getroffen, setzen
   }

if(Cocktail_ausgewaehlt == TRUE && (millis() - PreviousMillis) >= 1000) // Cocktail ausgewaehlt, bestaetigen LED blinken lassen
  {
  PreviousMillis = millis(); // Zeitpunkt merken
  Sekundenzaehler++; // Zaehlt die Sekunden wie lange "LED Auswahl bestaetigen" schon blinkt
  if(Sekundenzaehler >= 10)
      {
      // LED's ausschalten
      TasterLEDsAusschalten(); // Taster 1-10 LEDs ausschalten
      digitalWrite(LED_Taster11_Auswahl_bestaetigen, LOW);      
      digitalWrite(RGB_LED_GRUEN, ON); // "RGB LED GRUEN" einschalten
      digitalWrite(RGB_LED_BLAU, ON);  // "RGB LED BLAU"  einschalten
      digitalWrite(RGB_LED_ROT, ON);   // "RGB LED ROT"   einschalten
      Cocktail_ausgewaehlt = FALSE; // Merker Auswahl getroffen zuruecksetzen      
      }
  else{
      //if(LED_State == LOW) { LED_State = HIGH; }
     // else LED_State = LOW;
      digitalWrite(LED_Taster11_Auswahl_bestaetigen, !digitalRead(LED_Taster11_Auswahl_bestaetigen)); // "LED Auswahl bestaetigen" invertieren      
      digitalWrite(RGB_LED_ROT, !digitalRead(LED_Taster11_Auswahl_bestaetigen));  // "RGB LED ROT" invertieren
      //digitalWrite(LED_Taster11_Auswahl_bestaetigen, HIGH); // "LED Auswahl bestaetigen" einschalten
      }   
  }

if(Cocktail_ausgewaehlt == TRUE && digitalRead(Taster11_Auswahl_bestaetigen) == Gedrueckt)  // Cocktail ausgewaehlt, Auswahl bestaetigen
  {    
    Serial.println("Bestaetigt"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
  // Pumpen einschalten 
  /*if(Zapfzeit_1)  { digitalWrite(Pumpe_1, ON); }  // Pumpe Wodka einschalten
  if(Zapfzeit_2)  { digitalWrite(Pumpe_2, ON); }  // Pumpe Weisser_Rum einschalten
  if(Zapfzeit_3)  { digitalWrite(Pumpe_3, ON); }  // Pumpe Orangenlikoer einschalten
  if(Zapfzeit_4)  { digitalWrite(Pumpe_4, ON); }  // Pumpe_Cranberrysaft einschalten 
  if(Zapfzeit_5)  { digitalWrite(Pumpe_5, ON); }  // Pumpe Limettensaft einschalten     
  if(Zapfzeit_6)  { digitalWrite(Pumpe_6, ON); }  // Pumpe Tequila einschalten
  if(Zapfzeit_7)  { digitalWrite(Pumpe_7, ON); }  // Pumpe Brauner_Rum einschalten 
  if(Zapfzeit_8)  { digitalWrite(Pumpe_8, ON); }  // Pumpe Pfirsichlikoer einschalten  
  if(Zapfzeit_9)  { digitalWrite(Pumpe_9, ON); }  // Pumpe_Ananassaft einschalten   
  if(Zapfzeit_10) { digitalWrite(Pumpe_10, ON);}  // Pumpe Licoer_43 einschalten   
  //if(Zapfzeit_Cola)          { digitalWrite(Pumpe_Cola, ON); }          // Pumpe Cola einschalten

  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern*/
  digitalWrite(LED_Taster11_Auswahl_bestaetigen, LOW);
  Cocktail_ausgewaehlt = FALSE;          // Merker, das Auswahl getroffen, zuruecksetzen
  Zapfen();                              // Funktion zum Zapfen aufrufen
  }  
  
 
}
// Ende void loop

// Ausgelagerte Funktionen
void Zapfen()
 {
  Serial.println("Zapfen"); // Text oder Variable ausgeben, PrintIn mach automatisch "Enter" nach Ausgabe
 // RGB_LED_ROT einschalten
 digitalWrite(RGB_LED_GRUEN, OFF); 
 digitalWrite(RGB_LED_BLAU, OFF); 
 digitalWrite(RGB_LED_ROT, ON);
 
if(Zapfzeit_1)  
  { 
  Serial.println("Zapfen Pumpe 1");  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe  
  digitalWrite(Pumpe_1, ON);  
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern 
  Serial.print("Startzeitpunkt Pumpe 1 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe    
  
  while(Verstrichene_Zapfzeit <= Zapfzeit_1)
    {
    Verstrichene_Zapfzeit = (millis() - PreviousMillis);  // Aktuelle Zeit - Zeipunkt seitdem die Pumpen eingeschaltet wurden  
    if(Verstrichene_Zapfzeit >= Zapfzeit_1) // Wodka         
      {       
      digitalWrite(Pumpe_1, OFF); // Pumpe Wodka ausschalten
      }
    }
  Verstrichene_Zapfzeit = 0;
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  Serial.print("Stoppzeitpunkt Pumpe 1 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
  }

if(Zapfzeit_2)  
  {
  Serial.println("Zapfen Pumpe 2");  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe   
  digitalWrite(Pumpe_2, ON);  
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  Serial.print("Startzeitpunkt Pumpe 2 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe     
  
  while(Verstrichene_Zapfzeit <= Zapfzeit_2)
    {
    Verstrichene_Zapfzeit = (millis() - PreviousMillis);  // Aktuelle Zeit - Zeipunkt seitdem die Pumpen eingeschaltet wurden  
    if(Verstrichene_Zapfzeit >= Zapfzeit_2) // Wodka         
      {       
      digitalWrite(Pumpe_2, OFF); // Pumpe Wodka ausschalten
      }
    }
  Verstrichene_Zapfzeit = 0;
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  Serial.print("Stoppzeitpunkt Pumpe 2 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
  }

if(Zapfzeit_3)  
  { 
  Serial.println("Zapfen Pumpe 3");  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
  digitalWrite(Pumpe_3, ON);  
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern   
  Serial.print("Startzeitpunkt Pumpe 3 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe  
  
  while(Verstrichene_Zapfzeit <= Zapfzeit_3)
    {
    Verstrichene_Zapfzeit = (millis() - PreviousMillis);  // Aktuelle Zeit - Zeipunkt seitdem die Pumpen eingeschaltet wurden  
    if(Verstrichene_Zapfzeit >= Zapfzeit_3) // Wodka         
      {       
      digitalWrite(Pumpe_3, OFF); // Pumpe Wodka ausschalten
      }
    }
  Verstrichene_Zapfzeit = 0;
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  Serial.print("Stoppzeitpunkt Pumpe 3 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
  }

if(Zapfzeit_4)  
  { 
  Serial.println("Zapfen Pumpe 4");  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe  
  digitalWrite(Pumpe_4, ON);  
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern   
  Serial.print("Startzeitpunkt Pumpe 4 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe  
  
  while(Verstrichene_Zapfzeit <= Zapfzeit_4)
    {
    Verstrichene_Zapfzeit = (millis() - PreviousMillis);  // Aktuelle Zeit - Zeipunkt seitdem die Pumpen eingeschaltet wurden  
    if(Verstrichene_Zapfzeit >= Zapfzeit_4) // Wodka         
      {       
      digitalWrite(Pumpe_4, OFF); // Pumpe Wodka ausschalten
      }
    }
  Verstrichene_Zapfzeit = 0;
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  Serial.print("Stoppzeitpunkt Pumpe 4 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
  }  

if(Zapfzeit_5)  
  {
  Serial.println("Zapfen Pumpe 5");  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe 
  digitalWrite(Pumpe_5, ON);  
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern   
  Serial.print("Startzeitpunkt Pumpe 5 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe  
  
  while(Verstrichene_Zapfzeit <= Zapfzeit_5)
    {
    Verstrichene_Zapfzeit = (millis() - PreviousMillis);  // Aktuelle Zeit - Zeipunkt seitdem die Pumpen eingeschaltet wurden  
    if(Verstrichene_Zapfzeit >= Zapfzeit_5) // Wodka         
      {       
      digitalWrite(Pumpe_5, OFF); // Pumpe Wodka ausschalten
      }
    }
  Verstrichene_Zapfzeit = 0;
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  Serial.print("Stoppzeitpunkt Pumpe 5 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
  }
  

if(Zapfzeit_6)  
  { 
  Serial.println("Zapfen Pumpe 6");  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe  
  digitalWrite(Pumpe_6, ON);  
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern   
  Serial.print("Startzeitpunkt Pumpe 6 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe  
  
  while(Verstrichene_Zapfzeit <= Zapfzeit_6)
    {
    Verstrichene_Zapfzeit = (millis() - PreviousMillis);  // Aktuelle Zeit - Zeipunkt seitdem die Pumpen eingeschaltet wurden  
    if(Verstrichene_Zapfzeit >= Zapfzeit_6) // Wodka         
      {       
      digitalWrite(Pumpe_6, OFF); // Pumpe Wodka ausschalten
      }
    }
  Verstrichene_Zapfzeit = 0;
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  Serial.print("Stoppzeitpunkt Pumpe 6 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
  }
  

if(Zapfzeit_7)  
  { 
  Serial.println("Zapfen Pumpe 7");  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe   
  digitalWrite(Pumpe_7, ON);  
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern  
  Serial.print("Startzeitpunkt Pumpe 7 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe   
  
  while(Verstrichene_Zapfzeit <= Zapfzeit_7)
    {
    Verstrichene_Zapfzeit = (millis() - PreviousMillis);  // Aktuelle Zeit - Zeipunkt seitdem die Pumpen eingeschaltet wurden  
    if(Verstrichene_Zapfzeit >= Zapfzeit_7) // Wodka         
      {       
      digitalWrite(Pumpe_7, OFF); // Pumpe Wodka ausschalten
      }
    }
  Verstrichene_Zapfzeit = 0;
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  Serial.print("Stoppzeitpunkt Pumpe 7 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
  }
  

if(Zapfzeit_8)  
  { 
  Serial.println("Zapfen Pumpe 8");  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe  
  digitalWrite(Pumpe_8, ON);  
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern 
  Serial.print("Startzeitpunkt Pumpe 8 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe    
  
  while(Verstrichene_Zapfzeit <= Zapfzeit_8)
    {
    Verstrichene_Zapfzeit = (millis() - PreviousMillis);  // Aktuelle Zeit - Zeipunkt seitdem die Pumpen eingeschaltet wurden  
    if(Verstrichene_Zapfzeit >= Zapfzeit_8) // Wodka         
      {       
      digitalWrite(Pumpe_8, OFF); // Pumpe Wodka ausschalten
      }
    }
  Verstrichene_Zapfzeit = 0;
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  Serial.print("Stoppzeitpunkt Pumpe 8 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
  }
  
 
if(Zapfzeit_9)  
  { 
  Serial.println("Zapfen Pumpe 9");  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
  digitalWrite(Pumpe_9, ON);  
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  Serial.print("Startzeitpunkt Pumpe 9 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe   
  
  while(Verstrichene_Zapfzeit <= Zapfzeit_9)
    {
    Verstrichene_Zapfzeit = (millis() - PreviousMillis);  // Aktuelle Zeit - Zeipunkt seitdem die Pumpen eingeschaltet wurden  
    if(Verstrichene_Zapfzeit >= Zapfzeit_9) // Wodka         
      {       
      digitalWrite(Pumpe_9, OFF); // Pumpe Wodka ausschalten
      }
    }
  Verstrichene_Zapfzeit = 0;
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  Serial.print("Stoppzeitpunkt Pumpe 9 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe 
  }
   

if(Zapfzeit_10)  
  { 
  Serial.println("Zapfen Pumpe 10");  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
  digitalWrite(Pumpe_10, ON);  
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern  
  Serial.print("Startzeitpunkt Pumpe 10 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe   
  
  while(Verstrichene_Zapfzeit <= Zapfzeit_10)
    {
    Verstrichene_Zapfzeit = (millis() - PreviousMillis);  // Aktuelle Zeit - Zeipunkt seitdem die Pumpen eingeschaltet wurden  
    if(Verstrichene_Zapfzeit >= Zapfzeit_10) // Wodka         
      {       
      digitalWrite(Pumpe_10, OFF); // Pumpe Wodka ausschalten
      }
    }
  Verstrichene_Zapfzeit = 0;
  PreviousMillis = millis();  // Zeitpunkt von Pumpenstart in PreviousMillis speichern
  Serial.print("Stoppzeitpunkt Pumpe 10 ");
  Serial.println(PreviousMillis, DEC);  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
  }
 
 
// Alle Taster LED's ausschalten 
TasterLEDsAusschalten();
Merker_Zapfbits = 0;            // Merker fuer Zapfbits zuruecksetzen
digitalWrite(RGB_LED_ROT, HIGH);
digitalWrite(RGB_LED_GRUEN, LOW);       
digitalWrite(LED_Fertig, HIGH); // "LED Fertig" einschalten
PreviousMillis = millis();      // Zeitpunkt seit LED gruen an in PreviousMillis speichern
Serial.println("Zapfen Ende");  // Text oder Variable ausgeben, Println mach automatisch "Enter" nach Ausgabe
}


// Funktion um Taster 1-10 LEDs auszuschalten
void TasterLEDsAusschalten()
  {
  digitalWrite(LED_Taster1, LOW); 
  digitalWrite(LED_Taster2, LOW); 
  digitalWrite(LED_Taster3, LOW); 
  digitalWrite(LED_Taster4, LOW); 
  digitalWrite(LED_Taster5, LOW);
  digitalWrite(LED_Taster6, LOW); 
  digitalWrite(LED_Taster7, LOW); 
  digitalWrite(LED_Taster8, LOW); 
  digitalWrite(LED_Taster9, LOW); 
  digitalWrite(LED_Taster10,LOW);        
  }

// Funktion um alle Zapfzeiten zu nullen
void Zapfzeiten_nullen()  
  {
  Zapfzeit_1    = 0;     // Wodka
  Zapfzeit_2    = 0;     // Weisser Rum       
  Zapfzeit_3    = 0;     // Orangenlikoer
  Zapfzeit_4    = 0;     // Cranberrysaft
  Zapfzeit_5    = 0;     // Limettensaft
  Zapfzeit_6    = 0;     // Tequila
  Zapfzeit_7    = 0;     // Brauner_Rum
  Zapfzeit_8    = 0;     // Pfirsichlikoer  
  Zapfzeit_9    = 0;     // Ananassaft
  Zapfzeit_10   = 0;     // Licoer_43
  }     

Nicht wirklich kostenlos, aber doch recht preiswert sind Papier, Bleistift und Radiergummi. Den Rest kennst und kannst Du, wobei ein Scanner bessere Resultate liefert.

Ich male gerne mit CorelDraw, aber da gibt es bessere Programme für Schaltungen.

1 Like

was kannst du in Screenshot 3 erkennen?!?

Du kannst die Ausgaben aus dem Serial Monitor mit STRG-C STRG-V in Code-Tags hier posten.

1 Like

Mach mal parallel zur Freilaufdiode noch ein RC - Glied (100n 100R)

Hi,

das mit dem RC Glied werde ich nächstes Wochenende ausprobieren.

An die Zeichnung gebe ich mich dran.

Leider sind die Fotos nicht von mir, sonst hätte ich das natürlich direkt aus der CC kopiert oder einen Screenshot gemacht und kein Foto.

Ich schreib die Ausgaben mal hier auf:

Bild 1(Funktion ohne Probleme)

  • Auswahl Sex on the Beach
  • Auswahl Bestätigt
  • Start Funktion "zapfen()"
  • Zapfen Pumpe 1
  • Startzeitpunkt Pumpe 1 68860
  • Stoppzeitpunkt Pumpe 1 71411
  • Zapfen Pumpe 4
  • Startzeitpunkt Pumpe 4 71441
  • Stoppzeitpunkt Pumpe 4 75662
  • Zapfen Pumpe 8
  • Startzeitpunkt Pumpe 8 75662
  • Stoppzeitpunkt Pumpe 8 75882
  • Zapfen Ende
  • RBG aus

Vom Ablauf her korrekt, aber Pumpe 8 hätte ca. 1275 mS an bleiben müssen.

Bild 2(Mit Fehler im Ablauf)

  • Auswahl Sex on the Beach
  • Auswahl Bestätigt
  • Start Funktion "zapfen()"
  • Zapfen Pumpe 1
  • Startzeitpunkt Pumpe 1 32450
  • Stoppzeitpunkt Pumpe 1 35001
  • Zapfen Pumpe 4
  • Startzeitpunkt Pumpe 4 3eitpuStkt Pumpe1
  • Zap??4??
  • Zapfen Pumpe 8
  • Startzeitpunkt Pumpe 8 39252
  • Stoppzeitpunkt Pumpe 8 39265
  • Zapfen Ende
  • RBG aus

Auch hier hat Pumpe 8 viel zu früh aufgehört.

Bild 3(Fehler im Ablauf)

  • Auswahl Sex on the Beach
  • Auswahl Bestätigt
  • Start Funktion "zapfen()"
  • Zapfen Pumpe 1
  • Startzeitpunkt Pumpe 1 41502
  • Stoppzeitpunkt Pumpe 1 44053
  • Zapfen Pumpe 4
  • Startzeitpunkt Pumpe 4 44053
  • Stoppzeitpunkt Pumpe 4 48304
  • Zapfen Pumpe 8
  • Startzeitpunkt Pumpe 8 48304
  • Stoppzeitpunkt Pumpe 4
  • Startzeitpunkt Pumpe 7 48507
  • Startzeitpunkt Pumpe 7 48507
  • Zapfen Pumpe 8
  • Startzeitpunkt Pumpe 8 48544
  • Stoppzeitpunkt Pumpe 8 48788
  • Zapfen Ende
  • RBG aus

Gruß
Sebastian

// Cocktailmaschine mit Pumpen
// Variablendeklaration
unsigned int Zapfzeit[]   = {
  0,  // Wodka, in mS, max Zeit ~33 Sekunden
  0,  // Brauner_Rum
  0,  // Weisser_Rum
  0,  // Tequila
  0,  // Orangenlikoer
  0,  // Pfirsichlikoer
  0,  // Limettensaft
  0,  // Ananassaft
  0,  // Cranberrysaft
  0  // Licoer_43
}
int Merker_Zapfbits          = 0; // Je Pumpe wird ein Bit gesetzt, wenn Pumpe fertig gezapft hat
unsigned long Verstrichene_Zapfzeit    = 0; // Verstrichene Zapfzeit
unsigned long Verstrichene_LED_Gruen_An_Zeit  = 0; // Verstrichene LED gruen an Zeit
unsigned long PreviousMillis = 0; // Zeitstempel
bool Cocktail_ausgewaehlt    = 0; // Merker ob Cocktail ausgewaehlt
byte Sekundenzaehler         = 0; // Sekundenzaehler fur LED blinken
byte Schlauch_fuellen_fertig = 0; // Merker ob Schlauch/Schläuche gefüllt

// Defines
#define OFF   1       // Pumpenrelais sind invertiert
#define ON    0
#define Gedrueckt LOW
#define _1cl  425     // Zapfzeit in ms, der Compiler ersetzt ueberall wo _1cl auftaucht, _1cl durch 425
#define _2cl  850     // Zapfzeit in ms, ""
#define _3cl  1275    // Zapfzeit in ms, ""
#define _4cl  1700    // Zapfzeit in ms, ""
#define _6cl  2550    // Zapfzeit in ms, ""
#define _8cl  3400    // Zapfzeit in ms, ""
#define _10cl 4250    // Zapfzeit in ms, ""
#define _12cl 5100    // Zapfzeit in ms, ""
#define _20cl 8500    // Zapfzeit in ms, ""

#define start(x) digitalWrite((x),ON)
#define stopp(x) digitalWrite((x),OFF)

const byte Ten = 10;
const byte Twelw = 12;

// Ein- & Ausgaenge
const byte LEDs[Twelw] = {
  24, // LED Taster1
  28, // LED Taster2
  32, // LED Taster3
  36, // LED Taster4
  40, // LED Taster5
  25, // LED Taster6
  29, // LED Taster7
  33, // LED Taster8
  37, // LED Taster9
  41, // LED Taster10
  9, // Pin LEDs11
  4 // Pin LED_fertig
}

const byte Taster[Twelw] = {
  22, // Pin Taster1 Long Island Icetea
  26, // Pin Taster2 Cuba Libre
  30, // Pin Taster3 Hurricane
  34, // Pin Taster4 Planters Punch
  38, // Pin Taster5 Sex on the Beach
  23, // Pin Taster6 Tequila Sunrise
  27, // Pin Taster7 Mai Tai
  31, // Pin Taster8 Mojito
  35, // Pin Taster9 Virgin Sunrise
  39, // Pin Taster10 Flamingo
  8, // Pin Taster11
  3 // Pin Taster12
}

// Linke Reihe
const byte Pump[Ten]  = {
  44,   // Ausgang Pumpe Wodka
  46,   // Ausgang Pumpe Weisser_Rum
  48,   // Ausgang Pumpe Orangenlikör
  50,   // Ausgang Pumpe Cranberrysaft
  52,   // Ausgang Pumpe Limettensaft
  // Rechte Reihe
  45,   // Ausgang Pumpe Tequila
  47,   // Ausgang Pumpe Brauner_Rum
  49,   // Ausgang Pumpe Pfirsichlikoer
  51,   // Ausgang Pumpe Ananassaft
  53   // Ausgang Pumpe Licoer 43
}

const int RGB_LED_GRUEN        = 7;    // LED Band ueber Zapfstelle
const int RGB_LED_BLAU         = 6;
const int RGB_LED_ROT          = 5;

// Funktionsprototypen
void Zapfen();                 // Funktion zum Zapfen
void TasterLEDsAusschalten();    // Funktion um alle LEDs auszuschalten
void Zapfzeiten_nullen();      // Funktion um alle Zapfzeiten zu nullen


// Initialisierung von Ein- und Ausgaengen
void setup() {
  // Anmeldung Eingaenge
  for (int i = 0; i < Twelw; i++) {
    pinMode(Taster[i], INPUT_PULLUP);
    pinMode(LEDs[i], OUTPUT);
  }

  // Anmeldung Ausgaenge Pumpen 
  for (int i = 0; i < Ten; i++)stopp(Pump[i]);
  delay(100);
  for (int i = 0; i < Ten; i++)pinMode(Pump[i], OUTPUT);

  pinMode(RGB_LED_GRUEN, OUTPUT); // LED Band ueber Zapfstelle
  pinMode(RGB_LED_BLAU,  OUTPUT);
  pinMode(RGB_LED_ROT,   OUTPUT);
  digitalWrite(RGB_LED_GRUEN, HIGH); // Alle 3 Farben einschalten, um direkt weiss zu erzeugen
  digitalWrite(RGB_LED_BLAU, HIGH);
  digitalWrite(RGB_LED_ROT, HIGH);

  Serial.begin(9600); // Oeffnet die serielle Schnittstelle
}

// Funktion um Taster 1-10 LEDs auszuschalten
void TasterLEDsAusschalten(){
  for (int i = 0; i < Twelw; i++)digitalWrite(LEDs[i], LOW);
}

// Funktion um alle Zapfzeiten zu nullen
void Zapfzeiten_nullen() {
  for (int i = 0; i < Ten; i++)Zapfzeit[i]    = 0;
}

nicht vollständig, aber du siehst wie einfach man den Text reduzieren kann
nächster Schritt die Rezepte in eine Array zu packen und Abgabe universal zu machen.
z.B.:

const uint16_t = Recept[][10] = {
  {_2cl, _3cl, _2cl, _1cl, _2cl, 0, 0, 0, 0, 0} //Long island
}
void Zapfen(byte TasteNum) {
  digitalWrite(LEDs[TasteNum], ON);
  for (int i = 0; i < Ten; i++) {
    if (Recept[TasteNum][i] > 0) {
      start(Pump[i]);
      delay(Recept[TasteNum][i]);
      stopp(Pump[i]);
    }
  }
  digitalWrite(LEDs[TasteNum], OFF);
}
1 Like

Danke für die coding Tipps, ich werde einige Teile davon übernehmen,
hab edas aber auch teilweise bewusst so gemacht, weil ich es so leichter verstehe und vor allem mein Kumpel der garnicht programmieren kann.
Das ändert ja auch leider erst mal nichts am Problem der Maschine.

Anbei der vereinfachte Schaltplan, Pumpen und Schalter sind natürlich mehrfach vorhanden, vom Anschluss her aber identisch.

Ob die 5V Arduino Relais interne Freilaufdioden haben, kann ich nicht sagen.
Das RC Glied in rot habe ich noch nicht umgesetzt.

1 Like

Welche Relais verwendest Du? Relaismodule oder einzelne Relais?

Hallo rlpp0r

Hast du auch einen längeren Laufzeittest ohne Relais und Pumpen durchgeführt, um die Fehlerursache, entweder "Programm" oder Hardware, besser eingrenzen zu können?

Zeige doch mal detailiert die Sektion um den Spannungsregler LM7805. Hast Du da Abblock-Kondensatoren und vor allem auch Puffer-Elko's dran? oder ist das nur ein Nackter lm7805 den Du da Eingesetzt hast? Dazu wäre es , falls das K1 kein Relais-Modul sondern nur ein Relais ist, von vorteil, wenn auch dieses Relais eine Diode bekommt, um die Rückspannung beim Aus-Schalten zu vermeiden. Der LM7805 wird es dir danken, ausserdem kann dies auch hohe (Aus)-Schaltspannung vom Arduino fernhalten, was ebenfalls zur Stabilität der Schaltung beiträgt. Sollte K1 ein Relais-Modul sein, dürfte die Diode da drauf sen. Die Kondensatoren ,besonders die Elkos um den LM7805 sind aber unverzichtbar, da ansonsten beim Einschalten des Relais Kleine Spannungeinbrüche durchaus zu einem unstabilen verhalten des Arduinos führen können, da da Relais den Strom ja (uber den LM7805) vom 10V Regler-Modul bezieht, an welchem der Arduino UND die Pumpe hängt. Du kannst auch in der Nähe des Pumpen Anschlusses (kKontakt K1/13) nach GND noch nen Elko ab 220µF einbauen, das entlastet das 10V Reglermodul und stützt die Spannung im Einschaltmoment der Pumpe. Auch dies schützt vor Spannungseinbrüchen und sorgt dafür, dass der Arduino stabil arbeiten kann.

Hi,

mein Kumpel, ich war nicht dabei, hat ca. 20x ohne angeschlossene Pumpen getestet
und ca. 20x so dass nur der Arduino und die Taster Spannung über den USB Anschluss hatten.
Dabei ist das Problem nie aufgetreten.

Ich habe bei mir auch einen vereinfachten Testaufbau auf einem Breadboard mit LED's statt Pumpen und ohne Relais, aber auch ohne Netzteile, nur USB. Da habe ich das bestimmt 500x ausprobiert und es ist nie aufgetreten.

Am Festspannungsregler habe ich nur 2 kleine Tantal Kondensatoren mit 0,33uF am Ein- und 0,1uF am Ausgang gegen Masse, keine Elkos.

Ich hatte auch schon mal überlegt Richtung Arduino eine Diode einzubauen und dahinter einen Kondensator um die Spannung am Arduino etwas zu puffern.

Es werden Relais Module verwendet.

Diese Pumpen werden verwendet:

Ursprünglich war es so programmiert, dass bis zu 5 Pumpen gleichzeitig angingen und zu unterschiedlichen Zeiten ausgehen sollten, deshalb die Arbeit mit Millis.
Ich dachte es könnte daran liegen und hatte es deshalb so abgeändert, das immer nur eine Pumpe an ist.
Es hat aber keinen Unterschied gemacht, das Problem ist nicht häufiger oder seltener aufgetreten.

Gruß
rlpp0r

Um den Fehler besser zu finden, kannst du dir ja einen Sketch schreiben der nach einem Tastendruck die Pumpe in einer Endlosschleife ein und ausschaltet.
Falls der Fehler mit RC Glied über dem Motor bleibt, mach das RC Glied mal über den Relaiskontakt.

Hi,

kurze Rückmeldung.

Nachdem ich in die Zuleitung zum Arduino und den Pumpen je eine Diode eingebaut sowie die Pumpen mit Alufolie umwickelt habe, ist das Problem nicht mehr aufgetreten.

Parallel zur Freilaufdiode habe ich anschließend auch noch das RC Glied geschaltet.

Am Arduino wurde mittlerweile ein Shield zum Festschrauben der Adern aufgesteckt, und an den Relais die Adern mit Heißkleber fixiert. So wird sich beim Transport wohl auch nichts loswackeln.

Der Code wurde sehr ähnlich wie oben beschrieben in Arrays und for Schleifen abgeändert.

Das Problem wird jetzt hoffentlich nicht mehr auftreten.

Danke für Eure Hilfe.

1 Like

Hallo,
Cocktail Maschine und sind die verwendeten Pumpen tatsächlich "Lebensmittelecht" ? Das kann ich mir fast nicht vorstellen.

Hi,

den Link der Pumpen hatte ich weiter oben gepostet.

Im Titel steht dabei zwar Tee Maschine und auch bei den Beispielbildern weiter unten werden sie für Trinkwasser usw. eingesetzt, aber das Wort "Lebensmittelecht" habe ich nicht gefunden.

Dann solltest du besser danach suchen.
Alles andere halte ich für "riskant". Grade mit Alkohol, der gerne mal was rauslöst.

Nur wenn sicher Lebensmittelecht dran steht und in Deutschland verkauft wird, würde ich es auch glauben. Und das sind meistens "Schlauchpumpen", wo man den Schlauch leicht wechseln kann.

Und aus Alkohol (nicht nur) festem Silikon ist.

Sorry, aber das verstehe ich nicht.

Gummischlauch und Alkohol ist nicht grad prickelnd.
Und nicht jeder Silikonschlauch ist auch Alkoholfest. Da werden Weichmacher ggfls. ausgespült und das Ding wird konochenhart - Und der Mix ist sicher auch nicht besser als mit obigen Kreiselpumpen.

Lebensmittelecht != alkoholbeständig.

1 Like

Grundsatzerklährung Tantalkondensatoren sind auch Elektrolytkondensatoren also ELKO.
Oder meinst Du KERKO (Keramikkondensator)?
Zur Info. Ein nackter LM8705 (in T220 Gehäuse) kann ca 1W an die Umwelt abgeben. Bei einer Spannungsreduktion von 10V auf 5V falla am 7805 5V ab und 1W Verlustleistung ist bereits bei 200mA erreicht.

Die verlinkte Relaisplatine hat srd-05vdc-sl-c Relais montiert. Die haben einen Stromverbrauch von ca 71mA . Bereits 3 angezogenen Relais überlasten den Spannungsstabilisator.

Grüße Uwe