自动投喂器光伏发电连接霍尔开关
一、接线表(PNP霍尔 + Arduino 5V)
| 霍尔开关引脚 | 接线目标 | 说明 |
|-------------|----------|------|
| VCC(棕) | Arduino 5V | 供电 |
| GND(蓝) | Arduino GND | 共地 |
| OUT(黑) | Arduino D2 | 信号输入(触发时输出5V高电平) |
| 其他部件 | 接线目标 | 说明 |
|---------|----------|------|
| 继电器模块(5V) | VCC→5V,GND→GND,IN→Arduino D3 | 控制电机通断 |
| 直流电机(12V) | 正极→继电器COM,负极→电池负极 | 继电器NO接电池正极 |
| 蓄电池(12V) | 正极→继电器COM,负极→电机负极和降压模块输入端 | 给电机和降压模块供电 |
| 降压模块(12V→5V) | IN+→电池正极,IN-→电池负极,OUT+→Arduino 5V,OUT-→GND | 给单片机和霍尔供电 |
关键点:所有GND(Arduino、霍尔、继电器、降压模块输出)必须全部连在一起,否则信号不稳定。
二、电路连接示意图(简化版)
```mermaid
flowchart LR
subgraph 电源
B[12V蓄电池] --> D[降压模块
12V→5V]
B --> R[继电器
常开触点]
end
subgraph 控制
D -->|5V| A[Arduino]
D -->|5V| H[PNP霍尔]
A -->|D3| R
end
subgraph 执行
R -->|通电| M[12V电机]
B -->|供电| R
end
H -->|OUT→D2| A
```
三、Arduino代码
代码实现:磁铁靠近霍尔时,电机转动3秒后自动停止,防止一次投喂太多。
```cpp
// ===== 引脚定义 =====
const int hallPin = 2; // PNP霍尔输出 → D2
const int motorPin = 3; // 继电器控制 → D3
// ===== 投喂参数 =====
const unsigned long feedDuration = 3000; // 每次投喂转3秒
bool isFeeding = false; // 是否正在投喂
unsigned long feedStartTime = 0; // 本次投喂开始时间
void setup() {
pinMode(hallPin, INPUT); // 霍尔信号输入
pinMode(motorPin, OUTPUT);
digitalWrite(motorPin, LOW); // 初始继电器断开(电机不转)
Serial.begin(9600);
Serial.println("系统启动,等待触发...");
}
void loop() {
// 1. 读取霍尔状态
int hallState = digitalRead(hallPin);
// 2. PNP霍尔:触发时输出HIGH
if (hallState == HIGH && !isFeeding) {
// 磁铁靠近且当前没有在投喂 → 启动
isFeeding = true;
feedStartTime = millis();
digitalWrite(motorPin, HIGH); // 继电器吸合,电机转动
Serial.println("触发!开始投喂...");
}
// 3. 如果正在投喂,检查是否到时间了
if (isFeeding) {
unsigned long now = millis();
if (now - feedStartTime >= feedDuration) {
digitalWrite(motorPin, LOW); // 继电器断开,电机停止
isFeeding = false;
Serial.println("投喂结束,等待下次触发");
}
}
delay(20); // 小延时,防抖
}
```
四、测试步骤(按顺序做,别跳)
第1步:先不接电机,只接霍尔
1. Arduino接上电脑USB供电(或5V电源)。
2. 打开Arduino IDE的串口监视器(波特率9600)。
3. 拿一块磁铁靠近霍尔开关,观察串口打印:
靠近 → 应该打印 触发!开始投喂...
移开 → 等待3秒后打印 投喂结束...
4. 如果没反应,检查:
霍尔电源和地是否接反(VCC和GND)
磁铁是否靠得够近(建议先贴着试)
用万用表测OUT脚,靠近磁铁时应该是5V,移开是 0V
第2步:接上继电器和电机
1. 电池接好,降压模块给Arduino供电(不再用USB)。
2. 磁铁靠近 → 继电器应该“咔哒”一声吸合 → 电机转动。
3. 3秒后继电器断开,电机停止。
第3步:实际安装到投喂器上
把霍尔固定在投喂器外壳上,磁铁粘在活动部件(如食盆盖、动物项圈)上。
调整位置,确保动物来吃食时,磁铁刚好能靠近霍尔。
五、常见问题排查
| 现象 | 可能原因 | 解决方法 |
|------|----------|----------|
| 串口一直打印触发 | 霍尔输出一直为高 | 检查是否磁铁一直贴着,或者霍尔损坏 |
| 磁铁靠近没反应 | 距离太远 / 磁铁太弱 | 换强磁铁(钕磁铁),或把霍尔靠近安装 |
| 电机一启动就停 | 继电器供电不足 | 继电器VCC和GND是否接稳?Arduino 5V输出电流够吗? |
| 电机不转,但继电器有咔哒声 | 继电器触点接线错误 | COM接电池正极,NO接电机正极,电机负极接电池负极 |
| 投喂时间太短/太长 | 代码里`feedDuration`数值不对 | 修改 const unsigned long feedDuration = 3000; 单位是毫秒 |
霍尔AR127 | PNP,5V供电
单片机 | Arduino(5V逻辑)
信号电压 | 触发时输出5V,直连安全
电机控制 | 继电器模块(5V驱动)
电机电源 | 12V蓄电池(独立供电)
代码功能 | 磁铁触发 → 电机转3秒 → 停
系统原理:霍尔检测到磁铁 → 单片机收到高电平 → 继电器吸合 → 电机转 → 3秒后停。光伏板负责给蓄电池补电,实现“不用市电”的离网运行。
