当前位置:首页 > 行业动态 > 正文

光感智能三轮小车程序

硬件组成与连接

组件 型号/规格 连接方式 功能说明
主控板 Arduino UNO 数字引脚2/3/4连接电机驱动模块 核心控制单元
光感传感器 BH1750FVI 模拟引脚A0(数据)+数字引脚2(时钟) 环境光照强度检测
电机驱动模块 L298N IN1/IN2/IN3/IN4接数字引脚5-8 控制三个电机正反转
三轮车体 3D打印底盘+橡胶轮 电机输出轴直接连接车轮 机械运动平台
电源模块 4V锂电池组 接驱动模块VIN/GND 系统供电

程序逻辑框架

// 初始化阶段
void setup() {
  Serial.begin(9600); // 开启串口监视
  BH1750.begin();     // 初始化光感传感器
  pinMode(5, OUTPUT); // 左前电机控制引脚
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT); // 右前电机控制引脚
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT); // 后驱电机控制引脚
  pinMode(10, OUTPUT);
}
// 主循环阶段
void loop() {
  int lightValue = BH1750.readLightLevel(); // 获取光照强度值(0-65535)
  // 动态阈值计算
  int threshold = map(lightValue, 0, 65535, 300, 800);
  // 运动决策逻辑
  if(lightValue > threshold) {
    moveForward(200, 200, 150); // 全速前进
  } else {
    avoidObstacle(-150, 150, 0); // 原地右转规避
  }
  delay(100); // 10Hz控制频率
}
// 电机控制函数
void moveForward(int leftFrontSpeed, int rightFrontSpeed, int rearSpeed) {
  setMotor(5, leftFrontSpeed); 
  setMotor(6, rightFrontSpeed);
  setMotor(9, rearSpeed);
}
void avoidObstacle(int leftFrontSpeed, int rightFrontSpeed, int rearSpeed) {
  setMotor(5, leftFrontSpeed); 
  setMotor(6, rightFrontSpeed);
  setMotor(9, rearSpeed);
}
// 底层电机控制
void setMotor(int pin1, int pin2, int speed) {
  if(speed >= 0) {
    digitalWrite(pin1, HIGH);
    digitalWrite(pin2, LOW);
    analogWrite(pin1, map(speed, 0, 255, 0, 255));
  } else {
    digitalWrite(pin1, LOW);
    digitalWrite(pin2, HIGH);
    analogWrite(pin2, map(-speed, 0, 255, 0, 255));
  }
}

关键参数说明表

参数项 默认值 调节范围 作用效果
光照阈值基准值 500 300-800 控制转向灵敏度
电机PWM占空比 150 0-255 速度调节范围
转向修正系数 85 5-1.2 转弯半径调整
采样周期 100ms 50-200ms 环境响应速度

常见问题与解决方案

Q1:小车在均匀光照下频繁左右摆动

  • 原因分析:环境光接近阈值导致频繁触发转向逻辑
  • 解决方法:增加滞环比较机制,当光照值在[阈值-50, 阈值+50]区间时保持原运动状态

Q2:电机出现异常抖动现象

  • 排查步骤:
    1. 检查驱动模块供电是否稳定(建议并联电容)
    2. 验证PWM信号频率是否匹配电机特性(建议200Hz以上)
    3. 检测电机接线是否牢固,霍尔元件是否正常
0