文档详情

基于51单片机的无线遥控小车

飞***
实名认证
店铺
DOC
12.38MB
约46页
文档ID:42025429
基于51单片机的无线遥控小车_第1页
1/46

智能小车摘要 智能小车利用单片机STC10F08XE作为控制核心,使用红外线发射和接收器件、接近反射式光电感应器件、编码解码芯片和无线收发模块,实现智能小车的红外探测避障以及循迹功能,遥控小车的运动轨迹,用单片机输入/输出接口控制伺服电机方向、速度和运行时间,模块化结构保证了小车成为一个可靠整体,软件采用C语言编程,完成小车所要实现的功能关键词:单片机 STC10F08XE 红外避障 循迹 遥控 伺服电机第一章:智能小车总体设计结构及硬件模块设计1.1 总体设计结构1.2 智能小车硬件模块第二章:智能小车各模块电路设计2.1 红外避障模块2.1.1 检测原理2.1.2 红外检测原理图2.1.3 测试红外发射探测器2.1.4 红外避障程序2.2循迹模块2.2.1循迹原理2.2.2循迹原理图2.2.3 小车的循迹程序2.2.4红外避障及循迹程序流程图2.2.5 红外避障及循迹程序程序代码2.3 无线遥控模块2.3.1 无线遥控原理2.3.2 .PT2262/2272 编码解码集成电路2.3.3 T10A 发射模块2.3.4 XY-R04A 接收模块2.3.5 无线遥控原理图2.3.6 无线遥控控制程序第一章:智能小车总体设计结构及硬件模块设计1.1总体设计结构智能小车采用STC单片机集中控制和分散模块化设计。

智能小车硬件由STC单片机开发板,红外检测模块组、轨迹检测模块以及无线遥控模块组成,智能小车采用左右两个伺服电机,高电平持续的时间控制电机运动转速智能车前下端4组检测灯对黑线的反馈信号,通过单片机控制伺服电机的转动前端的两组红外检测灯对障碍物进行检测,通过单片机P2口的低四位对遥控信号进行检测小车的机械结构设计:为了保证小车能够进行循迹,同时避免外界光的干扰,我们将道路检测电路板放在小车底盘的前端,红外避障模块放在小车的前部,无线接收模块放在小车的尾部,单片机控制板放在小车的正上方保持小车的平衡性,小车的主动轮为前端两个,从动轮为后面一个,电池放在两个主动轮之间,这样的整体设计既可以保持重心尽量在一条竖直线上又方便电源的开关,使小车转弯时的转动惯量减小,增强其稳定性 1.2智能小车硬件模块智能小车主要机构——从侧面观察各板的排列 各个模块附图如下: 红外避障模块红外循迹模块遥控发射端无线遥控接收端第二章:智能小车各模块电路设计电路的设计包括三个模块:红外避障模块,红外循迹模块,无线遥控模块2.1 红外避障模块 2.1.1 检测原理红外线二极管发射红外光,如果机器人前面有障碍物,红外线从物体反射回来,相当于机器人眼睛的红外检测(接收)器,检测到反射回的红外光线,并发出信号来表明检测到从物体反射回红外线。

51单片机基于这个传感器的输入控制伺服电机红外线(IR)接收/检测器有内置的光滤波器,除了需要检测的980 nm波长的红外线外,它几乎不允许其它光通过红外检测器还有一个电子滤波器,它只允许大约38.5 kHz 的电信号通过换句话说,检测器只接收每秒闪烁38,500次的红外光这就防止了普通光源象太阳光和室内光对IR的干涉太阳光是直流干涉(0Hz)源,而室内光依赖于所在区域的主电源,闪烁频率接近100或120 Hz由于120 Hz在电子滤波器的38.5 kHz通带频率之外,它完全被IR探测器忽略一组红外光电传感器包括有一个发射管和一个接收管当发射管照射到障碍物时,大部分红外光都会返回给接收管,接收管输出为低电平;反之,当红外发射管前方无障碍物时,光线几乎没有被返回,那么接收管就不会接收到足够反射回来的光线,接收管输出高电平输出的高低电平经IO口接入STC中,再通过程序的控制,使得小车作出相应的动作 2.1.2 红外检测原理图元件清单:(1) 两个1938(红外探测器)(2) 两个EL-1L1(红外LED)(3) 四个470Ω电阻(4) 两个9013三极管说明:因为STC的IO驱动能力较弱,这里我们加入三极管使其工作在开关状态来增强驱动能力。

