need help to setting up multiple sensors (Moisture Soil sensor v1.2)

english version below

Hallo Leute,

da ich leider keinen grünen Daumen habe und ohne weiteres als Serien-killer der Pflanzenwelt bezeichnet werden kann, habe ich mir vorgenommen ein automatisches Bewässerungssystem zu bauen. Online habe ich schnell ein passendes Bastel-Kit gefunden und bestellt.

Nach erhalt habe ich festgestellt, dass ich selber einen Sketch schreiben muss. Da ich vorher nie etwas mit Programmieren zu tun hatte, hat es ein paar Tage gedauert um ein Grundverständnis zu hierfür zu entwickeln aber jetzt macht es schon Spaß. Leider komm ich nun schon seit Tagen nicht weiter um bin am Verzweifeln.

Nun zum Problem

Ziel
Der vertikale Kräutergarten soll automatisch bewässert werden. Die Bewässerung soll nach Bedarf und pro Ebene einzelnen erfolgen.

Hierzu sollen vier Sensoren und fünf Pumpen verbaut werden.
Sensor 1 -> Pumpe 1
Sensor 2 -> Pumpe 2
Sensor 3 -> Pumpe 3
Sensor 4 -> Pumpe 4 + 5

**Verwendete Sensoren = Capacitive Soil Moisture Sensor v1.**2

Grundidee zur Ansteuerung der Pumpe

const int AirValue = 590;
const int WaterValue = 290;
int intervals = (AirValue - WaterValue) / 3; int soilMoistureValue = 0;

void setup ()
{ Serial.begin(9600);
pinMode(2, OUTPUT); // Pumpe 1
}

