智能小车各独立模块 红外遥控 电机驱动 超声波 红外寻迹

合集下载

智能小车红外循迹实验

智能小车红外循迹实验

(注意事项,调试时不要对着强光,建议在室内调试,环境光线对检测距离有比 较大的影响,这是红外线本身原因,同板子功能无关)。
黑白线合理参数调试---调节电位器W3,在反馈距离与小车车轮底部一个平面上, 操作员注意要认真,细致调动W3电位器,切忌着急。 提示说明:有可能会出现黑线传感器感应不到黑线的情况是因为黑线传感器的灵 敏度调得太高了应该调低灵敏度这样才能检测到黑线因为灵敏度太高黑色反射的 红外光都能被传感器识别,导致检测失败应该把黑线传感器上的可调电阻参考上 面调节说明调试。
1. 利用黑色对光线的反射率小这个特点,当平面的颜色不是黑色时,传 感器发射出去的红外光被大部分反射回来。于是传感器输出低电平0。 2. 当平面中有一黑线,传感器在黑线上方时,因黑色的反射能力很弱, 反射回来的红外光很少,达不到传感器动作的水平,所以传感器输出1。 3. 我们只要用单片机判断传感器的输出端是0或者是1,就能检测到黑 线。
亚博科技
智能小车配套视频教程
智能小车循迹实验
亚博科技
智能小车配于电机的转速调整,我们是采用脉宽调制(PWM)办法,控制电机 的时候,电源并非连续地向电机供电,而是在一个特定的频率下以方 波脉冲的形式提供电能。 不同占空比的方波信号能对电机起到调速作用,这是因为电机实际上 是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入 信号被平均分配到作用时间上,这样,改变在始能端EN1 和EN2 上输 入方波的占空比就能改变加在电机两端的电压大小,从而改变了转速。 电路中用微处理机来实现脉宽调制,通常的方法有两种: (1)用软件方式来实现,即通过执行软件延时循环程序交替改变端 口某个二进制位输出逻辑状态来产生脉宽调制信号,设置不同的延时 时间得到不同的占空比。 (2)硬件实验自动产生PWM 信号,不占用CPU 处理的时间。这就。 要用到具有硬件PWM功能的芯片、

TCRT5000红外反射式开关传感器寻黑白线循迹模块避障小车寻迹

TCRT5000红外反射式开关传感器寻黑白线循迹模块避障小车寻迹

TCRT5000红外反射式开关传感器寻黑白线循迹模块避障小车寻迹TCRT5000一体化光电传感器,具有抗干扰性强,使用方便等优点,是寻迹智能小车必备,检测距离10MM,多路可以适应多种黑线轨道,输入电压5V,黑线输出0V,白线输出5V,数字量输出,+:接直流DC5V正极-:接直流DC5V负极S:信号输出端,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。

概述TCRT5000光电传感器模块是基于TCRT5000红外光电传感器设计的一款红外反射式光电开关。

传感器采用高发射功率红外光电二极管和高灵敏度光电晶体管组成,输出信号经施密特电路整形,稳定可靠。

应用场合:1.电度表脉冲数据采样2.传真机碎纸机纸张检测3.障碍检测4.黑白线检测基本参数:1.外形尺寸:长32mm~37 mm;宽7.5mm;厚2mm2.工作电压:DC 3V~5.5V,推荐工作电压为5V3.检测距离:1mm~8mm适用,焦点距离为2.5mm模块原理和应用电路原理图:图 1 TCRT5000传感器模块电路原理图传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块的输出端为低电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。

驱动芯片:L298N双H桥驱动芯片2.驱动部分端子供电范围Vs:+5V~+35V;如需要板内输出5V,则供电范围Vs:+7V~+35V3.驱动部分峰值电流Io:2A4.逻辑部分端子供电范围Vss:+5V~+7V(可板内取电+5V)5.逻辑部分工作电流范围:0~36mA6.控制信号输入电压范围:低电平:-0.3V≤Vin≤1.5V高电平:2.3V≤Vin≤Vss7.最大功耗:20W(温度T=75℃时)8.存储温度:-25℃~+130℃9.驱动板尺寸:55mm*49mm*33mm(带固定铜柱和散热片高度)10.驱动板重量:33g11.其他扩展:控制方向指示灯、逻辑部分板内取电接口。

智能小车系统设计(循迹,超声波,遥控)

智能小车系统设计(循迹,超声波,遥控)

<<计算机控制技术综合训练>>任务书年季学期附录:电信学院课程设计报告要求1、设计题目;2、目录;3、本设计的基本原理;4、简要说明本设计内容、用途及特点;5、本设计达到的性能指标;6、设计方案的选择;7、写出各部分设计过程、工作原理、元器件选择;8、绘制图纸(手绘2号图纸);9、设计参考文献;10、附录;11、设计总结体会;12、设计说明书不得少于10000字。

智能小车运行图经过调试,小车完美实现了如下功能1.小车具有无线遥控功能,小车可完成前进、后退、左转、右转等动作,并且可以正确显示当前的速度及行进位移。

2.小车具有循迹及避障功能,实现了舵机转动下的超声波壁障功能,并且可以正确有序显示小车位移、速度及与前方障碍物距离。

3.与其它组的小车模型配合可以完成交替领跑任务。

4.小车所有模式切换均由遥控器控制。