本任务中用到的是NPN型三极管9013, 当单片机的IO口输出高电平时,三极管导通,IRLED可发出红外光;反之,当IO口输出低电平时,三极管截止,IRLED不能发射红外光2.1.3红外发射探测器应用应用说明让每个IR LED 探测器组工作的关键是发送1毫秒频率为38.5 kHz的红外信号,然后立刻将IR探测器的输出存储到一个变量中可以给P1_3输出的信号高电平13微秒,低电平为13微秒,总周期为26微秒,即频率约为38.5kHz当没有红外信号返回时,探测器的输出状态为高当它探测到被物体反射的38500Hz红外信号时,它的输出为低因红外信号发送的持续时间为1毫秒,因此IR探测器的输出如果处于低,其持续状态也不会超过1毫秒,因此发送完信号后必须立即将IR探测器的输出存储到变量中这些存储的值即可表示前方是否有障碍物由此,可以实现智能小车的红外避障功能电路测试程序如下:#include void delay_nus(unsigned int i) //延时,单片机为STC10F08XE { i=i*10/12;while(--i); } void Hardware_delay_1ms(void) {TMOD TMOD |=0x01; //T0--16位定时器器模TH0 = 0xFC;TL0 =0x18; //64536TF0=0; //清除定时器溢出标志TR0=1; //启动定时器 while(TF0==0);//等待计数完成TR0=0; //停止定时器 } void delay_nms(int n) {int j;for(j=n;j>0;j--)Hardware_delay_1ms(); } int P3_5state(void) { return (P3 //返回P1_2的状态 } int main(void) { int counter; int irDetectLeft; uart_Init(); //串口初始化printf(“Program Running!\n“); while(1) { for(counter=0;counter #define LeftIR P1_2 //左边红外接收连接到P1_2 #define RightIR P3_5 //右边红外接收连接到P3_5 #define LeftLaunch P1_3 //左边红外发射连接到P1_3 #define RightLaunch P3_6 //右边红外发射连接到P3_6void delay_nus(unsigned int i) { i=i*10/12;while(--i); } void Hardware_delay_1ms(void) {TMOD TMOD |=0x01; //T0——16位定时器器模TH0 = 0xFC;TL0 =0x18; //64536TF0=0; //清除定时器溢出标志TR0=1; //启动定时器 while(TF0==0);//等待计数完成TR0=0; //停止定时器 }void delay_nms(int n) //延时ms {int j;for(j=n;j>0;j--)Hardware_delay_1ms(); } void IRLaunch(unsigned char IR) { int counter; if(IR=='L') //左边发射 for(counter=0;counter#define LD1 P1_2; //左左检测灯 #define LD2 P1_3; //中左检测灯 #define RD1 P3_5; //中右检测灯 #define RD2 P3_6; //右右检测灯void delay_nus(unsigned int i) { i=i*10/12;while(--i); } void Hardware_delay_1ms(void) {TMOD TMOD |=0x01; //T0——16位定时器器模TH0 = 0xFC;TL0 =0x18; //64536TF0=0; //清除定时器溢出标志TR0=1; //启动定时器 while(TF0==0);//等待计数完成TR0=0; //停止定时器 }void delay_nms(int n) {int j;for(j=n;j>0;j--)Hardware_delay_1ms(); }void Forward(void) //向前行走子程序 { P1_1=1; delay_nus(1440); P1_1=0; P1_0=1;delay_nus(1400); P1_0=0; delay_nms(20); }void Left_Turn(void) //左转子程序 { int i; for( i=1;i sbit LD1=P1^2; //左左检测灯 sbit LD2=P1^3; //中左检测灯 sbit RD1=P1^4; //中右检测灯 sbit RD2=P1^5; //右右检测灯sbit LeftIR=P3^5; //左边红外接收连接到 P3_5 sbit RightIR=P3^6; //右边红外接收连接到 P3_6 sbit LeftLaunch=P2^3; //左边红外发射连接到 P2_3 sbit RightLaunch=P2^4; //右边红外发射连接到 P2_4void delay12us(void) //延时 12us,误差 -0.064236111111us {unsigned char a,b;for(b=9;b>0;b--)for(a=2;a>0;a--); }void delay_nus(unsigned int i) //延时,单片机为 STC10F08XE { i=i*10/12;while(--i); } void Hardware_delay_1ms(void) {TMOD TMOD |=0x01; //T0——16 位定时器器模TH0 = 0xFC;TL0 =0x18; //64536TF0=0; //清除定时器溢出标志TR0=1; //启动定时器 while(TF0==0);//等待计数完成TR0=0; //停止定时器 }void delay_nms(int n) {int j;for(j=n;j>0;j--)Hardware_delay_1ms(); }void IRLaunch(unsigned char IR) { int counter; if(IR=='L') //左边发射 for(counter=0;counterchar receive; //接收到的数据 int counter;void delay_nus(unsigned int i) { i=i*10/12;while(--i); } void Hardware_delay_1ms(void) {TMOD TMOD |=0x01; //T0--16 位定时器器模TH0 = 0xFC;TL0 =0x18; //64536TF0=0; //清除定时器溢出标志TR0=1; //启动定时器 while(TF0==0);//等待计数完成TR0=0; //停止定时器 }void delay_nms(int n) {int j;。

下载提示
相似文档
正为您匹配相似的精品文档