Problem mit Relais bei 12V

Hallo zusammen,

ich habe ein kleines Problem beim Schalten von meinen Relais. Ich habe zwei Stück hl-52 v1.0 (also 2x2) die ich ansteuern möchte.
Wenn ich alles zusammen baue und "trocken" laufen lasse schalten die Relais so wie sie sollen. Wenn ich aber Spannung (12v) auf NO beim Relais anlege bricht der Sketch ab beim Schalten des 4. Relais und beginnt einfach wieder am Anfang. Nehme ich die Spannung weg geht es wieder und der Sketch läuft bis zum Ende. Ich habe keinen Kurzschluss. Kann das Relais defekt sein?
Das Relais scheint ein Low-Level-Trigger zu sein. Das heißt doch sobald Spannung anliegt schaltet es?
Da das aber wenn Spannung anliegt nicht schalten soll und ich es über die Pins steuern wollte habe ich void setup auf HIGH gestellt. Dann ist LOW jetzt ein und HIGH aus.

pinMode(Relais, OUTPUT);
  
digitalWrite(Relais, HIGH);

Kann ich das einfach so machen oder gibt dass das Problem?

Also ohne Schaltplan und kompletten Sketch kann da niemand was zu sagen.

Ulli

wenn du die Relais vom Arduino versorgst, wird der Strom nicht reichen um 4 Relais zu schalten.

beeblebrox:
Also ohne Schaltplan und kompletten Sketch kann da niemand was zu sagen.

Ulli

der komplette Sketch. Schaltplan habe ich noch nicht.

//define soil moisture in the next line
int Soil = 640;         // Summer reading slightly too moist =590 (2019 May), 600 to 620 ok June 2019
int WaterLevel = 850;   // Waterlevel water tank greater than 850 then empty

//int Sensor = A0;  //Senor pin plant
const byte SensorPower = 7;  //Power pin plant - use digital I/O pin
const byte SensorGnd = 8;  //Gnd pin plant - use digital I/O pin
const byte Sensor = A0;  //Sensor pin plant

//int Sensor2 = A1; //Senor pin water lever
const byte SensorPower2 = 12;  //Power pin water level - use digital I/O pin
const byte SensorGnd2 = 13;  //Gnd pin water level - use digital I/O pin
const byte Sensor2 = A1;  //Sensor pin water level

//int Sensor3 = A2; //Senor pin plant - ground
const byte SensorPower3 = 9;  //Power pin water level - use digital I/O pin
const byte SensorGnd3 = 10;  //Gnd pin water level - use digital I/O pin
const byte Sensor3 = A2;  //Sensor pin water level


int pumpPin = 4;  //1. Pumpe pin, water pump 
int pumpPin2 = 3; //2. Tomato - Magnetventil pin, solenoid valve

int pumpPin3 = 6;  //1. Ground - Magnetventil pin, solenoid valve
int pumpPin4 = 5; //2. Ground2 - Magnetventil pin, solenoid valve


void setup() {

  pinMode(pumpPin, OUTPUT);
  pinMode(pumpPin2, OUTPUT);
  pinMode(pumpPin3, OUTPUT);
  pinMode(pumpPin4, OUTPUT);
  
  digitalWrite(pumpPin, HIGH);     // Relais wird nicht gestartet,Prevents relays from starting up engaged
  digitalWrite(pumpPin2, HIGH);    // Relais wird nicht gestartet,Prevents relays from starting up engaged
  digitalWrite(pumpPin3, HIGH);    // Relais wird nicht gestartet,Prevents relays from starting up engaged
  digitalWrite(pumpPin4, HIGH);    // Relais wird nicht gestartet,Prevents relays from starting up engaged
  
  Serial.begin(9600);
}

