几个驱动轮的?可以用笨一点的方法 如果你是四轮车 你可以控制它直线高速四轮全动 低速动两个
转弯的话 高速可以正转一边反转 低速一边正转 另一边锁死 或者转一个 我比较笨 到现在都没学会pwm 所以只有这本办法了~
我用十三个对管,舵机控制转向,八个对管的话状态改下就行,给你参考下,不明白可以追问我,qq 181325995
#include<reg52h>
#define uint unsigned int
#define uchar unsigned char
uint i,count;
uchar pro; //驱动电机调速//
uchar finish=0;//停车标志
sbit le1=P1^0; //左边传感器//
sbit le2=P1^1;
sbit le3=P1^2;
sbit le4=P1^3;
sbit le5=P1^4;
sbit le6=P1^5;
sbit mid=P1^6;//中间传感器//
sbit ri6=P1^7;
sbit ri5=P2^3;
sbit ri4=P2^4;
sbit ri3=P2^5;
sbit ri2=P2^6;
sbit ri1=P2^7;//右边传感器//
sbit ENA=P2^0; //驱动电机pwm//
sbit moto1=P2^1; //电机控制//
sbit moto2=P2^2;
sbit PWM=P3^5; //舵机pwm//
sbit bz=P3^7;//蔽障管
init()
{
TMOD=0x11;//设定双定时器
EA=1;
TR0=1;
TR1=1;
TH0 = 0x0B1;//设定定时初始值,可去下载个定时器计算软件,
TL0 = 0x0E0;
TH1=(65536-100)/256;
TL1=(65536-100)%256;
ET0=1;
ET1=1;
ENA=1;
}
void delay(uint n)//延时函数
{
uchar a,b,c;
for(c=1;c>0;c--)
for(b=n;b>0;b--)
for(a=2;a>0;a--);
}
void delay2(uint z)
{
uchar a,b,c;
for(a=2;a>0;a--)
for(b=100;b>0;b--)
for(c=z;c>0;c--);
}
void qctyp(void) //光电管全无状态时(脱离轨道),读取前次状态
{
le1=P1^0;
le2=P1^1;
le3=P1^2;
le4=P1^3;
le5=P1^4;
le6=P1^5;
mid=P1^6;
ri6=P1^7;
ri5=P2^3;
ri4=P2^4;
ri3=P2^5;
ri2=P2^6;
ri1=P2^7;
}
void hhig(uint y)//前进函数
{
pro=y;//变量y是改变小车速度这里范围是0--39
moto1=1;
moto2=0;
}
void back(uint z)//后退函数
{
pro=z;//改变z 可改变行驶速度
moto1=0;
moto2=1;
}
void dj(uint m) //舵机控制
{
PWM=1;
delay(m); //改变m可改变舵机转向角度,
PWM=0;
}
黑标传感器循迹小车工作原理:传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块的输出端为低电平,指示二极管一直处于熄灭状态。
循迹小车的构成及用法
循迹小车可以分成三个部分组成,传感器部分,控制器部分,执行器部分。主要控制器部分,接受由传感器传输来的信息,进行判断后将控制信号发送给执行部分,通过传感器部分和执行部分的连接,编写程序来判断接收到的信息然后做出响应。
控制器部分接收传感器部分传递过来的信号,并根据事前写入的决策系统,来决定机器人对外部信号的反应,将控制信号发给执行器部分,传感器部分机器人用来读取各种外部信号的传感器,以及控制机器人行动的各种开关。
执行器部分:驱动机器人做出各种行为,包括发出各种信号的部分,并且可以根据控制器部分的信号调整自己的状态。
要准的话就是你的小车寻迹的时候灵敏度高,碰到什么样的路况都有办法做出相应的判断,这主要是看你用什么方式寻迹(比如用红外传感器),以及你如何利用传感器来寻迹(一般就是外部中断和查询,查询的响应肯定是不如中断快的,当然也要看你中断的资源够不够),还有程序的逻辑上是如何判断的;
要快的话就是驱动你的轮子跑得快,这和你的硬件很有关系,,,看你用什么电机,什么方式驱动电机了,无非是用程序找到一种电机转的最快的方法,然后结合上面的寻迹方式(复杂路况如十字路口,不同曲率的弯道,直角弯,锐角弯等)还有就是你的电源供电也挺重要的。
循迹小车终点黑线停下步骤如下。
1、如果是只有中间的红外感应模块感应到黑线,那么小车直走,即两个轮子都前转。
2、而当三个红外模块都没有检测到黑线,则小车转圈。
3、如果同时三个检测到黑线,则小车停止,这个条件是为了模拟终点全是一大坨黑块而设计的,但是在T字路口可能出现误判。
4、针对此问题,我们暂时想到的解决办法是把两侧的红外感应模块往两边移动,中间的保持不动,使得三个感应模块不在同一条水平线上时,可避免误判的可能。
工作原理:红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。
通常循迹小车前方具有两只光电管,而循迹的原理是利用所谓印迹和道路的光线反差来实现控制。比方印迹为黑色,两只光电管全部照射在黑色印迹上面证明车辆循迹正常两个车轮同等转速。照射的左面光电管偏差出现照射到白色路面,则控制反馈令左面车轮加速,其作用相当于向右转。当两个光电管全部接收黑色信号,又回到两个车轮等速前进。右面光电管照射到白色路面,右面车轮加速,作用相当于向左转。通过两只光电管的反复不断修正实现循迹作用。假如想看书学习,近年的无线电杂志具有大量的资料。
初期做这个,左右摇摆是必然的。 因为其本身的循迹方式就是开关式的! 传感器的得到的信息只有两种要么在左边,要么在右边。具体的不知道小车在线的左边多少,右边多少,导致不能让小车拐大弯与拐小弯,只能让车拐。就导致了其左右的摇摆。
如果想不让其摇摆,可以加成一排红外管,虽然不能像摄像头或者ccd得到连续的信息。但是可以进行相对的转向细分。 知道是大偏差还是小偏差。使之连续路线。当然这个跟机械的红外的间隔等等都有关系。
延时效果,我认为我不加延时为好,本来就有可能丢线呢,还加延时。 延时可能是为了拐固定的角度,比如90度 180度,利用延时可以粗略的控制。
以上就是关于求一个智能小车实现电机调速(尽量使速度降低)、循迹避障功能的C程序。全部的内容,包括:求一个智能小车实现电机调速(尽量使速度降低)、循迹避障功能的C程序。、tcrt5000的小车循迹模块怎么用51单片机编程。、黑标传感器循迹小车工作原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)