智能循迹避障小车设计

合集下载

智能循迹小车___设计报告

智能循迹小车___设计报告

智能循迹小车___设计报告设计报告:智能循迹小车一、设计背景智能循迹小车是一种能够通过感知地面上的线条进行导航的小型机器人。

循迹小车可以应用于许多领域,如仓库管理、物流配送、家庭服务等。

本设计旨在开发一款功能强大、性能稳定的智能循迹小车,以满足不同领域的需求。

二、设计目标1.实现循迹功能:小车能够准确地识别地面上的线条,并按照线条进行导航。

2.提供远程控制功能:用户可以通过无线遥控器对小车进行控制,包括前进、后退、转向等操作。

3.具备避障功能:小车能够识别和避开遇到的障碍物,确保行驶安全。

4.具备环境感知功能:小车能够感知周围环境,包括温度、湿度、光照等参数,并将数据传输给用户端。

5.高稳定性和可靠性:设计小车的硬件和软件应具备较高的稳定性和可靠性,以保证长时间的工作和使用。

三、设计方案1.硬件设计:(1) 采用Arduino控制器作为主控制单元,与传感器、驱动器等硬件模块进行连接和交互。

(2)使用红外传感器作为循迹传感器,通过检测地面上的线条来实现循迹功能。

(3)使用超声波传感器来检测小车前方的障碍物,以实现避障功能。

(4)添加温湿度传感器和光照传感器,以提供环境感知功能。

(5)将无线模块与控制器连接,以实现远程控制功能。

2.软件设计:(1) 使用Arduino编程语言进行程序设计,编写循迹、避障和远程控制的算法。

(2)设计用户界面,通过无线模块将控制信号发送给小车,实现远程控制。

(3)编写数据传输和处理的程序,将环境感知数据发送到用户端进行显示和分析。

四、实施计划1.硬件搭建:按照设计方案中的硬件模块需求,选购所需元件并进行搭建。

2.软件开发:根据设计方案中的软件设计需求,编写相应的程序并进行测试。

3.功能调试:对小车的循迹、避障、远程控制和环境感知功能进行调试和优化。

4.性能测试:使用不同场景和材料的线条进行测试,验证小车的循迹性能。

5.用户界面开发:设计用户端的界面,并完成与小车的远程控制功能的对接。

智能循迹小车课程设计报告

智能循迹小车课程设计报告

智能循迹小车课程设计报告一、课程设计目标:本次智能循迹小车课程设计的目标是让学生了解智能硬件的基础知识,掌握基本电子元器件的原理及使用方法,学习控制系统的组成和运行原理,并通过实践操作设计出一款功能齐全的智能循迹小车。

二、课程设计内容及步骤:1. 调研与分析——首先要对市面上现有的智能循迹小车进行调研与分析,了解各种类型的循迹小车的特点和优缺点,为后续的设计提供参考。

2. 硬件选型——根据课程设计目标和实际需要,选择合适的主控芯片、电子元器件和传感器等硬件。

3. 原理图设计——根据硬件选型,设计出对应的原理图,并在硬件上进行布局与焊接。

4. 程序设计——先在电路板上测试硬件是否正常,随后进行程序设计,根据传感器的反馈控制小车的运动,让小车能够沿着黑线自动循迹行驶,同时加入避障功能和自动寻迹功能。

5. 调试与优化——完成程序设计后,要对小车进行全面验收测试,发现问题及时解决并优化相关程序。

三、设计思路:本次课程设计基于树莓派电路板,利用循迹模块实现小车的自动循迹和自动寻迹。

同时将超声波模块结合避障算法实现小车的自动避障。

小车的外壳采用3D打印技术制作,操作简单实用。

四、课程设计效果:通过本课程设计,学生们从理论到实践,了解了智能硬件的基础知识,掌握了基本电子元器件的原理及使用方法,学习了控制系统的组成和运行原理。

同时,实践操作过程中,学生们培养了动手能力和实际操作的技能。

通过制作一台智能循迹小车,学生们对智能硬件的认识更加深入,并获得了较高的设计满足感。

五、课程设计展望:智能循迹小车是智能硬件应用领域的一项重要发明,具有广泛的应用前景。

未来,可以将循迹小车应用于快递、物流等行业,实现自动化送货、配送。

同时可以将遥控技术与循迹技术相结合,设计出更加高效、实用的智能循迹小车,推动智能化生产和工作环境。

智能小车用红外循迹避障模块设计方案

智能小车用红外循迹避障模块设计方案

