The SMT50 by TRUEBNER is perfectly suited for the Arduino. The wiring is shown in the picture above.

  • brown: 3.3 V - 30 V
  • white: ground
  • green: temperature (voltage output with 10 kOhm output resistance)
  • yellow: moisture (voltage output with 10 kOhm output resistance)

Arduino code is also pretty simple, just read the analog voltages as shown in the code snippet below:

const int measurements = 50;

float temperatureArray[measurements];
float sensorValueTemperature = 0.0;
float moistureArray[measurements];
float sensorValueMoisture = 0.0;

for (int i = 0; i < measurements; i++)
{
    temperatureArray[i] = analogRead(A0);
    moistureArray[i] = analogRead(A1);
}
 
for (int i = 0; i < measurements; i++)
{
    sensorValueTemperature += temperatureArray[i];
    sensorValueMoisture += moistureArray[i];
}


sensorValueTemperature = sensorValueTemperature / measurements;
sensorValueMoisture = sensorValueMoisture / measurements;

sensorValueTemperature = sensorValueTemperature*3.3/1024;
sensorValueMoisture = sensorValueMoisture *3.3/1024;
 
sensorValueTemperature = (sensorValueTemperature-0.5)*100;
sensorValueMoisture = sensorValueMoisture *50/3;
 
sensorValueTemperature = sensorValueTemperature*10;
sensorValueMoisture = sensorValueMoisture*10;

Please note that I measured 50 times the same analog channel and calculated the mean value to reduce any noise which may appear. The Arduino analog digital converter uses 3.3 V reference voltage. With 10 bit resolution you have 1024 steps. I first calculated the voltage, e.g. from

sensorValueTemperature = sensorValueTemperature*3.3/1024;

and then convert voltage into moisture according to the datasheet ( 0 V = 0% moisture, 3 V = 50 % moisture)

sensorValueMoisture = sensorValueMoisture *50/3;