Probleme --> Arduino hängt sich auf!

hier noch das vorher vergessens Fritzing und Sketch.

#define BLYNK_PRINT Serial
#include <SPI.h>
#include <WiFi101.h>
#include <BlynkSimpleWiFiShield101.h>
#include <SimpleTimer.h>

                                                    // You should get Auth Token in the Blynk App.
                                                    // Go to the Project Settings (nut icon).
char auth[] = "ff08f959f06b44558613636f3cffa622";

char ssid[] = "UPCFA246C8";
char pass[] = "MhAycvynbr2p";

int lastConnectionAttempt = millis();  // timer der die Zeit ab WiFi verbindungsabbruch prüft
int connectionDelay = 5000;             // timerzeit nach Verbindungsabbruch wird alle 5000ms (5sec.) dei Verbindung geprüft


WidgetLED wasserLedV(V1);          // register to virtual pin 1
WidgetLED wasserLedleerV(V2);     // register to virtual pin 2

const int sensorPin = 5;                  // select the input pin for the sensor
int switchPin = 4;                           // select the input pin for the switch
int pumpPin = 6;                            // select the pin for the Pump LED
const int wasserLed = 2;                 // Pin for Waterpump
int pumpLed = 3;                           // pin for LED Water flows
boolean isMotorAn = false;              // boolean isWasserleer = false;
boolean isWasserleer = false;
                         
byte switchValue;                            // variable to store the value coming from the switch
int sensorValue = 0;                        // variable to store the value coming from the float sensor

unsigned long water_timestore;        // Variable Speicher für Systemzeit Wasser fliesst.
//unsigned long water_empty;          // Variable Speicher für Systemzeit Wasser leer.

BLYNK_WRITE(0)                            // Blynk write Virtual switch V0 (Virtueller switch zum Starten der Bewässerung)
{
    int i=param.asInt();
   
    if (!isMotorAn && sensorValue == LOW && switchValue == HIGH or i==1) { 
                                                      // Wenn die Pumpe nicht an ist und der Taster (4) gedrückt wird oder der Virtuelle
                                                       // Taster (V0) gedrückt wird --> anschalten
      Serial.print("Taster High");          // Taster High ins serielle Terminal schreiben
      Serial.print("\t");                        // Tabulator im seriellen Terminal schreiben
      digitalWrite(pumpLed, HIGH);      // Blaue LED "PumpLed" (3) einschalten
      wasserLedV.on();                       // Virtuelle Blaue LED "WasserLedV" (V1) einschalten
      digitalWrite(pumpPin, HIGH);      // Wasserpumpe "pumpPin" (1) einschalten
      water_timestore = millis();        // Timer "water_timestore" starten
      isMotorAn = true;                      // Wert "isMotorAn" auf "true" schalten
    }else                                          // anderfalls
    {
        if (isMotorAn && millis() - water_timestore > 90000) {
                                                     // Wenn die Pumpe an ist und der Timer "water_timestore" 90000ms (1,2min.) erreicht hat
      digitalWrite(pumpPin, LOW);      // Wasserpumpe "pumpPin" (1) ausschalten
      digitalWrite(pumpLed, LOW);     // Blaue LED "PumpLed" (3) ausschalten
      wasserLedV.off();                     // Virtuelle Blaue LED "WasserLedV" (V1) ausschalten
      isMotorAn = false;                    // Wert "isMotorAn" auf "false" schalten
    }
}
}


void connection() {                           // abfolge für das testen der WiFi Verbindung
                                                       // WiFi Verbindung prüfen
  if (WiFi.status() != WL_CONNECTED)
  {
                                     

                                       
    if (millis() - lastConnectionAttempt >= connectionDelay)
    {
      lastConnectionAttempt = millis();  // wenn die Verbindung länger als 5000ms getrennt ist timer starten
      Serial.print ("WiFi connection lost");
                                                         // "Wifi connection lost" ins serielle Terminal schreiben
      Serial.print ("\t");                         // Tabulator im seriellen Terminal schreiben
 
                                                         // versucht eine Verbindung zum Netzwerk herzustellen
      if (pass && strlen(pass))
      {
        WiFi.begin((char*)ssid, (char*)pass);       
      }
      else
      {
        WiFi.begin((char*)ssid);
      }
    }
  }
  else
  {
    Blynk.run();
  }
}




void setup() {


Blynk.begin(auth, ssid, pass);
                                                       // You can also specify server:
                                                       // Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
                                                       // Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);
 
  while (Blynk.connect() == false) {
                                                         // Wait until connected
 
  }

  pinMode (sensorPin, INPUT);              // sensorPin als INPUT  setzen (float sensor)
  pinMode (4, INPUT);                           // switchPin als INPUT  setzen (Switch for Waterpump on) _PULLUP
  pinMode(pumpPin, OUTPUT);              // pumpPin als Output setzen (Waterpump)
  pinMode(wasserLed, OUTPUT);            // wasserLed als Output setzen ("Water empty" LED)
  pinMode(pumpLed, OUTPUT);              // pumpLed als Output setzen ("Water On" LED)


                                                          // Debug console
  Serial.begin(9600);

 
 
}


