Hallo Leute,
ich habe mir mittlerweile etwas Arduino Grundwissen angeeignet jedoch komme ich leider auf keinen grünen Zweig ![]()
Mein Projekt: Regenwasser von der Dachrinne abzweigen für ein Fass.
- Ich habe ein Ventil dass mir das Dachwasser zur Regentonne leitet
- Einen Ultraschallsensor um die Distanz im Tank zu messen.
- Ein Schwimmer falls die Ultraschallmessung versagt.
- Eine Pumpe die dann zum bewässern dient ( soweit bin ich noch nicht!)
- Einen Schalter um die Pumpe manuell zu starten ( Im Winter Wasser ab pumpen)
Verwendete Komponenten:
Arduino Nano
L298N DC Motor Treiber - DC Motor Ventil
12V Pumpe vermutlich über ein Relaise dann ( fehlt noch)
Ultraschallsensor
Schalter
Soweit die Daten.
Wo ich im Moment scheitere ist:
Das Ventil hat keine Endschalter, diese würde ich gerne sparen!
Ich würde gerne das Ventil 3 Sekunden lang fahren lassen bis es geöffnet ist und auch die selbe Zeit wieder zum schliessen nutzen.
Start ist mit Ventil geschlossen.
Ich dachte mir wenn ich dies mit
if ((mm <= abstandstop) && (ventilstatus == false))
mache würde es funktionieren...
Leider bekomme ich es nicht hin dass der Status vom Ventil dann auf true gesetzt wird.
der Fehler muss an dem boolean liegen da ich nicht sicher weiß wie ich das boolean auf true schreibe.
Könnt ihr mir hier unter die Arme greifen da ich wirklich keine Ahnung mehr habe, mein Kopf raucht schon seit ein paar Tagen. Immer und immer wieder habe ich einen anderen Ansatz versucht...
#include <Wire.h>
// PIN Belegungen
const int triggerPin = 2; // Ultraschall Sensor
const int echoPin = 3; // Ultraschall Sensor
const int fullstop = 4; // Tank Schwimmer wenn Ultraschall versagt
const int manuellPumpe = 5; // Manuelle entleerung des Tanks ( Winter)
// Motor 1
#define enA 6 // Pin D6 - Getriebemotor Ventil Dachrinne Signal
#define in1 7 // Pin D7 - Getriebemotor Ventil öffnen
#define in2 8 // Pin D8 - Getriebemotor Ventil schließen
// Einstellbare Werte -----------------------------------------------------------------#
// #
int abstandstop = 100; // Abstand zum Wasser für Stop #
int abstandstart = 150; // Abstand zum Wasser für füllen #
long dzeit = 3000; // Motor laufzeit in Millisekunden #
boolean ventilstatus = false; // Ventil Status einlesen - LOW = geschlossen #
// #
// #
// #
//-------------------------------------------------------------------------------------#
void setup() {
pinMode(triggerPin, OUTPUT); // Ultraschall Sensor
pinMode(echoPin, INPUT); // Ultraschall Sensor
pinMode(fullstop, INPUT); // Tank Schwimmer - zweiter füll Stop
pinMode(manuellPumpe, INPUT); // Manuelle entleerung ( Schalter )
pinMode(enA, OUTPUT); // Getriebemotor Ventil Dachrinne
pinMode(in1, OUTPUT); // Getriebemotor Ventil öffnen
pinMode(in2, OUTPUT); // Getriebemotor Ventil schließen
}
void loop() {
Serial.begin(9600); // Serielle Schnittstelle initialisieren
Serial.println(""); // Serieller Text
Serial.println(""); // Serieller Text
Serial.print("Status Ventil: ");
Serial.println(ventilstatus);
delay(500);
long duration, inches, mm; // Ultraschall Distanzsensor
digitalWrite(triggerPin, LOW); // Ultraschall Distanzsensor
delayMicroseconds(2); // Ultraschall Distanzsensor verzögerer
digitalWrite(triggerPin, HIGH); // Ultraschall Distanzsensor
delayMicroseconds(5); // Ultraschall Distanzsensor verzögerer
digitalWrite(triggerPin, LOW); // Ultraschall Distanzsensor
duration = pulseIn(echoPin, HIGH); // Ultraschall Distanzsensor
mm = microsecondsToMillis(duration); // Ultraschall Distanzsensor
Serial.print(mm); // Seriell Ultraschall Sensor - Millimeter
Serial.println(" mm"); // Serieller Text - mm
Serial.print(duration); // Seriell Ultraschall Sensor - Zeit
Serial.println(" Sekunden"); // Serieller Text - Sekunden
delay(1000); // Zeit abwarten um Daten besser lesen zu können
if ((mm <= abstandstop) && (ventilstatus == false)) // Wenn Abstand (mm) kleiner oder gleich - Ventil schließen
{
digitalWrite(in1, LOW); // Ventil schließen
digitalWrite(in2, HIGH); // Ventil schließen
analogWrite(enA, 255); // Motor Geschwindigkeit 0-255
delay(dzeit);
digitalWrite(ventilstatus, true);
Serial.print("Ventil: ");
Serial.println(ventilstatus);
delay(500);
digitalWrite(in1, LOW); // Ventil stoppen ( bzw. Motor)
digitalWrite(in2, LOW); // Ventil stoppen ( bzw. Motor)
analogWrite(enA, 255); // Motor Geschwindigkeit 0-255
}
/*
if (mm >= abstandstart) // Wenn Abstand (mm) größer oder gleich - Ventil öffnen
{
digitalWrite(in1, HIGH); // Ventil öffnen
digitalWrite(in2, LOW); // Ventil öffnen
analogWrite(enA, 255); // Motor Geschwindigkeit 0-255
delay(dzeit); // Zeit bis Ventil ganz offen
digitalWrite(in1, LOW); // Ventil stoppen ( bzw. Motor)
digitalWrite(in2, LOW); // Ventil stoppen ( bzw. Motor)
}
else
{
digitalWrite(in1, LOW); // Ventil stoppen ( bzw. Motor)
digitalWrite(in2, LOW); // Ventil stoppen ( bzw. Motor)
analogWrite(enA, 255); // Motor Geschwindigkeit 0-255
}
*/
}
long microsecondsToMillis(long microseconds)
{
return microseconds / 3 / 2;
}