循迹避障模块设计方案包括电路原理图、实物图、器件表以及程序源代码循迹避障模块PCB图正面循迹避障模块PCB图背面循迹避障模块器件(BOM)表实物图封装直插直插直插直插直插直插封装封装直插封装封装表贴循迹避障模块实物图循迹避障模块电路板正面循迹避障模块电路板背面循迹避障程序源代码/*************51单片机智能小车红外循迹避障运动程序源代码***************开发软件:KEIL。

单片机型号:STC15W4K56S4。

单片机内部时钟,频率为22.1184M。

**********************************************************************/#include "stc15.h" //包含头文件stc15.h#include <intrins.h> //包含头文件intrins.h#define Busy 0x80 //LCD忙#define warning_voltage 7.0 //电池报警电压值#define ADC_POWER 0x80 //将0x80宏定义成ADC_POWER#define ADC_FLAG 0x10 //将0x10宏定义成ADC_FLAG#define ADC_START 0x08 //将0x08宏定义成ADC_START#define ADC_SPEEDLL 0x00 //将0x00宏定义成ADC_SPEEDLL#define ADC_SPEEDL 0x20 //将0x20宏定义成ADC_SPEEDL#define ADC_SPEEDH 0x40 //将0x40宏定义成ADC_SPEEDH#define ADC_SPEEDHH 0x60 //将0x60宏定义成ADC_SPEEDHHsbit Red_LED = P0^4; //红色LED对应P0.4sbit Green_LED = P0^5; //绿色LED对应P0.5sbit Blue_LED = P5^2; //蓝色LED对应P5.2sbit Yellow_LED = P5^3; //黄色LED对应P5.3sbit Beep = P4^4; //蜂鸣器对应P4.4sbit LCD_D4 = P4^3; //LCD_D4对应P4.3sbit LCD_D5 = P4^2; //LCD_D5对应P4.2sbit LCD_D6 = P2^7; //LCD_D6对应P2.7sbit LCD_D7 = P5^1; //LCD_D7对应P5.1sbit LCD_RS = P4^1; //LCD_RS对应P4.1sbit LCD_RW = P3^5; //LCD_RW对应P3.5sbit LCD_EN = P2^6; //LCD_EN对应P2.6sbit U6_L293D_En1_En2 = P1^7; //L293D(U6)的EN1和EN2对应P1.7 sbit U6_L293D_In1_In3 = P4^7; //L293D(U6)的IN1和IN3对应P4.7 sbit U6_L293D_In2_In4 = P1^6; //L293D(U6)的IN2和IN4对应P1.6 sbit U7_L293D_En1_En2 = P0^6; //L293D(U7)的EN1和EN2对应P0.6 sbit U7_L293D_In1_In3 = P0^7; //L293D(U7)的IN1和IN3对应P0.7 sbit U7_L293D_In2_In4 = P1^2; //L293D(U7)的IN2和IN4对应P1.2 sbit HW_LEFT_WAI = P2^0; //HW_LEFT_WAI对应IO口P2.0sbit HW_LEFT_NEI = P2^2; //HW_LEFT_NEI对应IO口P2.2sbit HW_RIGHT_NEI = P2^3; //HW_RIGHT_NEI对应IO口P2.3sbit HW_RIGHT_WAI = P2^4; //HW_RIGHT_WAI对应IO口P2.4sbit HW_LEFT = P2^1; //红外避障模块左外对应IO口P2.1 sbit HW_RIGHT = P2^5; //红外避障模块左内对应IO口P2.5 sbit Key_1 = P5^2; //Key1对应IO口P5.2sbit Key_2 = P0^4; //Key2对应IO口P0.4sbit Key_3 = P0^5; //Key3对应IO口P0.5sbit Key_4 = P5^3; //Key4对应IO口P5.3unsigned char code Start[]={"CAR START"}; //LCD显示内容CAR START unsigned char code Work[]={"CAR WORK"}; //LCD显示内容CAR WORK unsigned char code Voltage[]={"V: . V"}; //LCD显示内容V:unsigned char code VlotageLow[]={"LOW"}; //LCD显示内容LOWunsigned char code Space1[]={" "}; //LCD显示内容空白unsigned char code Space3[]={" "}; //LCD显示内容空白unsigned char code Forward[]={"FORWARD"}; //LCD显示内容FORWARD unsigned char code Back[]={"BACK"}; //LCD显示内容BACK unsigned char code Ting[]={"TING"}; //LCD显示内容TING unsigned char code Left[]={"LEFT"}; //LCD显示内容LEFT unsigned char code Right[]={"RIGHT"}; //LCD显示内容RIGHT unsigned char code ClockWise[]={"CLOCKWISE"}; //LCD显示内容CLOCKWISE unsigned char code AntiClockWise[]={"ANTICLOCKWISE"};//LCD显示内容ANTICLOCKWISE unsigned char code PressKey1[]={"P: K1"}; //LCD显示内容P: K1 unsigned char code PressKey2[]={"P: K2"}; //LCD显示内容P: K2 unsigned char code PressKey3[]={"P: K3"}; //LCD显示内容P: K3 unsigned char code PressKey4[]={"P: K4"}; //LCD显示内容P: K4 unsigned char code Hwxjbz[]={"HWXJBZ"}; //LCD显示内容HWXJBZvoid delay(unsigned int t); //delay延时函数void delay_us(unsigned int t); //delay_us延时函数void delay_ms(unsigned int t); //delay_ms延时函数void Delay5Ms(void); //延时函数void LED_INIT(void); //LED对应的IO口初始化void Red_Led_On(void); //红色LED亮void Red_Led_Off(void); //红色LED灭void Blue_Led_On(void); //蓝牙LED亮void Blue_Led_Off(void); //蓝色LED灭void Green_Led_On(void); //绿色LED亮void Green_Led_Off(void); //绿色LED灭void Yellow_Led_On(void); //黄色LED亮void Yellow_Led_Off(void); //黄色LED灭void BEEP_INIT(void); //蜂鸣器对应的IO口初始化void BEEP_ON(void); //蜂鸣器响void BEEP_OFF(void); //蜂鸣器不响void GPIO_1602_Configuration(void); //LCD1602液晶IO口初始化void WriteDataLCD(unsigned char WDLCD); //LCD写数据函数void WriteCommandLCD(unsigned char WCLCD,BuysC); //LCD写命令函数unsigned char ReadDataLCD(void); //LCD读数据函数unsigned char ReadStatusLCD(void); //LCD读状态函数void LCDInit(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 GPIO_MOTOR_Configuration(void); //电机控制IO口初始化void CAR_FORWARD(void); //智能小车前进void CAR_LEFT(void); //智能小车左转void CAR_RIGHT(void); //智能小车右转void CAR_STOP(void); //智能小车停止void ZUO_MOTOR_ZZ(void); //智能小车左侧电机正转void ZUO_MOTOR_TZ(void); //智能小车左侧电机停转void YOU_MOTOR_ZZ(void); //智能小车右侧电机正转void YOU_MOTOR_TZ(void); //智能小车右侧电机停转void HWXJ_INIT(void); //红外循迹模块对应的IO口初始化void Voltage_Warning(void); //测量电池电压void Timer0_Init(void); //定时器初始化void LEFT_MOTO(void); //左电机PWM调速函数void RIGHT_MOTO(void); //右电机PWM调速函数void CAR_HWXJ(void); //小车红外循迹函数void CAR_HWBZ(void); //小车红外循迹避障void HWBZ_INIT(void); //红外避障模块对应的IO口初始化void KEY_INIT(void); //KEY对应的IO口初始化void Key1_SCAN(void); //按键扫描void ADC_INIT(void); //AD初始化unsigned char GetADCResult(unsigned char ch);//获取AD值unsigned char pwmval_left = 0; //变量定义unsigned char pwmval_right = 0; //变量定义unsigned char pwmval_left_init = 5; //左电机占空比调节unsigned char pwmval_right_init = 5; //右电机占空比调节bit right_pwm = 1; //右电机PWM开关,为1时打开bit left_pwm = 1; //左电机PWM开关,为1时打开/************************延时函数***************************/void delay(unsigned int t) //delay延时函数{while(t--);}void delay_us(unsigned int t) //delay_us延时函数{unsigned char i;while(t--){i=3;while(i--)delay(1);}}void delay_ms(unsigned int t) //delay_ms延时函数{while(t--) {delay_us(t);}}void Delay5Ms(void) //5ms延时函数{unsigned int TempCyc = 3552;while(TempCyc--);}/**********************LED相关函数*************************/void LED_INIT(void) //LED对应的IO口初始化{P0M1=P0M1&0xcf;P0M0=P0M0&0xcf; //P0.5,P0.4设置为双向IO口 P5M1=P5M1&0xf3;P5M0=P5M0&0xf3; //P5.3,P5.2设置为双向IO口}void Red_Led_On(void) //红色LED亮{Red_LED = 0;}void Red_Led_Off(void) //红色LED灭{Red_LED = 1;}void Blue_Led_On(void) //蓝牙LED亮{Blue_LED = 0;}void Blue_Led_Off(void) //蓝色LED灭{Blue_LED = 1;}void Green_Led_On(void) //绿色LED亮{Green_LED = 0;}void Green_Led_Off(void) //绿色LED灭{Green_LED = 1;}void Yellow_Led_On(void) //黄色LED亮{Yellow_LED = 0;}void Yellow_Led_Off(void) //黄色LED灭{Yellow_LED = 1;}/*********************蜂鸣器相关函数***********************/void BEEP_INIT(void) //蜂鸣器对应的IO口初始化{P4M1=P4M1&0xef;P4M0=P4M0&0xef;}void BEEP_ON(void) //蜂鸣器响{Beep=0;}void BEEP_OFF(void) //蜂鸣器不响{Beep=1;}/*******************液晶LCD1602相关函数********************/void GPIO_1602_Configuration(void) //LCD1602液晶IO口初始化{P2M1=P3M1&0x3f;P2M0=P3M0&0x3f;P3M1=P3M1&0xdf;P3M0=P3M0&0xdf;P4M1=P4M1&0xf1;P4M0=P4M0&0xf1;P5M1=P5M1&0xfd;P5M0=P5M0&0xfd;}unsigned char ReadStatusLCD(void) //测试LCD忙碌状态{LCD_D7 = 1; //LCD的D7置1LCD_RS = 0; //LCD管脚RS设置成低电平 LCD_RW = 1; //LCD管脚RW设置成高电平LCD_EN = 0; //LCD管脚E设置成低电平 LCD_EN = 0; //LCD管脚E设置成低电平 LCD_EN = 1; //LCD管脚E设置成高电平 while(LCD_D7); //检测忙信号return(Busy); //表示当前忙}void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if(BuysC) ReadStatusLCD(); //根据需要检测忙LCD_EN = 0; //LCD管脚E设置成低电平 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //延时LCD_RS = 0; //LCD管脚RS设置成低电平 LCD_RW = 0; //LCD管脚RW设置成低电平 if((WCLCD&0x80)==0x80){LCD_D7=1;}else{LCD_D7=0;}if((WCLCD&0x40)==0x40){LCD_D6=1;}else{LCD_D6=0;}if((WCLCD&0x20)==0x20){LCD_D5=1;}else{LCD_D5=0;}if((WCLCD&0x10)==0x10){LCD_D4=1;}else{LCD_D4=0;}LCD_EN = 1; //LCD管脚E设置成高电平 LCD_EN = 0; //LCD管脚E设置成低电平 if((WCLCD&0x08)==0x08){LCD_D7=1;}else{LCD_D7=0;}if((WCLCD&0x04)==0x04){LCD_D6=1;}else{LCD_D6=0;}if((WCLCD&0x02)==0x02){LCD_D5=1;}else{LCD_D5=0;}if((WCLCD&0x01)==0x01){LCD_D4=1;}else{LCD_D4=0;}LCD_EN = 1; //LCD管脚E设置成高电平 LCD_EN = 0; //LCD管脚E设置成低电平}void WriteDataLCD(unsigned char WDLCD) //LCD写数据函数{ReadStatusLCD(); //读取LCD状态LCD_EN = 0; //LCD管脚E设置成低电平 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //延时LCD_RS = 1; //LCD管脚RS设置成高电平 LCD_RW = 0; //LCD管脚RW设置成低电平 if((WDLCD&0x80)==0x80){LCD_D7=1;}else{LCD_D7=0;}if((WDLCD&0x40)==0x40){LCD_D6=1;}else{LCD_D6=0;}if((WDLCD&0x20)==0x20){LCD_D5=1;}else{LCD_D5=0;}if((WDLCD&0x10)==0x10){LCD_D4=1;}else{LCD_D4=0;}LCD_EN = 1; //LCD管脚E设置成高电平 LCD_EN = 0; //LCD管脚E设置成低电平 if((WDLCD&0x08)==0x08){LCD_D7=1;}else{LCD_D7=0;}if((WDLCD&0x04)==0x04){LCD_D6=1;}else{LCD_D6=0;}if((WDLCD&0x02)==0x02){LCD_D5=1;}else{LCD_D5=0;}if((WDLCD&0x01)==0x01){LCD_D4=1;}else{LCD_D4=0;}LCD_EN = 1; //LCD管脚E设置成高电平LCD_EN = 0; //LCD管脚E设置成低电平}void LCDInit(void) //LCD初始化{LCD_D7=0;LCD_D6=0;LCD_D5=0;LCD_D4=0;WriteCommandLCD(0x28,0);Delay5Ms(); //三次显示模式设置WriteCommandLCD(0x28,0);Delay5Ms();WriteCommandLCD(0x28,0);Delay5Ms();WriteCommandLCD(0x28,1); //显示模式设置WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(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; //算出指令码WriteCommandLCD(X,0); //这里不检测忙信号,发送地址码WriteDataLCD(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]>=0x20) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]);//显示单个字符ListLength++;X++;}}}/********************电机控制相关函数**********************/void GPIO_MOTOR_Configuration(void) //电机控制IO口初始化{P0M1=P0M1&0x3f;P0M0=P0M0&0x3f;P1M1=P1M1&0x3b;P1M0=P1M0&0x3b;P4M1=P4M1&0x7f;P4M0=P4M0&0x7f;}void CAR_FORWARD(void) //智能小车前进{ZUO_MOTOR_ZZ();YOU_MOTOR_ZZ();} //智能小车左侧电机正转,右侧电机正转void CAR_LEFT(void) //智能小车左转{ZUO_MOTOR_TZ();YOU_MOTOR_ZZ();} //智能小车左侧电机停转,右侧电机正转void CAR_RIGHT(void) //智能小车右转{ZUO_MOTOR_ZZ();YOU_MOTOR_TZ();} //智能小车左侧电机正转,右侧电机停转void CAR_STOP(void) //智能小车停止{ZUO_MOTOR_TZ();YOU_MOTOR_TZ();} //智能小车左侧电机停转,右侧电机停转void ZUO_MOTOR_ZZ(void) //智能小车左侧电机正转{U6_L293D_In1_In3=1;U6_L293D_In2_In4=0;}void ZUO_MOTOR_TZ(void) //智能小车左侧电机停转{U6_L293D_In1_In3=0;U6_L293D_In2_In4=0;}void YOU_MOTOR_ZZ(void) //智能小车右侧电机正转{U7_L293D_In1_In3=0;U7_L293D_In2_In4=1;}void YOU_MOTOR_TZ(void) //智能小车右侧电机停转{U7_L293D_In1_In3=0;U7_L293D_In2_In4=0;} void LEFT_MOTO(void){if(left_pwm){if(pwmval_left<=pwmval_left_init){U6_L293D_En1_En2=1;}else if(pwmval_left>pwmval_left_init){U6_L293D_En1_En2=0;}if(pwmval_left>=20){pwmval_left=0;}}else{U6_L293D_En1_En2=0;}}void RIGHT_MOTO(void){if(right_pwm){if(pwmval_right<=pwmval_right_init){U7_L293D_En1_En2=1;}else if(pwmval_right>pwmval_right_init){U7_L293D_En1_En2=0;}if(pwmval_right>=20){pwmval_right = 0;}}else{U7_L293D_En1_En2=0;}}/********************红外循迹相关函数**********************/void HWXJ_INIT(void) //红外循迹模块对应的IO口初始化{P2M1=P2M1&0xe2;P2M0=P2M0&0xe2;} //P2.0,P2.2,P2.3,P2.4设置为双向IO口void CAR_HWXJ(void) //小车红外循迹函数{//探测到黑线为1,没有探测到黑线为0if((HW_LEFT_WAI==0)&&(HW_LEFT_NEI==0)&&(HW_RIGHT_NEI==0)&&(HW_RIGHT_WAI==0))//如果左外,左内,右内,右外循迹传感器都没有感应到黑线{pwmval_left_init=5;pwmval_right_init=5; //左右电机占空比调节CAR_FORWARD(); //小车前进}else if((HW_LEFT_WAI==1)&&(HW_LEFT_NEI==1)&&(HW_RIGHT_NEI==0)&&(HW_RIGHT_WAI==0))//如果左外,左内循迹传感器都感应到黑线;右内,右外循迹传感器没有感应到黑线 {pwmval_left_init=6;pwmval_right_init=6; //左右电机占空比调节CAR_LEFT(); //小车左转}else if((HW_LEFT_WAI==1)&&(HW_LEFT_NEI==0)&&(HW_RIGHT_NEI==0)&&(HW_RIGHT_WAI==0))//如果左外循迹传感器都感应到黑线;左内,右内,右外循迹传感器没有感应到黑线 {pwmval_left_init=6;pwmval_right_init=6; //左右电机占空比调节CAR_LEFT(); //小车左转}else if((HW_LEFT_WAI==0)&&(HW_LEFT_NEI==1)&&(HW_RIGHT_NEI==0)&&(HW_RIGHT_WAI==0))//如果左内循迹传感器都感应到黑线;左外,右内,右外循迹传感器没有感应到黑线 {pwmval_left_init=6;pwmval_right_init=6; //左右电机占空比调节CAR_LEFT(); //小车左转}else if((HW_LEFT_WAI==0)&&(HW_LEFT_NEI==0)&&(HW_RIGHT_NEI==1)&&(HW_RIGHT_WAI==1))//如果右外,右内循迹传感器都感应到黑线;左内,左外循迹传感器没有感应到黑线 {pwmval_left_init=6;pwmval_right_init=6; //左右电机占空比调节CAR_RIGHT(); //小车右转}else if((HW_LEFT_WAI==0)&&(HW_LEFT_NEI==0)&&(HW_RIGHT_NEI==1)&&(HW_RIGHT_WAI==0))//如果右内循迹传感器都感应到黑线;左外,左内,右外循迹传感器没有感应到黑线 {pwmval_left_init=6;pwmval_right_init=6; //左右电机占空比调节CAR_RIGHT(); //小车右转}else if((HW_LEFT_WAI==0)&&(HW_LEFT_NEI==0)&&(HW_RIGHT_NEI==0)&&(HW_RIGHT_WAI==1))//如果右外循迹传感器都感应到黑线;左外,左内,右内循迹传感器没有感应到黑线 {pwmval_left_init=6;pwmval_right_init=6; //左右电机占空比调节CAR_RIGHT(); //小车右转}}/********************红外避障相关函数**********************/void HWBZ_INIT(void) //红外避障模块对应的IO口初始化{P2M1=P2M1&0xdd;P2M0=P2M0&0xdd;}void CAR_HWBZ(void) //小车红外循迹避障{if((HW_LEFT==0)||(HW_RIGHT==0)){CAR_STOP();}}//感应到障碍物,小车停止/********************按键扫描相关函数**********************/void KEY_INIT(void) //KEY对应的IO口初始化{P0M1=P0M1&0xcf;P0M0=P0M0&0xcf; //P0.5,P0.4设置为双向IO口P5M1=P5M1&0xf3;P5M0=P5M0&0xf3; //P5.3,P5.2设置为双向IO口}void Key1_SCAN(void) //按键扫描{LOOP:if(Key_1 == 0) //判断按键是否被按下 {delay_us(20);if(Key_1 == 0) //第二次判断按键是否被按下{BEEP_ON(); //蜂鸣器响while(Key_1 == 0); //判断按键是否被松开BEEP_OFF(); //蜂鸣器停止}else{goto LOOP;} //跳转到loop处重新扫描}else{goto LOOP;} //跳转到loop处重新扫描}/******************电池电量监测相关函数********************/void ADC_INIT(void) //AD初始化{P1ASF = 0x08;ADC_RES = 0;ADC_CONTR = ADC_POWER|ADC_SPEEDLL;}unsigned char GetADCResult(unsigned char ch) //获取AD值{ADC_CONTR = ADC_POWER|ADC_SPEEDLL|ch|ADC_START;delay(4);while(!(ADC_CONTR&ADC_FLAG));ADC_CONTR&=~ADC_FLAG;return ADC_RES;}void Voltage_Warning(void) //电压报警函数{u8 AD_RESULT;float temp;unsigned int tempA;unsigned char disbuff[4]={0,0,0,0};AD_RESULT = GetADCResult(0x03); //读取电压值temp =((float)AD_RESULT/256)*5*2; //数值转换tempA = temp*1000;disbuff[3]=tempA/10000;disbuff[2]=tempA/1000%10;disbuff[1]=tempA/100%10;disbuff[0]=tempA/10%10;DisplayOneChar(2,1,(0x30+disbuff[3]));Delay5Ms();//显示电压值DisplayOneChar(3,1,(0x30+disbuff[2]));Delay5Ms();//显示电压值DisplayOneChar(5,1,(0x30+disbuff[1]));Delay5Ms();//显示电压值DisplayOneChar(6,1,(0x30+disbuff[0]));Delay5Ms();//显示电压值if(temp<=warning_voltage)//如果读取到的电压值小于等于设定的报警电压值warning_voltage{while(1){BEEP_ON(); //蜂鸣器响Red_Led_On();Blue_Led_On(); //红色LED亮,蓝牙LED亮 Green_Led_On();Yellow_Led_On(); //绿色LED亮,黄色LED亮 DisplayListChar(13,1,VlotageLow);delay_ms(200);//在LCD中显示LOWBEEP_OFF(); //蜂鸣器不响Red_Led_Off();Blue_Led_Off(); //红色LED灭,蓝色LED灭 Green_Led_Off();Yellow_Led_Off(); //绿色LED灭,黄色LED灭 DisplayListChar(13,1,Space3);delay_ms(200);}}}/********************定时器0初始化函数*********************/void Timer0_Init(void) //定时器初始化{TMOD= 0x01;TH0=0xf1;TL0=0x9a; //2ms定时TR0 = 1;ET0 = 1;EA = 1; //开总中断}/*************************主函数**************************/void main(void){GPIO_MOTOR_Configuration(); //电机控制IO口初始化CAR_STOP(); //智能小车停止GPIO_1602_Configuration();delay_ms(10); //LCD1602液晶IO口初始化LCDInit();delay_ms(10); //LCD1602初始化LED_INIT(); //LED对应的IO口初始化BEEP_INIT(); //蜂鸣器对应的IO口初始化ADC_INIT(); //处理器AD转换初始化KEY_INIT(); //KEY对应的IO口初始化HWXJ_INIT(); //红外循迹模块对应的IO口初始化 HWBZ_INIT(); //红外避障模块对应的IO口初始化 delay_ms(10); //延时BEEP_ON(); //蜂鸣器响Red_Led_On();Blue_Led_On(); //红色LED亮,蓝牙LED亮Green_Led_On();Yellow_Led_On(); //绿色LED亮,黄色LED亮delay_ms(500); //延时BEEP_OFF(); //蜂鸣器不响Red_Led_Off();Blue_Led_Off(); //红色LED灭,蓝色LED灭Green_Led_Off();Yellow_Led_Off(); //绿色LED灭,黄色LED灭delay_ms(500); //延时DisplayListChar(3,0,Start);delay_ms(10); //LCD1602显示CAR START DisplayListChar(0,1,Voltage);delay_ms(10);Voltage_Warning(); //电压报警函数DisplayListChar(11,1,PressKey1);delay_ms(10);//LCD1602显示P: K1Key1_SCAN(); //按键扫描Timer0_Init(); //定时器初始化delay_ms(10); //延时DisplayListChar(0,0,Space1);delay_ms(10); //LCD1602显示DisplayListChar(0,1,Space1);delay_ms(10); //LCD1602显示DisplayListChar(5,0,Hwxjbz);delay_ms(10); //LCD1602显示HWXJBZwhile(1){if((HW_LEFT == 0)||(HW_RIGHT == 0)){CAR_HWBZ();}//小车左右2个红外避障传感器任何一个感应到障碍物,小车红外循迹避障else{CAR_HWXJ();}//小车左右2个红外避障传感器都没有感应到障碍物,小车红外循迹函数}}/******************定时器0中断处理函数*******************/void timer0()interrupt 1 using 2 //定时器0中断处理{TH0=0xf1;TL0=0x9a; //2ms定时pwmval_left=pwmval_left + 1;pwmval_right=pwmval_right + 1;LEFT_MOTO();RIGHT_MOTO();}。

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

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

