首页 > 后端 > 知识 > 智能赛车怎么编程序,再度追加分求基于单片机的智能跑车设计和代码

智能赛车怎么编程序,再度追加分求基于单片机的智能跑车设计和代码

来源:整理 时间:2024-05-15 07:25:31 编辑:黑码技术 手机版

本文目录一览

1,再度追加分求基于单片机的智能跑车设计和代码

===================================================== 最新更新: 详细的设计和主流程图,电路原理图, 以及下面几块修改后的代码也已经发给你了: PID算法 数据采样模块 上电控制 CCD控制模块 主程序框架 初步验证没有什么问题,剩下的你来做,实机调试有问题再联络。 ===================================================== ============================================================= 详细的电路原理图,软件架构图和系统原理图已经发给你了。 另外, 下面几块的代码也已经发给你了: PID算法 数据采样模块 上电控制 CCD控制模块 主程序框架 这周末,我将会进行一些调试和完善,争取周一将我这里的代码发给你。

再度追加分求基于单片机的智能跑车设计和代码

2,基于51单片机的红外传感竞速智能小车程序

我做过一个寻一条黑线的智能小车,按照你的问题一个个给你些建议吧。1. 我个人认为寻一条黑线和寻两条黑线在原理上应该是没有差别的,都是用对管来检测黑线和小车的偏差,从而知道小车当前的位置,不过常见的都是寻一个道路中间的黑线。至于程序控制上可以参考网上成熟的方案,都是根据传感器检测到黑线后来判断当前小车偏离黑线的位置,从而控制左右电机产生速度差(或者直接用舵机转向)来修正小车姿态。2. PID是一个很高深也很简单的玩意,原理很简单,能够用好却不容易。小车上主要是为了稳定小车的速度,这对电机的响应速度,码盘的精度,单片机的处理速度都有一定的要求,网上有很多成熟的PID算法,加上一些前辈们做过的寻线小车PID案例,剩下的就是PID的参数问题了。3. L298N是作为电机的控制器件(PID的输出量),舵机可以控制小车转向,红外对管是为了检测黑线的位置,测速码盘检测当前电机转速(PID控制的输入量)。整体可以分为两个程序部分:(1)主程序部分:对管检测黑线的位置-》单片机判断小车姿态-》舵机转向调整小车姿态-》回到起始部分循环。(2)PID部分:码盘检测电机转速-》单片机进行PID运算-》输出速度控制量给L298N-》控制电机转动-》回到起始部分循环。

基于51单片机的红外传感竞速智能小车程序

3,在arduino上编写程序做智能小车要调用哪些程序

int outputPin = 5;int inputPin = 4;int cmdPin = 3;int pinI1=8;//定义I1接口int pinI2=9;//定义I2接口int speedpin1=11;//定义EA(PWM调速)接口int pinI3=6;//定义I3接口int pinI4=7;//定义I4接口int speedpin2=10;//定义EB(PWM调速)接口int average_speed_l = 150;int average_speed_r = 100;int speed_limit_l = 80;int speed_limit_r = 60;int target_distance = 30;//in cmint lost_distance = 80;float detect_distance() digitalWrite(outputPin, LOW); // 让超声波发射低电压2μs delayMicroseconds(2); digitalWrite(outputPin, HIGH); // 让超声波发射高电压10μs,这里至少是10μs delayMicroseconds(10); digitalWrite(outputPin, LOW); // 维持超声波发射低电压 float Fdistance = pulseIn(inputPin, HIGH); // 读差相差时间 Fdistance= Fdistance/5.8/10; // 将时间转为距离距离(单位:公分) Serial.print("F distance:"); //输出距离(单位:公分) Serial.println(Fdistance); //显示距离 return Fdistance;}void rightSpeed(int speed_r) if(speed_r < speed_limit_r) speed_r = 0; } analogWrite(speedpin1,speed_r);//输入模拟值进行设定速度 digitalWrite(pinI1,HIGH);//使直流电机(左)顺时针转 digitalWrite(pinI2,LOW);}void leftSpeed(int speed_l) if(speed_l < speed_limit_l) speed_l = 0; } analogWrite(speedpin2,speed_l);//输入模拟值进行设定速度 digitalWrite(pinI3,LOW);//使直流电机()顺时针转 digitalWrite(pinI4,HIGH);}void stop_l() digitalWrite(speedpin2,LOW);//输入模拟值进行设定速度 digitalWrite(pinI3,LOW);//使直流电机()顺时针转 digitalWrite(pinI4,LOW);}void stop_r() digitalWrite(speedpin1,LOW);//输入模拟值进行设定速度 digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转 digitalWrite(pinI2,LOW);}void turn_l() leftSpeed(100); rightSpeed(150);}void turn_r() leftSpeed(200); rightSpeed(80);}void noturn() leftSpeed(100); rightSpeed(80);}void rotate() leftSpeed(200); rightSpeed(0);}void setup() Serial.begin(9600); pinMode(outputPin, OUTPUT); pinMode(inputPin, INPUT); pinMode(pinI1,OUTPUT); pinMode(pinI2,OUTPUT); pinMode(speedpin1,OUTPUT); pinMode(pinI3,OUTPUT); pinMode(pinI4,OUTPUT); pinMode(speedpin2,OUTPUT); pinMode(cmdPin, INPUT);}void loop() if(digitalRead(cmdPin) == LOW) float dis = detect_distance(); if(dis > lost_distance) while(true) rotate(); delay(100); stop_l(); stop_r(); delay(100); dis = detect_distance(); if(dis < lost_distance) break; } }else if(dis > target_distance) if(dis - target_distance > 2) turn_r(); }else noturn(); } } if(dis < target_distance) if(target_distance - dis > 2) turn_l(); }else noturn(); } } } }else stop_l(); stop_r(); } delay(100);}
楼主这活我也玩过。1、对于传感器不听话,很大可能是你的检测阈值设置得不是很好。2、一般来说你的传感器个数应该比较多,可能6~10个吧,如此多的信号不应该都进入中断,再说单片机也没那么多外部中断可给你用,建议所有信号加或门进入外部中断(可分为左边一组,右边一组,两个中断)。否则在主函数(更好的是,定时器)判断,这个信号最好连接到同一个端口上,如p0端口,通过位判断当前信号值。3、l298n功率芯片,如果要调速且是直流电机,一般是对其控制使能脚施加占空比变化的信号,以达到不同的驱动效果。如果是步进电机,则控制方式有所不同,请查阅相应文献。

在arduino上编写程序做智能小车要调用哪些程序

文章TAG:智能赛车怎么编程智能赛车怎么编程序

最近更新

相关文章