Tutorial: Arduino Cactus Soil Moisture und Wasserpumpe ansteuern

Einleitung

In diesem Tutorial werden wir einen Bodenfeuchtigkeits-Sensor (Soil Moisture Sensor) mit einer kleinen Wasserpumpe kombinieren, um so ein automatisches Bewässerungssystem mit einem Cactus Rev 2 zu erstellen. Diese Steuerung ist zum Beispiel für (m)einen Smart Plant Pot sehr sinnvoll.

Der Arduino Cactus Rev 2 misst mit dem Bodenfeuchtigkeits-Sensor (Soil Moisture Sensor) den Wassergehalt in der Erde und schaltet ab einer festen Schwelle die Wasserpumpe ein, um so den gewünschten Wassergehalt in der Erde wieder herzustellen.

Teileliste

Verkabelung

Die Verkabelung ist dieses Mal nicht so simpel, wie bei den bisherigen Tutorials. Bevor es jedoch los geht, solltet ihr die Verkabelung vom Soil Moisture Sensor vornehmen, in dem ihr dieses Tutorial lest: Tutorial: Arduino Cactus Soil Moisture Sensor

Nun können wir die Mini Wasserpumpe verkabeln:

  • Den linken Pin vom Transistor (orangenes Kabel) an Pin 9 vom Atmega.
  • Minuspol der Pump an den mittleren Pin vom Transistor.
  • Pluspol der Pumpe an RAW vom Atmega.
  • Den rechten Pin vom Transistor an GND vom Atmega.
  • Plus und Minus der externen Stromversorgung an RAW und GND vom Atmega.
Cactus Rev 2 Verkabelung mit einem Soil Moisture Sensor und einer Mini Wasserpumpe.
Cactus Rev 2 Verkabelung mit einem Soil Moisture Sensor und einer Mini Wasserpumpe.

Code

Dieser Code liest den aktuellen Feuchtigkeitsgehalt in der Erde und beginnt die Pumpe anzusteuern, sobald der gemessene Wert unter 20% fällt. Den unten stehenden Code findet ihr wieder auf Github.

[sam_zone id=”2″ codes=”true”]

//This is a extended Sketch for the Cactus Rev 2 to read the value from a soil moisture sensorw ith a anti oxidation functionality and
//also to controll a water pump for watering a plant for example. 
//You can find the tutorial on http://derpade.de/
//@author Patrick Hausmann <privat@patrick-designs.de>

int soilMoisturePin1 = 4;
int soilMoisturePin2 = 3;
int soilMoisturePin3 = A3;
int baudrate = 9600;

//Transistor 'Base' pin or input pin of motor driver ic to Arduino PWM Digital Pin 3
const int motorPin = 9;

int Speed; //Variable to store Speed, by defaul 0 PWM
int flag;

void setup() 
{
  pinMode(motorPin, OUTPUT); //Set pin 3 as an OUTPUT
  Serial.begin( baudrate );
  while(!Serial); //Waiting for Serial connection
}

int readSoilMoisture()
{
   int value; 
  
   pinMode(soilMoisturePin1, OUTPUT);
   pinMode(soilMoisturePin2, OUTPUT);

   digitalWrite(soilMoisturePin1, HIGH);
   digitalWrite(soilMoisturePin2, LOW);
   delay(500);

   value = analogRead(soilMoisturePin3);

   digitalWrite(soilMoisturePin2, HIGH);
   digitalWrite(soilMoisturePin1, LOW);
   delay(500);

   digitalWrite(soilMoisturePin2, LOW);
   return value;
}

void loop() 
{
  int value_water = readSoilMoisture(); 
  String water = String((int)((((double)value_water/1023.0)*100.0)));//Convert Raw value to percentage. This is a generic calculation, depending on raw values from 0 to 1023. 
  Serial.print("Soil moisture: ");
  Serial.print(water);
  Serial.print("% Raw value: ");
  Serial.println( value_water );

//Check if incoming data is available:
    if (water.toInt() < 20)
    {
      Serial.println("Too dry, we should water it.");
      Speed = 100;
      flag=0;
    }
    else 
    {
      Serial.println("Still wet, no need to water it.");
      Speed = 0;
    }

 
  if (Speed>=50 && Speed<=255)
  {
   
    analogWrite(motorPin, Speed);
      
      if (flag==0)
      { 
        Serial.print("Motor spinning with ");
        Serial.print(Speed);
        Serial.println(" PWM");
        flag=1;
      }
  }
  else if (Speed == 0) 
  {
    analogWrite(motorPin, Speed);
  }

  delay(3000);
}
In der Arduino IDE öffnet man am besten den seriellen Monitor, um zu sehen, welcher Feuchtigkeitsgrad gerade gemessen wurde und ob die Wasserpumpe angesteuert wurde.
In der Arduino IDE öffnet man am besten den seriellen Monitor, um zu sehen, welcher Feuchtigkeitsgrad gerade gemessen wurde und ob die Wasserpumpe angesteuert wurde.

Video

Bitte akzeptiere YouTube-Cookies, um dieses Video abzuspielen. Wenn du akzeptierst, greifst du auf Inhalte von YouTube zu, einem Dienst, der von einem externen Dritten bereitgestellt wird.

YouTube-Datenschutzrichtlinie

Wenn du diesen Hinweis akzeptierst, wird deine Auswahl gespeichert und die Seite aktualisiert.

Alle Tutorials zum Cactus Rev 2

  1. Tutorial: Arduino NTC 100K Thermistor schnell anschließen
  2. Tutorial: Arduino Cactus Soil Moisture und Wasserpumpe ansteuern
  3. Tutorial: Arduino Cactus Ultraschallsensor
  4. Tutorial: Arduino Cactus Rev 2 Soil Moisture Sensor
  5. Tutorial: Cactus Rev 2 Atmega32u4 ESP8266 Websocket
  6. Tutorial: Sketch/Firmware auf ESP8266 über ein Atmega32u4 hochladen
  7. Tutorial: Cactus Rev 2 ESP8266 flashen
  8. Tutorial: Cactus Rev 2 Atmega32u4 ESP8266-03 - Getting Started

5 Gedanken zu „Tutorial: Arduino Cactus Soil Moisture und Wasserpumpe ansteuern

  • M
    14. März 2018 um 14:26
    Permalink

    Servus !
    Ich habe einen Arduino Uno, welcher mit atmega328p-pu integriert ist.
    würde es auch damit funktionieren?
    Und wenn ja, was müsste ich statt raw benutzten: 3,3V oder 5V ?

    Antwort
    • P
      15. April 2018 um 10:08
      Permalink

      Prinzipiell ja. Aber ich kenne das Board nicht.
      Was du als RAW nehmen musst, müsste in den Specs vom Board stehen.

      Antwort
  • E
    14. April 2018 um 15:45
    Permalink

    Ist es zwanghaft nötig das Modul per ATmega32u4 anzusteuern oder würde ein Arduino Uno oder Arduino Mega 2560 ebenso ausreichen?

    Antwort
    • P
      15. April 2018 um 10:10
      Permalink

      Eigentlich ist nahezu jeder Atmega in der Lage, die obige Schaltung umzusetzen. Aber man muss wahrscheinlich die Pins anpassen, und ggfs. Die Messspannung.

      Antwort
  • G
    6. März 2020 um 22:33
    Permalink

    Was für ein Schlauch wird für die Tauchpumpe benötigt?
    Mit der aktuellen Teileliste würde die Pumpe ja noch kein Wasser fördern können.

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Notify me of followup comments via e-mail. You can also subscribe without commenting.