基于STM32的智能循迹避障小车智能循迹避障小车是一种基于STM32微控制器的智能车辆,它可以根据预设的路径自动行驶并能够避开障碍物。

这种小车具有很高的自主性和智能性,非常适合用于教学、科研和娱乐等领域。

本文将介绍基于STM32的智能循迹避障小车的设计原理、硬件结构、软件开发以及应用场景。

一、设计原理智能循迹避障小车的设计原理主要包括传感器感知、决策控制和执行动作三个部分。

通过传感器感知车辆周围环境的变化,小车可以及时做出决策并执行相应的动作,从而实现自动行驶和避障功能。

在基于STM32的智能小车中,常用的传感器包括红外避障传感器、光电传感器和编码器等。

红外避障传感器可以检测到障碍物的距离和方向,从而帮助小车避开障碍物。

光电传感器可以用于循迹,帮助小车按照预定的路径行驶。

编码器可以用于测量小车的速度和位置,实现精确的定位和控制。

通过这些传感器的数据采集和处理,小车可以实现智能化的行驶和避障功能。

二、硬件结构基于STM32的智能循迹避障小车的硬件结构包括主控制板、传感器模块、执行器模块和电源模块。

主控制板采用STM32微控制器,负责控制整个车辆的运行和决策。

传感器模块包括红外避障传感器、光电传感器和编码器等,用于感知周围环境的变化。

