Coktailmaschine Probleme mit Relaisboard

Hallo,
ich bin ein relativer Arduino Anfänger und möchte jetzt mein erstes größere Projekt umsetzten. Ich möchte eine Coktailmaschine bauen mit der ich bis zu 12 verschiedenen Zutaten kombinieren kann.
Zu diesem Zweck habe ich mir von Elegoo ein 8 Relaymodul und ein 4 Relaymodul gekauft. Allerdings habe ich beim umsetzten dieses Projektes ein Problem. Ich möchte um die Pumpen spülen zu können diese nacheinander laufen lassen, allerdings wird das Relais bei der neunten Pumpe (manchmal auch schon bei der 7ten) nicht richtig geschalten. Man hört das klicken des Relais aber die Pumpe geht nicht an und die darauffolgenden Relais werden auch nicht mehr aktiviert. Hierzu habe ich ein Video auf Drop Box hochgeladen
(Bitte nicht so kritisch mit der Kabelfarbe sein, hatte nichts anderes rumliegen) https://www.dropbox.com/scl/fi/2idfe7em3qiobtinlyvvx/Relay_Vid.mp4?rlkey=ysh4cnhoahd072sd6ovwksf0o&st=40bcegip&dl=0
Das hier ist noch mein Code den ich auf dem Arduino gespielt habe. Vllt hat jemand von euch eine Idee woran das liegen könnte.
Cocktailmaschine.ino (2,9 KB)

mach dir mal einen ganz einfachen sketch wo einfach jedes Relais nach der Reihe angesprochen wird und kontrolliere mit der Seriellen Schnittstelle was wann genau passiert.

Vieleicht liegt es auch an der Verkabelung - da sehe ich aber nicht was du wirklich angeschlossen hast.

@frechlachs

Lies dir diesen Beitrag durch, da steht genau drin, wie du hier Bilder, Videos und Sketche einfügen sollst.
Dann kann das jeder sehen und nix geht verloren. Und du bekommst auch mehr Helfer.

Ich habe eine Funktion "Spülen" eingebaut, die genau das macht. Wenn die Pumpen nicht angeschlossen sind, schalten die Relais auch problemlos nacheinander.
Der Arduino wird getrennt von den Pumpen mit Strom versorgt und dieser Fehler aus dem Video tritt trotzdem auf

Dann rate ich mal.
Ohne deine richtigen Informationen, geht es nicht anders.
Es fehlen an den Pumpen die Freilaufdioden.

und / oder ein Entstörkondensator

Genau, aber ich vermute, der TO will unsere Hilfe nicht.
Wobei "oder" passt nicht ganz. Eine Freilaufdiode gehört an jede Induktivität.

In deinem Sketch gibt es keine Funktion Spülen.

Wenn du mir nicht bessere Informationen geben kannst was du genau machst und was der Sketch bei dir genau ausgibt dann kann ich dir nicht weiterhelfen.

Nur bei DC :wink:
Was der TO nutzt Steht nirgend wo
Auf die dropbox komm nicht dran

Also ich habe hier kurz einen Schaltplan erstellt.


Der verbaute Kondensator hat 100uf.
Ich verwende die PINS 2 und 3 als Tx und Rx zwischen einem Bluetooth Modul und dem Arduino. Mit dem Bluetooth Modul funktioniert alles wunderbar, weshalb ich dies zuerst nicht erwähnt habe.
Für die Leute die meinen Code nicht öffnen können hier nochmal

#include <SoftwareSerial.h> 

SoftwareSerial BTserial(2, 3); // RX, TX für HC-05

// Definiere die Pumpenanschlüsse
const int pumpPins[12] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13, A0, A1}; // Pins für Pumpen 1-12

void setup() {
  Serial.begin(9600);    // Baudrate für den seriellen Monitor
  BTserial.begin(9600);  // Baudrate für das HC-05

  // Setze die Pins der Pumpen auf OUTPUT
  for (int i = 0; i < 12; i++) {
    pinMode(pumpPins[i], OUTPUT);
    digitalWrite(pumpPins[i], HIGH); // Stelle sicher, dass die Relais zu Beginn deaktiviert sind (HIGH-aktiv, daher LOW für AUS)
  }
}

void loop() {
  // Prüfe, ob Daten vom HC-05 empfangen wurden
  if (BTserial.available()) {
    String input = BTserial.readStringUntil('\n'); // Lese bis zum Zeilenumbruch
    Serial.println("Empfangen: " + input); // Gebe den empfangenen String im seriellen Monitor aus

    // Entferne die eckigen Klammern und Anführungszeichen
    input.replace("[", "");
    input.replace("]", "");
    input.replace("\"", "");

    handlePumpCommands(input); // Verarbeite die empfangenen Befehle
  }
}

void handlePumpCommands(String command) {
  int pumpIndex;
  int timeDuration;

  // Teile den Eingabestring an den Kommata
  int startIndex = 0;
  int commaIndex;

  while ((commaIndex = command.indexOf(',', startIndex)) != -1) {
    String pumpCommand = command.substring(startIndex, commaIndex);
    processPumpCommand(pumpCommand);
    startIndex = commaIndex + 1; // Bewege den Startindex nach dem Komma
  }

  // Verarbeite den letzten Befehl (nach dem letzten Komma)
  if (startIndex < command.length()) {
    String pumpCommand = command.substring(startIndex);
    processPumpCommand(pumpCommand);
  }
}