void loop() {

//********* Round 1 ***************
//check

  Serial.println(F("Start measuring plant in 60s! warmuup Sensor"));
  pinMode(SensorPower, OUTPUT);
  pinMode(SensorPower2, OUTPUT);
  pinMode(SensorPower3, OUTPUT);
  pinMode(SensorGnd, OUTPUT);
  pinMode(SensorGnd2, OUTPUT);
  pinMode(SensorGnd3, OUTPUT);
  digitalWrite(SensorPower, HIGH);
  digitalWrite(SensorPower2, HIGH);
  digitalWrite(SensorPower3, HIGH);
  digitalWrite(SensorGnd, LOW);
  digitalWrite(SensorGnd2, LOW);
  digitalWrite(SensorGnd3, LOW);
  
  delay(60000);                       //warmup Time
  
  Serial.print("plant-tomato:");
  Serial.println(analogRead(A0));
  delay(500);
  Serial.print("plant-ground:");
  Serial.println(analogRead(A2));
  delay(500);
  Serial.print("water level:");
  Serial.println(analogRead(A1));
  delay(500);


// 1. sensor and pump Tomato:
  if((analogRead(A0) >Soil) && (analogRead(A1) <WaterLevel)) {    
    digitalWrite(pumpPin, LOW);
    digitalWrite(pumpPin2, LOW);
    delay(15000);                                         //watering time
    digitalWrite(pumpPin, HIGH); 
    digitalWrite(pumpPin2, HIGH); 
    Serial.println(F("watering Tomato successfully"));
    }
  if((analogRead(A0) <Soil) && (analogRead(A1) <WaterLevel)) {    
    Serial.println(F("Soil Tomato still moist."));
    }
  if((analogRead(A0) <Soil) && (analogRead(A1) >WaterLevel)) {    
    Serial.println(F("Soil Tomato still moist. empty water tank!!!"));
    }
  if((analogRead(A0) >Soil) && (analogRead(A1) >WaterLevel)) {    
    Serial.println(F("Soil Tomato dry. empty water tank!!!"));
    }

// 1. sensor and pump Ground:
  if((analogRead(A2) >Soil) && (analogRead(A1) <WaterLevel)) {    
    digitalWrite(pumpPin, LOW);
    digitalWrite(pumpPin3, LOW);
    delay(25000);                                         //watering time
    digitalWrite(pumpPin, HIGH); 
    digitalWrite(pumpPin3, HIGH); 

    delay(3000);                                          //Break 3 Sek


    digitalWrite(pumpPin, LOW);
    digitalWrite(pumpPin4, LOW);
    delay(25000);                                         //watering time
    digitalWrite(pumpPin, HIGH); 
    digitalWrite(pumpPin4, HIGH); 

    
    Serial.println(F("watering Ground successfully"));
    }
  if((analogRead(A2) <Soil) && (analogRead(A1) <WaterLevel)) {    
    Serial.println(F("Soil Ground still moist."));
    }
  if((analogRead(A2) <Soil) && (analogRead(A1) >WaterLevel)) {    
    Serial.println(F("Soil Ground still moist. empty water tank!!!"));
    }
  if((analogRead(A2) >Soil) && (analogRead(A1) >WaterLevel)) {    
    Serial.println(F("Soil Ground dry. empty water tank!!!"));
    }       

//poweroff
 { Serial.println(F("Measurement done. Disconnecting sensor."));
  pinMode(SensorPower, INPUT);
  pinMode(SensorGnd, INPUT);
  pinMode(SensorPower2, INPUT);
  pinMode(SensorGnd2, INPUT); 
  pinMode(SensorPower3, INPUT);
  pinMode(SensorGnd3, INPUT); 

    }
    

  
  delay(7200000); // 2hour
//    delay(3000);  //Test
  
  //delay(2UL * 60UL * 60UL * 1000UL);  //x hours each of 60 minutes each of 60 seconds each of 1000 milliseconds all unsigned longs

  
}

Der Fehler tritt auf wo ich die 3 Sekunden Pause eingebaut habe. Genau beim Schalten vom letzten Relais.

Dann zeichne bitte einen Schaltplan und poste den hier. Dann können wir auch deinen Fehler feststellen.
Eine Bleistiftzeichnung reicht

stereo007:
Das Relais scheint ein Low-Level-Trigger zu sein. Das heißt doch sobald Spannung anliegt schaltet es?

Ne, genau umgekehrt. Ziehst du einen Eingang auf GND, schaltet das zugehörige Relais.
Das ist bei den meisten Relaiskarten für den Arduino so. Im Eingangsskreis ist eine LED, ein Optokopplereingang und ein Widerstand verbaut.

Ist doch klar. Wenn das 4. Relais anzieht bricht die Spannung am Arduino zusammen, alles geht auf Null, und fängte von vorne an. Leider ist in der Glaskugel die Schaltung nicht zu erkennen. Somit können wir das "warum" nicht klären.

Franz

Franz54:
Ist doch klar. Wenn das 4. Relais anzieht bricht die Spannung am Arduino zusammen, alles geht auf Null, und fängte von vorne an. Leider ist in der Glaskugel die Schaltung nicht zu erkennen. Somit können wir das "warum" nicht klären.

Franz

Das erklärt aber nicht, warum es mit den dubiosen 12 Volt nicht geht und ohne diese aber zu funktionieren scheint, was auch immer der TO damit meint.

ok, Skizze ist anbei. Fühle mich gerade wie ein Erstklässler wenn ich das so sehe. :o
Fritzing habe ich auf die Schnelle nicht hinbekommen da ich das noch nie gemacht habe.

Auch wenn du jetzt fleißig am Schaltbild zeichnen bist, kannst du sicher mal mitteilen, was du mit den 12 Volt und dem Relais schaltest, wenn es zum "Absturz" kommt.

