基于Arduino用PID算法实现循迹小车

基于Arduino与PID算法 循迹小车的感受

//  本代码使用pid动态算法,“//后的部分是不用pid”,

const int IN_A1=3;
const int IN_A2=5;
const int IN_B1=6;
const int IN_B2=9;
const int sensor1=A1;
const int sensor2=A2;
const int sensor3=A3;
const int sensor4=A4;
const int sensor5=A5;
float Kp = 20, Ki = 0.01, Kd = 0.1;                    
float error = 0, P = 0, I = 0, D = 0, PID_value = 0;
float previous_error = 0;                
int DIN_A1 = 50;  
int DIN_B1 = 50;  
void setup() {
pinMode(IN_A1,OUTPUT);
pinMode(IN_A2,OUTPUT);
pinMode(IN_B1,OUTPUT);
pinMode(IN_B2,OUTPUT);
pinMode(sensor1,INPUT);
pinMode(sensor2,INPUT);
pinMode(sensor3,INPUT);
pinMode(sensor4,INPUT);
pinMode(sensor5,INPUT);
}
void loop() {
char num2,num3,num5,num1,num4;
num1=digitalRead(sensor1);
num2=digitalRead(sensor2);
num3=digitalRead(sensor3);
num4=digitalRead(sensor4);
num5=digitalRead(sensor5);
if(num1==0&&num2!=0&&num3!=0&&num4!=0&&num5!=0){
if(error<0){
  error=3.2;}
else{error=1.6;}
//analogWrite(IN_A1,90);
//analogWrite(IN_B1,30);
}else if(num2==0&&num1!=0&&num3!=0&&num4!=0&&num5!=0){
if(error<0){
  error=2;}
else{error=1;}
//analogWrite(IN_A1,80);
//analogWrite(IN_B1,40);
}else if(num4==0&&num2!=0&&num3!=0&&num1!=0&&num5!=0){
if(error>0){
  error=-2;}
else{error=-1;}
//analogWrite(IN_A1,40);
//analogWrite(IN_B1,80);
}else if(num5==0&&num4!=0&&num3!=0&&num2!=0&&num1!=0){
if(error>0){
  error=-3.2;}
else{error=-1.6;}
//analogWrite(IN_A1,30);
//analogWrite(IN_B1,90);
}else{
 error=0;
//analogWrite(IN_A1,70);
//analogWrite(IN_B1,70);
}
P = error;
I = I + error;
D = error - previous_error; 
PID_value = (Kp * P) + (Ki * I) + (Kd * D);
previous_error = error;
DIN_A1  += PID_value;
DIN_B1  -= PID_value;
if(DIN_A1>60){
  DIN_A1=60;}
if(DIN_B1>60){
  DIN_B1=60;}
if(DIN_B1<30){
  DIN_B1=30;}
if(DIN_A1<30){
  DIN_A1=30;}
analogWrite(IN_A1,DIN_A1);
analogWrite(IN_B1,DIN_B1);
}

我自己写完最大的感受就是,我感觉没用上PID

感应器传的慢 反应时间长等等问题迫使我把Kp的值调的极高,
这样看来其实就是在1ms间调成//后的数值,
由于最后速度限制,导致不会因为循环速度加到爆。

最终成功地
写成了 非PID 类型,哈哈哈学习使我快乐

已标记关键词 清除标记
<span style="color:#404040;">1.算法是程序的灵魂,优秀的程序在对海量数据处理时,依然保持高速计算,就需要高效的数据结构和算法支撑。</span><br /><br /><span style="color:#404040;">2.网上数据结构和算法的课程不少,但存在两个问题:</span><br /><br /><span style="color:#404040;">1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了</span><br /><span style="color:#404040;">2)说是讲数据结构和算法,但大多是挂羊头卖狗肉,算法讲的很少。 本课程针对上述问题,有针对性的进行了升级 </span><br /><span style="color:#404040;">3)授课方式采用图解+算法游戏的方式,让课程生动有趣好理解 </span><br /><span style="color:#404040;">4)系统全面的讲解了数据结构和算法, 除常用数据结构和算法外,还包括程序员常用10大算法:二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、马踏棋盘算法。可以解决面试遇到的最短路径、最小生成树、最小连通图、动态规划等问题及衍生出的面试题,让你秒杀其他面试小伙伴</span><br /><br /><span style="color:#404040;">3.如果你不想永远都是代码工人,就需要花时间来研究下数据结构和算法。</span><br /><br /><span style="color:#404040;">教程内容:</span><br /><span style="color:#404040;">本教程是使用Java来讲解数据结构和算法,考虑到数据结构和算法较难,授课采用图解加算法游戏的方式。内容包括: 稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、基数排序(桶排序)、堆排序、排序速度分析、二分查找、插值查找、斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、多路查找树(B树B+树和B*树)、图、图的DFS算法和BFS、程序员常用10大算法、二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法马踏棋盘算法。</span><br /><br /><span style="color:#404040;">学习目标:</span><br /><span style="color:#404040;">通过学习,学员能掌握主流数据结构和算法实现机制,开阔编程思路,提高优化程序的能力。</span>
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页