Tutorial: Arduino Cactus Soil Moisture und Wasserpumpe ansteuern

Aktualisiert am:

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“

  1. 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 ?

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

      Antworten
  2. 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.

    Antworten

Schreibe einen Kommentar

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