执行器模块包括电机和舵机,用于控制车辆的速度和方向。

电源模块提供电能,为整个车辆的运行提供动力支持。

三、软件开发基于STM32的智能循迹避障小车的软件开发主要包括嵌入式系统的编程和算法的设计。

嵌入式系统的编程主要使用C语言进行开发,通过STM32的开发环境进行编译和调试。

算法的设计主要包括避障算法和循迹算法。

避障算法通过传感器的数据处理,判断障碍物的位置和距离,并做出相应的避开动作。

循迹算法通过光电传感器的数据处理,使小车能够按照预设的路径行驶。

四、应用场景基于STM32的智能循迹避障小车可以广泛应用于教学、科研和娱乐等领域。

在教学领域,可以用于智能机器人课程的教学实验,帮助学生掌握嵌入式系统的开发和智能控制的原理。

智能循迹避障小车 论文设计

智能循迹避障小车 论文设计

智能循迹避障小车论文设计The following text is amended on 12 November 2020.岳阳职业技术学院毕业设计(2012届)题目学院岳阳职业技术学院专业电子信息工程技术班级 09-01学号 2112学生姓名刘春云指导教师谭正龙上交日期目录摘要 (3)第一章绪论 (3)智能小车的意义和作用 (3)智能小车的现状 (4)第二章方案设计与论证 (5)车体设计 (5)电机驱动模块 (5)循迹模块 (6)避障模块 (7)机械系统 (7)电源模块 (8)第三章硬件设计 (8)总体设计 (8)驱动电路 (9)信号检测模块 (10)主控电路 (11)第四章软件设计 (12)主程序模块 (12)电机驱动程序 (12)循迹模块 (13)避障模块 (15)第五章制作安装与调试 (18)结束语 (18)致谢 (19)参考文献 (19)摘要:利用红外对管检测黑线,以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。