流程图硬件原理图附件一:智能小车系统程序#include <AT89x51.H>#include <intrins.h>sbit AA=P3^0;sbit DD=P3^1;sbit BB=P3^2;sbit CC=P2^2;sbit LCM_RW=P2^4; //定义LCD引脚sbit LCM_RS=P2^3;#define RX P2_0#define TX P2_1#define LCM_E P2_5#define Sevro_moto_pwm P2_7 //接舵机信号端输入PWM信号调节速度#define LCM_Data P0#define Busy 0x80 //用于检测LCM状态字中的Busy标识#define Left_1_led P3_7 //P3_7接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1#define XUNJI_left_led P3_6 //P3_6接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2#define XUNJI_right_led P3_5 //P3_5接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3#define Right_2_led P3_4 //P3_4接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4#define Left_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //左边两个电机向前走#define Left_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //左边两个电机向后转#define Left_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //左边两个电机停转#define Right_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //右边两个电机向前走#define Right_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //右边两个电机向后走#define Right_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //右边两个电机停转void LCMInit(void); //LCD初始化函数void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);//LCD显示一个字符函数void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);//LCD显示一个字符串函数void Delay5Ms(void); //延时5毫秒函数void Delay400Ms(void); //延时400毫秒函数void Decode(unsigned char ScanCode);void WriteDataLCM(unsigned char WDLCM); //LCD1602写数据函数void WriteCommandLCM(unsigned char WCLCM,BuysC);//LCD写命令函数unsigned char ReadStatusLCM(void);unsigned char code Range[] ="V= cm/s S= . m"; //LCD1602显示格式unsigned char code welcome[] ="=== Welcome === ";unsigned char code key[]="Press any key...";unsigned char code ASCII[13] = "0123456789.-M";unsigned char code table[]="Distance:000.0cm";unsigned char code table1[]="YAO KONG MO SHI ";unsigned char code table2[]="=XUN JI MO SHI= ";unsigned char pwm_val_left = 0;//变量定义unsigned char push_val_left =14;//舵机归中,产生约,1.5MS 信号unsigned int CH0=0; //循迹模式标志unsigned int CH1=0; //超声波模式标志unsigned int t=0; //速度基准变量unsigned int timer=0; //延时基准变量unsigned int time=0;unsigned int pwm=250;unsigned int count1=0; //计左电机码盘脉冲值unsigned char timer1=0; //扫描时间变量unsigned long S1=0;unsigned long S2=0;unsigned long S3=0;unsigned long S4=0;unsigned long S=0;unsigned long V=0; //定义其速度unsigned long SS=0;unsigned char disbuff[4]= { 0,0,0,0,};unsigned char disbuff1[4]={ 0,0,0,0,};void WriteDataLCM(unsigned char WDLCM) //写数据{ReadStatusLCM(); //检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; //若晶振速度太高可以在这后加小的延时LCM_E = 0; //延时LCM_E = 1;}void WriteCommandLCM(unsigned char WCLCM,BuysC) //写指令,BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCM(); //根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;}unsigned char ReadStatusLCM(void) //读状态{LCM_Data = 0xFF;LCM_RS = 0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;while (LCM_Data & Busy); //检测忙信号return(LCM_Data);}void LCMInit(void) //LCM初始化{LCM_Data = 0;WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); //关闭显示WriteCommandLCM(0x01,1); //显示清屏WriteCommandLCM(0x06,1); // 显示光标移动设置WriteCommandLCM(0x0c,1); // 显示开及光标设置}//按指定位置显示一个字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCM(X, 1); //发命令字WriteDataLCM(DData); //发数据}//按指定位置显示一串字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData){unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]>0x19) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]);//显示单个字符ListLength++;X++;}}}//5ms延时void Delay5Ms(void){unsigned int TempCyc = 5552;while(TempCyc--);}//400ms延时void Delay400Ms(void){unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);};}/********************************************************/ void Conut(void) //超声波距离计算函数{while(!RX); //当RX为零时等待TR0=1; //开启计数while(RX); //当RX为零时等待TR0=0;time=TH0*256+TL0;TH0=0;TL0=0;S=(time*1.7)/10+10;disbuff1[0]=V%10;disbuff1[1]=V/10;DisplayListChar(0, 0, Range);DisplayOneChar(2, 0, ASCII[disbuff1[1]]);DisplayOneChar(3, 0, ASCII[disbuff1[0]]);disbuff1[0]=SS/10%10;disbuff1[1]=SS/100%10;disbuff1[2]=SS/1000;DisplayOneChar(11, 0, ASCII[disbuff1[2]]);DisplayOneChar(12, 0, ASCII[disbuff1[1]]);DisplayOneChar(13, 1, ASCII[10]);DisplayOneChar(14, 0, ASCII[disbuff1[0]]);disbuff[0]=S%10;disbuff[1]=S/10%10;disbuff[2]=S/100%10;disbuff[3]=S/1000;DisplayOneChar(9, 1, ASCII[disbuff[3]]);DisplayOneChar(10, 1, ASCII[disbuff[2]]);DisplayOneChar(11, 1, ASCII[disbuff[1]]);DisplayOneChar(12, 1, ASCII[10]);DisplayOneChar(13, 1, ASCII[disbuff[0]]);}/********************************************************/ void Conut0(void) //循迹模式显示{disbuff1[0]=V%10;disbuff1[1]=V/10;DisplayListChar(0, 0, Range);DisplayOneChar(2, 0, ASCII[disbuff1[1]]);DisplayOneChar(3, 0, ASCII[disbuff1[0]]);disbuff1[0]=SS/10%10;disbuff1[1]=SS/100%10;disbuff1[2]=SS/1000;DisplayOneChar(11, 0, ASCII[disbuff1[2]]);DisplayOneChar(12, 0, ASCII[disbuff1[1]]);DisplayOneChar(13, 0, ASCII[10]);DisplayOneChar(14, 0, ASCII[disbuff1[0]]);}/********************************************************/ void StartModule() //启动模块{TX=1; //启动一次模块_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TX=0;}/********************************************************/ /*void delayms(unsigned int ms){unsigned char i=100,j;for(;ms;ms--){while(--i){j=10;while(--j);}}}*/void Timer_Count(void) //超声波高电平脉冲宽度计算函数{TR0=1; //开启计数while(RX); //当RX为1计数并等待TR0=0; //关闭计数Conut(); //计算}/******************************************************************** ****///前速前进void run(void){Left_moto_go ; //左电机往前走Right_moto_go ; //右电机往前走}/******************************************************************** ****///前速后退void backrun(void){Left_moto_back ; //左电机往前走Right_moto_back ; //右电机往前走}/******************************************************************** ****///左转void leftrun(void){Left_moto_back ; //左电机往前走Right_moto_go ; //右电机往前走}/******************************************************************** ****///右转void rightrun(void){Left_moto_go ; //左电机往前走Right_moto_back ; //右电机往前走}/******************************************************************** ****///STOPvoid stoprun(void){Left_moto_Stop ; //左电机停走Right_moto_Stop ; //右电机停走}/******************************************************************** ****/void COMM( void ){V=0;push_val_left=5; //舵机向左转90度timer=0;while(timer<=4000); //延时400MS让舵机转到其位置 4000StartModule(); //启动超声波测距Conut(); //计算距离S2=S;push_val_left=23; //舵机向右转90度timer=0;while(timer<=4000); //延时400MS让舵机转到其位置StartModule(); //启动超声波测距Conut(); //计算距离S4=S;push_val_left=14; //舵机归中timer=0;while(timer<=4000); //延时400MS让舵机转到其位置StartModule(); //启动超声波测距Conut(); //计算距离S1=S;if((S2<300)||(S4<300)) //只要左右各有距离小于,30CM小车后退 {backrun(); //后退timer=0;while(timer<=1000);}if(S2>S4){rightrun(); //车的左边比车的右边距离小右转 timer=0;while(timer<=800);}else{leftrun(); //车的左边比车的右边距离大左转timer=0;while(timer<=800);}}/****************************************************/void pwm_Servomoto(void){if(pwm_val_left<=push_val_left)Sevro_moto_pwm=1;else Sevro_moto_pwm=0;if (pwm_val_left>=100)pwm_val_left=0;}/***************************************************////*TIMER1中断服务子函数产生PWM信号*/void time1()interrupt 3 using 2{TH1=(65536-100)/256; //100US定时TL1=(65536-100)%256;timer++; //定时器100US为准。

智能循迹小车说明书

智能循迹小车说明书

