Raspberry Pi
Grow-Box Environment Control

Startseite Installation und Vorbereiten GPIO Anschlussplan Liste der Sensoren
Messen: Temperatur und Luftfeuchtigkeit Licht Bodenfeuchtigkeit
Steuern: Cronjob Licht Abluft Umluft -->
Webserver Dateien: : Logs darstellen Sollwerte einstellen Steuern

Bodenfeuchtigkeit im Topf messen und loggen mit dem Raspberry Pi

VH400 kapazitiver Bodenfeuchtesensor

Zum Messen der Bodenfeuchtigkeit benutzen wir den kapazitiven Bodenfeuchtesensor VH400. Versuche mit günstigeren Sensoren fürten sehr schnell zur Auflösung der selbigen. Der VH400 ist ziemlich teuer, aber unterliegt keiner Korrosion und ist sehr langlebig. Der Sensor liefert einen Strom von 0-3 Volt und muss an einen Analog/Digital Wandler angeschlossen werden.

Das Script zum messen und speichern:

/grow/messen_bodenfeuchtigkeit.py


# -*- coding: UTF-8 -*-
import spidev
import MySQLdb
import time
from time import *

#spi vorbereiten (channel 0)
spi = spidev.SpiDev()
spi.open(0,0)

# aktuelle, lokale Zeit als Tupel
lt = localtime()

# Entpacken des Tupels, Datum
jahr, monat, tag, stunde, minute, sekunde = lt[0:6]
tag = "%04i-%02i-%02i" % (jahr,monat,tag) 
zeit = "%02i:%02i:%02i" % (stunde,minute,sekunde) 

db=MySQLdb.connect("127.0.0.1","pi","f6g7h8","grow")
cursor = db.cursor() 

print tag, zeit

# sensorarray = channel, raum, sensornummer
sensor=[[ 0,1,1]]

# wenn ein senseor dazukommt, muss die zahl höher
for i in sensor:
	print"------------------------------------------------------------"
	print "A/D-Channel: ",i[0], " - Raum: ", i[1], " - Sensornnummer: ", i[2]

	z=1
	while z < 10:
		spiantwort = spi.xfer([1,(8+i[0]) << 4,0])
#		print "wert1: ", spiantwort[1], " wert2: ",spiantwort[2]
		messwert = round( ( ( spiantwort[1] * 256 ) + spiantwort[2] ) /6  )
		if messwert < 1:
			print z , ". Messung fehlgeschlagen. Nächste Messung in 3 Sec."
			z=z+1
			sleep(3)
		else:
			print "Bodenfeuchtigkeit: ", messwert," %"
			sensorname = "R"+str(i[1])+"BF"+str(i[2])
			cursor.execute("select wert from log where datum='%s' and sensor='%s' order by zeit desc" % (tag, sensorname) )
			wert=cursor.fetchone()
			if not wert or wert[0] != messwert:
				cursor.execute("insert into log(datum,zeit,sensor,wert) values('%s','%s','%s','%s')" % (tag, zeit, sensorname, messwert) )
			break
			

cursor.execute("SELECT COUNT(*) FROM log")
anzahl = cursor.fetchone()
print " "
print "%s Zeilen in Tabelle log" % anzahl[0]      

db.commit()
db.close()

Das Script kann von Hand ausgeführt werden und gibt die Daten als Text aus oder per Cronjob und schreit die Daten in die Datenbank. Allerdings erst wenn sie die Werte verändert haben.

Zum automatischen ausführen als Cronjob, zB alle 20 Minuten:
crontab -e
*/20 * * * * /usr/bin/python /home/pi/grow/messen_bodenfeuchtigkeit.py