void loop() {

{Blynk.run();}

switchValue = digitalRead(switchPin);

                                                           // nur wenn der Motor nicht an ist und der Schalter betätigt
if (!isMotorAn && switchValue == HIGH && sensorValue == LOW) {
                                                           // anschalten
      Serial.print("Button High");             // schereibt in den Serial Monitor "Button High"
      Serial.print("\t");                            // schereibt in den Serial Monitor einen Tabulator
      digitalWrite(pumpLed, HIGH);         // schaltet die Led für Pumpe läuft ein
      wasserLedV.on();                           // schaltet die Virtuelle Led (Blynk) für Pumpe läuft ein
      digitalWrite(pumpPin, HIGH);           // schaltet die Pumpe ein
      water_timestore = millis();                // startet den Timer
      isMotorAn = true;                             // schreibt die variable isMotorAn auf wahr also Motor läuft
}

if (isMotorAn && millis() - water_timestore > 90000) {
                                                             // wenn der TImer 90000ms abgelaufen und die Pumpe an ist         ausschalten
      digitalWrite(pumpPin, LOW);             // schaltet die Pumpe aus
      digitalWrite(pumpLed, LOW);            // schaltet die Led für Pumpe läuft ein
      wasserLedV.off();                            // schaltet die Virtuelle Led (Blynk) für Pumpe läuft aus
      isMotorAn = false;                           // schreibt die variable isMotorAn auf false also Motor aus
}



  sensorValue = digitalRead(sensorPin);  //liest den Pin für den Schwimmerschalter, An oder Aus

 
if (!isWasserleer && sensorValue == HIGH)// wenn das Wasser nicht schon leer ist und der Sensor Wasser leer zeigt 
  {
     digitalWrite (wasserLed, HIGH);        // schaltet die Led für Wasser leer ein
     digitalWrite (pumpPin, LOW);            // schaltet die Pumpe aus
     digitalWrite (pumpLed, LOW);           // schaltet die Led für Pumpe läuft aus
     isMotorAn = false;                           // schreibt die variable isMotorAn auf false also Motor aus
     isWasserleer = true;                       // schreibt die variable isWasserleer auf true also Wasser leer

  }else{   
                                                       // anderfalls also wenn Wasser nicht leer
     digitalWrite (wasserLed, LOW);      // schaltet die Led für Wasser leer aus
     isWasserleer = false;                    // schreibt die variable isWasserleer auf false also Wasser nicht leer
  }

                                                   //Blynk.syncAll();
connection();

}

LG und Danke

Es gibt Logic-Level Mosfets, die auch schon ab 3 Volt durchschalten.
Dazu gehört auch der IRFZ34 IRLZ34.

Und viele Relaismodule sind Low-Aktiv, schalten also bei Low-Pegel.

Es gibt Logic-Level Mosfets, die auch schon ab 3 Volt durchschalten.
Dazu gehört auch der IRFZ34.

Und viele Relaismodule sind Low-Aktiv, schalten also bei Low-Pegel.

Okay, super danke ist gut zu Wissen, denn sollte das alles nicht klappen dann bestell ich mir sowat :smiley:

Lieben Dank für den Tipp!

Oh...sorry, ich sehe gerade, nicht der IRFZ34 sondern der IRLZ34 ist der Logic-Level Mosfet.
Also den IRLZ34 ist der richtige.
Ich ändere das oben.

Danke für die Aufmerksamkeit!

Es gibt Logic-Level Mosfets, die auch schon ab 3 Volt durchschalten.
Dazu gehört auch der IRFZ34 IRLZ34.

Und viele Relaismodule sind Low-Aktiv, schalten also bei Low-Pegel.

Ist die "Gate-Schwellenspannung" die Spannung ab der er Schaltet?

Lg und Danke schonmal.

sandrokoeldorfer:
Danke für die Aufmerksamkeit!

Ist die "Gate-Schwellenspannung" die Spannung ab der er Schaltet?

Lg und Danke schonmal.

Das ist die VGS(th).

sandrokoeldorfer:
Ist die "Gate-Schwellenspannung" die Spannung ab der er Schaltet?

Das ist die Spannung ab der er anfängt zu leiten. Er hat da nicht seinen maximalen Strom. Wie gut das also geht hängt vom Drainstrom ab

Katsumi_S:
Nicht ganz korrekt.
Der Strom muß nicht 0 sein.

Der Triac (Thyristor genauso) bleibt nach der Zündung so lange eingeschaltet bis der Haltestrom unterschritten wird. Im Datenblatt wird für diese SSR ein Minimalstrom von 0,05A angegeben. Wenn dieser unterschritten wird, schaltet der enthaltene Triac ab. Wenn jetzt die Pumpe also jetzt kurzzeitig weniger als die 50mA zieht, schaltet der Triac ab wenn der im SSR enthaltene Optokoppler am Eingang kein Signal mehr hat.

Gruß, Katsumi

Und wann passiert es, daß die Pumpe fast nichts verbraucht?

Grüße Uwe

Die Spannungsspitzen die Gleichstrommotoren oft erzeugen sind um einiges höher als die Spannung die in den Motor eingespeist wird. Zu diesem Zeitpunkt kann der Triac gelöscht werden, da sich der Stromfluß durch die Rückspannung entweder umkehrt oder nur gegen 0 geht.

Zumindest kenne ich sonst keine Möglichkeit warum das SSR abschaltet. Zumindest nicht wenn es wirklich dieses SSR ist. Gibt das Ding laut Datenblatt auch als DC Variante...

Gruß, Katsumi

Ok könnte so sein; aber dann ist das ein unzulässiger Betrieb (SSR durch Störungsspitzen abzsuschalten).
Der Motor muß entstört werden damit die Schaltung sicher funktioniert und damit nichts gestört wird.

Grüße Uwe

uwe, this is not a bug, this is a feature :slight_smile: :slight_smile:

Andere nennen das off label use oder so

sandrokoeldorfer:
hier noch das vorher vergessens Fritzing und ....

Freilaufdiode falsch eingebaut.