You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

车辆速度检测项目求助:霍尔传感器检测到磁铁但无速度显示

车辆速度检测故障排查与修复

问题根源分析

你的代码存在以下核心逻辑错误,导致速度无法正确计算和显示:

  • 未检测霍尔传感器的状态跳变(仅持续检测高电平),无法准确捕捉磁铁经过的瞬间
  • laststate变量赋值逻辑混乱,破坏了状态对比的有效性
  • 时间差计算条件不合理,无法正确获取两次触发的间隔时间
  • LCD重复刷新同一内容,易导致显示异常

修复后的代码

#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int hallsensor = 1;
int lastMagnetState = HIGH; // 初始化为默认高电平(根据霍尔传感器类型调整)
unsigned long lastTriggerTime = 0;
const unsigned long debounceDelay = 50; // 防抖延时,避免误触发

float wheelCircumference = 2 * 3.14 * 0.2; // 车轮周长:2πr,r=0.2m
float currentKph = 0.0;

void setup() {
  lcd.begin(16, 2);
  pinMode(hallsensor, INPUT_PULLUP); // 若霍尔传感器是下拉输出,改用INPUT;建议用上拉/下拉避免浮空
  Serial.begin(115200);
  
  lcd.print("Speed:");
  lcd.setCursor(8, 1);
  lcd.print("kph");
}

void loop() {
  int currentMagnetState = digitalRead(hallsensor);
  unsigned long currentTime = millis();

  // 检测霍尔传感器的状态跳变(这里假设磁铁靠近时输出LOW,离开时HIGH,根据实际传感器调整)
  if (currentMagnetState != lastMagnetState) {
    // 防抖处理:等待状态稳定
    if (currentTime - lastTriggerTime > debounceDelay) {
      // 仅在磁铁离开时触发速度计算(或根据传感器特性选择上升沿/下降沿)
      if (currentMagnetState == HIGH) {
        unsigned long timeInterval = currentTime - lastTriggerTime;
        if (timeInterval > 10) { // 避免极短时间间隔导致的异常值
          // 计算速度:(周长/时间间隔)*3600 = 米/小时 → 转公里/小时除以1000
          currentKph = (wheelCircumference / timeInterval) * 3600 / 1000;
        }
        lastTriggerTime = currentTime;
      }
    }
    lastMagnetState = currentMagnetState;
  }

  // 刷新LCD显示,避免重复刷新导致闪烁
  static unsigned long lastDisplayUpdate = 0;
  if (currentTime - lastDisplayUpdate > 200) {
    lcd.setCursor(6, 0);
    // 格式化显示,保留1位小数,补空格清除旧内容
    lcd.print(currentKph, 1);
    lcd.print("   ");
    lastDisplayUpdate = currentTime;
  }
}

关键修改说明

  • 状态跳变检测:通过对比当前状态与上一次状态,仅在状态变化时触发逻辑,准确捕捉磁铁经过的瞬间
  • 防抖处理:添加debounceDelay避免传感器噪声导致的误触发
  • 速度计算优化:修正速度计算公式,确保单位转换正确(米→公里,毫秒→小时)
  • LCD显示优化:定时刷新显示,避免重复打印导致的闪烁和内容残留
  • 引脚配置优化:建议使用INPUT_PULLUP或INPUT_PULLDOWN避免引脚浮空导致的误读,需根据你的霍尔传感器输出类型调整

额外排查建议

  • 确认霍尔传感器的输出逻辑:磁铁靠近时是输出高电平还是低电平,对应调整代码中的状态判断
  • 检查磁铁与霍尔传感器的安装距离:过远会导致传感器检测不稳定
  • 用串口打印currentMagnetState和timeInterval,验证传感器触发是否正常

内容的提问来源于stack exchange,提问作者イアン

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:05:26