其中小车驱动由L298N驱动电路完成,速度由单片机控制。

本系统采用存储空间较大的AT89C52作为主控制芯片,电动车电机驱动采用L298N芯片;结合GP2A25光电开关,能较有效的控制其在特定位置转弯角度及行驶出错处理;采用LD-5461AS数码管来显示系统分阶段运行的时间,能够较准确较清晰地显示两个数码管位的显示,三者的结合使电动车更加智能化,自动化,可视化。

该系统无论在结构和技术上都具有较好的科学性。

关键词:智能小车;STC89C52单片机; L298N;超声波传感器;红外对管第一章绪论智能小车的意义和作用自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。

近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。

人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。

基于单片机的循迹避障小车设计与实现论文

基于单片机的循迹避障小车设计与实现论文

基于单片机的循迹避障小车设计与实现论文目录1. 内容概要 (2)1.1 研究背景 (2)1.2 研究目的与意义 (3)1.3 国内外研究现状 (4)2. 系统总体设计 (6)2.1 系统概述 (7)2.2 系统硬件设计 (8)2.2.1 单片机选型 (10)2.2.2 传感器选型与布局 (11)2.2.3 驱动电路设计 (12)2.2.4 电源模块设计 (13)2.3 系统软件设计 (14)2.3.1 系统软件架构 (16)2.3.2 主控程序设计 (18)2.3.3 驱动程序设计 (19)3. 循迹模块设计与实现 (20)3.1 循迹原理 (22)3.2 循迹算法设计 (23)3.2.1 循迹算法概述 (24)3.2.2 循迹算法实现 (25)3.3 循迹模块测试与分析 (27)4. 避障模块设计与实现 (28)4.1 避障原理 (30)4.2 避障算法设计 (31)4.2.1 避障算法概述 (32)4.2.2 避障算法实现 (34)4.3 避障模块测试与分析 (35)5. 系统集成与测试 (36)5.1 系统集成 (38)5.2 系统测试 (39)5.2.1 硬件测试 (40)5.2.2 软件测试 (41)5.3 测试结果分析 (43)6. 系统性能评价 (44)6.1 循迹性能评价 (45)6.2 避障性能评价 (47)6.3 系统稳定性与可靠性评价 (48)1. 内容概要本文主要针对基于单片机的循迹避障小车的设计与实现进行了详细探讨。

