💡 划重点

  • 只在夜间工作:LDR 光敏判断天黑,白天自动休眠,减少误触和耗电。
  • PIR 检测动物热源移动,ESP32 双条件确认后触发,避免风吹草动就报警。
  • 高频蜂鸣器扫频 + LED 阵列爆闪,利用声光组合驱赶,不伤害动物。
  • 目标成本 55 元内,实际物料约 52.4 元,适合小果园、菜园、家庭农场复制。
  • 可选 WiFi 上报触发次数,帮助判断动物活动规律。

需求洞察

目标用户是小型果园种植户、菜园管理者、家庭农场主和庭院种植爱好者。真实痛点很集中:夜间野猪、兔子、刺猬、流浪猫狗、部分鸟类会啃食果实、幼苗和菜叶,一夜之间可能毁掉一片地。人力值守不现实,传统围栏成本高,电网有安全风险,毒饵不环保也可能违法。市售驱赶器要么价格高,要么功能单一,要么对动物逐渐失效。

这个项目值得做,因为 ESP32 开发板便宜、生态成熟,PIR 和光敏模块极易获取。声光组合对多数夜行动物有即时威慑,且不造成实质伤害。设备可记录触发次数,后续还能接太阳能和 WiFi,形成低维护的长期防护节点。

方案设计

感知层由 PIR 和 LDR 组成。PIR 接 GPIO13,检测动物移动产生的红外变化;LDR 模块 AO 接 GPIO34,读取环境光,判断是否进入夜间。控制层是 ESP32,采用“夜间 + PIR 高电平 + 冷却时间”三重逻辑,减少误触发。执行层包括高频蜂鸣器和 LED 阵列:蜂鸣器接 GPIO25,用 PWM 生成 4kHz 到 8kHz 扫频,避免动物快速适应;LED 阵列接 GPIO27,通过三极管驱动,实现爆闪。日志/联网层用 ESP32 的 NVS 保存触发计数,可选 WiFi 连接 MQTT 或 HTTP 接口上报。供电可用 5V 电源,户外可换 18650 电池加太阳能板。

物料清单

物料 数量 用途 估算单价 小计
ESP32 开发板 1 主控与联网 18 元 18 元
HC-SR501 PIR 1 动物移动检测 6 元 6 元
光敏电阻模块 1 昼夜判断 2 元 2 元
无源蜂鸣器 1 高频声波驱赶 2 元 2 元
高亮 LED 5mm 6 爆闪阵列 0.3 元 1.8 元
220Ω 电阻 6 LED 限流 0.1 元 0.6 元
S8050 三极管 2 驱动蜂鸣器/LED 0.5 元 1 元
洞洞板与杜邦线 1 套 焊接与连接 5 元 5 元
防水盒 1 户外防护 8 元 8 元
5V 2A 电源 1 供电 8 元 8 元
合计 52.4 元

接线与结构

按给定引脚接线:PIR 的 VCC 接 5V,GND 接 GND,OUT 接 GPIO13;LDR 模块 AO 接 GPIO34,VCC 接 3.3V,GND 接 GND;无源蜂鸣器正极经 100Ω 接 GPIO25,负极接 GND;LED 阵列由 GPIO27 经 1kΩ 电阻接 S8050 基极,LED 串 220Ω 后接 5V,三极管发射极接 GND。GPIO34 是输入专用脚,适合 ADC 读取光敏。LED 阵列电流较大,不能直接由 GPIO 拉载,因此用三极管驱动,GPIO27 保持原定不变。结构上使用防水盒,PIR 透镜朝外,LDR 朝上但避开 LED 直射,蜂鸣器开孔朝外,电源线用防水接头。

核心代码


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

const int LDR_NIGHT_THRESHOLD = 1800; // 按实测调整
int triggerCount = 0;

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

bool isNight() {
  int ldr = analogRead(LDR_PIN);
  return ldr > LDR_NIGHT_THRESHOLD; // 越黑值越大
}

void driveAway() {
  triggerCount++;
  Serial.printf("触发第 %d 次\n", triggerCount);
  unsigned long start = millis();
  while (millis() - start < 8000) {
    for (int f = 4000; f <= 8000; f += 200) {
      ledcWriteTone(0, f);
      digitalWrite(LED_PIN, (f / 200) % 2);
      delay(25);
    }
  }
  ledcWriteTone(0, 0);
  digitalWrite(LED_PIN, LOW);
}

void loop() {
  if (isNight() && digitalRead(PIR_PIN) == HIGH) {
    delay(50);
    if (digitalRead(PIR_PIN) == HIGH) {
      driveAway();
      delay(3000); // 冷却,避免连续触发
    }
  }
  delay(100);
}

调试步骤

  1. 单独测 PIR:串口观察 0/1 变化,调节灵敏度和延时旋钮。
  2. 测 LDR:遮光与光照下打印 ADC 值,确定夜间阈值。
  3. 测蜂鸣器:上电验证扫频声音,确认音量不刺耳但有效。
  4. 测 LED 阵列:检查三极管驱动和爆闪节奏。
  5. 联调:遮光模拟夜晚,手挥模拟动物,观察是否触发 8 秒驱赶。
  6. 调冷却:根据误触情况修改 3000ms 冷却时间。
  7. 户外测试:装防水盒,检查固定、供电和防雨。

设计图

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