【arduino】三路pid循迹小车

您所在的位置:网站首页 循迹小车arduino 【arduino】三路pid循迹小车

【arduino】三路pid循迹小车

2023-11-08 11:39| 来源: 网络整理| 查看: 265

这是个很久之前的项目,没有保存照片,故使用文字+图片说明

先提前说明,想用pid就需要足够的精度,数字信号很难满足,故选用模拟信号,51系列建议放弃,没有自带模拟接口,只能外接转换器,非常麻烦

pid的好处就是跑的非常稳

以下是正文

首先是传感器部分,使用三个带模拟信号的红外传感器(大部分都是带的,d引脚输出数字,a引脚输出模拟),并排放置,如图差不多就行了,传感器之间可以留有一定间隙,根据个人调整。

每个传感器都是模拟量,也就是越黑值就越大,

 然后我们把最左边的值减去最右边的值,就能得到另一个函数图像,大概这样,画的有点丑

  再融入中间的传感器,把左右偏转,得出这样一个图像,可能传感器本身误差比较大,跟图像有所区别

直接贴代码,这部分是难点,主要是对数据的处理,实际环境变化传感器出现的误差会很难受,可以选择较好的红外传感器或者灰度传感器

int GetTraceDate() { int Data_Out;//定义数据输出变量 int Left_AD,Right_AD,Mid_AD;//定义左右中传感器AD值变量 Left_AD=analogRead(A0); Mid_AD=analogRead(A1); Right_AD=analogRead(A2); //左值减去右值 Data_Out=(Left_AD-Right_AD+D_AD_VALUE);//D_AD_VALUE表示居中时误差,把车放在最中间显示的值 //底下这段是对图像进行处理,使得更接近理论以及运行过程的bug,自行调整即可 if(Left_AD > _H && Mid_AD > _H && Right_AD > _H) stop = 1; else stop = 0; if(Mid_AD>200) { flag = 0; } if((Mid_AD _H && Right_AD > _H) stop = 1; else stop = 0; if(Mid_AD>200) { flag = 0; } if((Mid_AD


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3