本科毕业设计说明书题目:智能循迹小车院(部):机电工程学院专业:班级:姓名:学号:指导教师:完成日期:摘要 (2)ABSTRACT (4)1.绪论........................................................................................................................... - 1 - 1.1智能小车的作用和意义 ........................................................................................ - 1 -1.2智能小车的现状...................................................................................................... - 2 -2.方案设计与论证 ................................................................................................... - 3 - 2.1循迹模块 ................................................................................................................... - 3 - 2.2主控系统 ................................................................................................................... - 4 - 2.3电机驱动模块 .......................................................................................................... - 5 - 2.4机械系统 ................................................................................................................... - 7 -2.5电源系统 ................................................................................................................... - 7 -3.硬件设计................................................................................................................... - 8 - 3.1信号检测模块 .......................................................................................................... - 8 - 3.2主控电路 ................................................................................................................... - 8 - 3.3驱动电路 ................................................................................................................. - 11 -3.4总体设计 ................................................................................................................. - 11 -4.软件设计................................................................................................................. - 13 - 4.1总体结构框图 ........................................................................................................ - 13 - 4.2总体程序流程图.................................................................................................... - 14 - 4.3总程序...................................................................................................................... - 14 -4.4软件仿真 ................................................................................................................. - 38 -5.安装和调试............................................................................................................ - 40 - 结束语............................................................................................................................ - 42 - 致谢 .............................................................................................................................. - 43 - 参考文献 ...................................................................................................................... - 44 -本设计主要有三个模块包括信号检测模块、主控模块、电机驱动模块。

智能循迹小车设计方案

智能循迹小车设计方案

智能循迹小车设计方案一、设计目标:1.实现智能循迹功能,能够沿着预定轨迹自动行驶。

2.具备避障功能,能够识别前方的障碍物并及时避开。

3.具备远程遥控功能,方便用户进行操作和控制。

4.具备数据上报功能,能够实时反馈运行状态和数据。

二、硬件设计:1.主控模块:使用单片机或者开发板作为主控模块,负责控制整个小车的运行和数据处理。

2.传感器模块:-光电循迹传感器:用于检测小车当前位置,根据光线的反射情况确定移动方向。

-超声波传感器:用于检测前方是否有障碍物,通过测量障碍物距离来判断是否需要避开。

3.驱动模块:-电机和轮子:用于实现小车的运动,可选用直流电机或者步进电机,轮子要具备良好的抓地力和摩擦力。

-舵机:用于实现小车的转向,根据循迹传感器的信号来控制舵机的角度。

4.通信模块:-Wi-Fi模块:用于实现远程遥控功能,将小车与遥控设备连接在同一个无线网络中,通过网络通信进行控制。

-数据传输模块:用于实现数据上报功能,将小车的运行状态和数据通过无线通信传输到指定的接收端。

三、软件设计:1.循迹算法:根据光电循迹传感器的反馈信号,确定小车的行进方向。

为了提高循迹的精度和稳定性,可以采用PID控制算法进行修正。

2.避障算法:通过超声波传感器检测前方障碍物的距离,当距离过近时,触发避障算法,通过调整小车的行进方向来避开障碍物。

3.遥控功能:通过Wi-Fi模块与遥控设备建立连接,接收遥控指令并解析,根据指令调整小车的运动状态。

4.数据上报功能:定时采集小车的各项运行数据,并通过数据传输模块将数据发送到指定的接收端,供用户进行实时监测和分析。

四、系统实现:1.硬件组装:根据设计要求进行硬件的组装和连接,确保各个模块之间的正常通信。

2.软件编程:根据功能要求,进行主控模块的编程,实现循迹、避障、遥控和数据上报等功能。

3.调试测试:对整个系统进行调试和测试,确保各项功能正常运行,并进行性能和稳定性的优化。

4.用户界面设计:设计一个用户友好的界面,实现对小车的远程控制和数据监测,提供良好的用户体验。

基于单片机的红外遥控智能小车设计

基于单片机的红外遥控智能小车设计

基于单片机的红外遥控智能小车设计引言:随着科技的不断发展,智能物联网已经走进了我们的生活。

智能小车作为一种智能化的产品,能够实现远程遥控、自动避障等功能,受到了广大消费者的青睐。

本文就基于单片机的红外遥控智能小车设计进行详细介绍。

一、设计目标本设计的目标是通过红外遥控,实现对智能小车的远程控制,小车能够根据收到的指令进行行驶、避障等操作。

二、设计原理1.主控芯片:本设计使用单片机作为主控芯片,常用的单片机有51系列、AVR系列等,可根据实际需求选择合适的芯片型号。

2.红外遥控模块:红外遥控模块是实现红外通信的设备,可以将遥控器发出的红外信号解码成数据,实现遥控操作。

3.电机驱动模块:电机驱动模块可将单片机的PWM信号转化为电机的动力驱动信号,控制小车的行驶方向和速度。

4.超声波传感器:超声波传感器可以感知到小车前方的障碍物距离,根据测得的距离,进行相应的避障操作。

5.电源模块:小车需要使用适当的电源,通常是锂电池或者直流电源供应。

三、系统设计1.硬件设计:(1)搭建小车底盘:根据所选择的底盘,搭建小车结构,并安装好电机驱动模块、电源模块等硬件设备。

(2)连接电路:将红外遥控模块、超声波传感器等硬件设备与主控芯片进行连接,确保每个模块正常工作。

2.软件设计:(1)红外遥控程序设计:通过红外遥控模块接收红外信号,并解码成相应的指令。

根据指令控制电机驱动模块,实现小车的行驶方向和速度控制。

(2)超声波避障程序设计:根据超声波传感器测得的距离,判断是否有障碍物,如果有障碍物就停止或者转向。

四、实验结果和讨论经过实验验证,本设计的红外遥控智能小车能够准确接收红外信号,并根据指令控制小车的行驶方向和速度。

同时,超声波传感器能够及时感知到前方的障碍物,并进行相应的避障操作。

然而,该设计仍然存在一些不足之处,比如超声波传感器的测距范围有限,可能无法感知到较小的障碍物。

此外,红外遥控信号的传输距离也有一定限制,需要保持遥控器与小车之间的距离不过远。

智能循迹小车报告

智能循迹小车报告

智能循迹小车队长:黎建峰队员:江福家章春金赛前辅导老师:吴桔生张荣刚林章文稿整理辅导老师:吴桔生摘要设计分为五个模块:单片机最小系统、电机驱动电源、电机驱动电路、红外循迹模块、显示模块。

电机驱动电路用于转向控制;红外循迹模块利用四个光电管,对黑色轨道进行循迹;电机驱动电源利用两个7805提供三路5v电压,一路供给最小系统,一路供给电机驱动电路,一路供给循迹模块。

本设计中为了简化电路,减少小车的负载,利用软件编程的方法控制电机的转速从而控制小车的行驶速度,这是本设计的一大特色。

一、方案论证与比较1、轨迹探测模块设计与比较方案一、使用简易光电传感器结合外围电路进行检测由于光电传感器对行驶过程中的稳定性要求非常高,而且容易受到光线环境和路面介质的影响,误测的几率非常大。

在使用中极易出现问题,给检测和调试造成很大的困难,容易因为检测的失误导致整个系统的不正常工作,所以最终并未采用此方案。