首先,对循迹避障小车的背景和意义进行了概述,阐述了其在现代自动化领域中的应用前景。

随后,详细介绍了单片机在循迹避障小车控制系统中的作用,并分析了其选型原则和硬件设计。

接着,重点阐述了循迹避障小车的软件设计,包括循迹算法、避障算法以及单片机程序设计。

在系统测试与实验部分,对循迹避障小车的性能进行了验证,并通过实际运行数据分析了其稳定性和可靠性。

对本文的研究成果进行了总结,并对未来研究方向进行了展望。

基于ARM单片机的智能小车循迹避障研究设计共3篇

基于ARM单片机的智能小车循迹避障研究设计共3篇

基于ARM单片机的智能小车循迹避障研究设计共3篇基于ARM单片机的智能小车循迹避障研究设计1一、研究的背景近年来,随着机器人技术的不断发展,人们对智能小车的需求越来越高。

智能小车能够根据周围环境的变化,自动地进行信号处理和运动抉择,实现自主导航、路径规划和避障等功能。

在工业生产、物流配送、智能家居、环保治理等领域,智能小车具有广泛的应用前景。

二、研究的目的本文研究的目的是基于ARM单片机的智能小车循迹避障设计。

通过对小车的硬件组成和软件程序的设计,使小车能够自主进行行车,避免撞车和碰撞,并能够遵循预设的路径进行行驶,完成既定的任务。

