Der Bodenfeuchtesensor und der AD-Wandler von GROVE (MCP3002) messen alle 5 Minuten die im Boden enthaltene Wassermenge. Wenn die Wassermenge unter den Schwellenwert fällt, betätigen Sie die Kerosinpumpe, um Wasser aus dem Wassertank zu pumpen und als Pflanzgefäß zu verwenden. Ich habe versucht, Wasser zu machen.
Der Feuchtigkeitssensor gibt eine Spannung (Analogwert) entsprechend der Feuchtigkeitsmenge aus. Da der Raspberry Pi nur digital eingeben kann, muss er in digitale Daten konvertiert und von einem AD-Konverter gelesen werden. Dieses Mal habe ich MCP3002 für den AD-Konverter verwendet. Informationen zur Verbindung zwischen Raspberry Pi und MCP3002 finden Sie im folgenden Artikel. Anschließen des A / D-Wandlers MCP3002 an Raspberry Pi
Die folgenden Materialien wurden für den Bodenfeuchtesensor verwendet. https://www.switch-science.com/catalog/814/ Der Sensor wird eingeführt, indem ein Loch in den Pflanzer gemacht wird.
Für den Bewässerungsteil wird die Kerosinpumpe betrieben, indem die elektrische Kerosinpumpe und GPIO verbunden und GPIO eingeschaltet werden. Der Motor betreibt jedoch die Pumpe. Wenn Sie jedoch versuchen, den Motor mit GPIO von Raspberry Pi zu betreiben, geht Ihnen die Energie aus. Stellen Sie daher sicher, dass Sie die Kerosinpumpe mit der Stromversorgung des von Anfang an angebrachten Kerosinpumpen-Batteriekastens betreiben. Dann wird der Relaisschalter vom Raspberry Pi aus gesteuert. Um die Steuerung des GPIO von Raspberry Pi durch Python zu ermöglichen, habe ich auf den folgenden Artikel verwiesen. [Blinkende LED mit GPIO (Python)](http://make.bcde.jp/raspberry-pi/gpio%E3%81%A7led%E3%81%AE%E7%82%B9%E6%BB%85python /)
Messen Sie den Wassergehalt im Boden alle 5 Minuten und lassen Sie die Kerosinpumpe 30 Sekunden lang laufen, wenn sie unter den Schwellenwert fällt. Wenn der Wassertank leer ist, wird die Wassermenge auch bei Betrieb der Kerosinpumpe nicht wiederhergestellt. Nach 5 Minuten wird versucht zu wässern, wodurch die Batterie der Kerosinpumpe verschwendet wird. Sobald ich es gieße, versuche ich es eine Weile nicht zu gießen.
water.py
import spidev
import time
import datetime
import subprocess
import RPi.GPIO as GPIO
wet_low = 450
water_check_enable = True
water_wait_count = 0
check_reset = 10
def write_log(log_text):
f = open("/var/log/water","a")
d = datetime.datetime.today()
f.write (d.strftime("%Y-%m-%d %H:%M:%S" + "," + log_text + "\n" ))
#print log_text
f.close()
def read_wet_level():
spi=spidev.SpiDev()
spi.open(0,0)
resp=spi.xfer2([0x68,0x00])
value=(resp[0] * 256 + resp[1]) & 0x3ff
write_log("wet_level:" + str(value))
spi.close()
return value
def water():
write_log("***** water start *****")
GPIO.setmode(GPIO.BOARD)
GPIO.setup(16,GPIO.OUT)
GPIO.output(16,True)
time.sleep(30)
GPIO.output(16,False)
GPIO.cleanup()
write_log("***** water end *****")
while True:
wet_level =read_wet_level()
if water_check_enable == False:
water_wait_count += 1
if water_wait_count > check_reset:
water_check_enable = True
water_wait_count = 0
if wet_level < wet_low and water_check_enable == True:
water_check_enable = False
water()
time.sleep(300)
Recommended Posts