💡 划重点

  • 目标场景:果园、菜园、小型农场夜间防野猪、刺猬、流浪猫狗、鼠类等。
  • 主控芯片:ESP32,兼顾低功耗、联网与多路控制。
  • 关键模块:PIR 人体/动物红外、LDR 光敏、高频 buzzer、LED 阵列。
  • 建议接线:PIR=13,LDR A0=34,buzzer PWM=25,LED 阵列=27。
  • 核心逻辑:仅夜间且 PIR 触发时,先 LED 爆闪,再高频蜂鸣,持续 8 秒后冷却,避免动物快速适应。
  • 目标成本:55 元内,本方案估算约 52.5 元。

需求洞察

目标用户是山区果农、城郊菜园主、小型家庭农场主。真实痛点是:夜间动物啃食果实、拱翻菜地、破坏滴灌带,传统稻草人、反光带、单一声音驱赶器很快失效;市售产品要么价格高,要么功能单一,要么需要拉电。果园往往远离稳定电源,布线和维护成本高。

为什么值得做?ESP32 自带 Wi-Fi 和低功耗能力,配合 PIR、LDR、蜂鸣器、LED 阵列,可以用较低成本做出“光+声+随机节奏”的多模态驱赶器。它不依赖农药,不伤害动物,还能记录触发次数,帮助农户判断动物活动规律。对小型种植户来说,这是低成本、可复制、可扩展的实用项目。

方案设计

感知层:PIR 检测移动动物,LDR 分压检测环境光,判断是否进入夜间模式。控制层:ESP32 读取传感器,运行状态机,设置夜间阈值、触发冷却、随机蜂鸣节奏,避免误触和适应。执行层:高频 buzzer 由 PWM 驱动,LED 阵列通过三极管扩流,实现爆闪。日志/联网层:串口输出触发日志,可选 Wi-Fi 上报触发次数到手机或服务器,支持 OTA 更新。

供电可用 18650 电池加 TP4056 充电板,也可接 5V 太阳能板。为降低功耗,可让 ESP32 定时唤醒或深睡眠加 PIR 唤醒。外壳建议防水盒,PIR 朝外,LDR 朝上,蜂鸣器朝下防雨。

物料清单

物料 数量 用途 估算单价 合计
ESP32 开发板 1 主控与联网 17 元 17 元
PIR 模块 1 动物移动检测 6 元 6 元
LDR + 10k 电阻 1 套 夜间判断 1 元 1 元
高频 buzzer 1 声音驱赶 3 元 3 元
LED 阵列 1 爆闪驱赶 4 元 4 元
S8050 三极管 2 驱动蜂鸣器/LED 0.5 元 1 元
电阻电容若干 1 套 限流滤波 2 元 2 元
洞洞板与线材 1 套 焊接连接 5 元 5 元
18650 电池与座 1 套 供电 11 元 11 元
防水盒 1 户外防护 2.5 元 2.5 元
合计 52.5 元

接线与结构

按给定 GPIO 接线:PIR 输出接 GPIO13,LDR 分压中点接 A0=34,buzzer 接 PWM=25,LED 阵列控制接 GPIO27。LDR 分压:3.3V—LDR—GPIO34—10k—GND。PIR 建议 5V 供电,输出高电平通常为 3.3V,可直接接 GPIO13。buzzer 若电流较大,用 S8050 驱动,GPIO25 经 1k 电阻接基极。LED 阵列用 GPIO27 经 1k 电阻接 S8050 基极,阵列正极接 5V,负极接集电极,发射极接 GND。

结构上,防水盒底部开孔引出电源,PIR 透镜朝外,LDR 加透明胶防雨,蜂鸣器朝下并加防雨罩。整机固定在果园立柱或菜地边缘,高度约 1 米,避免遮挡。

核心代码


#include <Arduino.h>
#define PIR_PIN 13
#define LDR_PIN 34
#define BUZZER_PIN 25
#define LED_PIN 27

const int LDR_THRESHOLD = 1800;
const unsigned long COOLDOWN = 15000;
unsigned long lastTrigger = 0;
bool active = false;
unsigned long activeStart = 0;

void setup() {
  Serial.begin(115200);
  pinMode(PIR_PIN, INPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  ledcSetup(0, 4000, 8);
  ledcAttachPin(BUZZER_PIN, 0);
}

void loop() {
  int ldr = analogRead(LDR_PIN);
  bool night = ldr > LDR_THRESHOLD;
  bool motion = digitalRead(PIR_PIN) == HIGH;
  unsigned long now = millis();

  if (!active && night && motion && now - lastTrigger > COOLDOWN) {
    active = true;
    activeStart = now;
    lastTrigger = now;
    Serial.println("触发驱赶");
  }

  if (active) {
    unsigned long t = now - activeStart;
    if (t < 8000) {
      digitalWrite(LED_PIN, (t / 120) % 2);
      int freq = 3500 + random(0, 1500);
      ledcWriteTone(0, freq);
      ledcWrite(0, 128);
    } else {
      digitalWrite(LED_PIN, LOW);
      ledcWriteTone(0, 0);
      active = false;
    }
  }
  delay(50);
}

说明:LDR 阈值需按实际分压方向调整,若白天数值高则改为 <。蜂鸣频率在 3.5 至 5 千赫兹间随机,降低动物适应。

调试步骤

  1. 串口查看 LDR 数值,分别记录白天、傍晚、全黑时的读数,确定夜间阈值。
  2. 手在 PIR 前晃动,观察串口是否打印触发,LED 是否爆闪,蜂鸣器是否发声。
  3. 调节 PIR 延时和灵敏度电位器,避免持续触发或漏触发。
  4. 用万用表测整机电流,确认蜂鸣器和 LED 同时工作时电源不过载。
  5. 户外傍晚放置,记录误触发次数,必要时增加冷却时间或调整安装角度。
  6. 检查防水盒密封,估算续航:触发较少时,18650 电池可支撑 3 至 5 晚。

设计图

果园夜间动物驱赶器结构flow
1
感知输入
→
2
控制处理
→
3
执行反馈
→
4
数据上报