三、研究的内容1. 小车的硬件组成小车的硬件组成主要包括以下方面:(1)ARM单片机:ARM单片机是一种高性能、低功耗的微处理器,广泛应用于嵌入式系统领域。

在本设计中,ARM单片机作为控制中心,负责控制小车的各项功能。

(2)直流电机:直流电机是小车的动力来源,通过电路控制,实现小车前进、后退、转弯等各种运动。

(3)红外循迹传感器:红外循迹传感器是小车的“眼睛”,能够检测和识别地面上的黑色和白色,实现循迹运行。

(4)超声波传感器:超声波传感器是小车的避障装置,能够探测小车前方的障碍物,实现自动避障。

(5)LCD液晶屏幕:LCD液晶屏幕是小车的显示器,能够显示小车行驶的速度、距离、角度等信息。

2. 小车的软件程序设计小车的软件程序设计分为两部分:一部分是嵌入式软件设计,另一部分是上位机程序设计。

(1)嵌入式软件程序设计嵌入式软件程序是小车控制程序的核心部分,负责控制小车硬件的各项功能。

具体实现过程如下:① 初始化程序:负责对小车硬件进行初始化和启动,包括IO口配置、计数器设置、定时器设置等。

② 循迹程序:根据红外循迹传感器所检测到的黑白线,判断小车的行驶方向。

如果是白线,则小车继续向前行驶;如果是黑线,则小车需要进行转向。

③ 路径规划程序:根据预设路径,计算小车应该按照什么路线进行行驶。

智能循迹小车设计方案

智能循迹小车设计方案

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要本系统以设计题目的要求为目的,采用80C51单片机为控制核心,利用红外线传感器进行寻线,控制电动小汽车的自动循迹,并再通过光电开关探测障碍,从而控制电机转向,实现进行壁障功能。

整个系统的电路结构简单,可靠性能高,实验测试结果满足要求。

本文着重叙述了该系统的硬件设计方法、软件设计方法及测试结果分析。

小车运行方案,在现有玩具电动车的基础上,加装红外线光电开关模块和红外寻线模块,实现对电动车位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。

关键词:80C51单片机、红外线传感器、光电开关、电动小车AbstractThe system requirements of the design project for the purpose of the 80C51 microcontroller for the control of the core,the use of the hunt and infrared sensors,automatic obstacle acoidance control of electric cars,and the photoelectric switch to the barrier function.The electric circuit construction of whole system is simple, the function is dependable. Experiment test result satisfy the request, this text emphasizes introduced the hardware system designs and the result analyse. Car is running the program, under the existing toy electric car, based on the installation of super sonic sensor and infrared sensors, to achieve the location of electric vehicles,operational status of the real-time measurement, and measurement data sent to the microcontroller for processing, then SCM detected according to a variety of data to achieve intelligent control of electric vehicles.Key words: 80C51 single chip computer, infrared sensors, photoelectric switch, the electric car目录第1章前言 (1)1.1研究目的及意义 (1)1.2国内外发展情况 (2)第2章整体设计框架 (3)2.1方案选择及论证 (3)2.1.1控制模块选择 (4)2.1.2路面探测黑线轨迹模块 (4)2.1.3探测路面障碍模块 (5)2.1.4电机模块 (6)2.1.5电机驱动模块 (6)2.1.6车架选择 (7)2.1.7最终方案选择 (7)2.2方案可行性分析 (8)第3章硬件设计 (8)3.1系统总体设计框图 (9)3.2 红外线光电开关模块 (9)3.2.1光电开关的工作原理 (10)3.2.2光电开关的类型 (10)3.2.3光电开关电路的设计 (13)3.3电机驱动模块 (13)3.4红外循线模块 (15)3.4.1 红外放射式光电传感器特性与工作原理 (15)3.4.2 红外循线具体设计与实现 (16)3.5 最小系统模块 (17)3.5.1 晶振电路的设计 (17)3.5.2 复位电路的设计 (17)3.6电源模块 (18)第4章软件设计 (19)4.1 主程序流程图 (19)4.2 避障子程序流程图 (20)4.3 循线子程序流程图 (21)第5章系统调试和测试 (21)5.1安装步骤 (21)5.2电路调试 (23)5.2.1 光电开关模块调试过程 (23)5.2.2电机模块调试过程 (23)5.2.3红外循线模块调试过程 (24)5.2.4测试结果与分析 (25)结论 (26)致谢 (27)参考文献 (28)附录系统设计原理图 (28)附录设计系统部分源代码 (29)第1章前言随着生产自动化的发展,机器人已经越来越广泛地应用到生产自动化上,随着科学技术的发展,机器人的感觉传感器种类越来越多,其中视觉传感器成为自动行走和驾驶的重要部件。

智能小车的研究、开发和应用涉及传感技术、电气控制工程、智能控制等学科,智能控制技术是一门跨学科的综合性技术,当代研究十分活跃,应用日益广泛的领域。