Ok, wenn ich das der Schaltung richtig entnehme, schaltest du eine Pumpe und mehrere Ventile.
Hast du da jeweils eine Freilaufdiode dran ?
Die sind unbedingt anzubringen. Ohne die ist der Absturz vorprogrammiert.
Und bei dir vorhanden.

HotSystems:
Das erklärt aber nicht, warum es mit den dubiosen 12 Volt nicht geht und ohne diese aber zu funktionieren scheint, was auch immer der TO damit meint.

Wie gesagt wenn ich das Netzteil für die Magnetventile weglasse läuft es. Sobald das rechte Relais 12v hat stoppt es direkt beim Umschalten und alles startet neu so wie es aussieht. Ich hatte es die ganze Zeit mit nur einem Magnetventil. Das hat wunderbar funktioniert. Jetzt habe ich noch zwei neue dazu genommen und ich weiß nicht wieso es nicht will.

Wie schon geschrieben, baue Freilaufdioden ein und es sollte funktionieren.

HotSystems:
Wie schon geschrieben, baue Freilaufdioden ein und es sollte funktionieren.

Ich dachte auf dem Relais sind die direkt verbaut. Brauche ich da noch welche extra?
Bild anbei.

stereo007:
Ich dachte auf dem Relais sind die direkt verbaut. Brauche ich da noch welche extra?
Bild anbei.

Das hat nix mit den Relais zu tun, du brauchst die an jeder Spule, sprich auch an der Pumpe und an den Ventilen.

stereo007:
Ich dachte auf dem Relais sind die direkt verbaut. Brauche ich da noch welche extra?

Eigentlich nicht, da es keine schaltenden Halbleiter zu schützen gibt. Aber es können Spannungsspitzen bei abschalten der Ventile oder Pumpe ins Netzteil zurück kommen.

Nur erklärt das nicht dein genanntes Verhalten beim anlegen der 12V an NO. Ich vermute einen Kurzschluss. Deiner Skizze ist nicht viel zu entnehmen. Hast du zwei getrennte 12V-Netzteile für Pumpe und Ventile?

HotSystems:
Das erklärt aber nicht, warum es mit den dubiosen 12 Volt nicht geht und ohne diese aber zu funktionieren scheint, was auch immer der TO damit meint.

Ja, wohl war. Leider lässt sich an der Schaltung auch nicht erkennen, ob das 4. Relais die Pumpe, oder Magnet 1 ist. Ich frage mich jetzt auch, ob die Schaltung den echten Iststand wiedergibt, oder nur das was er eigentlich aubauen wollte.

Offenbar schießen die 12 Volt vom Relais 4 was ab. Ich würde mal den 12 Volt Kontakt von Relais 4 abtrennen und dann mal schauen ob immer noch der Absturz beim Relais 4 kommt.

Franz

Franz54:
Ja, wohl war. Leider lässt sich an der Schaltung auch nicht erkennen, ob das 4. Relais die Pumpe, oder Magnet 1 ist. Ich frage mich jetzt auch, ob die Schaltung den echten Iststand wiedergibt, oder nur das was er eigentlich aubauen wollte.

Offenbar schießen die 12 Volt vom Relais 4 was ab. Ich würde mal den 12 Volt Kontakt von Relais 4 abtrennen und dann mal schauen ob immer noch der Absturz beim Relais 4 kommt.

Franz

Er hat das eigentlich schon fertig bebaut. :slight_smile: Bild anbei. Ich dachte aus dem Sketch ist die Pinbelegung ersichtlich da es dort doch alles beschrieben ist.
Die Pumpe ist Relais 1 ganz links. Die 2 ist das erste Magnetventil rechst daneben. Sobald die 3 oder 4 geschallten wird mit 12v ist es vorbei.

Die Pumpe hat ein extra Netzteil und für die 3 Relais habe ich ein zweites.

Und nochmal, setze Freilaufdioden ein und wir sehen weiter.

Auch wenn das nicht das Problem beseitigt, müssen die eingesetzt werden.

Also habe ich das jetzt richtig gelesen? Du verwendest zwei Netzteile á 12V. Welche Leistungen haben diese denn? Wie versorgst du den Arduino?

stereo007:
Er hat das eigentlich schon fertig bebaut. :slight_smile: Bild anbei. Ich dachte aus dem Sketch ist die Pinbelegung ersichtlich da es dort doch alles beschrieben ist.
Die Pumpe ist Relais 1 ganz links. Die 2 ist das erste Magnetventil rechst daneben. Sobald die 3 oder 4 geschallten wird mit 12v ist es vorbei.

Die Pumpe hat ein extra Netzteil und für die 3 Relais habe ich ein zweites.

Also dein Aufbau ist fertig ?
Ich hoffe nicht, dass du dein Projekt so in den Dauereinsatz schicken willst.
Da wirst du schnell weitere Probleme bekommen.
Steckbretter sind zum entwickeln/testen gedacht, aber nicht für einen produktiven Einsatz.