找回密碼
 立即註冊
惟家LINE群QRCODE
    查看: 2|回覆: 0

    用感測器照顧植物:土壤、光照、自動澆水的完整做法

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    植物死掉通常不是因為你忘記澆水,是因為澆太多。

    用感測器可以知道它真正需要什麼。



    植物需要什麼


    • —— 但不能太多(爛根是最常見的死因)
    • —— 每種植物需求差很多
    • 溫度 —— 台灣夏天對某些植物太熱
    • 濕度 —— 熱帶植物需要高濕度
    • 養分 —— 感測器測不到,要自己記得


    感測器能解決前四個。

    兩條路:買現成的還是自己做

    買現成的


    • 小米花花草草監測儀 —— 藍牙,很便宜(三四百),HA 支援很好
        - 測土壤濕度、光照、溫度、導電度(養分)
        - 要藍牙代理或網關
        - 電池撐一年左右
    • 其他藍牙土壤感測器 —— 大同小異


    自己做


    • ESP32 + 電容式土壤感測器
    • 可以同時接好幾個(一個 ESP32 接四五個盆栽)
    • 要插電
    • 可以整合澆水


    實務建議


    • 一兩盆 → 買現成的藍牙感測器
    • 很多盆或要自動澆水 → 自己做




    土壤濕度的正確理解

    這是最多人搞錯的地方。

    不同植物的需求差很多
    1. 多肉、仙人掌     10-30%   (乾了才澆)
    2. 一般觀葉植物      40-60%
    3. 熱帶植物          60-80%
    4. 水生植物          80% 以上
    複製代碼

    而且


    • 「數字」只有相對意義 —— 不同土壤、不同感測器讀出來不一樣
    • 要自己觀察一段時間找出你的植物的合理範圍


    正確的做法


    • 裝好感測器
    • 澆透水,記下讀值 → 那是「濕」
    • 等到植物開始有點垂,記下讀值 → 那是「該澆了」
    • 用這兩個數字設定門檻


    自己做的完整設定
    1. esphome:
    2.   name: 植物監測
    3. esp32:
    4.   board: esp32dev
    5. # 四個盆栽的土壤濕度
    6. sensor:
    7.   - platform: adc
    8.     pin: GPIO32
    9.     name: 盆栽1濕度
    10.     update_interval: 5min
    11.     attenuation: 12db
    12.     filters:
    13.       - median:
    14.           window_size: 5
    15.           send_every: 5
    16.       - calibrate_linear:
    17.           - 2.85 -> 0.0
    18.           - 1.10 -> 100.0
    19.       - clamp:
    20.           min_value: 0
    21.           max_value: 100
    22.     unit_of_measurement: "%"
    23.     device_class: moisture
    24.   - platform: adc
    25.     pin: GPIO33
    26.     name: 盆栽2濕度
    27.     # ...同上
    28.   # 環境
    29.   - platform: bh1750
    30.     name: 植物區照度
    31.     update_interval: 5min
    32.   - platform: bme280_i2c
    33.     temperature:
    34.       name: 植物區溫度
    35.     humidity:
    36.       name: 植物區濕度
    37. i2c:
    38.   sda: GPIO21
    39.   scl: GPIO22
    複製代碼

    重要:土壤感測器的電源

    長時間通電會加速電解腐蝕。

    解法:只在讀取的時候供電
    1. switch:
    2.   - platform: gpio
    3.     pin: GPIO25
    4.     id: sensor_power
    5.     restore_mode: ALWAYS_OFF
    6. sensor:
    7.   - platform: adc
    8.     pin: GPIO32
    9.     name: 盆栽1濕度
    10.     update_interval: never
    11.     id: soil1
    12. interval:
    13.   - interval: 5min
    14.     then:
    15.       - switch.turn_on: sensor_power
    16.       - delay: 2s              # 等穩定
    17.       - component.update: soil1
    18.       - delay: 100ms
    19.       - switch.turn_off: sensor_power
    複製代碼

    這樣可以讓感測器多撐好幾倍的時間。



    自動澆水

    硬體


    • 小型水泵(12V,約 150-300 元)
    • 矽膠水管
    • 水箱(可以用水桶)
    • 繼電器或 MOSFET 控制水泵
    • 水位感測器(水箱沒水要知道)


    安全設計(這段很重要)

    自動澆水最大的風險是「一直澆」。

    三層保護
    1. # 第一層:限制單次澆水時間
    2. switch:
    3.   - platform: gpio
    4.     pin: GPIO26
    5.     id: pump
    6.     restore_mode: ALWAYS_OFF
    7.     on_turn_on:
    8.       - delay: 10s
    9.       - switch.turn_off: pump    # 最多澆 10 秒
    10. # 第二層:限制每天的次數
    11. globals:
    12.   - id: 今日澆水次數
    13.     type: int
    14.     restore_value: no
    15.     initial_value: '0'
    16. # 第三層:水箱沒水就不澆
    17. binary_sensor:
    18.   - platform: gpio
    19.     pin:
    20.       number: GPIO27
    21.       mode: INPUT_PULLUP
    22.     name: 水箱有水
    23.     id: tank_has_water
    複製代碼

    澆水的邏輯
    1. script:
    2.   - id: 澆水
    3.     then:
    4.       - if:
    5.           condition:
    6.             - binary_sensor.is_on: tank_has_water
    7.             - lambda: 'return id(今日澆水次數) < 3;'
    8.           then:
    9.             - switch.turn_on: pump
    10.             - lambda: 'id(今日澆水次數) += 1;'
    11.             - delay: 10s
    12.             - switch.turn_off: pump
    13.             # 等水滲透再測
    14.             - delay: 5min
    15.             - component.update: soil1
    16.           else:
    17.             - logger.log: "不澆水:沒水或已達今日上限"
    複製代碼

    HA 這邊的自動化
    1. automation:
    2.   - alias: 盆栽1該澆水了
    3.     mode: single
    4.     triggers:
    5.       - trigger: numeric_state
    6.         entity_id: sensor.盆栽1濕度
    7.         below: 30
    8.         for: "01:00:00"
    9.     conditions:
    10.       # 白天才澆(晚上澆水容易爛根和長蟲)
    11.       - condition: sun
    12.         after: sunrise
    13.         before: sunset
    14.     actions:
    15.       - action: script.turn_on
    16.         target:
    17.           entity_id: script.澆水盆栽1
    18.       - action: script.通知
    19.         data:
    20.           等級: 一般
    21.           標題: 幫盆栽1澆水了
    22.           訊息: 土壤濕度 {{ states('sensor.盆栽1濕度') }}%
    23.       # 三十分鐘後確認有沒有效
    24.       - delay: "00:30:00"
    25.       - if:
    26.           - condition: numeric_state
    27.             entity_id: sensor.盆栽1濕度
    28.             below: 35
    29.         then:
    30.           - action: script.通知
    31.             data:
    32.               等級: 重要
    33.               標題: 澆水後濕度沒上升
    34.               訊息: 水管可能堵住或水箱沒水
    複製代碼

    最後那段檢查很重要 ——
    不然水管掉了你也不知道,植物還是會死。

    不自動澆水也可以



    很多人(包括我)覺得自動澆水太危險。

    折衷做法:只提醒,自己澆
    1. automation:
    2.   - alias: 植物需要照顧
    3.     triggers:
    4.       - trigger: time
    5.         at: "09:00:00"
    6.     actions:
    7.       - variables:
    8.           要澆水的: >
    9.             {{ states.sensor
    10.                | selectattr('entity_id', 'search', '盆栽.*濕度')
    11.                | selectattr('state', 'is_number')
    12.                | selectattr('state', 'lt', '30')
    13.                | map(attribute='name') | list }}
    14.       - condition: template
    15.         value_template: "{{ 要澆水的 | count > 0 }}"
    16.       - action: todo.add_item
    17.         target:
    18.           entity_id: todo.待辦
    19.         data:
    20.           item: "澆水:{{ 要澆水的 | join('、') }}"
    21.       - action: script.通知
    22.         data:
    23.           等級: 一般
    24.           標題: 有植物該澆水了
    25.           訊息: "{{ 要澆水的 | join('、') }}"
    複製代碼

    光照的判斷

    植物需要的是「每天累積的光照量」,不是瞬間亮度。
    1. sensor:
    2.   - platform: integration
    3.     source: sensor.植物區照度
    4.     name: 植物區日累積光照
    5.     unit_prefix: k
    6.     round: 1
    7.     method: trapezoidal
    8. utility_meter:
    9.   每日光照:
    10.     source: sensor.植物區日累積光照
    11.     cycle: daily
    複製代碼

    參考值(DLI,日光積分)
    1. 低光植物(黃金葛、虎尾蘭)    2-6
    2. 中光植物(大部分觀葉)        6-12
    3. 高光植物(多肉、香草)       12-20
    4. 蔬菜、開花植物              20-30
    複製代碼

    單位換算比較麻煩,但「相對比較」就很有用了 ——
    看哪個位置的光比較多。

    植物燈的自動化
    1. automation:
    2.   - alias: 光照不足就開植物燈
    3.     triggers:
    4.       - trigger: time_pattern
    5.         hours: "/1"
    6.     conditions:
    7.       - condition: time
    8.         after: "07:00:00"
    9.         before: "19:00:00"
    10.       - condition: numeric_state
    11.         entity_id: sensor.每日光照
    12.         below: 8            # 今天累積還不夠
    13.       - condition: numeric_state
    14.         entity_id: sensor.植物區照度
    15.         below: 500          # 現在也不亮
    16.     actions:
    17.       - action: switch.turn_on
    18.         target:
    19.           entity_id: switch.植物燈
    複製代碼

    這樣只有「自然光不夠」的時候才開燈,很省電。

    ---

    下一篇:系列總整理 ——
    一份從零開始的完整檢查表。
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-9-24 11:30 , Processed in 0.080022 second(s), 24 queries .

    快速回覆 返回頂部 返回列表