Arduino 循迹小车pid
时间: 2025-05-28 16:42:37 浏览: 45
### 关于Arduino循迹小车的PID控制实现
在构建基于Arduino的循迹小车时,PID(比例-积分-微分)控制器被广泛应用于调节小车的速度和方向,使其能够精准地沿着设定轨迹行驶。以下是关于如何实现这一功能的具体介绍。
#### PID控制器的作用
PID控制器通过对误差信号的比例、积分和微分部分进行计算,从而生成一个合适的控制量来调整系统行为。在循迹小车的应用场景下,PID主要用于根据寻迹传感器检测到的信息调整两个直流电机的速度差异,从而使小车保持沿黑线或其他标记物前进的方向准确性[^1]。
#### 硬件需求
为了完成此项目,需准备如下硬件组件:
- **Arduino开发板**:推荐使用Arduino Uno或兼容型号。
- **直流电机×2**:用于驱动小车前后轮。
- **L298N电机驱动模块**:负责将PWM信号转换成实际电流供给电机运行。
- **寻迹传感器模块**:一般由多个红外发射接收对组成,能感知地面黑白界限变化情况。
- **其他配件**:包括但不限于车身框架材料、供电电池组以及必要连线工具等[^3]。
#### 软件设计思路
整个程序逻辑大致分为以下几个方面:
##### 初始化阶段
定义好各部件所对应的数字端口号,并加载必要的库文件如`<PID_v1.h>`来进行高级运算操作简化工作流程[^4]。
```cpp
#include <PID_v1.h>
// 定义变量
double Setpoint, Input, Output;
PID myPID(&Input, &Output, &Setpoint, 2, 5, 1); // 参数分别为Kp Ki Kd
const int pinLeftSensor = A0; // 左侧光敏电阻模拟输入管脚编号
const int pinRightSensor = A1; // 右侧光敏电阻模拟输入管脚编号
int speedPinLeftMotor = 9; // PWM左马达转速调控针脚号
int dirPinLeftMotor = 8; // 方向切换用数字高低电平改变接口位置
int speedPinRightMotor = 10; // 同理右边对应关系相同即可满足要求
int dirPinRightMotor = 7;
void setup() {
Serial.begin(9600);
pinMode(speedPinLeftMotor, OUTPUT);
pinMode(dirPinLeftMotor, OUTPUT);
pinMode(speedPinRightMotor, OUTPUT);
pinMode(dirPinRightMotor, OUTPUT);
myPID.SetMode(AUTOMATIC);
}
```
##### 主循环过程
持续采集两侧光电感应元件返回数值并通过一定公式转化为代表偏差程度的新值赋给全局变量`Input`;随后调用已配置完毕的对象实例化函数自动得出修正幅度存储至另一成员属性当中最后传递给双路独立运作机制分别加以运用达成预期目标效果展示出来供观察验证正确与否以便进一步优化参数直至满意为止[^4]。
```cpp
void loop(){
int leftValue = analogRead(pinLeftSensor);
int rightValue = analogRead(pinRightSensor);
double error = (rightValue - leftValue)/1023.0 * 100;
Input = error;
Setpoint = 0;
myPID.Compute();
controlMotors(Output);
}
void controlMotors(double output){
digitalWrite(dirPinLeftMotor,HIGH);
digitalWrite(dirPinRightMotor,HIGH);
if(output >=0 ){
analogWrite(speedPinLeftMotor,map(abs(output),0,100,0,255));
analogWrite(speedPinRightMotor,255-map(abs(output),0,100,0,255));
}else{
analogWrite(speedPinLeftMotor,255-map(abs(output),0,100,0,255));
analogWrite(speedPinRightMotor,map(abs(output),0,100,0,255));
}
}
```
以上代码片段展示了基本架构模式下的核心组成部分及其相互之间联系状况描述清楚明白易于理解掌握快速上手实践尝试改进创新不断进步成长成为优秀工程师人才[^2]。
---
阅读全文
相关推荐


