void processPumpCommand(String pumpCommand) {
  int colonIndex = pumpCommand.indexOf(':');

  if (colonIndex != -1) {
    String pumpName = pumpCommand.substring(0, colonIndex);
    int timeDuration = pumpCommand.substring(colonIndex + 1).toInt(); // Konvertiere die Zeit in eine Ganzzahl

    // Bestimme den Pumpenindex basierend auf dem Pumpennamen
    int pumpIndex = pumpName.toInt() - 1; // '1' -> 0, '2' -> 1, ...

    if (pumpIndex >= 0 && pumpIndex < 12) {
      // Schalte die Pumpe für die angegebene Zeit ein
      digitalWrite(pumpPins[pumpIndex], LOW); // Pumpe einschalten (Relais aktivieren)
      Serial.print("Aktiviere Pumpe ");
      Serial.print(pumpName);
      Serial.print(" für ");
      Serial.print(timeDuration);
      Serial.println(" Sekunden");

      delay(timeDuration * 1000); // Warte für die angegebene Zeit (in Sekunden)
      digitalWrite(pumpPins[pumpIndex], HIGH); // Pumpe ausschalten (Relais deaktivieren)
      Serial.print("Deaktiviere Pumpe ");
      Serial.println(pumpName);

      // Füge eine Pause von 100 ms nach dem Abschalten der Pumpe hinzu
      delay(2000); 
    } else {
      Serial.println("Ungültiger Pumpenname: " + pumpName);
    }
  } else {
    Serial.println("Ungültiges Format für den Pumpenbefehl: " + pumpCommand);
  }
}

Das Video kann ich hier leider nicht hochladen, da das Forum keine Mp4 Dateien unterstützt.

Ich habe zusätzlich eine Handy App geschrieben. Diese gibt ein Array mit der (Pumpennummer:Zeit wie lang die pumpe laufen muss) aus. Diesen String analysiert der Arduino und lässt die entsprechenden Pumpen mit der jeweiligen Zeit laufen.
In dieser Handy-App gibt es eine Funktion spülen, diese Funktion sendet ein Array an den Arduino und lässt jede Pumpe nacheinander für 2 Sekunden laufen.

Ich habe an denen Pumpen keine Freilaufdioden angebaut das ist richtig, aber sollte es dann nicht so sein, dass keine Pumpe funktioniert und nicht nur eine bestimmte nicht funktioniert?

Deswegen habe ich ja auch geschrieben, ich rate mal.

Dann füge die ganz schnell hinzu.

Du weißt nicht, wozu die Freilaufdioden nötig sind ?
Das hat nichts mit der reinen Funktion der Pumpen zu tun. Die Verhindern beim Ausschalten der Pumpen eine hohe Spannung an der Spule, die eine Elektronik stören oder auch zerstören kann.
Hier kannst du dich darüber schlau machen.

Ein Ergebnis hängt sehr stark von der Verkabelung und der Toleranz der Bauteile ab.

Nachtrag:
Dein Schaltbild sagt mir, da ist noch einiges zu klären.
Was für Relais und was für Pumpen verwendest du.
Bitte poste Links vom Händler der Teile.

Ich verstehe schon wozu eine Freilaufdiode nötig ist, aber was mich verwundert ist das die Überspannung immer nur bei einer Pumpe auftritt.

Das hier sind die Pumpen die ich verwende:
https://de.aliexpress.com/item/1005006909340866.html?spm=a2g0o.order_list.order_list_main.5.5c5a5c5fde0hNE&gatewayAdapt=glo2deu
Das hier sind die Relais Boards ich habe ein 4 Relay Modul und ein 8 Relay Modul verwendet:

Die Pumpen werden mit 12V von einer Batterie mit Spannung versorgt

Den Grund habe ich im obigen Post (#13) geschrieben.
Die Relais sind ok, nur dein Schaltbild dazu stimmt dann nicht.
Bei den Pumpen wäre ich skeptisch, auch wenn da "Lebensmittelqualität" steht. Da sind reine "Schlauchpumpen" deutlich besser geeignet. Da kommt das "Getränk" nur mit dem Schlauch in Berührung und der ist schnell mal gewechselt.

Hallo,

deine oberen Pumpen hängen mit beiden Seiten auf +. Da ist irgendwas noch falsch.

Gruß Bepo

1 Like

Das Schaltbild in #10 entspricht nicht den Relaismodulen in #14.

Ich werde aus Deiner Beschreibung nicht schlau ob du immer nur ein Relais aktivierst oder akkumulativ.

Wie versorgst Du die Relaisplatine mit 5V? 8 Relais zu 70mA sind für USB zu viel.

Grüße uwe

Ja den Schaltplan habe ich nur kurz erstellt, um die grobe Verkabelung zu zeigen. Sind mir in dem Fall ein paar Fehler reingerutscht...

Ich schalte immer nur ein Relais ein, dann bleibt es eine Weile eingeschalten und danach schalte ich es wieder aus. Also es ist nie mehr als ein Relais aktiv.

Die Relaisplatine versorge ich mit dem 5V Output Pin von dem Arduino.

Ich möchte es jetzt versuchen Freilaufdioden an jede Pumpe anzulöten, bin mir allerdings nicht sicher ob eine Diode mit 15V Durchlasspannung ausreicht oder ob ich doch lieber auf 20V hoch sollte. Was meint ihr?

Nimm eine 1N4001, die passt.
Nochmal zu drinen Pumpen.
Bist du da sicher, dass die für Getränke ok sind ?
Denke dran, Alkohol kann da schnell mal was rauslösen. Das würde ich nicht trinken wollen.

Du meinst sicher Sperrspannung, denn die Durchlasspannung eine Si-Diode liegt bei ca. 0,7V

Gruß Tommy