void loop() {
{
soilMoistureValue = analogRead(0); // Sensor 1

if (soilMoistureValue > WaterValue && soilMoistureValue < (AirValue - intervals))
{
Serial.println("Very Wet");
digitalWrite(2, HIGH); //Pumpe AUS // HIGH ist nicht on sondern aus / Andersherum funktionier es nicht

}
else if (soilMoistureValue > (WaterValue + intervals) && soilMoistureValue < (AirValue - intervals))
{
Serial.println("Wet");
digitalWrite(2, HIGH); // HIGH ist nicht on sondern aus / Andersherum funktionier es nicht
delay(10000);
digitalWrite(2, LOW); // Pumpe arbeitet 2 Sekunden , dann 10 Sekunden warten
delay(2000);
}

Auch wenn HIGH und LOW vertauscht ist funktioniert die Messung und Pumpe wie gewünscht. Warum es andersrum nicht funktioniert hab ich noch nicht verstanden aber das wird schon noch

Ich vermisse die englische Version. :wink:

Aber egal, hier bist du im deutschen Teil des Forum und da reicht es deutsch zu schreiben.

Allerdings verstehe ich deine Frage nicht, bzw. habe die nicht gefunden.

@TO: Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Hallo Dieter,

bin noch dabei mich hier einzufinden. Offenbar ist mein Text wirklich zu lang. Es wird nicht mal die Helfte angezeigt.
:slight_smile:

Also noch mal verkürzt

Wie kann ich die einzelnen Sensoren so definieren, dass diese separat messen und die Werte ausgeben.
z.Bsp.
Sensor 1 Dry Sensor 2 Dry Sensor 3 Very Wet Sensor 4 Wet
Sensor 1 Dry Sensor 2 Dry Sensor 3 Very Wet Sensor 4 Wet
Sensor 1 Dry Sensor 2 Dry Sensor 3 Very Wet Sensor 4 Wet
Sensor 1 Dry Sensor 2 Dry Sensor 3 Very Wet Sensor 4 Wet
Sensor 1 Dry Sensor 2 Dry Sensor 3 Very Wet Sensor 4 Wet
Sensor 1 Dry Sensor 2 Dry Sensor 3 Very Wet Sensor 4 Wet[/color]

Alles andere sollte ich alleine hinbekommen bekommen.

LG und Danke

Gib uns mal einen Link zu den Sensoren. Ansonsten so, wie den ersten an jeweils einen eigenen analogen Eingang in jeweils eine Variable (oder besser in ein Array).

Gruß Tommy

Hallo Tommy,

hier ein Link zum Sensor

Jetzt versuche ich noch raus zu finden wie ich den " Codetags" finden kann :slight_smile:

"@TO: Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *)."

:):slight_smile:

void setup ()
{ Serial.begin(9600);
pinMode(2, OUTPUT); // Pumpe 1
}

void loop() {
{
soilMoistureValue = analogRead(0); // Sensor 1

if (soilMoistureValue > WaterValue && soilMoistureValue < (AirValue - intervals))
{
Serial.println("Very Wet");
digitalWrite(2, HIGH); //Pumpe AUS // HIGH ist nicht on sondern aus / Andersherum funktionier es nicht

}
else if (soilMoistureValue > (WaterValue + intervals) && soilMoistureValue < (AirValue - intervals))
{
Serial.println("Wet");
digitalWrite(2, HIGH); // HIGH ist nicht on sondern aus / Andersherum funktionier es nicht
delay(10000);
digitalWrite(2, LOW); // Pumpe arbeitet 2 Sekunden , dann 10 Sekunden warten
delay(2000);

const int AirValue = 590;
const int WaterValue = 290;
int intervals = (AirValue - WaterValue) / 3; int soilMoistureValue = 0;

void setup ()
{ Serial.begin(9600);
  pinMode(2, OUTPUT); // Pumpe 1
}

void loop() {
  {
    soilMoistureValue = analogRead(0); // Sensor 1

    if (soilMoistureValue > WaterValue && soilMoistureValue < (AirValue - intervals))
    {
      Serial.println("Very Wet");
      digitalWrite(2, HIGH);   //Pumpe AUS  // HIGH ist nicht on sondern aus / Andersherum funktionier es nicht

    }
    else if (soilMoistureValue > (WaterValue + intervals) && soilMoistureValue < (AirValue - intervals))
    {
      Serial.println("Wet");
      digitalWrite(2, HIGH);   // HIGH ist nicht on sondern aus / Andersherum funktionier es nicht
      delay(10000);
      digitalWrite(2, LOW);   // Pumpe arbeitet 2 Sekunden , dann 10 Sekunden warten
      delay(2000);
}

Mal sehen ob das funktioniert :slight_smile:

Es wäre sinnvoller, Dein Anliegen in mehrere Teilschritte zu gliedern.
Lies erst mal mehrere Sensoren ein und gib die Werte auf dem seriellen Monitor aus.

Danach kannst Du mit der Steuerung der Pumpen beginnen.
Dabei könntest Du merken, dass Dir die delay auf die Füße fallen. Dann solltest Du Dich mit millis beschäftigen.

Oder Du schust Dir gleich das Tutorial von Rentner "Von delay() bis zur Methode" an, weil 5 Mal das Gleiche tun schreit förmlich nach Objektorientierung.

Gruß Tommy

Hallo Zusammen,

ich hab mir gedacht, ich fang mal lieber von vorne an :grinning:
Ich habe mal versucht zwei Sensoren anzuschließen und abzulesen.

#define soilSensor1 A0
#define soilSensor2 A1

void setup ()
{
  Serial.begin(9600);
}

void loop()
{
int sensorValue1 = analogRead(soilSensor1); 
Serial.println(sensorValue1); 
delay(5000);

int sensorValue2 = analogRead(soilSensor2);
 Serial.println(sensorValue2); 
delay(5000);

}

Jetzt bekomme ich zwar wie unterschiedliche Werte aber die sind nicht den einzelnen Sensoren zugeordnet.

803
563
803
563
803
563
803
563

Bin also wieder am Anfang :cry:

Du solltest noch weiter zurück zu den Grundlagen gehen und diese lernen. Die IDE hat dafür gute Beispiele.
Sonst hättest Du es gewußt:

Serial.print(Sensor1: ");
Serial.println(sensorValue1); 
Serial.print(Sensor2: ");
Serial.println(sensorValue2);

Gruß Tommy

Alternativ:
Was hältst du hiervon:

void loop() {
    int sensorValue1 = analogRead(soilSensor1);
    Serial.print(sensorValue1);
    Serial.print("     ");
    int sensorValue2 = analogRead(soilSensor2);
    Serial.println(sensorValue2);

    delay(10000);
}

links ist Sensor 1 , rechts Sensor 2

Hi

Wenn ich die einzelnen Werte nur so auf's Terminal rausblubbern lasse, muß ich mich nicht wundern, daß diese Werte dort 'einfach so' ankommen.

Da hätte man aber durchaus selber auch drauf kommen können, aß der Arduino hier stur Das macht, was Ihm befohlen wurde:

  • werte Wert 1 ins Terminal
  • werfe Wert 2 ins Terminal
    ...
    Er ist ziemlich unschuldig daran, daß Du nicht mit zählst, der wievielte Wert nun gerade geworfen wurde.
    Das Ganze wird für Dich, als Mensch viel einfacher, wenn Du Dir auch eine Start-Markierung ausgeben lässt - dann weißt Du 'Ab hier beginnen wir von Vorne'.

MfG