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

    ESP32 控制實體裝置:繼電器、馬達、以及安全底線

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    感測是讀,控制是寫 —— 而寫是有風險的。

    這篇先講安全,再講做法。



    先講安全(請認真看)

    三條底線

    一、110V 以上的東西不要自己接


    • 會死人
    • 火災險可能不理賠
    • 要接就找電工


    二、如果一定要碰 110V


    • 用有安規認證的成品模組(Shelly、Sonoff),不要自己焊
    • 那些產品有做隔離和安全設計
    • 施工時一定要斷電
    • 接完用電筆確認


    三、低電壓的東西也要小心


    • 12V / 24V 不會電到人,但會短路起火
    • 要加保險絲
    • 線徑要夠


    這篇後面講的都是低電壓的應用。

    110V 的東西請買 Shelly 或 Sonoff 這類成品,不要自己做。



    繼電器:ESP32 控制電路的基本

    繼電器是一個「電控開關」


    • ESP32 給一個訊號
    • 繼電器裡的電磁鐵吸合
    • 另一邊的接點導通


    重點是「兩邊是絕緣的」 —— 這是它的安全價值。

    接線
    1. 繼電器模組     ESP32
    2. VCC      →     5V(或 3.3V,看模組)
    3. GND      →     GND
    4. IN       →     GPIO26
    5. 繼電器的另一邊:
    6. COM      →     電源的一端
    7. NO       →     負載(常開:通電才接通)
    8. NC             (常閉:通電才斷開)
    複製代碼

    設定
    1. switch:
    2.   - platform: gpio
    3.     pin:
    4.       number: GPIO26
    5.       inverted: true      # 很多繼電器模組是低電位觸發
    6.     name: 繼電器1
    7.     id: relay1
    8.     restore_mode: RESTORE_DEFAULT_OFF
    複製代碼

    inverted: true 的坑


    • 很多便宜的繼電器模組是「低電位觸發」
    • 不加 inverted 的話,開機瞬間會全部打開
    • 測試方法:接好之後看預設狀態


    restore_mode 的選擇
    1. RESTORE_DEFAULT_OFF    記住上次的狀態,第一次啟動時是關
    2. RESTORE_DEFAULT_ON     記住上次的狀態,第一次啟動時是開
    3. ALWAYS_OFF             每次開機都是關 ← 安全的選擇
    4. ALWAYS_ON              每次開機都是開
    5. RESTORE_INVERTED_*     反過來
    複製代碼

    建議


    • 照明 → RESTORE_DEFAULT_OFF
    • 加熱、馬達這類有危險的 → ALWAYS_OFF


    為什麼停電之後復電,你不會希望加熱器自己開起來。



    互鎖(Interlock):正反轉的保護

    控制馬達正反轉需要兩個繼電器。

    如果兩個同時開 → 短路 → 燒掉。

    ESPHome 有內建的互鎖
    1. switch:
    2.   - platform: gpio
    3.     pin: GPIO26
    4.     name: 馬達正轉
    5.     id: motor_fwd
    6.     interlock: [motor_rev]
    7.     interlock_wait_time: 500ms
    8.   - platform: gpio
    9.     pin: GPIO27
    10.     name: 馬達反轉
    11.     id: motor_rev
    12.     interlock: [motor_fwd]
    13.     interlock_wait_time: 500ms
    複製代碼

    作用


    • 開一個的時候,另一個會自動關
    • interlock_wait_time 是「等多久才開反向」
        讓馬達停下來再反轉


    這個設定可以救你的硬體。

    但是軟體互鎖不夠

    重要的應用要加硬體互鎖


    • 用雙刀繼電器
    • 或者在電路上做限制
    • 軟體會當機,硬體不會


    做一個電動窗簾 / 門的控制
    1. cover:
    2.   - platform: time_based
    3.     name: 車庫門
    4.     open_action:
    5.       - switch.turn_on: motor_fwd
    6.     open_duration: 15s
    7.     close_action:
    8.       - switch.turn_on: motor_rev
    9.     close_duration: 15s
    10.     stop_action:
    11.       - switch.turn_off: motor_fwd
    12.       - switch.turn_off: motor_rev
    複製代碼

    time_based 的意思用時間推算位置


    • 不需要位置感測器
    • 但會有誤差累積
    • 全開或全關的時候會重新校正


    更好的做法:加限位開關
    1. binary_sensor:
    2.   - platform: gpio
    3.     pin:
    4.       number: GPIO32
    5.       mode: INPUT_PULLUP
    6.       inverted: true
    7.     name: 車庫門全開
    8.     id: limit_open
    9.     on_press:
    10.       - switch.turn_off: motor_fwd
    11.   - platform: gpio
    12.     pin:
    13.       number: GPIO33
    14.       mode: INPUT_PULLUP
    15.       inverted: true
    16.     name: 車庫門全關
    17.     id: limit_close
    18.     on_press:
    19.       - switch.turn_off: motor_rev
    複製代碼

    限位開關是安全裝置 ——
    馬達到底了還在轉會燒掉或撞壞。



    調光與調速(PWM)

    控制 LED 燈條
    1. output:
    2.   - platform: ledc
    3.     pin: GPIO25
    4.     id: led_output
    5.     frequency: 1000Hz
    6. light:
    7.   - platform: monochromatic
    8.     name: 工作燈
    9.     output: led_output
    10.     default_transition_length: 1s
    複製代碼

    注意


    • ESP32 的腳位只能輸出 3.3V / 20mA
    • 要驅動 LED 燈條必須加 MOSFET
    • 直接接會燒掉腳位


    簡單的 MOSFET 接法
    1. ESP32 GPIO25 → [220Ω] → MOSFET 的 G(閘極)
    2. 12V 電源 +    → LED 燈條 +
    3. LED 燈條 -    → MOSFET 的 D(汲極)
    4. MOSFET 的 S   → GND(要跟 ESP32 共地)
    5. 12V 電源 -    → GND
    複製代碼

    「共地」很重要 —— 兩個電源的 GND 要接在一起,不然訊號會亂。

    控制 RGB 燈條
    1. output:
    2.   - platform: ledc
    3.     pin: GPIO25
    4.     id: ch_red
    5.   - platform: ledc
    6.     pin: GPIO26
    7.     id: ch_green
    8.   - platform: ledc
    9.     pin: GPIO27
    10.     id: ch_blue
    11. light:
    12.   - platform: rgb
    13.     name: 氣氛燈
    14.     red: ch_red
    15.     green: ch_green
    16.     blue: ch_blue
    複製代碼

    WS2812 可定址燈條(更好玩)
    1. light:
    2.   - platform: esp32_rmt_led_strip
    3.     rgb_order: GRB
    4.     pin: GPIO13
    5.     num_leds: 60
    6.     chipset: ws2812
    7.     name: 層板燈
    8.     effects:
    9.       - addressable_rainbow:
    10.       - addressable_color_wipe:
    11.       - addressable_scan:
    12.       - addressable_flicker:
    複製代碼

    每顆 LED 可以獨立控制,可以做很多效果。

    注意


    • 60 顆全亮白色大約要 3.6A —— 電源要夠
    • 長燈條要多點供電(頭尾都接電源)
    • 資料線要加 330-470Ω 電阻
    • 電源和 ESP32 要共地


    安全檢查清單

    任何控制類的專案完成後


    • 斷電再上電,確認初始狀態是安全的
    • 拔掉 Wi-Fi(關路由器),確認裝置行為合理
    • 測試所有限位和保護機制
    • 摸一下有沒有異常發熱
    • 放一天觀察,不要裝好就不管


    加一個「看門狗」
    1. switch:
    2.   - platform: gpio
    3.     pin: GPIO26
    4.     name: 加熱器
    5.     id: heater
    6.     restore_mode: ALWAYS_OFF
    7. # 超過兩小時強制關閉
    8. interval:
    9.   - interval: 60s
    10.     then:
    11.       - if:
    12.           condition:
    13.             - switch.is_on: heater
    14.             - lambda: 'return id(heater_runtime) > 7200;'
    15.           then:
    16.             - switch.turn_off: heater
    17.             - logger.log: "加熱器超時,強制關閉"
    複製代碼

    任何會發熱、會動的東西都該有超時保護。

    ---

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

    本版積分規則

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

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

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