方案二、使用两只stl198光电管把两只光电管分别排列在黑色轨迹的两侧,根据其接收反射光的多少输出高低电平来控制小车的转向,以达到循迹的目的。

但是调试表明,如果两只开关的距离很小,则以约束了小车的速度来达到检测轨迹的目的,如果两只开关的距离太大,则同时传来同一电平信号的几率很大,容易使小车的行驶路线偏离轨道,达不到循迹的目的。

方案三、使用四只stl198光电管分左右两边各两只光电管一排排列,里面的两个距离靠的较远,外面的两个靠的比较近。

当小车脱离轨道时即里面的两个光电管中有一个或者两个都偏离了轨道,等待外面的那两个光电管的任何一个检测到黑线时,做出相应的转向调整。

直到中间的两个开关管的任何一个检测到黑线为止(即回到轨道上)再恢复正向行驶。

现场调试表明,小车在行驶中虽然出现摇摆(各个光电管间的距离达到1厘米),但是基本上能准确地达到循迹目的。

综合考虑实际中光电管的安装,考虑小车的行驶速度和循迹准确性,我们最终选择了方案三。

智能小车红外循迹

智能小车红外循迹

引言:智能小车红外循迹技术是一种基于红外传感器的自动导航技术,它可以使小车能够根据外界环境发出的红外信号进行导航,实现自动巡航。

本文将从红外循迹技术的原理、应用场景、具体实现方法、优缺点以及未来发展等方面详细讨论。

概述:红外循迹技术是智能小车领域中的重要技术之一,通过红外传感器感知地面上的红外信号,从而确定小车的行驶路径。

该技术常用于自动导航和避障等场景中,具有较高的可靠性和稳定性。

下面将详细探讨智能小车红外循迹技术的相关内容。

正文内容:一、红外循迹技术的原理1.红外传感器的工作原理2.红外信号与地面的交互3.红外循迹算法的实现二、红外循迹技术的应用场景1.工业自动化领域中的应用2.家庭服务中的应用3.自动驾驶车辆中的应用三、智能小车红外循迹技术的具体实现方法1.硬件方案1.1红外传感器选择与安装1.2控制模块设计与搭建1.3电源管理与供电设计2.软件方案2.1红外信号的数据处理2.2循迹算法的设计与实现2.3控制系统的编程与调试四、智能小车红外循迹技术的优缺点1.优点1.1精确度高1.2反应速度快1.3成本较低2.缺点2.1受环境因素影响较大2.2对于不同地面的适应性较差2.3容易受到干扰五、智能小车红外循迹技术的未来发展1.红外循迹技术在自动驾驶领域的应用前景2.其他导航技术与红外循迹技术的结合3.红外传感器的性能改进与创新总结:智能小车红外循迹技术是一种基于红外传感器的自动导航技术,其原理是通过感知地面上的红外信号来确定小车的行驶路径。

红外循迹技术广泛应用于工业自动化、家庭服务和自动驾驶车辆等领域。

该技术具有精度高、反应速度快以及成本低的优点,但也存在受环境因素影响较大、对不同地面适应性差以及易受干扰等缺点。

未来,红外循迹技术在自动驾驶领域的应用前景广阔,并且可以通过与其他导航技术的结合以及红外传感器的性能改进与创新来进一步提升其应用效果和可靠性。

红外循迹小车原理

红外循迹小车原理

红外循迹小车原理红外循迹小车是一种基于红外传感技术的智能小车,它能够通过感知地面上的红外线信号来实现自动跟踪行驶。

这种小车在智能车辆、机器人比赛和科技教育中都有着广泛的应用。

在这篇文档中,我们将详细介绍红外循迹小车的原理及其工作过程。

红外循迹小车主要由红外传感器、控制模块、电机驱动器和电源模块等部分组成。

其中,红外传感器是最关键的部件之一,它能够感知地面上的红外线信号,并将信号转化为电信号输出。

控制模块则负责接收并处理传感器输出的信号,从而决定小车的行驶方向。

电机驱动器则根据控制模块的指令驱动小车的电机进行相应的转向和速度调整。

电源模块则提供工作电压和电流,保证整个系统的正常运行。

红外循迹小车的工作原理是基于地面上的红外线信号。

通常情况下,循迹小车会沿着一条预先绘制好的红外线路线行驶。

红外传感器会不断地感知地面上的红外线信号,并将其转化为电信号输出。

控制模块接收并处理传感器的输出信号,通过对比左右两侧的信号强度差异来判断小车当前的位置偏移情况。

根据这一判断,控制模块会发出指令,控制电机驱动器使小车进行相应的转向和速度调整,从而使小车能够沿着预定的线路行驶。

在实际应用中,红外循迹小车的原理可以通过以下几个关键步骤来实现:1. 红外传感器感知红外线信号,当循迹小车行驶在预先绘制好的红外线路线上时,红外传感器会不断地感知地面上的红外线信号,并将其转化为电信号输出。

2. 控制模块处理信号,控制模块接收并处理传感器的输出信号,通过对比左右两侧的信号强度差异来判断小车当前的位置偏移情况。

3. 发出指令,根据位置偏移情况,控制模块会发出指令,控制电机驱动器使小车进行相应的转向和速度调整,从而使小车能够沿着预定的线路行驶。

红外循迹小车的原理虽然看似简单,但实际上涉及到了许多复杂的技术原理和工程实践。

通过对红外传感器信号的处理和控制模块的智能算法设计,循迹小车能够实现精准的自动跟踪行驶。

这种智能车辆不仅在科技教育中有着广泛的应用,还在工业自动化和智能交通系统中有着巨大的潜在市场。

智能小车红外循迹原理

智能小车红外循迹原理

智能小车红外循迹原理一、概述智能小车红外循迹是一种基于红外线传感器的自动导航技术。

该技术通过对小车周围环境的监测和分析,实现小车在特定路径上自动行驶。

本文将详细介绍智能小车红外循迹的原理、构成以及工作流程。

二、原理智能小车红外循迹原理基于红外线传感器。

当物体发生温度变化时,会产生不同的红外辐射,而红外线传感器可以检测到这些辐射并转化为电信号输出。

通过对不同位置的红外辐射信号进行分析,我们可以得到一个环境温度分布图。

在智能小车中,我们通常使用两个或多个红外线传感器。

当小车行驶时,这些传感器会不断地检测周围环境的温度变化,并将其转换为电信号输出。

通过对这些信号进行处理和比较,我们可以确定小车当前所处位置以及应该向哪个方向前进。

三、构成智能小车红外循迹系统通常由以下几部分组成:1. 硬件部分:包括主控板、电机驱动模块、红外线传感器、电源等。

2. 软件部分:主要由程序控制,包括数据采集、处理和控制小车运动的算法等。

3. 机械部分:包括车身、轮子、齿轮等。

四、工作流程智能小车红外循迹的工作流程如下:1. 初始化:启动小车系统,进行硬件和软件的初始化操作。

2. 数据采集:通过红外线传感器对周围环境进行温度检测,并将检测到的信号转换为电信号输出。

