循迹、红外避障、遥控综合程序
智能小车循迹、避障、红外遥控C语言代码
智能小车循迹、避障、红外遥控C语言代码//智能小车避障、循迹、红外遥控 C 语言代码// 实现功能有超声波避障,红外遥控智能小车,红外传感器实现小车自动循迹, 1602 显示小车的工作状态,另有三个独立按键分别控制三种状态的转换// 注:每个小车的引脚配置都不一样,要注意引脚的配置,但是我的代码注释比较多,看起来比较容易一点#include <> #include <> #include"" #include <> #define uchar unsigned char #define uint unsigned int uchar ENCHAR_PuZh1[8]=" uchar ENCHAR_PuZh2[8]=" uchar ENCHAR_PuZh3[8]=" uchar ENCHAR_PuZh4[8]=" uchar ENCHAR_PuZh5[8]=" run back stop left right "; ";//1602 显示数组H. H. H. uchar ENCHAR_PuZh6[8]=" xunji "; uchar ENCHAR_PuZh7[8]=" bizhang"; uchar ENCHAR_PuZh8[8]=" yaokong"; #define HW P2 #define PWM /****************************** P1 //红外传感器引脚配置P2k 口/* L298N 管脚定义*/ 超声波引脚控制******************************/ sbit ECHO=P3A2; sbit TRIG=P3A3;///// 红外控制引脚配置 sbit sbituchar KEY2=P3A7; KEY 仁 P3M;state_total=3,state_2=0;// 2 为红外遥控 ucharuchar time_1 uchar 局变量 // 超声波接收引脚定义 // 超声波发送引脚定义// 红外接收器数据线 // 独立按键控制总状态控制全局变量 state_1,DAT; // 红外扫描标志位time_1=0,time_2=0;// 定时器1 中断全局变量控制转弯延时计数也做延时一次time,timeH,timeL,state=0;// 超声波测量缓冲变量count=0;//1602 显示计数兼红外遥控按键state_total =2 兼循迹按键state_total= 0 自动避障 state_total=10 为自动循迹模块 1 为自动避障模块 time_ 2 控制 PWM 脉冲计数state 为超声波状态检测控制全uint /**************************/ unsigned char IRC0M[7]; // 红外接收头接收数据缓存unsigned char Number,distance[4],date_data[8]={0,0,0,0,0,0,0,0}; /********* voidvoid voidIRC0M[2 ]存放的为数据 // 红外接收缓存变量 **/ IRdelay(char x); //x* 红外头专用 delay run(); back();void stop(); void left_90(); void left_180(); void right_90(); void delay(uint dat); //void init_test();void delay_100ms(uint ms) ;void display(uchar temp); void bizhang_test(); void xunji_test(); void hongwai_test();void Delay10ms(void);void init_test()// 定时器 0{ 1 外部中断 // 超声波显示驱动 0 1 延时初始化 TMOD=0x11; TH1=0Xfe; TL1=0x0c; TF0=0; TF1=0; ET0=1; ET1=1; EA=1;// 设置定时器 0 1 // 装入初值定时一次为工作方式 1 16 位初值定时器2000hz// 定时器 // 定时器 // 允许定时器// 允许定时器 0 方式 1 计数溢出标志 1 方式 1 计数溢出标志 0 中断溢出 1 中断溢出//开总中断 if(state_total==1)// 为超声波模块时初始化 {TRIG=0; ECHO=0; EX0=0; IT0=1;}if(state_total==2)// 发射引脚低电平 // 接收引脚低电平 // 关闭外部中断// 由高电平变低电平,触发外部中断 0// 红外遥控初始化{ IT1=1; EX1=1;TRIG=1;}del ay(60);} void main(){ uint i; delay(50); init_test(); TR1=1; LCD1602_Init() ; delay(50); while(state_2==0)// 外部中断 1 为负跳变触发 // 允许外部中断 1 // 为高电平 I/O 口初始化// 等待硬件操作// 开启定时器 1{if(KEY1==0){Delay10ms(); // 消除抖动 if(KEY1==0) {state_total=0; // 总状态定义 0 为自动循迹模块 1 为自动避障模块2 为红外遥控while((i<30)&&(KEY1==0))// 检测按键是否松开{Delay10ms(); i++;}i=0;}}if(TRIG==0){while((i<30)&&(TRIG==0))// 检测按键是否松开{Delay10ms(); i++;}i=0;}if(KEY2==0){while((i<30)&&(KEY2==0))// 检测按键是否松开{Delay10ms(); i++; }i=0;// 检测按键 s1 是否按下//检测按键s2是否按下障模块Delay10ms(); // 消除抖动 if(TRIG==0) { state_total=1; 2 为红外遥控//总状态定义 0 为自动循迹模块 1 为自动避// 检测按键 s3 是否按下障模块Delay10ms(); // 消除抖动 if(KEY2==0) { state_total=2; 2 为红外遥控// 总状态定义 0 为自动循迹模块1 为自动避}}} init_test();delay(50); // 等待硬件操作50us TR1=0; // 关闭定时器 1 if(state_total==1) {//SPEED=90; bizhang_test();} if(state_total==0) {// SPEED=98; 电平// 自动循迹速度控制// 自动循迹速度控制高电平持续次数占空比为10 的低电平高电平持续次数占空比为40 的低xunji_test(); }if(state_total== 2){//SPEED=98; // 自动循迹速度控制高电平持续次数占空比为40 的低电平hongwai_test(); }void 断号init0_suspend(void)2 外部中断0 4 串口中断外部中断 1timeH=TH0;timeL=TL0;state=1;EX0=0;}void 断号0{if(state_total==1) { TH0=0X00;TL0=0x00;}if(state_total==0) { TH0=0Xec;TL0=0x78;time_1++;interrupt 0 //3 为定时器 1 的中断号 1 定时器0 的中// 记录高电平次数//// 标志状态为// 关闭外部中断1,表示已接收到返回信号//3 为定时器 1 的中断号2 外部中断0 4 串口中断time0_suspend0(void) interrupt 1外部中断 1// 自动避障初值装入// 装入初值// 自动循迹初值装入// 装入初值定时一次200hz// 控制转弯延时计数1 定时器0 的中}}void IR_IN(void){unsigned char j,k,N=0;EX1 = 0; IRdelay(5); if (TRIG==1) { EX1 =1; return;}//确认IR 信号出现//等IR 变为高电平,跳过 9ms 的前导低电平信号。
智能小车(单片机格式)循迹 遥控 避障
西安科技大学自动寻迹及避障小车学院:电气与控制工程学院专业:测控技术与仪器学生:潘富强袁鑫朱明指导老师:侯媛彬陈毅静王建1西安科技大学摘要单片机应用技术飞速发展,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。
单片机是集CPU,RAM,ROM ,定时,计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
本文是基于单片机的智能小车设计,通过红外遥控、躲避障碍物功能,寻迹功能和测速功能来诠释智能小车的冰山一角,向大家展示智能小车的强大功能。
关键词:单片机,智能小车,红外遥控,躲避障碍物,寻迹,测速。
AbstractSCM application technology is developing rapidly from the missile's navigation devices, to the aircraft instrument control, computer network communications and data transmission, industrial automation process real-time control and data processing, as well as the widely used in a variety of intelligent life IC card, electronic pets, which are inseparable from the microcontroller. SCM is a set of the CPU, RAM, ROM, timing, counting and a variety of interfaces in one of the microcontroller. Its small size, low cost, functional, widely used in smart industries and industrial automation.Microcontroller-based intelligent car design, infrared remote control, to avoid obstacles feature, look for the trace function and speed function to interpret the tip of the iceberg of the smart car, to show a strong function of the smart car.Keywords:microcontroller, smart car, infrared remote control to avoid obstacles, tracing velocimetry.2西安科技大学目录第1章绪论 (4)1.1 智能小车成果 (4)1.2 智能小车发展 (4)1.3 本次智能小车设计 (4)第2章智能小车设计及器件介绍 (6)2.1 设计思路 (6)2.2 器件介绍 (7)2.2.1 主芯片STC89C52 (7)2.2.2 马达控制驱动芯片L9110 (8)2.2.3 MAX232 (9)2.2.4 OPTC光断续器 (9)2.2.5 液晶显示LM016L (9)第3章单元模块设计 (11)3.1 红外遥控及避障模块设计 (11)3.1.1 功能 (11)3.1.2 电路结构 (11)3.1.3 程序流程图 (11)3.1.4 实现效果 (13)3.2 寻迹模块设计 (13)3.2.1 功能 (13)3.2.2 电路结构 (13)3.2.3 程序流程图 (14)3.2.4 实现效果 (14)3.3 测速模块设计 (15)3.3.1 功能 (15)3.3.2 电路设计 (15)3.3.3 程序流程图 (16)3.3.4 实现功能 (16)小车附加功能 (17)设计总结 (18)参考文献 (19)附录一红外遥控及避障编程 (20)附录二寻迹编程 (28)附录三测速编程 (31)附录四元件清单 (39)附录五实物图 (40)3西安科技大学第1章绪论1.1 智能小车成果系统运用多重传感器与控制器良好的结合,系统可分为传感器检测部分,智能控制部分和电源模块。
自动寻迹避障轮式机器人--综合实验设计报告
专业综合实验设计报告项目:自动寻迹避障轮式机器人班级:电133姓名:学号:1312021067同组同学:学期:2016-2017-1一、实验目的和要求1.1实验目的自动循迹、智能避障机器人是一个与电气工程专业有着密切关系的实际工程装备,本综合实验以此为依托,把轮式机器人能够沿设置的道路路线运动作为控制目标,完成从模型建立、控制方案确定、控制参数仿真分析、硬件线路设计到实物机械安装、硬件安装调试、控制程序编写集成、系统调试等步骤过程的训练。
本实验涉及到《电路分析》、《电子技术》、《电力电子技术》、《电机学》、《电力拖动》、《自动控制原理》、《传感器与检测技术》、《电机控制技术》等课程的理论和实验知识。
是学生接触实际电气工程专业复杂工程问题的重要及关键途径。
通过实验培养学生实践动手能力,运用现代工程工具和信息技术工具的能力,分析和解决实际工程问题的能力。
从而使学生初步能够解决主要涉及电气工程专业知识的复杂工程问题。
1.2实验要求要求同学综合运用课程的理论和实验知识,以轮式机器人能够以一定的速度沿设置的道路路线运动作为控制目标(技术指标为:机器人行走速度≥1m/s,行走偏离导航线程度≤2/3车身宽度),要求完成从模型建立、控制方案确定、控制参数仿真分析、硬件线路设计到实物机械安装、硬件安装调试、控制程序编写集成、系统调试等实验步骤。
具体要求为:1)检索资料,对轮式机器人的发展状况,当前的研究热点,技术发展的现状,发展趋势有所了解,查阅工程规范文件、产品样本、使用说明,了解实际系统运行时必须遵守的工程规范和系统实现时所受到的商用产品的实际限制。
2)理解轮式机器人的机械结构,用CAD软件绘制机械零部件的加工图纸,安装轮式机器人。
3)综合运用物理特性分析法和实验参数测定法建立轮式机器人的数学模型,必要时在工作点附近近似线性化,以获得线性数学模型。
4)设计轮式机器人控制系统的硬件系统,包括控制芯片的选型,外围电路的设计,传感器类型型号的选择、功率驱动电路的选择、人机交互部件的选择,掌握所选择元器件、部件的性能、用法。
基于单片机的智能小车红外避障循迹系统设计与制作
基于单片机的智能小车红外避障循迹系统设计与制作随着科技的高速发展,人们对生活质量的要求越来越高,无人驾驶汽车已经被广为研发和试用,由此智能小车的快速发展也是在情理之中。
通过对基于单片机的智能小车的硬件及软件设计分析,实现红外避障循迹功能,并给出程序系统框图加以分析,最后通过实践证明这一设计的可行性和可靠性。
标签:AT89S52 单片机;智能小车;系统框图;红外避障;循迹1 系统总体设计2 系统的硬件设计与制作在智能小车红外避障循迹系統的设计上,其硬件设计主要在电机模块和传感器模块等这两个部分的内容。
2.1 硬件的设计硬件的设计主要体现在电机和传感器的选择上,在电机设计上采取360度伺服舵机,可以实现连续的速度与位移控制,且其本身存在分别负责伺服舵机的电源、接地、信号控制的红、黑、白三条输入线,还存在基准电路及比较器。
这一结构可以更好地实现智能小车的控制。
传感器的设计上选择了QTI红外传感器,通过接受不同的反射光强度,实现对不同颜色物体的探测,且探测QTI传感器能够自动输出不同的电平信号,为智能小车避障的实现提供了有力的保障。
2.2 硬件的制作硬件的制作主要介绍电路板的焊制及焊制方法,为智能小车的功能实现提供坚实的基础。
2.2.1 电路板的焊制电路板的焊制优劣直接影响到成果的效果展示,电路板的焊接内容主要是焊接电阻、电容、发光二极管、晶振、三极管、STM32、USB、三端稳压、电机驱动。
2.2.2 元件的焊制方法按照先焊一边再焊另一边的方法,先把焊锡丝放在焊盘的中间,放上电烙铁,焊锡丝融化后立马拿开焊锡丝,再拿开电烙铁,一定要注意焊锡的量不能过多也不能过少,一只手用镊子把贴片元件放平夹着,另一只手用电烙铁把焊盘上的焊锡融化,马上把贴片元件的一端推到焊锡处,再把元件的另一端焊盘焊上少量焊锡,推到元件的一端处。
由于元件种类较多,一般按照元件的大小从小到大的顺序焊接。
焊接完成后就可以进行组装,组装完毕后,组装过程中,要注意电源的正负极,不可接反。
基于51单片机的智能循迹避障遥控小车
12技术应用卫星电视与宽带多媒体基于51单片机的智能循迹避障遥控小车■空军预警学院 :谢菁【摘要】随着现代科技的迅速发展,智能化小车逐渐被应用到更多领域。
本设计的智能小车采用STC12C5A60S2单片机为主控芯片,以Keil μVision4软件为开发平台,经过软、硬件综合设计,小车可以实现红外遥控、红外循迹和超声波避障等功能。
【关键词】STC12C5A60S2单片机;红外遥控;直流电机;Keil μVision4引言目前,智能车发展速度迅猛,是融合了计算机、造型技术、传感技术、电子、机械、控制、人工智能等多个学科交叉的科技创新技术,在各个领域扮演着重要角色。
同时,在国家级、省级电子设计竞赛以及其它创新设计竞赛中几乎每次都能找到智能车类型题目的踪影,并且全国各类高校对该方向的题目研究也非常重视。
因此,具有广阔的应用前景和较大的研究意义。
在实践过程中,熟悉以单片机为核心控制芯片,采用智能控制算法实现小车的遥控、循迹和避障等功能。
一、总体方案设计本次设计采取的主控芯片是宏晶科技公司生产的STC12C5A60S2单片机。
硬件电路主要由五部分组成,分别为:单片机主控模块,电源模块、电机驱动模块、红外遥控模块、循迹检测模块和超声波避障模块。
如图1所示。
通过红外遥控系统的编/解码专用集成电路芯片来进行遥控操作;利用红外收发管,根据红外信号对不同颜色产生不同反射系数的原理,根据接收管输出电压的变化,单片机驱动直流电机来确定小车行走方向,进而实现循迹功能;利用超声波测量小车与障碍物之间的距离,再通过舵机控制超声波模块对不同方向的障碍物进行探测,将测试数据传送给单片机,单片机就可以根据传感器发来的信号发出命令让小车开始改变原始的方向,从而实现避障功能。
二、系统硬件部分(1)单片机控制模块由STC12C5A60S2单片机构成的最小应用系统如图2所示,主要由电源电路、复位电路、振荡电路和单片机4图1 系统总框图图2 单片机最小系统原理图13技术应用卫星电视与宽带多媒体个部分组成。
电子设计竞赛-寻迹避障一体小车-
循迹避障一体小车一)小车功能实现描述利用光电传感(红外对射管,红外发射与接收二极管组成)检测黑白线,实现小车能跟着白线(或黑线)行泄,同时也可避开障碍物,即小车寻迹过程中,若遇障碍物可自行绕开, 绕开后继续寻迹。
二)电路详细分析1.光电传感循迹光电传感器原理,利用黑白线对红外线不同的反射能力。
然后通过光敏二极管或光敏三极管,接收反射回的不同光强信号,把不同光强转换为电流信号,最后通过电阻,转换为单片机可识别的高低电平。
光电传感器实现循迹的基本电路如下图所示循迹传感器基本电路电路解释:TC端是传感器工作控制端,为高电平时,发光二极管不工作,传感器休眠,为低电平时,传感器启动。
Signal端为检测信号输出,当遇到黑线, 黑线吸收大量的红外线,反射的红外线很弱,光敏三极管不导通,signal输出高电平,当遇到口线,与黑线相反,反射的红外线很强,使光敬三极管导通,sign al输出低电平。
寻迹部分调整左右传感器之间的距离,两探头距离约等于口线宽度最合适,一般口线宽度选择范围为3 - 5厘米比较合适。
注意:该传感器的灵敏度是可调的,偶尔传感器遇到口线却不能送出相应的信号,通过调节传感器上的可调电阻,适肖的增大或减小灵墩度。
另外,循迹传感器的安放也算是比较有讲究的,有两种方法,一种是两个都是放置在白线内侧但紧贴口线边缘,笫二种是都放置在白线的外侧,同样紧贴白线边缘。
我们通常采用第二种方法。
编写程序使小车遇白线时,小车跟着白线走。
当小车先前前进时,如果向左偏离了白线。
那么右边传感器会产生一个低电平,单片机判断这个信号,然后向右拐。
回到口线后。
两传感器输出信号为高电平。
小车前进。
如果小车向右偏离白线,左边传感器产生一个低电平,单片机判断这个信号,然后向左拐。
如此如此,小车必不偏离口线。
若小车的两对光电传感器同时输出的信号为高电平(黑底)或低电平(白底),即单片机判断的都为高电平或低电平,小车向前直走, 在此过程中(直走)小车若遇白线,小车乂重复上面动作跟着白线走。
智能红外循迹小车程序
#include<reg52.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned longsbit you_2=P2^0;//红外探测端口定义sbit you_1=P2^1;sbit zhong=P2^2;sbit zuo_1=P2^3;sbit zuo_2=P2^4;sbit CG=P0^1;sbit DC=P0^0;uchar code L_F[8]= {0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};//左电机正转uchar code L_B[8]= {0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x10};//左电机反转uchar code R_F[8]= {0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//右电机正转uchar code R_B[8]= {0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//右电机反转uchar code B_F[8]= {0x91,0x83,0xc2,0x46,0x64,0x2c,0x38,0x19};//左反右正uchar code F_B[8]= {0x19,0x38,0x2c,0x64,0x46,0xc2,0x83,0x91}; //左正右反uchar code duandian[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//断电unsigned char code qianjin[]={0x11,0x33,0x22,0x66,0x44,0xcc,0x88,0x99};//前进unsigned char h[]={0x11,0x33,0x22,0x66,0x44,0xcc,0x88,0x99};//uchar i;void delay(uint z){uint k ;uint j;for(k=0; k<z; k++)for(j=0; j<110; j++);}void QJ(unsigned int i){for(i=0;i<8;i++){P1=h[i]=qianjin[i];delay(13);}}void DD(){P1=0x00;delay(300);}void wtj(){while(1){if(P2==0xff){DD();delay(1000);break;}else{QJ(8);}}}void YG_1(){unsigned char i;for(i=0;i<8;i++){P1=h[i]=F_B[i];delay(10);}}void ZG_1(){ unsigned char i;for(i=0;i<8;i++){P1=h[i]=B_F[i];delay(10);}}void byg(){while(1){if(P2==0xfb)break;else if(P2==0xf9)break;else if(P2==0xfd)break;/*if(P2^0==0)break;else if(P2^1==0)break;/*else if(P2^2==0)break;else if(P2^3==0)break;else if(P2^4==0)break;*/elseYG_1();}}void bzg(){while(1){if(P2==0xfb)break;else if(P2==0xf3)break;else if(P2==0xf7)break;/*if(P2^0==0)break;else if(P2^1==0)break;else if(P2^2==0)break;if(P2^3==0)break;else if(P2^4==0)break;*/elseZG_1();}}void YG_2(){//unsigned char i; //unsigned char g;if(P2==0xfa){//delay(4000); wtj();byg();/*for(g=0;g<40;g++){for(i=0;i<8;i++){P1=F_B[i];delay(20);}} */}else if(P2==0xf2){//delay(4000); wtj();byg();/*for(g=0;g<40;g++){for(i=0;i<8;i++){P1=F_B[i];delay(20);}}*/}else if(P2==0xf6){//delay(4000);byg();/*for(g=0;g<40;g++){for(i=0;i<8;i++){P1=F_B[i];delay(20);}}*/}else if(P2==0xf4){//delay(4000); wtj();byg();/*for(g=0;g<40;g++){for(i=0;i<8;i++){P1=F_B[i];delay(20);}}*/}else ;}void ZG_2(){//unsigned char i; //unsigned char g;if(P2==0xeb){//delay(4000); wtj();bzg();/*for(g=0;g<40;g++){for(i=0;i<8;i++){P1=B_F[i];delay(20);}}*/else if(P2==0xe9){//delay(4000); wtj();bzg();/*for(g=0;g<40;g++) {for(i=0;i<8;i++){P1=B_F[i];delay(20);}}*/}else if(P2==0xed){//delay(4000); wtj();bzg();/*for(g=0;g<40;g++) {for(i=0;i<8;i++){P1=B_F[i];delay(20);}}*/}else if(P2==0xe5){//delay(4000); wtj();bzg();/*for(g=0;g<40;g++) {for(i=0;i<8;i++){P1=B_F[i];delay(20);}}*/}else ;}void ZG(){unsigned char i;for(i=0;i<8;i++){P1=h[i]=R_F[i];delay(11);}}void YG(){unsigned char i;for(i=0;i<8;i++){P1=h[i]=L_F[i];delay(11);}}/*void HT(){unsigned char i;for(i=0;i<8;i++){P1=houtui[i];delay(55);}}*/void zd(){while(1){if(P2==0xe0)QJ(8);else if(P2==0xff){while(1){DD();}}else{QJ(80);if(P2==0xff){while(1){DD();}}else{DC=0;break;break;}}}}void zd1(){while(1){if(P2==0xe0)QJ(8);else if(P2==0xff){while(1){DD();}}else{QJ(80);if(P2==0xff)while(1){DD();}}else{DC=0;break;}}}}void hy(){unsigned char i;for(i=0;i<8;i++){P1=h[i];delay(10);}}void main(){DC=1;while(1){QJ(8);if(P2!=0xff){delay(9000);break;}}while(1){DC=1;if(CG==1){delay(9000);DC=1;while(1){switch(P2){case 0xfb:QJ(8);break;//11011case 0xf1:QJ(8);break;//10001case 0xf3:QJ(8);break;//10011case 0xf7:ZG();break;//10111case 0xe7:ZG_1();break;//00111case 0xef:ZG_1();break;//01111case 0xe3:ZG_1();break; //00011case 0xe1:ZG_1();break; //00001case 0xf9:QJ(8);break;//11001case 0xfd:YG();break;//11101case 0xfc:YG_1();break;//11100case 0xfe:YG_1();break;//11110case 0xf8:YG_1();break; //11000case 0xf0:YG_1();break;//10000case 0xfa://11010QJ(16);// delay(4000);YG_2();//f7 break;case 0xf2://10010QJ(16);// delay(4000);YG_2();break;case 0xf6://10110QJ(16);// delay(4000);YG_2();break;case 0xf4://10100QJ(16);// delay(4000);YG_2();break;case 0xeb://01011QJ(16);//delay(4000);ZG_2();//fd break;case 0xe9://01001QJ(16);//delay(4000);ZG_2();break;case 0xed://01101QJ(16);//delay(4000);ZG_2();break;case 0xe5://00101QJ(16);//delay(4000);ZG_2();break;case 0xe0:zd1();break;//00000case 0xff:hy();break;//11111default:QJ(8); break;}}}else{switch(P2){case 0xfb:QJ(8);break;//11011 case 0xf1:QJ(8);break;//10001case 0xf3:QJ(8);break;//10011 case 0xf7:ZG();break;//10111 case 0xe7:ZG_1();break;//00111 case 0xef:ZG_1();break;//01111 case 0xe3:ZG_1();break; //00011 case 0xe1:ZG_1();break; //00001case 0xf9:QJ(8);break;//11001 case 0xfd:YG();break;//11101 case 0xfc:YG_1();break;//11100 case 0xfe:YG_1();break;//11110 case 0xf8:YG_1();break; //11000 case 0xf0:YG_1();break;//10000case 0xfa://11010QJ(16);// delay(4000);YG_2();//f7 break;case 0xf2://10010QJ(16);// delay(4000);YG_2();break;case 0xf6://10110QJ(16);// delay(4000);YG_2();break;case 0xf4://10100QJ(16);// delay(4000);YG_2();break;case 0xeb://01011QJ(16);//delay(4000);ZG_2();//fd break;case 0xe9://01001QJ(16);//delay(4000);ZG_2();break;case 0xed://01101QJ(16);//delay(4000);ZG_2();break;case 0xe5://00101QJ(16);//delay(4000);ZG_2();break;case 0xe0:zd();break;//00000case 0xff:hy();break;//11111default:QJ(8); break;}}}}。
智能小车之红外循迹以及红外避障模块电路设计
智能小车之红外循迹以及红外避障模块电路设计红外寻迹模块
红外避障模块
一。
原理图
红外寻迹模块
红外避障模块
红外发射管,红外接收管
比较器LM393输出低电平时,绿色指示灯亮,输出高电平时绿色指示灯灭。
当3脚的电压大于2脚电压时输出高电平。
3脚的电压小于2脚电压输出低电平。
电位器用来调整反向输入端的电压。
原理图基本相同。
二。
红外避障模块
发射管一直在发射红外光,当前面的障碍物越近,反射回来的红外光越强,红外接收管的EC电压越接近0V,那么就会小于LM393的2脚的电压,LM393输出低电平,绿色指示灯亮。
在实际使用中红外接收管工作在放大区,也就是说C点的电压在不断的变化。
所以我们调节LM393的2脚的电压来改变灵敏度。
三。
寻迹模块
利用对不同颜色的障碍物对红外光的反射能力不同。
白颜色对红
外光的反射能力最强,黑色对红外光的反射能力最弱。
当寻迹模块在黒线上的时候蓝色指示灯灭,当寻迹模块不在黒线上的时候蓝色指示灯亮。
如何判断寻迹模块是偏左还是偏右呢?
就需要3个这样的模块,当偏离到黒线的左边时,左边的模块和中间的模块蓝色指示灯亮,右边的指示灯灭。
同理,当偏离到黑线右边时,右边和中间的模块蓝色指示灯亮,左边的指示灯灭。
调节电位器可以调节灵敏度。
越靠近桌面,3脚的电压越低,越远离桌面,3脚的电压越高。
四路红外循迹模块程序设计
四路红外循迹模块程序设计四路红外循迹模块是一种非常实用的电子产品,其主要功能是通过四个红外传感器来检测机器人或小车的轨迹,以便能够完成追踪或避障等任务,由此可见其在智能机器人领域中的广泛应用。
在进行程序设计时,需要考虑到以下几个方面:1.硬件连接首先需要将四路红外循迹模块连接到开发板上,并对其进行初始化操作。
通常情况下,四路红外循迹模块的引脚定义如下:#define IN1 2#define IN2 3#define IN3 4#define IN4 5此外,还需要定义模块的类型:#define TCRT5000 0#define TCRT5000L 12.传感器读取四路红外循迹模块正常工作时会对地面进行红外线照射,当地面上出现了黑色物体时,红外线将被吸收而无法被传感器接收,这时传感器的输出电平为高电平,反之则为低电平。
因此,我们可以通过读取四个传感器的输出电平来判断机器人或车辆前方的情况。
在读取传感器输出值时,需要使用Arduino的digitalRead函数,例如:int sen1 = digitalRead(IN1); //读取传感器1的输出值3.控制机器人或车辆运动根据四路红外循迹模块的读取结果,我们可以进行相应的机器人或车辆控制,以实现追踪、避障等功能。
具体来说,一些基本的控制语句如下://调整运动方向void turnLeft()digitalWrite(9, HIGH); digitalWrite(10, LOW); digitalWrite(11, HIGH); digitalWrite(12, LOW); }void turnRight(){digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, LOW); digitalWrite(12, HIGH); }void moveForward()digitalWrite(9, HIGH); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, HIGH); }void stop(){digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); }//判断路径void track(){int sen1 = digitalRead(IN1);int sen2 = digitalRead(IN2);int sen3 = digitalRead(IN3);int sen4 = digitalRead(IN4);if (sen1 == LOW && sen2 == LOW && sen3 == LOW && sen4 == LOW) {stop();}else if (sen1 == HIGH && sen2 == LOW && sen3 == LOW && sen4 == LOW) {turnLeft();}else if (sen1 == LOW && sen2 == HIGH && sen3 == LOW && sen4 == LOW) {turnLeft();}else if (sen1 == LOW && sen2 == LOW && sen3 == HIGH && sen4 == LOW) {turnRight();}else if (sen1 == LOW && sen2 == LOW && sen3 == LOW && sen4 == HIGH) {turnRight();}else {moveForward();}}以上代码片段就是四路红外循迹模块的核心控制程序,通过不断读取四个红外传感器的状态来调整机器人或车辆的运动方向,实现追踪或避障功能。
毕业设计+智能循迹避障小车设计
单片机系统课程设计轮式移动机器人的设计学院:通信与电子工程学院班级:电子131姓名:初清晨学号: 2013131013同组成员:孟庆阳张轩指导老师:王艳春日期: 2015年12月24日组员分工1、组长:张轩,实物焊接,报告整理,程序设计2、组员:孟庆阳,实物焊接,仿真测试,报告整理3、组员:初清晨,实物焊接,报告整理,仿真测试目录摘要 0第一章 绪论 (1)1.1智能小车的意义和作用 (1)1.2智能小车的现状 (2)第二章 方案设计与论证 (2)2.1 主控系统 (2)2.2 电机驱动模块 (3)2.3 循迹模块 (4)2.4 避障模块 (5)2.5 机械系统 (6)2.6电源模块 (6)第三章 硬件设计 (6)3.1 AT89S52单片机的简介 (7)3.2总体设计 (10)3.3驱动电路 (11)3.4信号检测模块 (12)3.5主控电路 (13)第四章 软件设计 (14)4.1主程序框图: (14)4.1 主程序图 (14)4.2电机驱动程序14 4.34.4结束语致谢附录一 附录二摘要随着计算机、微电子、信息技术的快速进步,智能化技术的开发速度越来越快,智能度越来越高,应用范围也得到了极大的扩展。
智能作为现代的新发明,是以后的发展方向,它可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等用途。
智能电动小车就是其中的一个体现。
设计者可以通过软件编程实现它的行进、循迹、停止的精确控制以及检测数据的存储、显示,无需人工干预。
因此,智能电动小车具有再编程的特性,是机器人的一种。
本设计采用AT89S52单片机加电机驱动电路和红外遥控及循迹模块还有红外接收一体化传感器设计而成,采用模块化的设计方案,运用红外遥控器控制小车的前进、后退、左转、右转、启动和停止。
关键词:智能小车;STC89C52单片机;L9110;红外对管Intelligent tracking and obstacle-avoid carAbstract:Based infrared detection of black lines and the road obstacles, and use a STC89C52 MCU as the controlling core for the speed and direction, A electronic drived, which can automatic track and avoid the obstacle, was designed and fabricated. In which, the car is drived by the L298N circuit, its speed is controlled by the output PWM signal from the STC89C52. Keywords: Smart Car; STC89C52 MCU; L298N; Infrared Emitting Diode第一章绪论1.1智能小车的意义和作用自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。
基于51单片机的红外遥控-自动避障-贴墙行走-人体感应智能小车机器人
基于51单片机的红外遥控-自动避障-贴墙行走-人体感应智能小车机器人队员1姓名:周葛学院:仪器科学与电器工程学院专业:测控技术与仪器年级:大一教学号:65130109邮箱:zhouge94@队员2姓名:成妍学院:药学院专业:生物医学工程(再生医学)年级:大一教学号:73130430邮箱:lianyungangcheng@作品类别:基本电子技术应用类目录一、引言 (1)二、总体设计 (1)三、单元电路设计 (2)1)单片机最小驱动模块 (2)2)红外接收模块 (3)方案选择 (3)方案确定 (3)理论分析与方案论证 (3)3)电机驱动模块 (4)4)避障循迹贴墙模块 (5)方案选择 (5)方案确定 (5)理论分析与方案论证 (6)5)电源模块 (7)6)人体感应模块 (7)四、软件设计 (8)五、整体测试 (8)六、结论 (9)【参考文献】 (9)【附录】 (10)源程序 (10)一、引言以STC89C52单片机为核心,制作一款红外线遥控小车,小车具有自动驾驶、手动驾驶和循迹前进等功能。
自动驾驶时,小车在前进过程中可以自动躲避障碍物。
手动驾驶时,可以手动遥控小车前进、后退、左转、右转、加速等操作。
寻迹时小车可以按轨迹前进。
红外遥控的特点是利用红外线进行点对点通信的技术,不影响周边环境,不干扰其他电器设备。
室内近距离(小于10米),信号无干扰、传输准确度高、体积小、功率低的特点,遥控中得到了广泛的应用。
本系统采用成品红外发射遥控器,具有21个按键,采用NEC红外传输协议。
接收端使用1838一体化接受头,通过单片机中断程序处理红外信号。
二、总体设计本系统由硬件和软件两部分组成。
硬件部分由红外线接受电路,控制电路,直流电机驱动,障碍物检测电路,人体感应电路五部分组成,完成红外编码信号的接受,直流电机的驱动,障碍物检测、墙体检测、地面检测,人体感应检测等功能。
软件部分主要完成信号的检测和处理、直流电机的控制,障碍物的规避等功能。
智能小车的循迹避障行驶说明书
智能小车的循迹避障行驶目录摘要 (III)Abstract (IV)第一章绪论 (1)1.1 课题背景 (1)1.2 研究目的及意义 (1)1.3 本设计完成的工作 (2)第二章总体设计方案 (3)2.1 方案选择及论证 (4)4446662.2 最终方案 (7)第三章硬件设计 (8)3.1 主控器STC89C52 (8)3.2 单片机复位电路设计 (10)3.3 单片机时钟电路设计 (10)3.4 避障模块 (10)3.5 电源设计 (11)3.6 电机驱动模块 (12)3.7 红外循迹模块 (13)3.8 小车车体总体设计 (15)第四章软件设计 (16)4.1 主程序流程图 (16)第五章系统的安装与调试 (18)5.1 系统的安装 (18)5.2 电路的调试 (19) (20)205.3 测试结果与分析 (20)结论 (21)参考文献 (22)致谢........................................................ 错误!未定义书签。
附录1 整机电路原理图.. (22)附录2 部分源程序 (23)智能小车的循迹避障行驶摘要在现代化的生产生活中,智能机器人已经渐渐普及到国防、工业、交通、生活等各个领域。
为了使生产更加有效率更加安全,使生活更加方便、轻松,智能机器人起到了越来越重要的作用。
智能小车属于智能机器人的一种,同样能给生产生活带来极大的便利。
它能够自己判断路面情况,并将各种信息反馈给单片机。
所用到的学科有自动控制原理、传感器技术、计算机和信息技术等多门学科。
智能车能够在一定程度上解放人的双手、减小工作强度从而改善人们的生活,提高生产的质量和效率。
能够自动循迹和避绕障碍物行驶则是智能小车需要的最基本的功能。
小车之所以能够自动避开障碍物并进行循迹是因为它可以感测引导线和行进路上的障碍物,因此这里采用超声波测距模块和红外传感器来实现这些功能。
本文先介绍了选题的背景及发展前景,描述了智能车在生产和生活中发展和应用的情况;接着对硬件部分所用器件的原理和特点进行了介绍;然后对软件设计和机械部分进行说明;在文章的最后就整个过程的体会及智能机器人的发展进行了总结和展望。
智能循迹、避障遥控小车设计
智能循迹、避障遥控小车设计摘要:本文设计了一款以STM32单片机为控制核心的智能小车,智能小车主要采用高灵敏度的光电管,对路面黑色轨迹进行检测,并利用单片机产生PWM波,控制小车速度。
能够平稳跟踪给定的路径实现循迹的目的。
整个系统基于普通玩具小车的机械结构,并利用了小车的底盘、前后轮电机及其自动复原装置,能够平稳跟踪路面黑色轨迹运行。
若遇到障碍物,通过检测障碍物离自己的距离来判断自己是前进、后退还是左转、右转,最终达到避障的目的。
1、背景及意义近年来人工智能技术的快速发展,智能小车技术也已经发展到可以模仿人类行为程度,主要是因为自动化生产设备越来越精密,它不仅给传统产业带来了翻天覆地的变化,而且提高了我们生活生产的质量。
智能小车具有自动循迹、避障和可控行驶等诸多功能,可以在不同环境完成工作,智能小车在各个行业都有不错的应用价值。
例如,在日常生活中,智能小车可以像导盲犬那样给盲人指引正确的道路。
在军事方面,智能小车可以代替我们在危险区域的排雷和侦察等任务。
在科学研究中,智能小车可以在外星球上完成探索或返回照片。
另外,它可以帮助人们在复杂的环境中执行设备检查和货物处理等任务。
2、智能小车硬件设计小车通过红外探测法实现循迹功能,红外接收装置和发射装置实现避障功能,红外传感器实现测速功能,超声波系统实现测距。
车轮应用了PWM调速系统和L298N芯片来控制调速和车轮旋转,还有用液晶显示模块LCD1602来显示小车基本情况。
通过c语言完成对小车行动指令的编程,实现小车按照设定路线行驶、避障。
智能小车硬件设计主要是电源模块设计、单片机最小系统的设计、循迹模块设计、避障模块电路设计以及遥控电路设计等。
电源模块设计主要为单片机最小系统以及需要的外围电路中用到的芯片进行供电,供电电压为+5V,因此需要一个恒定+5V的稳压电源,本文中主要是通过直流稳压电源7805输出恒定电源的方式来进行设计,输入电源电压为36V一下,交直流方式均可,直流电源模块电路图如图1所示图1 电源模块部分电路图单片机最小系统采用了传统的STM32最小系统的设计,包含电源滤波部分、晶振部分电路、复位电路等,为最常用的电路,在此不再进行赘述。
基于单片机的智能小车设计(红外避障及循迹)
轮式移动机器人的设计报告单片机系统课程设计智能小车(避障及循迹)的设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
循迹+遥控+避障小车结题报告
寻迹遥控避障的智能小车摘要:本智能小车是以有机玻璃为车架,51单片机为控制核心,加以步进电动机、发射式光电传感器和电源电路以及其他电路构成。
系统由51单片机通过IO口控制小车的前进后退以及转向。
寻迹由ST188光电传感器完成。
关键词:ATmage32L 直流电机光电传感器自动寻迹电动车Abstract: The smart car is aluminum alloy for the chassis, 51 MCU as its core, including stepper motor and servo, plus photoelectric sensors, as well as other flame sensor and power circuit. MCU controls the car turning back forward or running on the white line. RPR220 reflective photo sensor seeks the trace. Far infrared flame sensor tracks the flame. In addition, the SCM system with Sunplus for voice broadcast can remind current status. The system transmits information through DF module. The car’s status will be transmitted to the Remote Console..Keywords: 51MCU Stepper Motor Servo Photo sensor Electrical fire engines一、系统设计1、设计要求(1)自动寻迹小车从安全区域启动。
(2)小车按指定路线运行,自动区分直线轨道和弯路轨道,在指定弯路处拐弯,实现灵活前进、转弯、倒退等功能,在轨道上划出设定的地图。
单片机-智能循迹机器人说明书
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊目录第1章前言 (2)1.1 智能循迹机器人简介 (2)1.2 设计目的 (2)1.3 设计内容及要求 (2)第2章硬件设计及说明 (3)2.1 系统设计 (3)2.2 电机驱动部分 (4)2.3芯片AT89S51的内部资源及工作介绍 (4)第3章软件设计及说明 (6)3.1 软件系统流程图 (6)3.2 子模块的原理图及过做过程实验代码 (7)第4章智能循迹机器人的功能简介 (28)第 5章设计心得与体会 (29)参考文献 (30)┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊第1章前言1.1 智能循迹机器人简介单片机益智系类—智能循迹机器人是由益芯科技有限公司为科教方便而研发设计的。
根据现代学校对嵌入式系统开发的需求。
依据提高学生实际动手能力和思考能力,以加强学生对现实生活中嵌入式系统的应用为参照。
智能循迹机器人全新的设计模式,良好的电路设计,一体化的机电组合,智趣的系统开发,更是成为加强学生学习兴趣的总动源。
1.2 设计目的1.明确智能循迹机器人的设计原理。
2. 学会智能循迹机器人的组装、焊接方法。
3. 熟悉芯片AT89S51及各个子模块的使用方法,并掌握其工作原理。
4. 编写、调试各个应用程序,实现要求的各种功能。
5. 电子技术课程设计是学习电子技术十分重要的环节之一,对于巩固所学的电子技术理论知识,加强基本的技能训练具有明显的积极作用。
1.3 设计内容及要求1. 分析智能循迹机器人电路原理图、熟识各个电子元器件。
2. 主要技术要求:智能循迹机器人循迹避障、避悬崖、数码显示声控光控停止与行进及蜂鸣报警、红外线遥控等功能,3. 焊接、组装、调试智能循迹机器人4. 写出设计说明书、任务书。
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊第2章硬件设计及说明2.1 系统设计本组智能小车的硬件主要有以AT89S51作为核心的主控器部分、自动循迹部分、显示部分、电机驱动部分。
红外循迹方案
红外循迹方案简介红外循迹是一种常见的自动控制技术,应用于机器人、智能小车等设备中。
通过使用红外线传感器,机器人能够根据线路上的红外线信号来进行导航和循迹。
本文将介绍红外循迹方案的原理和实现方法。
红外循迹原理红外循迹方案的原理基于红外线传感器对环境中的红外线信号的感知和识别。
红外线传感器通常由发射器和接收器组成。
发射器发射红外线信号,接收器接收被物体反射的红外线信号。
通过测量接收到的红外线信号的强度,我们可以判断是否有障碍物存在。
在红外循迹中,通过安装多个红外线传感器在机器人底部,可以感测到线路上的红外线信号,并通过信号的强弱判断线路的路径。
当机器人离线路中心较远时,某一边的红外线传感器将感受到较强的信号,该边的电机将作出调整,使机器人向线路中心移动。
红外循迹的实现方法下面我们将介绍一种常见的红外循迹实现方法,以一个二轮差速驱动的智能小车为例。
材料准备在实现红外循迹方案之前,我们需要准备以下材料:•一个二轮差速驱动的智能小车底盘•红外线传感器模块(一般需要3个)•Arduino开发板•杜邦线•面包板和杜邦线套件•电池和电池盒硬件连接1.将红外线传感器模块连接到Arduino开发板上。
将每个传感器的输出引脚分别连接到Arduino的数字引脚上。
2.将Arduino开发板连接到智能小车的控制板上。
3.连接电池和电池盒,为智能小车供电。
软件编程我们可以利用Arduino开发板来编写控制智能小车的代码。
下面我们以使用红外线传感器进行红外循迹为例,做一个简单的控制程序。
// 引入红外线传感器库#include <IRremote.h>// 定义红外线传感器引脚const int leftSensorPin = 2;const int middleSensorPin = 3;const int rightSensorPin = 4;// 定义电机控制引脚const int leftMotorPin1 = 5;const int leftMotorPin2 = 6;const int rightMotorPin1 = 7;const int rightMotorPin2 = 8;// 创建红外线传感器对象IRrecv leftSensor(leftSensorPin);IRrecv middleSensor(middleSensorPin);IRrecv rightSensor(rightSensorPin);// 设置电机转向void setMotorDirection(bool leftForward, bool rightForward) {digitalWrite(leftMotorPin1, leftForward ? HIGH : LOW);digitalWrite(leftMotorPin2, leftForward ? LOW : HIGH);digitalWrite(rightMotorPin1, rightForward ? HIGH : LOW);digitalWrite(rightMotorPin2, rightForward ? LOW : HIGH);}void setup() {// 初始化红外线传感器leftSensor.enableIRIn();middleSensor.enableIRIn();rightSensor.enableIRIn();// 初始化电机引脚pinMode(leftMotorPin1, OUTPUT);pinMode(leftMotorPin2, OUTPUT);pinMode(rightMotorPin1, OUTPUT);pinMode(rightMotorPin2, OUTPUT);}void loop() {// 检测红外线传感器信号decode_results leftResults, middleResults, rightResults;if (leftSensor.decode(&leftResults) || middleSensor.decode(&middleR esults) || rightSensor.decode(&rightResults)) {// 根据信号强度判断方向bool leftForward = leftResults.value < 100;bool rightForward = rightResults.value < 100;// 控制电机转向setMotorDirection(leftForward, rightForward);// 重置红外线传感器leftSensor.resume();middleSensor.resume();rightSensor.resume();}}小车调试完成硬件连接和软件编程后,我们可以将代码上传至Arduino开发板,并将智能小车放在循迹线路上进行调试。
循迹、避障、寻光小车实验报告
简易智能小车摘要:本系统基于自动控制原理,以MSP430为控制核心,用红外传感器、光敏三极管、霍尔传感器、接近开关之间相互配合,实现了小车的智能化,小车完成了自动寻迹、避障、寻光入库、计时、铁片检测、行程测量的功能。
本系统采用液晶LCD12864显示数据,良好的人机交流界面,显示小车行程的时间、铁片中心线离起始线的距离和铁片的个数。
整个系统控制灵活,反应灵敏。
关键词:MSP430 传感器 LCD12864目录一、方案论证与比较 (3)1、题目任务要求及相关指标的分析 (3)2、方案的比较与选择 (3)(1)控制单元的选择 (3)(2)直流电机驱动电路的选择 (3)(3)轨迹探测模块选择 (3)(4)金属片的探测 (3)(5)路程测量方案的选择 (4)(6)避障方案的选择 (4)(7)小车寻光方案的选择 (4)(8)电源的选择 (4)(9)刹车机构功能方案比较 (5)二、系统总体设计方案及实现方框图 (5)1、系统总体设计方案 (5)2、系统实现框图 (5)三、理论分析与计算 (5)1、铁片中心线距离的测量 (5)2、小车行程时间的测量 (5)四、主要功能电路设计 (6)1、小车循迹模块 (6)2、小车检测铁片模块 (6)3、小车测距模块 (6)4、小车避障模块 (6)5、小车寻光模块 (6)6、直流电机驱动模块 (7)五、系统软件的设计 (8)六、测试量数据与分析 (8)1、测量数据 (8)2、数据分析 (8)参考文献 (8)一、方案论证与比较1.题目任务要求及相关指标的分析题目要求小车按照规定的跑道行驶,同时检测在跑道下的铁片,在检测到最后一块铁片时小车会有连续的声光显示;后又可以准确的避开障碍,而且不与障碍物接触;最后,在光源的引导下,进入车库。
智能小车有显示功能,可以显示检测到铁片的数量,金属片距起点的距离,行驶的总时间。
整个行驶过程中的总时间不大于90秒,小车在行驶90秒后会自动停车。
2. 方案的比较与选择(1)控制单元的选择方案一:利用单片机与FPGA配合使用。
循迹、红外避障、遥控综合程序
循迹、红外避障、遥控综合程序/**********************ZYWIFI0939C-WIFI机器人实验板例程************************ * 平台:ZYWIFI0939C-WIFI机器人+ Keil U4 + STC89C52* 名称:ZY-1智能小车参考程序* 公司:湖南智宇科教设备有限公司* 淘宝:https:///* 网站:* 编写:智宇公司研发一部* 日期:2015-1-15* 交流:智能车QQ:261339276* 晶振:11.0592MHZ* 说明:免费开源,不提供源代码分析* 硬件设置:要有自己动手能力,才能完成实验* 使用说明:根据下面IO口自己用杜邦线连接各种模块,可以自己修改各种模块IO口* 视频教程:本小车配套学习C语言详细视频教程,资料统一网盘下载重点提示:本程序只做参考,不提供技术支持,请自己研究吸收。
******************************************************************/ #include<AT89x51.H>#include <intrins.h>#include<HJ-4WD_PWM.H>//包含HL-1蓝牙智能小车驱动IO口定义等函数#define Left_1_led P3_7//左循迹传感器#define Right_1_led P3_6//右循迹传感器#define LeftIRBZ P3_5//左避障传感器#define RightIRBZ P3_4//右避障传感器sbit SB1=P2^3; //定义蜂鸣器端口sbit IRIN=P3^3; //定义红外接收端口unsigned char code LedShowData[]={0x03,0x9F,0x25,0x0D,0x99, //定义数码管显示数据0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9 unsigned char code RecvData[]={0x19,0x46,0x15,0x43,0x44,0x40,0x0D,0x0E,0x00,0x0F}; unsigned char IRCOM[7];#define ShowPort P0 //定义数码管显示端口unsigned char temp = 1;void Delay1ms(unsigned int i){unsigned char j,k;do{do{k = 50;do{_nop_();}while(--k);}while(--j);}while(--i);}void delay_nus(unsigned int i) //延时:i>=12 ,i的最小延时单12 us{i=i/10;while(--i);}void delay_nms(unsigned int n) //延时n ms{n=n+1;while(--n)delay_nus(900); //延时1ms,同时进行补偿}void delayms(unsigned char x) //0.14mS延时程序{unsigned char i; //定义临时变量while(x--) //延时时间循环{for (i = 0; i<13; i++) {} //14mS延时}}void Delay() //定义延时子程序{unsigned int DelayTime=30000; //定义延时时间变量while(DelayTime--); //开始进行延时循环return; //子程序返回}void ControlCar_yaokong(unsigned char ConType) //定义电机控制子程序(红外遥控单独设置一个switch case 语句){switch(ConType) //判断用户设定电机形式{case 1: //前进//判断用户是否选择形式1{stop();//进入前进之前先停止一段时间防止电机反向电压冲击主板导致系统复位Delay1ms(150);//LeftLed = 0 ;run();break;}case 2: //后退//判断用户是否选择形式2{stop();//进入后退之前先停止一段时间防止电机反向电压冲击主板导致系统复位Delay1ms(150);// LeftLed = 1 ;back(); //M2电机反转break;}case 3: //右转//判断用户是否选择形式3{stop();//进入左转之前先停止一段时间防止电机反向电压冲击主板导致系统复位Delay1ms(150);rightrun(); //M2电机正转break;}case 4: //左转//判断用户是否选择形式4{stop();//进入右转之前先停止一段时间防止电机反向电压冲击主板导致系统复位Delay1ms(150);leftrun(); //M1电机正转//M2电机反转break;}case 8: //停止//判断用户是否选择形式8{stop();break; //退出当前选择}}}void Robot_Avoidance() //机器人避障子程序{if(LeftIRBZ==1&&RightIRBZ ==1)//LeftIRBZ RightIRBZ{run();delay_nms (10);SB1=1;}else{if(LeftIRBZ==1&&RightIRBZ ==0)//右边检测到红外信号{rightrun(); //右转delay_nms (300);//停止300MS 防止电机反相电压冲击导致系统复位}if(RightIRBZ ==1&&LeftIRBZ==0)//左边检测到红外信号{leftrun(); //左转delay_nms (300);//停止300MS 防止电机反相电压冲击导致系统复位}if(RightIRBZ==0&&LeftIRBZ==0)//两边传感器同时检测到红外{SB1=0;stop(); //停止delay_nms (300);//停止300MS 防止电机反相电压冲击导致系统复位back(); //调用电机后退函数delay_nms (300);//后退50毫秒rightrun(); //调用电机右转函数delay_nms (400);}}run();}//机器人循迹子程序void Robot_Traction() //机器人循迹子程序{//SB1=1;if(Left_1_led == 0 && Right_1_led == 0) //三个红外检测到黑线,就前进Left_1_led Right_1_led{run(); //左侧没有信号时,开始向右转一定的角度delay_nms (10);SB1=0;}else if(Left_1_led == 0 && Right_1_led == 1){rightrun(); //右侧检测到黑线,开始向右转一定的角度delay_nms (10);}else if(Left_1_led == 1 && Right_1_led == 0){leftrun(); //左侧检测到黑线,开始向左转一定的角度delay_nms (10);}else if(Left_1_led == 1 && Right_1_led == 1){SB1=1;stop(); //左侧检测到黑线,开始向左转一定的角度delay_nms (10);}}//----------红外遥控-------------------------------------------------------------void IR_IN() interrupt 2 using 0 //定义INT2外部中断函数{unsigned char j,k,N=0; //定义临时接收变量EX1 = 0; //关闭外部中断,防止再有信号到达delayms(15); //延时时间,进行红外消抖if (IRIN==1) //判断红外信号是否消失EX1 =1; //外部中断开return; //返回}while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
循迹、红外避障、遥控综合程序/**********************ZYWIFI0939C-WIFI机器人实验板例程************************ * 平台:ZYWIFI0939C-WIFI机器人+ Keil U4 + STC89C52* 名称:ZY-1智能小车参考程序* 公司:湖南智宇科教设备有限公司* 淘宝:https:///* 网站:* 编写:智宇公司研发一部* 日期:2015-1-15* 交流:智能车QQ:261339276* 晶振:11.0592MHZ* 说明:免费开源,不提供源代码分析* 硬件设置:要有自己动手能力,才能完成实验* 使用说明:根据下面IO口自己用杜邦线连接各种模块,可以自己修改各种模块IO口* 视频教程:本小车配套学习C语言详细视频教程,资料统一网盘下载重点提示:本程序只做参考,不提供技术支持,请自己研究吸收。
******************************************************************/ #include<AT89x51.H>#include <intrins.h>#include<HJ-4WD_PWM.H>//包含HL-1蓝牙智能小车驱动IO口定义等函数#define Left_1_led P3_7//左循迹传感器#define Right_1_led P3_6//右循迹传感器#define LeftIRBZ P3_5//左避障传感器#define RightIRBZ P3_4//右避障传感器sbit SB1=P2^3; //定义蜂鸣器端口sbit IRIN=P3^3; //定义红外接收端口unsigned char code LedShowData[]={0x03,0x9F,0x25,0x0D,0x99, //定义数码管显示数据0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9 unsigned char code RecvData[]={0x19,0x46,0x15,0x43,0x44,0x40,0x0D,0x0E,0x00,0x0F}; unsigned char IRCOM[7];#define ShowPort P0 //定义数码管显示端口unsigned char temp = 1;void Delay1ms(unsigned int i){unsigned char j,k;do{do{k = 50;do{_nop_();}while(--k);}while(--j);}while(--i);}void delay_nus(unsigned int i) //延时:i>=12 ,i的最小延时单12 us{i=i/10;while(--i);}void delay_nms(unsigned int n) //延时n ms{n=n+1;while(--n)delay_nus(900); //延时1ms,同时进行补偿}void delayms(unsigned char x) //0.14mS延时程序{unsigned char i; //定义临时变量while(x--) //延时时间循环{for (i = 0; i<13; i++) {} //14mS延时}}void Delay() //定义延时子程序{unsigned int DelayTime=30000; //定义延时时间变量while(DelayTime--); //开始进行延时循环return; //子程序返回}void ControlCar_yaokong(unsigned char ConType) //定义电机控制子程序(红外遥控单独设置一个switch case 语句){switch(ConType) //判断用户设定电机形式{case 1: //前进//判断用户是否选择形式1{stop();//进入前进之前先停止一段时间防止电机反向电压冲击主板导致系统复位Delay1ms(150);//LeftLed = 0 ;run();break;}case 2: //后退//判断用户是否选择形式2{stop();//进入后退之前先停止一段时间防止电机反向电压冲击主板导致系统复位Delay1ms(150);// LeftLed = 1 ;back(); //M2电机反转break;}case 3: //右转//判断用户是否选择形式3{stop();//进入左转之前先停止一段时间防止电机反向电压冲击主板导致系统复位Delay1ms(150);rightrun(); //M2电机正转break;}case 4: //左转//判断用户是否选择形式4{stop();//进入右转之前先停止一段时间防止电机反向电压冲击主板导致系统复位Delay1ms(150);leftrun(); //M1电机正转//M2电机反转break;}case 8: //停止//判断用户是否选择形式8{stop();break; //退出当前选择}}}void Robot_Avoidance() //机器人避障子程序{if(LeftIRBZ==1&&RightIRBZ ==1)//LeftIRBZ RightIRBZ{run();delay_nms (10);SB1=1;}else{if(LeftIRBZ==1&&RightIRBZ ==0)//右边检测到红外信号{rightrun(); //右转delay_nms (300);//停止300MS 防止电机反相电压冲击导致系统复位}if(RightIRBZ ==1&&LeftIRBZ==0)//左边检测到红外信号{leftrun(); //左转delay_nms (300);//停止300MS 防止电机反相电压冲击导致系统复位}if(RightIRBZ==0&&LeftIRBZ==0)//两边传感器同时检测到红外{SB1=0;stop(); //停止delay_nms (300);//停止300MS 防止电机反相电压冲击导致系统复位back(); //调用电机后退函数delay_nms (300);//后退50毫秒rightrun(); //调用电机右转函数delay_nms (400);}}run();}//机器人循迹子程序void Robot_Traction() //机器人循迹子程序{//SB1=1;if(Left_1_led == 0 && Right_1_led == 0) //三个红外检测到黑线,就前进Left_1_led Right_1_led{run(); //左侧没有信号时,开始向右转一定的角度delay_nms (10);SB1=0;}else if(Left_1_led == 0 && Right_1_led == 1){rightrun(); //右侧检测到黑线,开始向右转一定的角度delay_nms (10);}else if(Left_1_led == 1 && Right_1_led == 0){leftrun(); //左侧检测到黑线,开始向左转一定的角度delay_nms (10);}else if(Left_1_led == 1 && Right_1_led == 1){SB1=1;stop(); //左侧检测到黑线,开始向左转一定的角度delay_nms (10);}}//----------红外遥控-------------------------------------------------------------void IR_IN() interrupt 2 using 0 //定义INT2外部中断函数{unsigned char j,k,N=0; //定义临时接收变量EX1 = 0; //关闭外部中断,防止再有信号到达delayms(15); //延时时间,进行红外消抖if (IRIN==1) //判断红外信号是否消失EX1 =1; //外部中断开return; //返回}while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delayms(1); //延时等待}for (j=0;j<4;j++) //采集红外遥控器数据{for (k=0;k<8;k++) //分次采集8位数据{while (IRIN) //等IR 变为低电平,跳过4.5ms 的前导高电平信号。
{delayms(1); //延时等待}while (!IRIN) //等IR 变为高电平{delayms(1); //延时等待}while (IRIN) //计算IR高电平时长{delayms(1); //延时等待N++; //计数器加加if (N>=30) //判断计数器累加值{EX1=1; //打开外部中断功能return; //返回}}IRCOM[j]=IRCOM[j] >> 1; //进行数据位移操作并自动补零if (N>=8) //判断数据长度{IRCOM[j] = IRCOM[j] | 0x80; //数据最高位补1}N=0; //清零位数计录器}if (IRCOM[2]!=~IRCOM[3]) //判断地址码是否相同{EX1=1; //打开外部中断return; //返回}for(j=0;j<10;j++) //循环进行键码解析{if(IRCOM[2]==RecvData[j]) //进行键位对应{// ControlCar(j);ControlCar_yaokong(j); //数码管显示相应数码}}EX1 = 1; //外部中断开}//-------------------------------------------------------------------------------------------------------void main() //主程序入口{TMOD=0X01;TH0= 0XFc;//1ms定时TL0= 0X18;TR0= 1;ET0= 1;EA = 1;//开总中断//EX1=1; //同意开启外部中断1IT1=1; //设定外部中断1为低边缘触发类型while(1) //程序主循环{if(P3_2 == 0){delay_nms(10);if(P3_2 == 0){temp++;while(!P3_2);}}if(temp > 3)temp = 1;}switch(temp){case 1:ShowPort = LedShowData[1];Robot_Traction();EX1 = 0;break;case 2: ShowPort = LedShowData[2];Robot_Avoidance();EX1 = 0;break;case 3: ShowPort = LedShowData[3];SB1 = 1; EX1 = 1;break;}}}。