继电器

原理简介

继电器是用小电流控制大电流开关的「电控开关」,相当于一个可以用程序控制的电闸。

  • 工作原理: control 端给电流让线圈生磁,吸合/释放触点,从而接通或断开被控电路
  • 类型:电磁继电器、固态继电器;教学常用 5V 双路继电器模块
  • 接口:GPIO 数字输出(控制 IN1/IN2)
  • 关键前提:用的是「继电器模块」(自带光耦隔离 + 三极管驱动,GPIO 只需很小电流,安全);裸继电器(5V 线圈约 70mA)直连 GPIO 会烧引脚,绝对不要这样做

典型应用

  • 用低压控制小灯泡、小风扇(演示用低压直流负载)
  • 智能插座、定时开关
  • 水泵、电磁阀控制
  • 报警装置
  • 工业/家居自动化

接线图

[接线图占位,后续添加]

文字说明(具体接法见下方代码注释):

  • 模块 VCC → 外接 5V(继电器线圈耗电,不要从 Pico 的 3V3 取;若你的模块明确支持 3.3V 低功耗也可接 3V3)
  • 模块 GND → 和 Pico 的 GND 连在一起(共地)
  • 模块 IN1 / IN2 → Pico GP15 / GP14(控制两个继电器)
  • 被控负载接在继电器模块的「常开 / 公共端」螺丝端子(低压直流演示用)

示例代码

基础示例:定时开 / 关

# ============ 接线 ============
# 5V 双路继电器模块: VCC → 外接 5V(线圈耗电,不要从 Pico 3V3 取)
#                      GND → 和 Pico GND 连一起(共地)
#                      IN1 → Pico GP15
# 注意:用「继电器模块」而非裸继电器!模块带光耦隔离+三极管驱动,GPIO 只需很小电流,安全
# =============================
from machine import Pin
import time

# 国产模块大多「低电平触发」(IN 给低电平吸合);也有高电平触发的
# 拿不准就先让 ACTIVE_LOW=True 跑一下,如果调用 turn_off() 反而吸合,就改成 False
ACTIVE_LOW = True

relay = Pin(15, Pin.OUT)

def turn_on():
    relay.value(0 if ACTIVE_LOW else 1)   # 吸合

def turn_off():
    relay.value(1 if ACTIVE_LOW else 0)   # 断开

# 上电先把继电器置为断开,避免 Pico 启动瞬间 GPIO 浮空导致误吸合一下
turn_off()
print('继电器:', '低电平触发' if ACTIVE_LOW else '高电平触发')

while True:
    turn_on();  print('继电器开'); time.sleep(2)
    turn_off(); print('继电器关'); time.sleep(2)

进阶示例:按键控制继电器

# ============ 接线 ============
# 5V 双路继电器模块 VCC → 外接 5V,GND → 和 Pico GND 共地
# 模块 IN1 → Pico GP15
# 按键一脚 → Pico GP14,另一脚 → GND(用内部上拉,按下读到 0)
# =============================
from machine import Pin
import time

ACTIVE_LOW = True
relay = Pin(15, Pin.OUT)
key = Pin(14, Pin.IN, Pin.PULL_UP)

def set_relay(on):
    relay.value(0 if (on == ACTIVE_LOW) else 1)

set_relay(False)    # 上电先断开
state = False

print('按一下按键切换继电器')
while True:
    if key.value() == 0:          # 按键被按下(接地)
        state = not state
        set_relay(state)
        print('继电器', '开' if state else '关')
        time.sleep_ms(300)         # 简单防抖

应用示例:光控继电器

# ============ 接线 ============
# 5V 双路继电器模块 VCC → 外接 5V,GND → 和 Pico GND 共地
# 模块 IN1 → Pico GP15
# 光敏电阻 + 10kΩ 分压:中间点 → Pico GP26(ADC0),两端分别 → 3V3 和 GND
# =============================
from machine import Pin, ADC
import time

ACTIVE_LOW = True
relay = Pin(15, Pin.OUT)
adc = ADC(Pin(26))
LIGHT_THRESHOLD = 30000   # 光线值低于此值就吸合(越小越暗)

def set_relay(on):
    relay.value(0 if (on == ACTIVE_LOW) else 1)

set_relay(False)
print('光线低于', LIGHT_THRESHOLD, '时继电器吸合')

while True:
    v = adc.read_u16()
    if v < LIGHT_THRESHOLD:
        set_relay(True);  print('暗 → 开')
    else:
        set_relay(False); print('亮 → 关')
    time.sleep(1)

注意事项

  • 安全第一(最重要):继电器模块可以用来控制市电 220V 负载,但触电会死人,学生绝对不要碰 220V,课堂只做低压直流负载(小灯泡、小风扇)演示。
  • 用模块,别用裸继电器:裸继电器 5V 线圈约 70mA,远超 GPIO 上限,直连会烧 Pico。模块自带光耦+三极管驱动,GPIO 只出很小电流,安全。
  • 触发方式要确认:国产模块大多是低电平触发(IN 给低电平吸合),也有高电平触发的。先确认自己模块的触发方式,把 ACTIVE_LOW 改成对应值;不确定就跑一下基础示例看逻辑反不反。
  • 上电误吸合:Pico 上电瞬间 GPIO 是浮空输入,继电器可能「啪」地误吸合一下。好习惯是程序开头先把控制脚设为输出并置为「断开」。
  • 供电:模块 VCC 接外接 5V(线圈耗电),GND 和 Pico 共地。
  • 负载匹配:被控负载的电压/电流别超过继电器触点额定值。

常见问题

Q: 继电器逻辑反了(想开却关、想关却开)? A: 触发方式设反了。把 ACTIVE_LOW 从 True 改成 False(或反之)即可。

Q: 上电时继电器「啪」响一下? A: Pico 启动瞬间 GPIO 浮空导致误吸合,属正常。程序开头先 set_relay(False) 置断开即可。

Q: 能用它控制家里的灯/插座吗? A: 技术上可以,但 220V 有触电危险,学生不要碰,课堂只演示低压直流小负载。