3. 数据处理:将采集到的信号进行处理和比较,确定小车当前所处位置以及应该向哪个方向前进。

4. 控制运动:根据数据处理结果,控制电机驱动模块使小车向目标方向前进或停止。

5. 循环执行:重复执行上述步骤,使小车能够在特定路径上自动行驶。

五、总结智能小车红外循迹是一种基于红外线传感器的自动导航技术。

它通过对周围环境温度变化的检测和分析,实现了小车在特定路径上自动行驶。

该技术不仅具有较高的准确性和稳定性,而且具有较低的成本和易于实现的优点。

在未来,智能小车红外循迹技术有望被广泛应用于无人驾驶、智能家居等领域。

基于STM32的智能循迹避障小车

基于STM32的智能循迹避障小车

基于STM32的智能循迹避障小车智能循迹避障小车是一种智能机器人,可以通过传感器、控制器和驱动器等硬件部件,实时感知周围环境的变化,并进行巧妙的避障与循迹操作。

基于STM32芯片的智能循迹避障小车,是一种高效、稳定、智能的智能机器人,广泛应用于教育、娱乐、科学、技术等领域。

首先,基于STM32芯片的智能循迹避障小车,其核心部件是STM32单片机,它是一种低功耗、高性能、易开发的芯片。

STM32单片机集成了多个模块,如GPIO、USART、SPI、I2C、ADC、DAC等,可以实现很多功能。

智能循迹避障小车也需要多个模块来实现其功能,如超声波模块、红外循迹模块、电机驱动模块等,这些模块都可以通过STM32单片机进行控制,实现智能避障与循迹控制。

其次,基于STM32芯片的智能循迹避障小车,需要通过传感器来进行环境感知。

超声波模块是一种常用的传感器,用于检测小车与障碍物之间的距离。

红外循迹模块则可以检测小车所处的位置,实现循迹功能。

同时,还需要使用陀螺仪等传感器来感知小车的姿态和加速度,以实现精准的运动控制。

最后,基于STM32芯片的智能循迹避障小车需要进行驱动与控制。

电机驱动模块可以把控制信号转换成电源信号,驱动电机实现小车运动。

STM32单片机可以通过PWM信号产生驱动电机的脉冲信号,实现电机驱动。

通过编程,我们可以把传感器产生的数据与控制信号处理起来,实现智能循迹、避障、遥控和自主巡航等多种功能。

总之,基于STM32芯片的智能循迹避障小车,是一种高效、稳定、智能的机器人,具有良好的教育、娱乐、科技应用前景。

随着科技不断发展,智能化趋势不断深入,智能循迹避障小车也将在未来得到更广泛的应用和发展。

智能小车系统设计(循迹-超声波-遥控)

智能小车系统设计(循迹-超声波-遥控)

智能小车系统设计(循迹-超声波-遥控)智能小车系统是一种通过各种传感器来控制小车行进的系统。

本文将介绍一种基于循迹、超声波和遥控的智能小车系统设计。

系统设计硬件设计本系统采用Arduino开发板和小车底盘作为硬件,以循迹模块、超声波模块和遥控器模块作为传感器,可以实现小车的智能行驶。

1.小车底盘:本系统采用智能小车底盘,主要包括两个直流电机和两个轮子,可以控制小车行进的方向和速度。

此外,小车底盘还需配有4片AA电池进行供电。

2.循迹模块:循迹模块是通过红外线传感器检测黑色轨道上的反光点实现的。

根据反光点的位置,循迹模块会控制小车的方向,使小车始终在轨道上行驶。

3.超声波模块:超声波模块可以检测小车前方的障碍物距离和方向。

如果检测到前方有障碍物,则系统会控制小车减速或停止,避免碰撞。

4.遥控器模块:遥控器模块可以通过无线信号控制小车的方向和速度,可以让小车在没有循迹和超声波控制的情况下自由行驶。

软件设计本系统的软件设计采用Arduino的开发环境进行编写,主要包括循迹控制、超声波控制和遥控控制三个部分。

1.循迹控制:循迹控制部分主要是通过循迹模块检测反光点的位置,控制小车的方向和速度。

如果小车偏离轨道,循迹控制部分会自动调整小车的方向,使其回到轨道上行驶。

2.超声波控制:超声波控制部分主要是通过超声波模块检测前方障碍物的距离和方向,如果距离过近,则超声波控制部分会控制小车减速或停止,并发出声音提示。

3.遥控控制:遥控控制部分是通过遥控器发出信号控制小车行驶。

使用者可以通过遥控器控制小车的方向和速度,可以实现小车的自由行驶。

实现效果循迹效果本系统的循迹效果非常稳定,可以实现小车在黑色轨道上高速行驶。

在循迹模块检测到偏离轨道时,系统能够及时作出调整,使小车回到轨道上行驶。

超声波效果超声波模块能够准确地检测到前方障碍物的距离和方向。

如果距离过近,则系统能够及时控制小车减速或停止,避免碰撞。

遥控效果遥控器模块可以实现小车的自由行驶。

智能小车红外循迹模块原理

智能小车红外循迹模块原理

智能小车红外循迹模块原理
1. 红外循迹模块的作用
红外循迹模块是智能小车中的一个重要组成部分,它的主要作用是通
过红外线探测器来检测路面上的黑线,从而实现小车的自动循迹行驶。

2. 红外循迹模块的原理
红外循迹模块的原理是利用红外线探测器对路面上的黑线进行探测和
识别,从而实现小车的自动循迹行驶。

红外线探测器发射红外线,当
红外线照射到黑线上时,会被黑线吸收,从而导致探测器输出低电平
信号;当红外线照射到白色地面上时,会被反射回来,探测器便输出
高电平信号。

通过对探测器输出信号的检测和分析,就可以实现小车
的自动循迹行驶。

3. 红外循迹模块的组成
红外循迹模块主要由红外线发射器、红外线接收器、比较器、电路板
等组成。

其中,红外线发射器和接收器是红外循迹模块的核心部件,
它们负责发射和接收红外线信号,比较器则负责对接收到的信号进行
比较和处理,最终输出控制信号。

4. 红外循迹模块的应用
红外循迹模块广泛应用于智能小车、机器人、自动化生产线等领域,
它可以实现自动循迹、避障、巡线等功能。

同时,红外循迹模块还可
以与其他传感器、执行器等组合使用,实现更加复杂的智能控制系统。

5. 红外循迹模块的发展趋势
随着智能技术的不断发展和普及,红外循迹模块也在不断升级和改进。

未来,红外循迹模块将更加精准、灵敏,能够适应更加复杂和多变的
环境,为智能控制系统的发展提供更加强大的支持和保障。

智能小车循迹、避障、红外遥控C语言代码

智能小车循迹、避障、红外遥控C语言代码