本课题所设计的智能小车,既具有操作机(机械本体)、控制器、伺服驱动系统和检测传感装置,是一种仿人操作、自动控制、可重复编程、能在三维空间完成灵活运动的自动化生产设备。

随着工业自动化的不断发展,工业机器人被广泛应用于工业生产的各个部门,如采掘、喷涂、焊接、医疗等各大领域。

由于工业机器人的出现,它不断替代了人们的繁重劳动,大大提高了劳动生产率,减轻了人们的劳动强度,此外,它能在高温、低温、深水、宇宙、放射性和其他有毒、污染环境条件下进行操作,日益体现出它的优越性。

智能控制小车模拟机器人的运作,可以通过自己的动手排除故障,更加可以给学生一个实践操作的空间,加强学生的动手能力和思维能力。

在制作的产品中,发现一些比较符合实际应用的玩具,而且成本低廉,能够运用实际生产并且有一定的新颖度,有一定的社会需求。

在制作中提高自身对社会需求方向的灵敏度,发现商机,为自己在以后实现创业这个宏伟的目标中打下一个坚实的基础。

1.1研究目的及意义通过构建智能小车系统,培养设计并实现自动控制系统的能力。

在实践过程中,熟悉以单片机为核心控制芯片,设计小车的检测障碍、寻线和电机驱动等外围电路,采用智能控制算法实现小车的智能循迹以及避障。

在此过程中,加深对控制理论的理解和认识。

从对红外线、电机驱动和光电开关在智能小车上的应用,可以进一步研发,将红外线技术应用到现实中的车辆上,比如红外线倒车警报系统、红外车辆防盗系统等等很多方面都可以利用。

1.2国内外发展情况十九世纪末,随着内燃机的诞生,人们发明了最现代化的交通工具——汽车。

经过一个多世纪的发展,汽车技术、性能有了很大的提高,人们充分享受到了汽车带来的巨大便利。

但是,在享受汽车带来便利的同时,人们也发现汽车也给社会的发展带来了不少的损失,甚至危害到了人们的人身安全。

由于公路客运、货运输量的迅速增长,人们深受交通拥挤、堵塞严重事故频繁和环境污染等公害的困挠。

尤其是随着高速公路发展,汽车速度的提高,各类恶性交通事故的发生呈不断上升趋势,给人们的生命财产造成了巨大的损失。

同时,经常性的交通拥挤和环境污染等也给现代城市的可持续发展带来了严重的影响。

这迫使人们采用高、新技术以提高车辆的安全性、可靠性,以解决道路交通的公害问题。

我国开展智能车辆技术方面的研究起步较晚,开始于20世纪80年代,而且大多数研究尚处于针对某个单项技术研究的阶段。

虽然我国在智能车辆技术方面的研究总体落后于发达国家,并且存在一定的技术差距,但是我国也取得了一系列的成功。

中国第一汽车集团公司和国服科技大学机电工程与自动化学院于2003年研制成功了我国第一辆自主驾驶轿车。

该自主驾驶轿车的正常交通惊恐下得高速公路上,形式的最高温度速度为12km/h,最高峰值速度可达170km/h,并且具有超车功能,其总体技术性能和指标已经达到世界先进水平。

在国外,美国国家科学委员会曾预言:“20世纪的核心武器是坦克,21世纪的核心武器是无人作战系统,其中2000年以后遥控地面无人作战系统将连续装备部队,并走向战场。

”为此,从80年代开始美国国防高级研究计划局(DARPA)专门立项,制定了地面无人作战平台的战略计划,目标是研制出满足战场需要的智能车辆,可以在崎岖的地形上沿规划的路线自主导航及躲避障碍,必要时重新规划其路线。

另外,日本通产省组织的极限环境下作业的机器人计划、欧洲尤里卡中的移动机器人计划等。

虽然智能车辆的研究起源于军事的要求,但是在其他领域的应用也有极大的价值,并且在研究上也取得了一定的成果。

在太空探索方面,美国NASA研制的火星探测机器人索杰那于1997年成功登上火星,这是一个具有六个轮子的自主移动机器人。

在民用方面,智能车辆也有许多成功的例子。

如日本的VERTIS智能汽车系统,该智能汽车主要有23个ITSZ子系统,主要用于实现车载通讯、信息加工处理、环境探测、辅助控制(自动驾驶)等四项功能。

另据报道,雷诺正在研制的自动汽车或智能车辆将让汽车能够感知周围环境,如道路状况、附近车辆的距离及行驶速度等,并能根据具体情况及时作出调整车速、校正方向等正确反应。

目前,雷诺公司正在进行红外摄像、雷达、随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。

第2章整体设计框架2.1方案选择及论证根据题目要求,系统要实现循线、壁障功能,必须要划分成为六个模块。

对各个模块的实现,分别有以下一些不同的设计方案。

2.1.1控制模块选择方案一:采用可编程逻辑器件CPLD作为控制器,CPLD可以实现各种复杂的功能、规模大、密度高、体积小、稳定性高、I/O资源丰富、易于进行功能扩展。

采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。

但本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高。

且从使用及经济的角度考虑,最终放弃了此方案。

方案二:采用凌阳的16位单片机,它是16位控制器,且有体积小、驱动能力高、集成度高、易扩展、可靠性高、功耗低、结构简单、中断处理能力强等特点。

处理速度高。

但是当凌阳单片机作为处理器时,电路较为复杂,而且方案成本较高。

方案三:采用ATMEL公司的AT89C51单片机作为主控制器,AT89C51是一个低功耗、高性能的51内核的CMOS 8位单片机,该单片机结果简单、功耗低、接口丰富,完全能满足此次智能小车设计的要求。

最重要的是,它相对前两者成本最为低廉。

从节约成本的角度考虑,最终选择了方案三2.1.2路面探测黑线轨迹模块在该设计中智能小车从起跑线到终点是对路面轨迹进行探测,探测路面黑线轨迹模块的大致原理是:光线照射到路面并反射,由于黑线和白线的反射系数不同,可根据接收到的反射光的强弱判断是否小车沿黑线行驶。

相关文档
最新文档