基于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 类型,哈哈哈学习使我快乐

  • 18
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值