103er
January 23, 2022, 11:37am
1
Moin Moin,
Und zwar habe ich ein Problem mit dem Betrieb von 4 Relais:
beim schalten der Relais hängt sich der Arduino Uno auf. und wirft nur noch ein ? im Serial Monitor aus.
Hier einmal das Schaltbild:
Die weiteren Relais sind genauso verkabelt außer das die Digital Pins sich ändern 2-5
Ich hoffe ihr könnt mir helfen beste grüße!
uwefed
January 23, 2022, 11:49am
2
Welches Netzteil und welche Relais-(Module) verwendest Du?
Ich hoffe daß Du nur vergessen hast die 5V Versorgung des UNO einzuzeichnen. Oder wie versorgst Du den UNO?
Grüße Uwe
103er
January 23, 2022, 11:53am
3
als Netzteil habe ich dieses:
https://www.reichelt.de/steckernetzteil-7-w-5-v-1-5-a-hnp-07-050v2-p298320.html?CCOUNTRY=445&LANGUAGE=de&trstct=pos_0&nbc=1&&r=1
und das relais ist dieses:
Das Relais ist die einzel Ausführung.
Der Arduino wird momentan über die USB Buchse betrieben
103er
January 23, 2022, 12:04pm
4
Und wenn ich die VCC des Relais an + des Netzteiles anschließe schaltet das Relais kurz und der Arduino hängt sich auch auf.
uwefed
January 23, 2022, 12:13pm
5
ÄH.
Es müßte eigentlich funktionieren.
Zeig mal den Sketch.
Wen Du die Pumpe abklemmst blockiert sich der UNO noch?
Grüeß Uwe
103er
January 23, 2022, 12:14pm
6
#include <Wire.h> // Bibiliothek für BME280
#include <SPI.h> // Bibiliothek für BME280
#include <Adafruit_Sensor.h> // Bibiliothek für BME280
#include <Adafruit_BME280.h> // Bibiliothek für BME280
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10
#define SEALEVELPRESSURE_HPA (1013.25)
#define sollfeuchtigkeit 65
#define stufe1 sollfeuchtigkeit+10
#define stufe2 sollfeuchtigkeit+25
#define stufe3 sollfeuchtigkeit+35
#define FanPin 9
#define FanPintemp 10
// #define solltemp 26
// #define stufe1 solltemp+1
// #define stufe2 solltemp+2
// #define stufe3 solltemp+3
// #define stufe4 solltemp+4
// #define stufe5 solltemp+5
Adafruit_BME280 bme;
const int analogInPin1 = A0; // Umbenennung AnalogPins
const int analogInPin2 = A1;
const int analogInPin3 = A2;
const int analogInPin4 = A3;
int sensorValue1; // Sensoren Ausgabewerte benennung
int sensorValue2;
int sensorValue3;
int sensorValue4;
unsigned long delayTime;
float feuchtigkeit;
// float temp;
String status1;
// String status2;
void setup() { // Start Programm
Serial.begin(9600); // Serielle Ausgabe starten
delayTime = 1000; // 180000Zeit die gewartet werden wenn wieder geprüft werden 180000 ms = 3 min
digitalWrite(2, HIGH); // Pumpen Relay auf HIGH damit es offen ist
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
pinMode(2, OUTPUT); // Pumpenanschlüsse als OUTPUT deklariert
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(FanPin, OUTPUT); // Ventilatoranschluss als OUTPUT deklariert
// pinMode(FanPintemp, OUTPUT);
if(!bme.begin()) {
Serial.println(F("Finde keinen BME280 Sensor, Verkabelung überprüfen"));
while (1);
}
Serial.println(F("Temperatur\tLuftfeuchtigkeit\tFeuchtigkeitssensor 1\tFeuchtigkeitssensor 2\tFeuchtigkeitssensor 3\tFeuchtigkeitssensor 4\tVentilator Einstellung Feuchtigkeit"));
}
void loop() {
sensorValue1 = analogRead(analogInPin1); // ausgelesener Wert 1 wird in Variable gespeichert
sensorValue2 = analogRead(analogInPin2); // ausgelesener Wert 2 wird in Variable gespeichert
sensorValue3 = analogRead(analogInPin3); // ausgelesener Wert 2 wird in Variable gespeichert
sensorValue4 = analogRead(analogInPin4); // ausgelesener Wert 2 wird in Variable gespeichert
if (sensorValue1 > 1000) { // 900 Wert der nicht überschritten werden darf Feuchtigkeit ca 50 - 70 Prozent
digitalWrite(2, LOW); // Pumpen Relay 2 geschlossen
delay (1000); // 1000ms ist die Pumpe an
digitalWrite(2, HIGH); // Pumpen Relay 2 geöffnet
}
if (sensorValue2 > 1000) { // 900 Wert der nicht überschritten werden darf Feuchtigkeit ca 50 - 70 Prozent
digitalWrite(3, LOW); // Pumpen Relay 3 geschlossen
delay (1000); // 1000ms ist die Pumpe an
digitalWrite(3, HIGH); // Pumpen Relay 3 geöffnet
}
if (sensorValue3 > 1000) { // 900 Wert der nicht überschritten werden darf Feuchtigkeit ca 50 - 70 Prozent
digitalWrite(4, LOW); // Pumpen Relay 3 geschlossen
delay (1000); // 1000ms ist die Pumpe an
digitalWrite(4, HIGH); // Pumpen Relay 3 geöffnet
}
if (sensorValue4 > 850) { // 900 Wert der nicht überschritten werden darf Feuchtigkeit ca 50 - 70 Prozent
digitalWrite(5, LOW); // Pumpen Relay 3 geschlossen
delay (1000); // 1000ms ist die Pumpe an
digitalWrite(5, HIGH); // Pumpen Relay 3 geöffnet
}
float feuchtigkeit = bme.readHumidity();
if (feuchtigkeit <= sollfeuchtigkeit) { digitalWrite(FanPin,LOW); status1 = "AUS"; }else
if (feuchtigkeit >= stufe3) { digitalWrite(FanPin,HIGH); status1 = "Stufe MAX"; delay (30000); digitalWrite(FanPin,LOW); }else
if (feuchtigkeit >= stufe2) { analogWrite(FanPin,150); status1 = "Stufe 2"; delay (30000); digitalWrite(FanPin,LOW); }else
if (feuchtigkeit >= stufe1) { analogWrite(FanPin,40); status1 = "Stufe 1"; delay (30000); digitalWrite(FanPin,LOW); }else
if (feuchtigkeit >= sollfeuchtigkeit) { analogWrite(FanPin,20); status1 = "Stufe LOW"; delay (30000); digitalWrite(FanPin,LOW); }
// float temp = bme.readTemperature();
// if (temp <= solltemp) { digitalWrite(FanPintemp,LOW); status2 = "AUS"; }else
// if (temp >= stufe5) { digitalWrite(FanPintemp,HIGH); status2 = "Stufe MAX"; }else
// if (temp >= stufe4) { analogWrite(FanPintemp,190); status2 = "Stufe 4"; }else
// if (temp >= stufe3) { analogWrite(FanPintemp,150); status2 = "Stufe 3"; }else
// if (temp >= stufe2) { analogWrite(FanPintemp,90); status2 = "Stufe 2"; }else
// if (temp >= stufe1) { analogWrite(FanPintemp,40); status2 = "Stufe 1"; }else
// if (temp >= solltemp) { analogWrite(FanPintemp,20); status2 = "Stufe LOW"; }
Serial.print(bme.readTemperature()); Serial.print(F(" °C\t")); // Pressure in millibars
Serial.print(bme.readHumidity()); Serial.print(F(" %\t\t\t"));
Serial.print(sensorValue1); Serial.print(F("\t\t\t"));
Serial.print(sensorValue2); Serial.print(F("\t\t\t"));
Serial.print(sensorValue3); Serial.print(F("\t\t\t"));
Serial.print(sensorValue4); Serial.print(F("\t\t\t"));
Serial.print(status1);
Serial.println();
// Serial.print(F(status2);
delay (delayTime);
}
uwefed
January 23, 2022, 12:19pm
7
Streiche mal alles was nicht mit der Relaisansteuerung und Analogmessung zu tun hat.
Tritt das Problem noch auf?
Grüeß Uwe
103er
January 23, 2022, 12:22pm
8
Wenn ich die Relaisansteuerung und die Analogmessung raus nehme funktioniert es imprinzip genauso wie auch wenn alles drin ist. Das Problem entsteht wirklich nur wenn die Relais schalten. Also sozusagen von Rot auf Grün umgesprungen wird da fängt der Arduino dann an zu meckern und hängt sich auf
uwefed
January 23, 2022, 12:24pm
9
andersrum. alles andere rausnehmen
Wie erkennst Du daß der UNO sich aufhängt?
103er
January 23, 2022, 12:42pm
10
so habe das mal getestet. gleiches Problem weiterhin das relais schaltet ganz ganz kurz und klackt dann wieder zurück. zumindest hängt sich der Uno nicht mehr auf. ich denke das mit dem aufhängen hat mit dem BME zutun.
uwefed
January 23, 2022, 12:49pm
11
Die Relais ziehen für 1 Sekunde an. Das ist so programmiert.
Ich würde eher sagen die Feuchtigkeitsregelung blockiert den NANO für 30 Sekunden.
Wie erkennst Du daß der NANO blockiert?
Ok Schreib einen Sketch der jede Sekunde was auf die serielle schnittstelle schreibt (zb den aktuellen Wert von millis()) und lies einen Taster ein der das Relais einschaltet.
einfach(digitalWrite(2,digitalRead(Taster));
Grüße Uwe
Grüße Uwe
103er
January 23, 2022, 12:54pm
12
ja das mit 1 sek stimmt in dem geschrieben Sketch, ich hab die werte auch mal hochgesetzt auf 3 sek. leider nur ein ganz kurzes umspringen von nicht mal einer sek.
Mit der internen 5 V Versorgung die ich zum testen auch mal genommen habe blockiert der UNO auch mit externem Netzteil blockiert der UNO nicht mehr aber wie gesagt die Relais ziehen für nicht mal 1 sek an.
das blockieren erkenne ich daran das der Serielle Monitor nur noch ein ? anzeigt und die RX Led auf dem UNO nicht mehr blinkt.
103er
January 23, 2022, 1:14pm
13
Habe das mit dem Taster auch probiert gleiches Phänomen das Relais zieht für nicht mal 1 sek an
103er
January 23, 2022, 1:43pm
15
const byte buttonpin = A0;
const byte outputpin =2;
void setup() {
pinMode(buttonpin, INPUT_PULLUP);
pinMode(outputPin, OUTPUT);
}
void loop() {
if (digitalRead(buttonPin) == LOW) {
digitalWrite(outputPin, HIGH);
delay(3000);
digitalWrite(outputPin, LOW);
}
}
103er
January 23, 2022, 1:45pm
16
gerade nochmal getestet das Relais funktioniert sauber sofern die Pumpe nicht angeschlossen ist.
Deine Relais sind LOW aktiv. Damit die schalten brauchen die LOW auf dem Eingangspin.
Und brauchst eine Freilaufdiode an der Pumpe.
103er
January 23, 2022, 1:54pm
18
ja genau das habe ich durch getestet bei LOW schaltet das Relais,
wozu ist die Freilaufdiode ? weil theoretisch schaltet das relais doch nur die 5V durch ?
Das musst du dann im Sketch auch richtig angeben.
Und an jede Induktivität gehört eine Freilaufdiode. Ohne die entstehen Spannungen die den Controller stören und auch kaputt machen können.
103er
January 23, 2022, 2:03pm
20
alles klar vielen dank für deine tipps, kannst du mir sagen welche Freilaufdiode dafür nötig wäre?