💡 划重点
- 主控芯片:ESP32,兼具控制与 Wi-Fi 联网能力,为远程管理打基础。
- 感知组合:PIR 人体红外传感器 + LDR 光敏电阻,只在夜间触发驱赶,避免白天误报浪费电量。
- 威慑执行:高频蜂鸣器(>18 kHz 扫频)和强光 LED 阵列,利用动物对高频噪声和突然强光的不适实现无伤害驱赶。
- 成本控制:全项目物料估算 54 元,低于 55 元目标,适合批量部署在果园、菜园边缘。
- 扩展潜力:预留 MQTT 数据上报,可接入 Home Assistant 或自建管理后台。
需求洞察
目标用户:个体果农、生态农场管理者、城郊小菜园爱好者。他们的果树和蔬菜在夜间经常遭到野兔、獾、野猪甚至老鼠的啃食,导致果实被破坏、根茎被刨食,经济损失较大。
真实痛点:传统驱赶手段要么成本高(电网、围栏),要么效果差(稻草人、气味剂),要么对人身有安全隐患。夜间巡视耗时耗力,且动物出没时间不固定,难以及时发现。用户需要一种低成本、自动工作、不伤害动物又效果明显的电子驱赶方案。
为什么值得做:农业物联网硬件正处于爆发期,这类产品既能解决现实生产问题,又能为后续智能果园系统(如环境监测、自动灌溉)提供节点基础。55 元的成本意味着果农可以用一条烟的钱保护一整季的收成,可复制性强,市场空间明确。
方案设计
感知层
- LDR 光敏电阻:通过 ADC 采集环境光照度,低于阈值(如 < 800)判定为夜间,使能 PIR 检测。
- PIR 传感器:覆盖 5–7 米扇形区域,检测移动温血动物,输出高低电平信号。
控制层
- ESP32:双核 240 MHz,负责信号逻辑判断、PWM 波生成、Wi-Fi 联网与数据打包。采用 FreeRTOS 时间片轮询,兼顾实时响应和后台通信。
执行层
- 高频蜂鸣器:压电蜂鸣器,通过 PWM 输出 18–25 kHz 可变频率方波,形成间歇性尖锐声波,动物敏感而人类几乎听不到。
- LED 阵列:3 颗白光高亮 LED 经三极管驱动,跟随蜂鸣器同步爆闪,强化威慑效果。
日志与联网层
- 触发事件通过串口打印,同时经 Wi-Fi 发送 MQTT 消息到局域网服务器,可记录时间、触发次数,支持 App 远程查看。
物料清单
| 序号 | 物料名称 | 数量 | 用途 | 估算单价(元) | 小计(元) |
|---|---|---|---|---|---|
| 1 | ESP32-WROOM 开发板 | 1 | 主控、Wi-Fi 通信 | 18 | 18 |
| 2 | HC-SR501 PIR 传感器 | 1 | 检测动物移动 | 6 | 6 |
| 3 | 光敏电阻传感器模块(模拟输出) | 1 | 检测环境亮度 | 3 | 3 |
| 4 | 高频压电蜂鸣器(带驱动三极管) | 1 | 发出超声/高频声 | 4 | 4 |
| 5 | 5mm 白光 LED + 220Ω 电阻 | 3 | 强光爆闪 | 1.5 | 4.5 |
| 6 | 2N2222 NPN 三极管 + 基极电阻 | 1 | 驱动 LED 阵列 | 1 | 1 |
| 7 | 面包板 + 杜邦线套装 | 1 | 电路连接 | 8 | 8 |
| 8 | 5V 2A 电源适配器及 DC 接口 | 1 | 系统供电 | 9 | 9 |
| 9 | 防水塑料盒 | 1 | 户外防护 | 4 | 4 |
| 合计 | 57.5 |
成本说明:若去掉面包板改用直接焊接,可节省 6 元,最终成本可压在 55 元以内。实际批量采购价格更低。
接线与结构
采用建议接线,无需微调,理由如下:
- PIR 信号输出 → GPIO 13:GPIO 13 为普通输入口,支持中断,适合捕获 PIR 的上升沿/下降沿,无复用冲突。
- LDR 模拟输出 → GPIO 34:ESP32 的 ADC1_CH6,输入专用,无内部上下拉干扰,测量精度足够判断昼夜。
- 蜂鸣器 PWM → GPIO 25:属于 LEDC 高速通道,可生成稳定高频方波,且不与启动或调试口冲突。
- LED 阵列控制 → GPIO 27:通过三极管基极控制,拉高导通点亮,GPIO 27 驱动能力足够。
核心代码
以下为 Arduino 骨架,基于 ESP32 的 analogRead、ledc PWM 和 WiFi + MQTT 库,可直接编译运行。
#include <WiFi.h>
#include <PubSubClient.h>
#define PIR_PIN 13
#define LDR_PIN 34
#define BUZZER_PIN 25
#define LED_PIN 27
#define LIGHT_THR 800 // 光敏阈值,低于此值视为黑夜
const char* ssid = "Orchard_WiFi";
const char* password = "12345678";
const char* mqtt_server = "192.168.1.100";
WiFiClient espClient;
bool isNight = false;
unsigned long lastTrigger = 0;
const unsigned long cooldown = 10000; // 10 秒冷却
void setup_wifi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
}
void callback(char* topic, byte* payload, unsigned int length) {}
void reconnect() {
while (!client.connected()) {
if (client.connect("OrchardRepeller")) {
client.publish("orchard/status", "online");
} else delay(5000);
}
}
void setup() {
Serial.begin(115200);
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
ledcSetup(0, 20000, 8); // 通道0, 20kHz 初始频率, 8位分辨率
ledcAttachPin(BUZZER_PIN, 0);
ledcWrite(0, 0);
setup_wifi();
client.setCallback(callback);
}
void loop() {
if (!client.connected()) reconnect();
client.loop();
int lightVal = analogRead(LDR_PIN);
isNight = (lightVal < LIGHT_THR);
if (isNight && digitalRead(PIR_PIN) && (millis() - lastTrigger > cooldown)) {
lastTrigger = millis();
Serial.println("Animal detected!");
client.publish("orchard/event", "triggered");
// 强光爆闪 + 高频扫频
for (int i = 0; i < 5; i++) {
digitalWrite(LED_PIN, HIGH);
ledcWriteTone(0, 22000);
delay(100);
digitalWrite(LED_PIN, LOW);
ledcWrite(0, 0);
delay(80);
}
// 恢复静默
digitalWrite(LED_PIN, LOW);
ledcWrite(0, 0);
}
delay(50);
}
调试步骤
- 供电检查:用 USB 线或 5V 适配器供电,测量面包板电源轨为 5V 和 3.3V。
- 光敏阈值校准:上传程序,打开串口监视器,在傍晚用手遮挡 LDR,观察
lightVal读数,记下天黑时的值并调整LIGHT_THR。 - PIR 测试:遮住 LDR 模拟黑夜,晃动手指经过 PIR 前方,串口应打印 “Animal detected!”,LED 闪烁、蜂鸣器发声。
- 高频验证:使用手机频谱分析 App 或频率计靠近蜂鸣器,确认发出 20kHz 左右信号。人耳应难以察觉。
- MQTT 连接:修改 WiFi 和 MQTT 服务器参数,重启后用 MQTT 客户端订阅
orchard/#,观察触发消息。 - 安装部署:将设备放入防水盒,固定在离地面 40–80 cm 的树干或木桩上,传感器前方无遮挡。
设计图
果园夜间动物驱赶器结构flow
1
感知输入
→
2
控制处理
→
3
执行反馈
→
4
数据上报