//智能小车避障、循迹、红外遥控C语言代码//实现功能有超声波避障,红外遥控智能小车,红外传感器实现小车自动循迹,1602显示小车的工作状态,另有三个独立按键分别控制三种状态的转换//注:每个小车的引脚配置都不一样,要注意引脚的配置,但是我的代码注释比较多,看起来比较容易一点#include <>#include <>#include""#include <>#define uchar unsigned char#define uint unsigned intuchar ENCHAR_PuZh1[8]=" run ";//1602显示数组uchar ENCHAR_PuZh2[8]=" back ";uchar ENCHAR_PuZh3[8]=" stop ";uchar ENCHAR_PuZh4[8]=" left ";uchar ENCHAR_PuZh5[8]=" right ";uchar ENCHAR_PuZh6[8]=" xunji ";uchar ENCHAR_PuZh7[8]=" bizhang";uchar ENCHAR_PuZh8[8]=" yaokong";#define HW P2 //红外传感器引脚配置P2k口#define PWM P1 /* L298N管脚定义*//******************************超声波引脚控制******************************/sbit ECHO=P3^2; //超声波接收引脚定义兼红外遥控按键state_total =2 sbit TRIG=P3^3; //超声波发送引脚定义/////红外控制引脚配置sbit KEY2=P3^7; //红外接收器数据线兼循迹按键state_total= 0sbit KEY1=P3^4; //独立按键控制自动避障state_total=1uchar state_total=3,state_2=0;//总状态控制全局变量0为自动循迹模块1为自动避障模块2为红外遥控uchar state_1,DAT; //红外扫描标志位uchar time_1=0,time_2=0;//定时器1中断全局变量time_ 2控制PWM脉冲计数time_1控制转弯延时计数也做延时一次uchar time,timeH,timeL,state=0;//超声波测量缓冲变量state为超声波状态检测控制全局变量uint count=0; //1602显示计数/**************************/unsigned char IRCOM[7]; //红外接收头接收数据缓存IRCOM[2]存放的为数据unsigned char Number,distance[4],date_data[8]={0,0,0,0,0,0,0,0}; //红外接收缓存变量/***********/void IRdelay(char x); //x* 红外头专用delayvoid run();void 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; //设置定时器0 1 工作方式1 16位初值定时器TH1=0Xfe; //装入初值定时一次为2000hzTL1=0x0c;TF0=0; //定时器0方式1计数溢出标志TF1=0; //定时器1方式1计数溢出标志ET0=1; //允许定时器0中断溢出ET1=1; //允许定时器1中断溢出EA=1; //开总中断if(state_total==1)//为超声波模块时初始化{TRIG=0; //发射引脚低电平ECHO=0; // 接收引脚低电平EX0=0; //关闭外部中断IT0=1; //由高电平变低电平,触发外部中断0}if(state_total==2) //红外遥控初始化{ IT1=1; //外部中断1为负跳变触发EX1=1; //允许外部中断1TRIG=1; // 为高电平I/O口初始化}delay(60); //等待硬件操作}void main(){ uint i;delay(50);init_test();TR1=1; //开启定时器1LCD1602_Init() ;delay(50);while(state_2==0){if(KEY1==0) //检测按键s1是否按下{Delay10ms(); //消除抖动if(KEY1==0){state_total=0; //总状态定义0为自动循迹模块1为自动避障模块2为红外遥控while((i<30)&&(KEY1==0)) //检测按键是否松开{Delay10ms();i++;}i=0;}}if(TRIG==0) //检测按键s2是否按下{Delay10ms(); //消除抖动if(TRIG==0){state_total=1; //总状态定义0为自动循迹模块1为自动避障模块2为红外遥控while((i<30)&&(TRIG==0)) //检测按键是否松开{Delay10ms();i++;}i=0;}}if(KEY2==0) //检测按键s3是否按下{Delay10ms(); //消除抖动if(KEY2==0){state_total=2; //总状态定义0为自动循迹模块1为自动避障模块2为红外遥控while((i<30)&&(KEY2==0)) //检测按键是否松开{Delay10ms();i++;}i=0;}}}init_test();delay(50); //等待硬件操作50usTR1=0; //关闭定时器1if(state_total==1){//SPEED=90; //自动循迹速度控制高电平持续次数占空比为10的低电平bizhang_test();}if(state_total==0){// SPEED=98; //自动循迹速度控制高电平持续次数占空比为40的低电平xunji_test();}if(state_total==2){//SPEED=98; //自动循迹速度控制高电平持续次数占空比为40的低电平hongwai_test();}}void init0_suspend(void) interrupt 0 //3 为定时器1的中断号 1 定时器0的中断号0 外部中断1 2 外部中断0 4 串口中断{timeH=TH0; //记录高电平次数timeL=TL0; //state=1; //标志状态为1,表示已接收到返回信号EX0=0; //关闭外部中断0}void time0_suspend0(void) interrupt 1 //3 为定时器1的中断号 1 定时器0的中断号0 外部中断1 2 外部中断0 4 串口中断{if(state_total==1) // 自动避障初值装入{ TH0=0X00; //装入初值TL0=0x00;}if(state_total==0) //自动循迹初值装入{ TH0=0Xec; //装入初值定时一次200hzTL0=0x78;time_1++; //控制转弯延时计数}}void IR_IN(void) interrupt 2{unsigned char j,k,N=0;EX1 = 0;IRdelay(5);if (TRIG==1){ EX1 =1;return;}//确认IR信号出现while (!TRIG) //等IR变为高电平,跳过9ms的前导低电平信号。

基于红外传感器的智能循迹小车设计

基于红外传感器的智能循迹小车设计

基于红外传感器的智能循迹小车设计首先设计基于ARM Cortex-M3内核的智能小车控制系统,利用模块化的理念设计了无线通信、红外传感器、避障模块、电机驱动、电机测速、电源管理等硬件模块,采用NRF24L01设计了智能小车的无线通讯系统,利用红外传感器沿白线寻迹,采用光电编码器实现小车的测速功能,设计了小车行车程序,实现小车按控制者要求完成特定路线,并通过软件速度调节实现小车启停、匀速和加减速控制。

标签:NRF24L01无线传输;智能小车;红外传感器寻迹引言在当代智能化的潮流下,通过智能化能从很大程度上减轻人工的工作负担,是今后的发展方向。

本设计的智能寻迹小车,可以按照预设的模式在一个预先安置轨迹的环境里,根据指令在不同的预设节点间自行运作,并具避障能力。

采用STM32F103VBT6芯片作为小车的检测控制核心;采用以LM339电压比较器为核心的红外传感器模块进行循迹,并采用hc-sr04超声波模块检测障碍物,使微处理器按照预设的模式控制小车进行寻迹和避障。

1 控制系统结构和无线通信网络设计基于ARM Cortex-M3 内核的STM32F103VBT6微处理器芯片和nRF24L01的智能小车涉及到传感器应用、无线传输等。

智能小车上电后,可由上位机确定小车的工作方式(待机,循迹或避障等);循迹,避障模块是根据相应传感器所检测数据来执行相应动作。

为了获取对小车方位的精准定位,这里选择建设坐标的方式并根据运行情况更新坐标。

(1)要实现自动寻迹,智能小车的传感器系统必须通过各类传感器,获取小车的状态、场地环境特征两种信号。

