Logo! with SMT50 example

This is an example using Logo! and SMT50 for my German gardener friends (therefore written in German).

Eine Bewässerungssteuerung mit der Logo benötigt folgende Komponenten:

  • Bodenfeuchtesensoren (hier SMT50)
  • Logo Steuerung (hier Logo8!24RCE)
  • Ventile (z.B. 24V Magnetventile von Hunter)

Eine sinnvolle Bewässerungslogik basiert auf einem Zeitprogramm, das jedoch bei zu hoher Bodenfeuchte unterbrochen wird. Das Zeitprogramm bewässert beispielsweise morgens und abends zu bestimmten Zeiten.

Als Bodenfeuchtesensor wird der SMT50 von TRUEBNER verwendet, der analoge Spannungssignale für Bodenfeuchte und Temperatur ausgibt. Die Ventile zur Bewässerung werden über Relaisausgänge der Logo gesteuert.

In diesem Beispiel soll nur ein Bodenfeuchtesensor SMT50 verwendet werden. Das Display der Logo soll sowohl die Bodenfeuchte (vol. Wassergehalt in %) und die Temperatur in °C anzeigen. Der Temperatursensor im SMT50 gibt eine Spannung aus, die gemäß der Kennlinie im Datenblatt in eine Temperatur umzurechnen ist. Beispielsweise ergeben 20°C eine Spannung von 0,6 V. Man kann das leicht mit einem Multimeter überprüfen. Dazu verbindet man den SMT50 mit einer Spannungsversorgung (braun: +4 bis +30V, weiß: Masse) und misst dann mit dem Multimeter die Spannung zwischen dem grünen Anschluss und Masse. Diese analoge Spannung kann an die Logo anlegt werden. Bei der Programmierung der Logo wird dann ein analoges Eingangselement benötigt, so wie im folgenden Bild gezeigt.

Der Messbereich der analogen Eingänge der Logo geht von 0 bis 10 V. Ein AD-Wandler bildet diesen Spannungsbereich auf Zahlen zwischen 0 und 1000 ab, die im Logo Programm weiterverarbeitet werden können. Über den Webzugriff der Logo kann man die aktuellen Messwerte anschauen. Beispielsweise wird in diesem Bild der Messwerte 70 angezeigt. Der SMT50 wurde dabei an den Analogengang 1 angeschlossen.

Der Wert 70 entspricht dabei 0,7 V. Dabei muss man jedoch die Belastung des SMT50 durch den vergleichsweise niedrigen Innenwiderstand der Logo berücksichtigen.  Es bildet sich ein Spannungsteiler aus dem Innenwiderstand des SMT50 (10 kOhm) und dem Eingangswiderstand der Logo (ca. 80 kOhm) aus, der zu einem reduzierten Spannungsmesswert führt. In einem Beispiel soll das erläutert werden. Wenn man den SMT50 zuerst nicht an den Analogeingang anschließt, so kann man bei der Temperatur vom 27,6°C eine Spannung von 0,776 V messen. Schließt man den SMT50 jetzt an die Logo an und misst wiederum mit einem Multimeter an den Eingangsklemmen der Logo, so hat sich die Spannung auf 0,690 V erniedrigt. Dies liegt am Spannungsabfall im Ausgangswiderstand des SMT50, da ein gewisser Strom fließt. Man kann diesen Spannungsabfall in der Logo durch eine entsprechende Verstärkung kompensieren. Die gemessene Spannung muss um den Faktor 0,776/0,690=1,124 verstärkt werden. Dazu passt man die Werte im Analogeingangsblock wie folgt gezeigt an (Gain auf 1,12, da nur 2 Nachkommanstellen möglich).

Zusätzlich wurde noch ein Offset eingetragen. Dieser Offset ist notwendig, da Kennlinie gegenüber dem Nullpunkt verschoben ist (0°C entsprechen 0,5V = 50 AD Wandler Werte). Berücksichtigt man eventuelle Toleranzen des Temperatursensors durch Kalibrierung mit einem Referenzthermometer, so kann man den Offset entsprechend vom Sollwert 50 verändern (hier 53).

Schließt man an den Analogeingang 2 den gelben Draht an (Feuchteausgang des SMT50), so benötigt man die im nächsten Bild gezeigte Umrechnung.

