Arduino中继电器NC闭合时HC-SR04超声波传感器失效问题求助
问题:HC-SR04在继电器闭合时停止工作(无直接物理连接)
通常HC-SR04超声波传感器可正常工作,但当闭合继电器后,传感器便停止运行。该继电器用于其他任务,与超声波传感器无直接连接。补充说明:超声波传感器恰好在继电器闭合时停止工作,但二者无物理连接。
相关代码如下:
/* * created by Rui Santos * * Complete Guide for Ultrasonic Sensor HC-SR04 * Ultrasonic sensor Pins: VCC: +5VDC Trig : Trigger (INPUT) - Pin11 Echo: Echo (OUTPUT) - Pin 12 GND: GND */ #define relay1 10 int trigPin = 11; //Trig - green Jumper int echoPin = 12; //Echo - yellow Jumper long duration, cm; String cmd; void setup() { //Serial Port begin Serial.begin (9600); Serial.println("Initializing Relay..."); pinMode(relay1, OUTPUT); Serial.println("Initializing Ultrasonic sensor..."); //Define inputs and outputs pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { if (Serial.available() > 0) { // read the incoming byte: cmd = Serial.readString(); if (cmd == "relayOn"){ //relay normally closed - ultrasonic sensor stop working here digitalWrite(relay1, LOW); }else if (cmd == "relayOff"){ //relay normally open digitalWrite(relay1, HIGH); } } // The sensor is triggered by a HIGH pulse of 10 or more microseconds. // Give a short LOW pulse beforehand to ensure a clean HIGH pulse: digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Read the signal from the sensor: a HIGH pulse whose // duration is the time (in microseconds) from the sending // of the ping to the reception of its echo off of an object. duration = pulseIn(echoPin, HIGH); // convert the time into a distance cm = (duration/2) / 29.1; Serial.print(cm); Serial.print("cm"); Serial.println(); delay(250); }
问题分析与解决方案
从你的情况来看,代码本身没有逻辑错误(继电器控制不会阻断传感器检测流程),故障出在硬件层面,最常见的两个原因是电源压降和电磁干扰,下面逐一说明:
1. 电源压降问题(最可能)
继电器线圈吸合时需要较大的工作电流,如果你的继电器和HC-SR04共用同一个5V电源(比如都接在Arduino的5V引脚上),会出现以下情况:
- Arduino的5V引脚输出电流有限(通常最大约500mA),继电器吸合瞬间的大电流会拉低整个系统的供电电压,而HC-SR04需要稳定的5V才能正常触发和接收回波,电压低于4.5V左右时传感器就会停止工作。
解决方法:
- 给继电器单独供电:使用外部5V电源模块给继电器供电,继电器的控制引脚(IN)仍接Arduino的引脚10,但必须将Arduino的GND和外部电源的GND相连(共地),否则控制信号无效。
- 在继电器模块的VCC和GND引脚之间并联一个100µF的电解电容,缓冲吸合瞬间的电流波动,减少电压跌落。
- 条件允许的话,HC-SR04也改用外部5V电源供电,彻底避免电源竞争。
2. 电磁干扰(EMI)问题
继电器是电磁式开关,吸合和释放瞬间会产生电磁脉冲,这种干扰可能会影响HC-SR04的信号:
- HC-SR04的Echo引脚是模拟输入,对高频干扰非常敏感,继电器的电磁脉冲可能会干扰
pulseIn函数读取回波信号,导致传感器返回异常值或完全无输出。
解决方法:
- 给继电器线圈并联续流二极管:选用1N4007这类通用二极管,负极接继电器线圈的正极,正极接线圈负极,这样可以吸收线圈断电时的反向电动势,大幅降低电磁干扰。
- 优化布线:将HC-SR04的Trig/Echo信号线与继电器的电源线、控制线分开布置,避免线路交叉,减少干扰耦合。
- 在HC-SR04的VCC和GND之间并联一个0.1µF的陶瓷电容,过滤电源上的高频干扰信号。
3. 代码验证小技巧
为了确认故障类型,可以在代码中添加状态输出:
if (cmd == "relayOn"){ digitalWrite(relay1, LOW); Serial.println("[Status] Relay ON - Sensor may be affected"); // 添加此行 }else if (cmd == "relayOff"){ digitalWrite(relay1, HIGH); Serial.println("[Status] Relay OFF - Sensor normal"); // 添加此行 }
观察串口输出:
- 如果继电器ON时,传感器的距离数据完全消失,大概率是电源压降导致传感器断电;
- 如果出现固定值(比如0cm或超大值),则更可能是电磁干扰导致信号异常。
内容的提问来源于stack exchange,提问作者Martin Ocando Corleone
相关产品推荐
相关产品推荐

