Tutorial: Arduino Cactus Rev 2 Soil Moisture Sensor

Aktualisiert am:

Einleitung

In diesem Tutorial werde ich euch zeigen, wie ihr einen Bodenfeuchtigkeitssensor (Soil moisture sensor) ansteuert und die gemessenen Werte interpretieren könnt. Außerdem werde ich euch einen Trick verraten, wie euer Sensor länger gegen Oxidation geschützt sein wird.

Teileliste

Für dieses Tutorial werden die folgenden Teile benötigt:

Einfache Ansteuerung vom Soil Moisture Sensor

In diesem Teil des Tutorials werden wir den Soil Moisture Sensor auf einfache Art und Weise am Arduino Atmega verkabeln.

Soil Moisture Sensor verkabeln

Die einfachste Art den Sensor anzusteuern ist folgendermaßen:

  • GND an GND vom Arduino Board
  • VCC an VCC vom Arduino Board
  • SIG an einen Analog Pin vom Arduino Board
Einfache Verkabelung eines Soil Moistures Sensors an ein Cactus Rev 2 mit einem Atmega32u4 und einem ESP8266.
Einfache Verkabelung eines Soil Moistures Sensors an ein Cactus Rev 2 mit einem Atmega32u4 und einem ESP8266.

Code

Der Code ist sehr übersichtlich, dennoch werde ich ihn kurz erläutern.

  1. sensor_water = A3 bedeutet, dass unser Analog Input am Pin A3 anliegt.
  2. analogRead() liest den gemessenen Wert am Pin sensor_water
    1. Der Wertebereich hierfür liegt zwischen 0 und 1023 
    2. Wir berechnen neben dem RAW-Wert die Prozentwerte und geben sie auf der Konsole aus.
//This is a simple Sketch for the Cactus Rev 2 to read the value from a soil moisture sensor. 
//You can find the tutorial on https://www.derpade.de/tutorial-arduino-cactus-soil-moisture-sensor
//@author Patrick Hausmann <privat@patrick-designs.de>

int sensor_water = A3;
int baudrate = 9600;

void setup() 
{
  Serial.begin( baudrate );
  while(!Serial); //Waiting for Serial connection
}

void loop() 
{
  int value_water = analogRead(sensor_water); 
  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 );

  delay(3000);
}
Arduino IDE Ausgabe auf dem seriellen Monitor vom Cactus Rev 2.
Arduino IDE Ausgabe auf dem seriellen Monitor vom Cactus Rev 2.

Erweiterte Ansteuerung vom Soil Moisture Sensor

Im zweiten Teil des Tutorials werden wir einen besonderen Wert auf Haltbarkeit legen. Das größte Problem eines Feuchtigkeitssensors ist Oxidation. Um der Oxidation entgegen zu wirken, müssen uns folgende Fehler aus dem ersten Teil bewusst werden:

  • Dauerhafte Stromzufuhr
  • Gleichstrom

Wie ich bereits in diesem Artikel (Arduino Soil Moisture Sensor Korrosion verhindern) beschrieben hatte, müssen wir den Prozess der Elektrolyse verlangsamen und umkehren. Deshalb werden wir im zweiten Teil des Tutorials die Verkabelung und den Code ein wenig ändern.

Soil Moisture Sensor verkabeln

Die einfachste Art den Sensor anzusteuern ist folgendermaßen:

  • GND an einen Digital Output vom Arduino Board
  • VCC an einen Digital Output vom Arduino Board
  • SIG an einen Analog Pin vom Arduino Board

Code

Den originalen Code findet ihr ebenfalls in meinem Repository auf Github: blackus3r/cactus-rev-2.

In diesem erweiterten Code implementieren wir eine neue Funktion namens readSoilMoisture(). Diese Funktion aktiviert unseren Soil Moisture Sensor für 500ms, liest den aktuellen Wert aus, dreht die Polarität um und deaktiviert den Sensor wieder. Dies hat zur Folge, dass wir den obengenannten Fehlern entgegen wirken.

//This is a extended Sketch for the Cactus Rev 2 to read the value from a soil moisture sensor. With a anti oxidation functionality. 
//You can find the tutorial on https://www.derpade.de/tutorial-arduino-cactus-soil-moisture-sensor
//@author Patrick Hausmann <privat@patrick-designs.de>

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

void setup() 
{
  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 );

  delay(3000);
}

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

Schreibe einen Kommentar

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