Der Faktor 1,85 rührt einmal von dem Spannungsteiler und zweitens von der Umrechnung der Spannung in Feuchte (3 V entsprechen 50% Wassergehalt).

Eine möglches Gesamtprogramm ergibt sich wie folgt:

Es werden 2 Analogsignale eingelesen (Temperatur und Feuchte), die beide auf dem Logo Display angezeigt werden. Dazu muss die Displayausgabe onfiuriert werden.

Darüber hinaus wird eine Zeitschaltuhr verwendet, die das Ventil (Relaissausgang Q1) steuern soll.

Die Bewässerung soll jedoch nur dann aktiv sein, wenn die Bodenfeuchte einen bestimmten Wert unterschritten hat. Dazu wird ein Schwellwertschalter verwendet.

Da bei Überschreitung der Feuchte die Bewässerung ausgeschaltet werden soll, ist ein zusätzlicher Inverter notwendig. Die UND-Verknüpfung gibt das Relais für die Bewässerung nur frei, wenn sowohl die Bewässerungszeit aktiv ist als auch die Bodenfeuchte unter einem bestimmten Wert liegt.

 

 

 

 

 

 

Logo! plc for irrigation control

The Logo! by Siemens is a pretty simple controller which can be used for irrigation control.

The version I have has 4 digital inputs (e.g. for a fill level switch), 4 analog inputs (e.g. for SMT100 soil moisture sensor) and 4 relay outputs (e.g. magnetic valves). For small installations this may be sufficient and a pretty low cost solution. I am still struggling with the web based control. The Logo! has less options than a full-sized plc, but price performance ratio is quite well.

 

Raspberry Pi bullet proof read only file system

The standard Raspberry Pi file system is read-write filesystem which can have quite some SD card activity in the background. Therefore it is a risk to power off the Pi not using a controlled shutdown. In case of a sudden power failure the filesystem may become corrupted. There are two remedies: 1.) Use of an uninterrupted power supply (UPS) 2.) Change the file system to a read-only filesystem.

I successfully tried the read-only filesystem solution provided by Adafruit.

How to install soil moisture sensors

Installation of a capacitive soil moisture probe is simple. However, there are a few important points which should be considered in order to achieve a good measurement result.

So here is some field work in my garden.

The figure below shows the correct installation of the SMT50 soil moisture sensor. It is mandatory to fully burry the probe including the black housing. A very good contact to the surrounding soil with no air gaps is very important because air gaps will lead to wrong soil moisture measurements. The density of the surrounding soil will influence the measurement signal. Make sure, the soil is properly compressed.

 

For irrigation purpose the SMT50 should be installed close to the roots of the plants. The ideal orientation of the sensor is a horizontal position. It is important to turn the sensor in an uprigth position so that no water can be accumulated on the surface of the green measurement area.

Sometimes it can be useful to embed two or more sensors in different depths. Then it is possible to see the penetration of the waterfront during the irrigation process. Based on this data the irrigation can be optimized.

Do not use a hammer for installation of the SMT50. If the soil is very compressed, it is recommended to use a punch or to soften up the soil by adding water.
 

The cable of the SMT50 is very robust and can directly be burried inside any type of soil. However, sometimes it can make sense to protect the cable against animal bites by using an additional ductwork.
 

Typical installation errors are shown below.

Temperature sensor is not burried in the soil -> Wrong temperature measurement

Measurement electrodes not fully burried -> Wrong moisture measurement

Large distance between sensor and dripping lines -> Sensor reacts to late / no reaction

Sensor is positioned to close to the wall of a pot -> Wrong moisture measurement

Sensor is inside granular material with air gaps -> Wrong moisture measurement

Cable connections inside the (wet) soil -> Wrong output signal of the sensor



 

Soil moisture sensor SMT50 and Arduino

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;

 

Charting libraries

"Grandma: What is the best charting lib for webbased progammering?"  asked my grandson a few days ago and of course, granny can always give a good advice. I tried a bunch of charting libs over the past decade and happily share my experience. The blockbuster d3.js does everything you want, but the learning curve is quite steep. highcharts is definitely a good choice but my favourite charting lib is amcharts. Why? There is a simple reason. In environmental data visualization you usually have time series of data with different physical quantities like temperature, moisture, humidity and so on. So you do need multiple value axes which is quite easy to implement in amcharts. The only thing still missing and hopefully to come is dynamic loading of big data.