アイディアの種

土壌湿度センサー

水やりの位置が偏ってしまうとセンサがうまく反応しないのではないか

活動記録

先週に引き続き他の様々な植物に触れてみる

インプット

先行研究

感知装置

https://craft-gogo.com/raspberry-pi-yl69/

自動水やり装置

https://linuxfun.org/2021/06/25/raspberry-pi-watering-system/

アウトプット

土壌湿度センサを実際に試してみる

chatGPTを活用して土壌湿度センサの利用を考えてみる。

import spidev
import RPi.GPIO as GPIO
from time import sleep
import requests

# LINE Notifyのアクセストークン
line_notify_api = "<https://notify-api.line.me/api/notify>"
line_notify_token = "rYAHE3W3NuhWd8uV49jPO5NqtJT27RGechcKb2XPQML"

# Vrefは参照電圧、センサーの最大電圧に合わせる
Vref = 3.3

# GPIOピンの設定
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)  # GPIO 17番ピンを出力モードに設定
GPIO.output(17, GPIO.HIGH)  # GPIO 17番ピンをHIGHに設定(ON)

# SPI通信の設定
spi = spidev.SpiDev()
spi.open(0, 0)  # ポート0, CS0
spi.max_speed_hz = 1000000  # 1MHz

# 土壌湿度のしきい値(適切に調整する)
moisture_threshold = 1.5  # 電圧が1.5V以下で乾燥とみなす

# 初期状態の設定
previous_state = None

def send_line_notify(message):
    """LINE Notifyで通知を送る関数"""
    payload = {"message": message}
    headers = {"Authorization": f"Bearer {line_notify_token}"}
    try:
        response = requests.post(line_notify_api, headers=headers, data=payload)
        response.raise_for_status()
    except requests.exceptions.RequestException as e:
        print(f"LINE Notifyエラー: {e}")

try:
    while True:
        # SPI通信でADCからデータを取得
        adc = spi.xfer2([0x06, 0x00, 0x00])
        data = ((adc[1] & 0x0f) << 8) | adc[2]
        voltage = Vref * data / 4096  # 電圧値に変換
        print(f"{voltage:.2f}V")

        # 土壌湿度がしきい値を下回っているかチェック
        if voltage < moisture_threshold:
            current_state = "LOW"
        else:
            current_state = "NORMAL"

        # 状態が変わったら通知を送る
        if current_state != previous_state:
            if current_state == "LOW":
                print("土壌が乾燥しています。水やりが必要です。")
                send_line_notify("土壌が乾燥しています。水やりが必要です。")
                GPIO.output(17, GPIO.LOW)  # LEDを点灯させる(乾燥時)
            else:
                print("土壌湿度は正常です。")
                send_line_notify("土壌湿度は正常です。")
                GPIO.output(17, GPIO.HIGH)  # LEDを消灯(湿度正常時)

            previous_state = current_state

        sleep(10)  # 10秒ごとにセンサーの値を確認

except KeyboardInterrupt:
    pass

finally:
    spi.close()
    GPIO.cleanup()

実際の活用例を考えてみる。

問題点

植木鉢のサイズや形によって問題が発生するのではないか

いろいろな植木鉢を確認してみる。

ラズパイが露出しているため、外では使えないのではないか

ラズパイを隠す物を作成する、もしくは何か方法を考える