串口直输型PID红外循迹模块/PID循迹

写在前面

 关于红外PID循迹模块的原理我之前写过一篇博客,大家没看过的话可以点此链接查看:PID循迹模块原理。此循迹模块可以根据传感器离黑线的距离输出线性值,但是配置起来比较麻烦,单片机必须带有AD采集功能,然后在代码中改配置参数比较麻烦。最近本人将之前的PID循迹模块更新了一下,在模块上加入了一个stm8的单片机,单片机通过AD采集数据后直接通过串口输出线性数据,大家只需按下按键即可配置循迹模块,再也不用手动改程序配置了。下面给大家介绍一下这款串口直输式PID红外循迹模块。

如果大家需要购买的话可以点此链接购买:串口直输式PID红外循迹模块
模块资料链接:
链接:https://pan.baidu.com/s/10IUagQXBHASeuqSnktP1tg
提取码:4tfa

1.模块特性

A.适合线宽范围广,黑线的宽度范围为1cm到4cm。
B.一键配置循迹模块参数,按下配置按键后从左到右移动模块即可配置完成。
C.循迹模块输出值根据模块距黑线距离从左到右,返回值从-1500到1500线性变化。
D.串口输出数据信息,单片机不需要AD采集功能即可通过此模块实现PID循迹,只要带串口的单片机都可以使用。
F.串口数据输出频率可通过串口设置,设置频率范围从10HZ到300HZ。
H.循迹模块适合多种车型,舵机转向车型和差速转向车型。

在这里插入图片描述

图1 循迹模块图示

2.模块参数

循迹黑线宽度:1cm-4cm
模块距黑线距离:1.5cm-4cm
数据输出方式:串口
数据输出频率:10HZ-300HZ
数据输出范围:-1500-1500
输入电压:3.3V-5.0V
模块参数配置方式:按键一键配置

在这里插入图片描述

图2 循迹模块接口图

3.模块参数配置流程

 模块正常工作时,工作指示灯会闪烁,串口输出循迹信息。按下配置按键工作指示灯常亮,将模块从黑线左边移动到黑线右边,移动完成后再次按下配置键,工作指示灯会灭0.5ms后再次闪烁,则表明循迹模块参数配置完成。
配置步骤:
①将循迹模块放置在黑线左边。
②按下循迹模块配置键,工作指示灯会常亮。
③如下图2所示,将模块从左到右缓慢滑动。
④完成步骤③后再次按下配置按键,0.5s后工作指示灯再次闪烁表明配置完成。

在这里插入图片描述

图3 循迹模块配置图示

4.模块配置

 串口配置需要加入结尾符’\r’ ’\n’,也就是换行,否者发送的命令不能识别。

设置数据输出频率:
设置输出频率为10HZ
串口发送:SetFre_10HZ
返回:ok

设置输出频率为50HZ
串口发送:SetFre_50HZ
返回:ok

设置输出频率为100HZ
串口发送:SetFre_100HZ
返回:ok

设置输出频率为100HZ
串口发送:SetFre_100HZ
返回:ok

设置输出频率为200HZ
串口发送:SetFre_200HZ
返回:ok

设置输出频率为300HZ
串口发送:SetFre_300HZ
返回:ok

停止数据输出:
停止数据输出
串口发送:Stop
返回:ok

开始数据输出:
开始数据输出
串口发送:Start
返回:ok

5.产品尺寸图

在这里插入图片描述

好的,我可以帮你解答这个问题。下面是一个基于Arduino的PID算法循迹小车的示例代码: ```C++ //定义引脚 int leftMotor1 = 2; int leftMotor2 = 3; int rightMotor1 = 4; int rightMotor2 = 5; //定义传感器引脚 int leftSensor = A0; int rightSensor = A1; //定义PID参数 double kp = 0.5; double ki = 0.1; double kd = 0.2; //定义偏差、误差和总误差 double error = 0; double lastError = 0; double integral = 0; double derivative = 0; //定义目标速度和当前速度 double targetSpeed = 100; double currentSpeed = 0; void setup() { pinMode(leftMotor1, OUTPUT); pinMode(leftMotor2, OUTPUT); pinMode(rightMotor1, OUTPUT); pinMode(rightMotor2, OUTPUT); Serial.begin(9600); } void loop() { //读取传感器数值 int leftValue = analogRead(leftSensor); int rightValue = analogRead(rightSensor); //计算偏差 error = leftValue - rightValue; //计算总误差 integral += error; //计算误差变化率 derivative = error - lastError; //计算控制量 double output = kp * error + ki * integral + kd * derivative; //更新速度 currentSpeed = targetSpeed - output; //控制电机运动 if (currentSpeed > 0) { digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); } else { digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); } //输出调试信息 Serial.print("Left Value: "); Serial.print(leftValue); Serial.print(" Right Value: "); Serial.print(rightValue); Serial.print(" Error: "); Serial.print(error); Serial.print(" Output: "); Serial.println(output); //更新上一次误差 lastError = error; //短暂等待 delay(10); } ``` 该代码基于左右两个红外传感器对黑线进行循迹,使用PID算法控制小车的移动。其中kp、ki和kd分别表示比例、积分和微分系数,可以根据实际情况进行调整。在loop函数中,首先读取传感器数值,然后计算偏差、误差和总误差,接着计算控制量,更新速度,最后控制电机运动。同时,通过串口输出调试信息,方便调试。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值