Raspberry Piで土壌水分センサーを使った観葉植物の水分量を判定
Raspberry Piで土壌水分センサーを使った観葉植物の水分量を判定するPythonプログラムとその様子について投稿します。
この投稿で紹介しているRaspberryPiはRaspberry Pi3 B+を使っています。
アナログ信号をデジタル信号に変換するMCP3008は専門学校で購入した「OSOYOO(オソヨー) Raspberry Pi 学ぶ電子工作キット 」に入っているものを使っています。
土壌水分センサーはamazonで購入しました。先端が2つに分かれているやつです。
土壌の水分量を判定するプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import RPi.GPIO as GPIO from time import sleep def readadc(adcnum,clk,mosi,miso,cs): if adcnum >= 0 and adcnum <= 7:#読み込むチャンネルが0~7の場合 GPIO.output(cs,GPIO.HIGH) GPIO.output(clk,GPIO.LOW) GPIO.output(cs,GPIO.LOW) cmdout=adcnum cmdout |=0x18 cmdout <<=3 for i in range(5): if cmdout & 0x80: GPIO.output(mosi,GPIO.HIGH) else: GPIO.output(mosi,GPIO.LOW) cmdout <<=1 GPIO.output(clk,GPIO.HIGH) GPIO.output(clk,GPIO.LOW) adcout=0 for i in range(11):#MCP3008の10ビットとヌルビットを足した11 GPIO.output(clk,GPIO.HIGH) GPIO.output(clk,GPIO.LOW) adcout <<=1 if i>0 and GPIO.input(miso)==GPIO.HIGH: adcout |=0x1 GPIO.output(cs,GPIO.HIGH) return adcout#0~1023の値を返す else:#読み込むチャンネルが0~7に無ければ-1を返す return -1 GPIO.setmode(GPIO.BCM) spiclk=11 spimosi=10 spimiso=9 spics=8 GPIO.setup(spiclk,GPIO.OUT) GPIO.setup(spimosi,GPIO.OUT) GPIO.setup(spimiso,GPIO.IN) GPIO.setup(spics,GPIO.OUT) try: while True: value=readadc(0,spiclk,spimosi,spimiso,spics)#valueに0~1023の値がくる value 入力される値 print(value," ",end="") if value >= 480: print("水分が少ないです") elif value >= 360 and value < 480: print("水分がやや少ないです") elif value >= 240 and value < 360: print("水分がやや多いです") else: print("水分が多いです") sleep(3)#3秒間隔 except KeyboardInterrupt: pass GPIO.cleanup() |
判定をするプログラムはこちら「RaspberryPiでMCP3008と土壌水分センサーを使った水分量の測定」で紹介したプログラムに判定する条件を追加したものになります。
判定する条件については
1週間と2日水をあげていない状態で測定すると479~482だったので、
480以上の値を最も水分が少ないとしています。
その後、たっぷりと水をあげた状態で測定すると236~238だったので
240より小さい値を最も水分が多いとして、4段階に判定条件を分けました。
以下が4段階に分けた値とprint文で表示する文字列になります。
480以上 ”水分が少ないです”
360以上~480未満 ”水分がやや少ないです”
240以上~360未満 ”水分がやや多いです”
240未満 ”水分が多いです”
判定までの間隔は3秒間隔で行っています。
※1週間と2日にした理由は、ローズマリーの葉っぱの先端が水分不足で曲がってきたのが1週間と2日だったのでその日数で測定しました。
水分量を測定している様子↓

実際に観葉植物の土で判定プログラムを実行
ローズマリーとは違う観葉植物で行います。

判定プログラムを実行した様子↓

この観葉植物には2日前に水をあげたので”水分がやや多い”が表示されました。