(2)预行轨道设计.本设计的预设主行驶轨迹分为横向(Y轴)与纵向(X 轴)。

节点标志为与主行驶轨迹垂直,且于主行驶轨迹等宽的一条线段与主行驶轨迹的交点。

即主行驶轨迹X轴与Y轴的交点也视为一个节点。

2 控制系统硬件和软件设计智能小车的硬件采用模块化设计理念,智能小车的硬件设计如图2所示,主要包括以下几个方面。

智能小车循迹原理

智能小车循迹原理

智能小车循迹原理智能小车常用的循迹原理有光电循迹原理、红外循迹原理和超声波循迹原理等。

光电循迹原理是最常用的循迹原理之一、光电循迹传感器通常由发射器和接收器组成,发射器会发出红外线光束,当光束遇到地面时会反射回来。

而接收器会检测到反射回来的光束,从而判断小车当前位置是否在指定的轨迹上。

当小车偏离轨迹时,光电循迹传感器会检测到反射回来的光束变化,通过控制算法计算出需要进行的调整方向和角度,并通过控制小车的电机使其偏离的反方向进行调整,从而使小车重新回到指定的轨迹上。

红外循迹原理是利用红外传感器来检测地面上的黑线信号。

红外传感器可以发射红外线,并通过接收器来检测红外线的强度。

当红外线发射器发出的红外线照射到地面上的黑线时,会产生明显的反射信号。

通过控制算法来检测和分析反射信号的强度,从而判断小车当前位置是否在指定的轨迹上。

当小车偏离轨迹时,红外传感器会检测到反射信号的变化,通过控制算法计算出需要进行的调整方向和角度,并通过控制小车的电机使其偏离的反方向进行调整,从而使小车重新回到指定的轨迹上。

超声波循迹原理是利用超声波传感器来检测距离和障碍物。

超声波传感器可以发射超声波,并通过接收器来接收反射波。

当反射波遇到地面上的黑线时,会产生明显的反射信号。

通过控制算法来检测和分析反射信号的强度和距离,从而判断小车当前位置是否在指定的轨迹上。

当小车偏离轨迹时,超声波传感器会检测到反射信号的变化,通过控制算法计算出需要进行的调整方向和角度,并通过控制小车的电机使其偏离的反方向进行调整,从而使小车重新回到指定的轨迹上。

除了上述的循迹原理,还有其他一些循迹原理,例如激光循迹原理、磁感应循迹原理等。

不同的循迹原理适用于不同的场景和需求,在实际应用中可以根据具体情况选择适合的原理和传感器。

总结起来,智能小车循迹原理是通过传感器和控制算法的配合,实现小车在指定轨迹上行驶的技术原理。

通过不断地检测和分析传感器信号,运用控制算法计算出需要的调整方向和角度,并通过控制电机的运动,使小车能够自动偏离反方向进行调整,最终使小车能够精确地沿着指定的轨迹行驶。

小车红外循迹模块原理和应用

