Ich arbeite zur Zeit an einer automatischen Bewässerungsanlage und habe ein paar Probleme mit dem Code.
Der Code ist wie folgt:
void setup()
{
Serial.begin(9600);
pinMode(4,OUTPUT);
}
void loop()
{
Serial.println(analogRead(A0)); //Der analoge Pin A0 ist mit dem Feuchtigkeitssensor verbunden und liest die Werte ab
delay(100);
if(analogRead(A0)<=150) // Feuchtigkeitswert unter 150 also Trocken
{
Serial.println("Trocken");
delay(300);
digitalWrite(4,1); // digital PIN 4 ist mit dem Schaltrelais verbunden und soll die Wasserpumpe anschalten
delay(100); // Eine Sekunde läuft die Wasserpumpe (Nur eine Sekunde zu Testzwecken)
digitalWrite(4,0); // Das Schaltrelais soll den Motor ausschalten und solange der Wert über 150 ist soll die Wasserpumpe aus bleiben
}
else if (analogRead(A0)>=150){ //Feuchtigkeitswert über 150 also Nass
Serial.println("Nass");
delay(300);
}
}
Nun habe ich ein Arduino Board mit einer Wasserpumpe, einer Batterie und einem Schaltrelais verbunden und was ich bezwecken will ist, dass die Wasserpumpe bei einem Feuchtigkeitswert von 150 und höher der Stromzufluss gekappt wird und somit ausgeschaltet wird und bei einem Feuchtigkeitswert von 150 und niedriger soll die Wasserpumpe angeschaltet werden.
Der Code funktioniert insoweit, dass es im seriellen Monitor den Feuchtigkeitswert anzeigt und zwischen Nass und Trocken unterscheidet, nur leider bleibt die Wasserpumpe konstant an und geht nie aus, obwohl die LED an dem Schaltrelais ausgeht, wenn der Sensor nass ist, also kriegt das Schaltrelais ja anscheinend ein Signal, wenn er es kriegen soll.
Ich hoffe ich habe das verständlich rüber gebracht und jemand kann mir weiterhelfen.
Im Trockenzustand willst Du die Pumpe "an", nach 100ms "aus"
Das wird ein Relaisbaustein sein.
Der reagiert anders.
Wenn Du Deine digitalWrite(4,0) und digitalWrite(4,1) tauscht, wird es funktionieren.
Das relais schaltet bei LOW ein und bei HIGH aus...
Darüber hinaus kann sich Dein Code aussuchen, was passiert, wenn die Feuchte genau 150 ist. Das wird nichts
const byte pumpePin = 4;
void setup()
{
Serial.begin(9600);
pinMode(pumpePin, OUTPUT);
}
void loop()
{
unsigned int feuchte = analogRead(A0);
Serial.println(feuchte); //Der analoge Pin A0 ist mit dem Feuchtigkeitssensor verbunden und liest die Werte ab
delay(100);
if (analogRead(feuchte) <= 150) // Feuchtigkeitswert unter 150 also Trocken
{
Serial.println("Trocken");
digitalWrite(pumpePin, LOW); // digital PIN 4 ist mit dem Schaltrelais verbunden und soll die Wasserpumpe anschalten
delay(100)
digitalWrite(pumpePin, HIGH); // Das Schaltrelais soll den Motor ausschalten und solange der Wert über 150 ist soll die Wasserpumpe aus bleiben
}
else //Feuchtigkeitswert über 150 also Nass
{
Serial.println("Nass");
}
}
Wenn Kommentar und Code nicht zusammenpassen, kriegt man schonmal Antworten, die nicht weiterhelfen.
Dein Code soll entweder alle 400 ms "Nass" ausschreiben, oder alle 500 ms "Trocken" und dabei an Pin 4 blinken (Nach deinem Code 100 ms HIGH, 400 ms LOW) ?
Die meisten Relais-Boards sind übrigens LOW-aktiv, wie @my_xy_projekt schon erwähnt hat.
Und wenn das Relais abgefallen ist, weil der Arduino gar nicht aktiv ist (z.B. im reset), sollte die Wasserpumpe vermutlich auch nicht laufen.
Dann kann auch immer die Stromversorgung über Batterie kritisch sein und bei schwacher Batterie oder anderen Problemen das Schalten von Relais und Pumpe einen Reset des Arduino verursachen. Das können wir natürlich nicht sehen, aber dir könnte ein entsprechender Test-Ausschrieb Hinweise geben.
Der Code soll keineswegs entweder alle 400ms "Nass" ausschreiben oder alle 500ms "Trocken" und bei Pin 4 blinken.
Der Code soll alle 300ms entweder Nass oder Trocken ausschreiben je nach Zustand und bei "Trocken" soll Pin 4 ein Signal an das Schaltrelais schicken, damit es die Pumpe für einen von mir bestimmten Zeitraum aktiviert und wieder deaktiviert.
Praxisbeispiel um zu verdeutlichen was ich bezwecken will:
Bodenfeuchtigkeit erreicht kritischen Wert unter 150, Wasserpumpe fängt an für 15 Sekunden Wasser zu pumpen und hört dann auf, Feuchtigkeitswert steigt wieder auf über 150 und sobald der Wert wieder darunter sinkt fängt alles von vorne an. Dies soll komplett ohne mein Eingreifen, automatische funktionieren.
Wenn der Code das nicht widerspiegelt, dann habe ich es anscheinend falsch kodiert, es ist schließlich das erste Mal, dass ich Programmcode schreibe.
Dieser Code bewirkt irgendwie das Gleiche. Sobald alles angeschlossen ist fängt die Wasserpumpe an zu pumpen und hört nicht auf, egal ob "Nass" oder "Trocken".
Vielleicht habe ich wirklich etwas falsch angeschlossen, wüsste nur nicht was...
Noch eine Info die ich geben kann ist, dass das Schaltrelais kein "Klack" Geräusch macht so wie es üblich ist für diese Geräte, wenn die Kontakte drinnen umschalten.
Ich habe das Relais bereits an 5V und GND angeschlossen, um ein switchen der Kontakte manuell zu bewirken, jedoch war dies auch fruchtlos und das Relais blieb stumm. Irgendwie will das Relais nicht die Kontakte wechseln.
@my_xy_projekt Der Code den du geschickt hast bewirkt, dass die LED am Relais an und aus geht aber der Motor bleibt wieder konstant an. Da muss wirklich was falsch verkabelt sein.
außerdem eine Kleinigkeit die mir aufgefallen ist:
Man siehe wie in deinem Code die "4" farbig ist.
In meinem Code bleibt die "4" schwarz, was mich auch stutzig macht. Vielleicht habe ich den PIN nicht definiert oder so?
Vielen herzlichen Dank an alle insbesondere @my_xy_projekt.
Der Code hat funktioniert und die Plus und Minuspole des Relais waren vertauscht, nachdem ich die richtig angesteckt habe, hat es in Kombination mit deinem Code funktioniert.
Ich bedanke mich nochmal herzlichst für eure Hilfe und Geduld mit mir.
So mein lieber...
Also ich hab mal was gesucht. Deines entspricht diesem hier bei ebay
Du hast an den Schraubklemmen die Pumpe im Ruhezustand der Kontakte im eingeschalteten Zustand.
Der rote Draht an der Schraubklemme muss auf die andere Aussenseite.
Da die LED blinkt, ist GND und der Datenpin auch richtig dran.
Der orange Draht aus der Mitte der Stiftleiste am Relais muss 5V bekommen.
Das Bild ist sehr unscharf, aber das schwarze Kabel vom UNO auf das Steckbrett muss an 5V auf dem UNO klemmen.
Ich würde alles abbauen und dann nur das Relais anstecken.
relais - an UNO GND
relais + an UNO 5V
relais S an UNO Pin 4
Nicht mehr.
Wenn die LED blinkt und das Relais nicht zieht, einmal das Kabel S / Pin 4 ersetzen.
Ich verzichte auf das "Schalt". Gehöre ich einer Spezie an, die so selten ist?
Ich kann mich dran erinnern, das wir mal eine komplette Installation gemacht haben und den Schaltungsplan während des Anschluss der Aktoren / Sensoren mitgemalt haben... Das war nen Spass. Aber: Alles hat nach der Übertragung gestimmt...
Ihr wusstet aber auch, was Ihr tut. Das kann man bei Neulingen nicht voraus setzen.
Deshalb ist der Gedanke, erst mal aufmalen, nicht verkehrt. Zumal man damit den Hilfswilligen wesentliche Informationen gibt.