跳转到内容

脉冲计数传感器

脉冲计数传感器允许您在任意引脚上对脉冲数量和信号频率进行计数。

在 ESP32 上,该传感器精度非常高,因为它使用的是 ESP32 上的硬件脉冲计数外设。不过,由于使用了脉冲计数外设,最多只能使用 8 个通道!

# 示例配置条目
sensor:
- platform: pulse_counter
pin: GPIOXX
name: "Pulse Counter"
  • pin (必选, Pin): 用于计数脉冲的引脚。

  • count_mode (可选): 配置检测到时脉冲计数器在上升沿/下降沿时的行为。

    • rising_edge (必选): 检测到上升沿时要执行的操作。可选值为 DISABLE、INCREMENT 和 DECREMENT。

    • falling_edge (必选): 检测到下降沿时要执行的操作。可选值为 DISABLE、INCREMENT 和 DECREMENT。

  • use_pcnt (可选, boolean): 使用硬件 PCNT 脉冲计数器。仅在 ESP32 上支持。默认为 true。

  • internal_filter (可选, Time): 如果检测到的脉冲长度短于该时间,则将其丢弃,不计数。默认为 13us。在 ESP32 上使用硬件脉冲计时器时,该值不能高于 13us;在 ESP8266 上或使用 use_pcnt: false 时,可以使用更大的间隔。如果启用此功能,请将 count_mode 设置为在下降沿而非上升沿进行计数。对于用于计量功耗的 S0 脉冲表,50–100 ms 是合理的取值。

  • update_interval (可选, Time): 检查传感器的间隔。默认为 60s。

  • total (可选): 报告脉冲总数。

  • Sensor 的所有其他选项。

NOTE

请参阅积分传感器以随时间累加脉冲计数值。

传感器默认以”pulses/min”(脉冲/分钟)为测量单位。您可以通过使用传感器过滤器来更改它。例如,如果您使用脉冲计数器和光电二极管来计量电表上的光脉冲,可以这样做:

# 示例配置条目
sensor:
- platform: pulse_counter
pin: GPIOXX
unit_of_measurement: 'kW'
name: 'Power Meter House'
filters:
- multiply: 0.06 # (60s/1000 每 kWh 脉冲)

当配置了 total 传感器时,pulse_counter 还会报告所测得的脉冲总数。在电表上使用此功能可以测量累计消耗的电量(kWh)。

# 示例配置条目
sensor:
- platform: pulse_counter
pin: GPIOXX
unit_of_measurement: 'kW'
name: 'Power Meter House'
filters:
- multiply: 0.06 # (60s/1000 每 kWh 脉冲)
total:
unit_of_measurement: 'kWh'
name: 'Energy Meter House'
filters:
- multiply: 0.001 # (1/1000 每 kWh 脉冲)

通过此动作,您可以重置/设置总脉冲计数。如果您希望 total 传感器的读数与正在匹配的表计上显示的数值一致,这将非常有用。

# 通过此动作从 Home Assistant 设置脉冲计数器总值:
api:
actions:
- action: set_pulse_total
variables:
new_pulse_total: int
then:
- pulse_counter.set_total_pulses:
id: pulse_counter_id
value: !lambda 'return new_pulse_total;'

NOTE

此值是脉冲的原始计数,而不是经过过滤器处理后的显示值。

如果您想从简单的干簧片开关计数脉冲,最简单的方法是利用内部上拉/下拉电阻。

您可以将开关接在 GPIO 引脚与 GND 之间;此时应将引脚设置为输入、上拉、反转:

# 干簧片开关接在 GPIO 与 GND 之间
sensor:
- platform: pulse_counter
pin:
number: 12
inverted: true
mode:
input: true
pullup: true
name: "Pulse Counter"

如果您将其接在 GPIO 引脚与 +3.3V 之间,则将引脚设置为输入、下拉:

# 干簧片开关接在 GPIO 与 +3.3V 之间
sensor:
- platform: pulse_counter
pin:
number: 12
mode:
input: true
pulldown: true
name: "Pulse Counter"

最安全的方式是使用 GPIO + GND,这样可以避免误将导线短路。