小车红外循迹模块原理和应用
当被检测的物体为白色物体时红外光电二极管u1发射的光线会被白纸反射回来这时在红外线传感器的接收端会得到很强的光照这是光敏三极管就会导通
通信1001 鞠亮
一.感应方案的选用 二.传感器的检测原理 三.电路的焊接 四.软件的设计
二.传感器的检测原理
图3.4 红外对管检测电路
寻线电路采用的是红外对管ST188(光电传感器), 光电传感器的前端面与被测物体的最佳检测距离为 8±1.5mm。 当检测的物体为黑色物体时,红外光管二极管U1发 射出的光线大部分被检测的黑色物体所吸收,反射 的光线已经很微弱,光敏三极管无法导通。所以 LM311的2脚为高电平,并且与3脚的输出电压同时 送入比较器LM311进行比较。由于U2>U3,使得 LM311的7脚电平输出为高,发光二极管不亮,最后 输出Vout为高。当被检测的物体为白色物体时,红 外光电二极管U1发射的光线会被白纸反射回来,这 时在红外线传感器的接收端会得到很强的光照,这 是光敏三极管就会导通。比较器LM311的2脚就会接 地,为低电平,与3脚的电压比较后再7脚的输出端 输出一个低电平。这时发光二极管就会形成回路, 发出红光,输出端Vout为低。将比较器的输出Vout 送入单片机中进行判断就可以判断出此时被检测的 轨迹是白色还是黑色的。
{
if(speed>=-100 && speed<=100)
{
if(index==1) //电机1的处理
{
m1=abs(speed); //取速度的绝对值
if(speed<0) //速度值为负则反转
{
s1=0;
s2=1;
}
else
//不为负数则正转
{
s1=1;
s2=0;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

相信进来的都是想学习和制作智能小车的,最近也在学习智能小车,我们的小车功能时红外遥控小车,小车避障,小车寻迹。

现在将学习过程中所发现的一些比较好的代码与大家分享,希望能对大家有所帮助。

红外遥控#include <stc15.h>#include <gpio.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit IRIN = P3^2; //红外线一体化接收头接收端sbit out1=P2^1;sbit out2=P2^2;sbit out3=P2^3;sbit out4=P2^4;sbit out5=P2^5;sbit out6=P2^6;sbit out7=P2^7;sbit out8=P2^0;uchar IRTemp; //红外线按键数据存放变量uchar IRCOM[7]={0};//存放红外解码后的32位数据void Delay_140us(uchar t) //延时140us{uchar i,j;for(j=0; j<t; j++){for (i=0; i<27; i++){_nop_();}}}void Delay_1ms(uint t) //延时1ms{uint i,j;for(i=0;i<t;i++){for(j=0;j<=100;j++){_nop_();}}}void OutsideInit(void) //设置外部中断初始化{EX0 = 1; //开外部中断0IT0 = 1; //负边沿触发EA = 1; //开总中断}void IRReceive(void) interrupt 0 using 2 //设置中断接收红外编码{uchar i, j, count = 0;EX0 = 0; //关闭外部中断1Delay_140us(20);if(IRIN == 1) //确认红外线信号出现{EX0 = 1;return;}while(!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。

{Delay_140us(1);}while(IRIN) //等IR变为低电平,跳过4.5ms的前导高电平信号。

{Delay_140us(1);}for (i=0;i<4;i++) //收集四组数据{for(j=0;j<8;j++) //每组数据有8位{while (!IRIN) //等IR 变为高电平{Delay_140us(1);}while(IRIN) //计算IR高电平时长{Delay_140us(1);count++;if(count >= 30) //计数过长自动离开。

{EX0=1;return;}}IRCOM[i] = IRCOM[i] >> 1; //数据右移一位,最高位补"0"if(count >=6 ){IRCOM[i] = IRCOM[i] | 0x80; //数据最高位或上"1"}count = 0;}}if(IRCOM[2]!=~IRCOM[3]) //不相等,则红外遥控解码错误{EX0=1;return;}EX0 = 1;}void Main(void){IRIN = 1; //接收端口初始化OutsideInit(); //初始化外部中断while (1){if (IRCOM[2]==0x0c) //按1out1=0;else out1=1;if (IRCOM[2]==0x18) //按2out2=0;else out2=1;if (IRCOM[2]==0x5e) //按3out3=0;else out3=1;if (IRCOM[2]==0x08) //按4out4=0;else out4=1;if (IRCOM[2]==0x1c) //按5out5=0;else out5=1;if (IRCOM[2]==0x5a) //按6out6=0;else out6=1;if (IRCOM[2]==0x42) //按7out7=0;else out7=1;if (IRCOM[2]==0x52) //按8out8=0;else out8=1;}}电机驱动#include <stc15.h>#include <intrins.h>#include <gpio.h>#include <595hc.h>#define unsigned char#define unsigned intuchar pwm=20;uchar pwmh=1;uchar conter=0;uchar m=1;bit sw=1;bit lr=0;sbit ksw=P1^0;sbit klr=P1^1;sbit kspu=P1^2;sbit kspd=P1^3;sbit m1=P1^4;sbit m2=P1^5;void Delay1ms() //@11.0592MHz {unsigned char i, j;_nop_();_nop_();_nop_();i = 11;j = 190;do{while (--j);} while (--i);}//tms延时void Delayxms (uint t){uchar i;for(i-0;i<t;i++){Delay1ms();}}void Time0_inti(void){TMOD=0X02;TH0=56;TL0=56;ET0=1;EA=1;TR0=1;}void Timer0_int()interrupt1 using 1 {counter++;if(counter>pwmh){m=0;}if (counter=pwmh){counter=0;m1=1;}}void main (){gpio();Time0_int();while (1){if(ksw==0){Delayxms(10);if (ksw==0){sw=~sw;}while (ksw==0)display();}if(klr==0){Delayxms(10);if (klr==0){lr=~lr;}while (klr==0)display();}if(kspu==0){Delayxms(10);if (kspu==0){pwmh++;if(pwmh==pwm){pwmh=pwm-1;}}while (kspu==0)display();}if (kspd==0){Delayxms(10);if (kspd==0){pwmh--;if (pwmh==0){pwmh=1;}}while (kspd==0)display(); }if (sw==0){m1=0;m2=0;Dis_buf[0]=13;Dis_buf[1]=13;Dis_buf[2]=13;Dis_buf[3]=13;Dis_buf[4]=13;Dis_buf[5]=13;Dis_buf[6]=13;Dis_buf[7]=13;}if(sw==1){Dis_buf[0]=pwm%10;Dis_buf[1]=pwm/10;Dis_buf[2]=12;Dis_buf[3]=pwmh%10;Dis_buf[4]=pwm/10;Dis_buf[5]=12;Dis_buf[6]=12;if (lr==0){m1=0;m2=m;Dis_buf[7]=10;}if (lr==1){m1=m;m2=0;Dis_buf[7]=11;}}display();}}超声波避障#include <stc15.h>#include <intrins.h>#include <gpio.h>#define uchar unsigned char#define uint unsigned intsbit tri=P2^0;sbit rea=P2^1;sbit bell=P2^7;uchar count;bit bell_flag;void Delay12us() //@11.0592MHz {unsigned char i;_nop_();_nop_();_nop_();i = 30;while (--i);}//tms延时void Delayxms (uint t){uint i;for(i-0;i<t;i++)}void init(){tri=0;TMOD=0X10;TR1=0;TH1=0;TL1=0;}uint test_distance(){uint date;tri=1;Delay12us();tri=0;while (!rea)TR1=0;date=(uint)(TH1*256+TL1)/10*18;TH1=0;TL1=0;if (date<2000)bell_flag=0;elsebell_flag=1;return date;}void main (){uint distance;gpio();init();while (1){distance=test_distance();dis_duf[0]=distance%10;dis_duf[1]=distance/10%10;dis_duf[2]=distance/100%10+17;dis_duf[3]=distance/1000%10;dis_duf[4]=distance/10000%10;display();if(bell_flag)bell~bell;elsebell=1;Delayxms(30);}}红外寻迹#include <REGX52.H> //包含51单片机相关的头文件sbit LeftLed=P2^0; //定义前方左侧指示灯端口sbit RightLed=P0^7; //定义前方右侧指示灯端口sbit FontLled=P1^0;sbit LeftIR=P3^5; //定义前方左侧红外探头端口sbit RightIR=P3^6; //定义前方右侧红外探头端口sbit FontIR=P3^7; //定义前方正前方红外探头端口sbit M1A=P0^0; //定义左侧电机驱动A端sbit M1B=P0^1; //定义左侧电机驱动B端sbit M2A=P0^2; //定义右侧电机驱动A端sbit M2B=P0^3; //定义右侧电机驱动B端sbit B1=P0^4; //定义语音识识别传感器端口sbit SB1=P0^6; //定义蜂鸣器端口void tingzhi(){M1A=0; //将M1电机A端初始化为0 M1B=0; //将M1电机B端初始化为0 M2A=0; //将M2电机A端初始化为0 M2B=0;}void qianjin(){M1A=1;M1B=0;M2A=1;M2B=0;}void houtui(){M1A=0;M1B=1;M2A=0;M2B=1;}void zuozhuan(){M1A=0;M1B=1;M2A=1;M2B=0;}void youzhuan(){M1A=1;M1B=0;M2A=0;M2B=1;}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 ControlCar(unsigned char ConType) //定义电机控制子程序{tingzhi();switch(ConType) //判断用户设定电机形式{case 1: //前进//判断用户是否选择形式1 {qianjin();break;}case 2: //后退//判断用户是否选择形式2 {houtui(); //M2电机反转break;}case 3: //左转//判断用户是否选择形式3 {zuozhuan(); //M2电机正转break;}case 4: //右转//判断用户是否选择形式4 {youzhuan(); //M1电机正转//M2电机反转break;}case 8: //停止//判断用户是否选择形式8{tingzhi();break; //退出当前选择}}}void main() //主程序入口{bit RunFlag=0; //定义小车运行标志位//RunShow=0; //初始化显示状态ControlCar(8); //初始化小车运行状态while(1) //程序主循环{Start:LeftLed=LeftIR; //前方左侧指示灯指示出前方左侧红外探头状态RightLed=RightIR; //前方右侧指示灯指示出前方右侧红外探头状态FontLled= FontIR;SB1=LeftIR;if(LeftIR == 0 && RightIR == 0) //三个红外检测到黑线,就前进{ControlCar(1); //左侧没有信号时,开始向右转一定的角度delay_nms (10);goto NextRun;}if(LeftIR == 0 && RightIR == 1){ControlCar(3); //右侧没有信号时,开始向左转一定的角度delay_nms (10);goto NextRun;}if(LeftIR == 1 && RightIR == 0){ControlCar(4); //右侧没有信号时,开始向左转一定的角度delay_nms (10);goto NextRun;}goto Start;NextRun:ControlCar(8);}}//备注:此例程仅为参考程序,请根据自己的道路进行最优化调整。

相关文档
最新文档