收藏 分销(赏)

智能探测机器车.doc

上传人:pc****0 文档编号:7444462 上传时间:2025-01-04 格式:DOC 页数:31 大小:1.82MB 下载积分:10 金币
下载 相关 举报
智能探测机器车.doc_第1页
第1页 / 共31页
智能探测机器车.doc_第2页
第2页 / 共31页


点击查看更多>>
资源描述
 智能探测机器车 目 录 1系统方案 4 1.1方案比较与选择 4 1.2方案描述 5 2理论分析与计算 5 2.1 寻迹系统 5 2.2 精确定位功能 6 2.3 360度转身功能 6 2.4数据采集功能 6 2.5数据上传及播报 7 2.6 电源选择 9 3电路设计 9 3.1寻迹模块电路 9 3.2 电机驱动电路 10 3.3颜色识别模块 11 3.4 超声波测距电路 11 3.5 温湿度模块电路 12 3.6 显示部分电路 12 4程序部分设计 13 4.1软件流程图 1313 4.2系统程序 15 5系统测试与结果分析 15 5.1测试方案 15 5.2测试结果 16 5.3测试分析 16 总结与致谢 16 附录 17 摘要:该系统以AT89C52单片机控制为核心,由电源电路模块、智能寻迹模块、温湿度采集模块、超声波测距模块、颜色识别模块、语音播报模块、数据传输显示模块组成。 机器车电源采用4节3.6V铅酸锂铁电池,机器车可在场地中沿寻迹线行走,并在各定位点完成环境温度测定、超声波测距、颜色识别和环境湿度测定,并将数据传回并播报,在转身区完成转身,完成测试。 关键词:AT89S52单片机 语音播报系统 DHT11温湿度传感器 颜色传感器 超声波传感器 Abstract: The system is controlled AT89S52 microcontroller as the core, by the power supply system, the intelligent tracing system, temperature and humidity acquisition, ultrasonic ranging system, color-coded system, voice broadcast system, the data transmission system components. Machine car power supply with 12V stable DC power supply, the machine car in the field walking along the tracing line and the anchor point to complete the ambient temperature measurement, ultrasonic distance measurement, color recognition and ambient humidity was measured, and the data returned and broadcast completed and turned in turn area,complete the test。 Keywords:AT89S51 MCU voice systems temperature and humidity sensors color sensors ultrasonic sensor 1系统方案 1.1方案比较与选择 (1)车体制作方案的选择 方案1:自己制作电动探测车车体,组装合适的电机及电机驱动板,自制探测器,并利用开发板做控制驱动探测车。但自己制作的探测车,车体会比较粗糙,车身重量、平衡,探测车的电路设计,这些都比较难良好地实现。 方案2:购买专用电动车车架、车轮、电机,然后在此基础上加入自制的颜色识别、语音播报、数据显示、超声波测距等模块,这样做出的探测车不仅看起来也比较美观,更重要的是可以更方便的实现我们所要完成的功能。 综合考虑,我们选定了方案2作为我们的初步方案。 (2)底盘车轮选择方案 方案1:选用四个车轮,后驱,选择四轮探测车更加的灵活,但不容易控制。 方案2:选用三个车轮,前轮为万向轮,前轮为万向轮,转弯时比较方便,且节约成本。 综合考虑,我们决定选择方案2。图1.1为我们小组制作的探测小车: 图1.1 智能探测车实物 1.2方案描述 采用89S52单片机为核心,第一个单片机通过黑白线红外传感器进行探测车的寻迹功能,定位点360度转身,第二个单片机利用颜色传感器进行颜色识别,温湿度传感器进行温湿度信息采集,超声波测距,并将采集到信息通过数码管显示,上传并语音播报。 图1.2 系统组成框图 2理论分析与计算 2.1 寻迹系统 本系统采用黑白线寻迹红外传感器,利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在探测车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在探测车上的接收管接收;如果遇到黑线则红外光被吸收,探测车上的接收管接收不到红外光。由此过程来改变接收管的输出电压,单片机以电压的变化为依据来执行探测车电机确定行走路线。 图2.1 红外线寻迹安装图 2.2 精确定位功能 通过黑白对管红外传感器进行定位点的寻找,当探测车行驶至定位点(黑色十字胶带)时,红外传感器检测到黑胶带,传送给单片机一个低电平,探测车判断已经到定位点,停车。控制左轮电动机转动,当红外传感器检测到黑胶带时,说明探测车已经转动到了合适位置可以进行数据采集。 2.3 360度转身功能 方案1:在转身过程中采用传感器测定探测车所经过的黑胶布条数,当探测车转身过程中每经过一次黑胶布,单片机计数一次,当达到360度时探测车停止转身,完成探测车的360度转身。 方案2:在车轮中加入霍尔元件,测量360度转身距离,程序控制探测车车轮转身圈数,完成360度转身。 经过小组讨论分析,我们决定采用方案1来实现探测车的360度转身。 2.4数据采集功能 采用传感器模块对温度、湿度、颜色进行采集,并进行超声波测距,将采集数据上传。 温湿度传感器模块,DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,该产品具有品质卓越、超快 响应、抗干扰能力强、性价比极高等优点。 图2.4.1 DHT11模块实物 图2.4.2 TCS230模块实物图 颜色识别模块,TCS230是TAOS公司推出的可编程彩色光到频率的转换器。它把可配置的硅光电二极管与电流频率转换器集成在一个单一的CMOS电路上,同时在单一芯片上集成了红绿蓝(RGB)三种滤光器。对于TCS230来说,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻止其他原色的通过。 我们将TCS230模块采集来的RGB数据转化成颜色,然后再点亮与其对应的发光二极管,这样就可以方便清楚的看出被测物体的颜色了。 超声波测距,超声波测距原理是通过超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播时碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为v ,而根据计时器记录的测出发射和接收回波的时间差△t ,就可以计算出发射点距障碍物的距离S ,即: S = v·△t /2 这里超声波波速即为音速340m/s。 图2.4.3 超声波测距模块实物图 2.5数据上传及播报 数据上传,当探测车采集到数据后,将数据上传到接收装置,在这里我们经过讨论决定使用zigbee模块进行数据传输,Zigbee是一种高可靠的无线数传网络, 。Zigbee数传模块类似于移动网络基站。通讯距离从标准的75m到几百米、几公里,并且支持无限扩展。这完全可以满足我们的要求,另外它还具有低功耗、成本低、时延短、网络容量大、安全可靠等优点。 图2.5.1 zigbee实物图1 图2.5.2 zigbee实物图2 数据播报是将探测车采集来的信息进行语音播报,我们选用的模块具有以下优点: (1)载功放模块最高可输出功率20w,声音响亮。 (2)板载音量调节,可根据实际安装需求进行调整。 (3)全新音频播放控制算法,音质更好。 (4)新型音频信息压缩格式,音频录制时间可24分钟。 图2.5.3 语音模块实物图 2.6 电源选择 方案一: 直接使用AA干电池进行供电它的结构十分简单,但是供电能力差,不易长时间供电,更换电池较为频繁。 方案二: 使用4节3.6伏铅酸锂铁电池,经电容滤波和L7805稳压后输出约5v电压。可保证长时间稳定的输出电压。这样可以提供持久稳定的电流,稳压后给单片机系统和其他芯片供电。 考虑到系统稳定工作的要求,所以选择方案二。 3电路设计 3.1寻迹模块电路 探测车进入寻迹模式后,即单片机开始不停地扫描与探测器连接的单片机I/O口,一旦检测到某个I/O口有信号,即进入判断处理程序,先确定2个探测器中的哪一个探测到了黑线,如果左面传感器(红灯亮)探测到黑线,即探测车左半部分压到黑线,车身向右偏出,此时应使探测车向左转;如果右面传感器(黄灯亮)探测到了黑线,即车身右半部压住黑线,探测车向左偏出了轨迹,则应使探测车向右转。在经过了方向调整后,探测车再继续向前行走,并继续探测黑线重复上述动作,实现方向控制,按照黑线行驶。其中,R11和R19为限流电阻,防止红外线发生管因电流过大而烧坏;由R14和一个可变电阻组成的电路为参考电压电路,由于检测探测车行驶的过程会因环境或则黑线材料的改变使输出电压成一个变化值,所以通过可变电阻来改变参考电压,使能正常运行;同时R12和R20为上拉电阻,让输入单片机的电压达到高电平;发光二极管则是能更直观的判断出哪对传感器在起作用。 图 3.1 寻迹模块电路图 3.2 电机驱动电路 根据L298N的输入输出关系,使能控制端ENA接单片机,当P2.2口为高电平时,通过PWM信号输入端IN1和IN2可以控制电动机的正反转(输入端IN1为PWM信号,输入端IN2为低电平,电动机正转;输入端IN2为PWM信号,输入端IN1为低电平,电动机反转);当它为低电平时,驱动桥路上的4个晶体管全部截止,使正在运行的电动机电枢电流反向,电动机自由停止。电动机的转速由单片机调节PWM信号的占空比来实现. 图3.2 电机驱动电路 3.3颜色识别模块 TCS230的输出信号是数字量,可以驱动标准的TTL或CMOS逻辑输入,因此可直接与微处理器或其他逻辑电路相连接。由于输出的是数字量,并且能够实现每个彩色信道10位以上的转换精度,因而不再需要A/D转换电路,使电路变得更简单。 图3.3 TCS230颜色识别电路接口图 3.4 超声波测距电路 (1)采用IO口TRIG触发测距给至少10us的高电平信号; (2)模块自动发送8个40khz的方波自动检测是否有信号返回 (3)有信号返回通过IO口ECHO输出一个高电平高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2; 图3.4 超声波测距电路原理图 3.5 温湿度模块电路 用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,我们可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。 图3.5 DHT11连接图 3.6 显示部分电路 利用4511实现静态显示与一般静态显示电路不同,一是节省I/0端线,段码输出只需4根;二是不需专用驱动电路,可直接输出;三是不需译码,直接输出二进制数,编程简单;缺点是只能显示数字,不能显示各种符号。 图3.6 数码管显示 4程序部分设计 4.1软件流程图 程序总流程图以及各模块流程图如下所示: 图4.1 总系统流程图 图4. 2 颜色识别模块流程图 图4.3 超声波测距模块流程图 图4.4 温湿度模块流程图 4.2系统程序(见附录) 5系统测试与结果分析 5.1测试方案 系统的硬件部分我们调试好每一个模块,连接好电路,本系统的软件程序由C语言进行编写,在实验中按照探测车行进路线中,改进实验中暴露出的不足之处。 下图为实验场地,探测车将从起跑终止线出发,在定位点1进行温度测定,定位点2进行超声波测距然后进入转身区1进行360度转身,定位点3进行颜色判定定位点4进行湿度测定之后进入转身区2进行360度 转身,回到起跑终止线。 图5.1 测试场地 5.2测试结果 测试结果如下表所示: 表一 小车运动及语音播报功能检测 测试次数 是否寻迹行走一周 是否完成数据采集 360度转身 语音播报 1 是 是 完成 完成 2 是 是 完成 完成 3 是 是 完成 完成 4 是 是 完成 完成 5 是 是 完成 完成 表二 数据信息采集功能检测 测试项目 温度显示 (°C) 超声波测距(cm) 颜色识别 湿度显示 1 24 19 红 32% 2 24 19 白 31% 3 25 19 蓝 32% 4 24 19 红 32% 5 24 18 黄 33% 实际数据 24.5 19 正常 32% 5.3测试分析 经过我们多次的测试,正是探测车可以从标志线开始,在轨迹上各正常行驶一圈,可以在转身区360°转身,在四个定位点上完成探测要求,采集数据,并将数据显示播报,在此过程中未发生错误。 6.总结与致谢 经过紧张这几天努力,以及与小组其他成员的共同协作,团结互助,终于完成了此次实验项目。 在这次设计中,我们遇到了许多突发事件和各种困难。由于自身硬件调试经验的匮乏,在电路检测上花了很多的时间,但是通过团队的仔细分析和自我调整状态后我们终于解决了所有问题,取得了圆满的结果。经过此次电子大赛让我们对电路的设计、调试有了深刻的印象,同时也深刻地体会到了共同协作好人团队精神的重要性,提高了我们了解问题的能力,设计中还有欠缺的方面。本次竞赛极大的锻炼了我们各方面的能力,虽然我们遇到了很多困难和障碍,但总体上成功与挫折交替,困难与希望并存,我们将继续努力争取更大的进步,在今后的学习工作中会加以注意。 最后感谢大赛组委会给我们这次机会! 附录 一 主要模块 (1) 主控模块:增强型51单片机AT89S52; (2) 显示模块:6段共阳数码管; (3) 电源模块:4节3.6伏铅酸锂铁电池 (4) 语音模块:YS07语音模块 (5) 超声波测距:HC-SR04模块 (6) 温湿度模块:DHT11模块 (7) 颜色判定:TCS230模块 二 参考文献 1.江晋剑,钱萌.一种基于AT89S52的简易智能小车设计[J].科技论文,2007,7,97~100. 2.郭天祥.51单片机C语言教程[M]. 北京:电子工业出版社.2009.12.. 3.张洪润,张亚凡 主编. 传感技术与应用教程 清华大学出版社 2005 4.康华光.电子技术基础数字部分(第五版)[M].北京:高等驾御出版社,2006.1. 5.基于单片机控制的超声测距系统的研究 张丹 硕士学位论文 6.机器人设计与实现 (美)Gordon McComb[M]. 北京:科学技术出版社。 三 电路图 图1 语音模块 图2 电路图 图3 数据接收电路 图4 电路图 四 部分程序 1主程序 #include <REGX51.H> #include <DHT11.H> #include <HCSR04.H> #include <TCS230.H> #include <lcd1602.H> #include <l298n.H> #define uchar unsigned char #define uint unsigned int sbit lcd=P1^2; sbit lcdrs=P1^0; sbit lcdrw=P1^1; sbit IN1=P1^0; sbit IN2=P1^1; sbit IN3=P1^2; sbit IN4=P1^3; uchar flag=0; void zhuan1() //温度测量 { qian(); delay(220); yyou(); delay(520); stop1(); delay(1000); //温度测量 yzuo(); delay(520); stop1(); //缓冲 delay(500); qian(); } void zhuan2() //超声波测量 { qian(); delay(220); yyou(); delay(520); stop1(); //等待 delay(500); hc_lcd(); //超声波测量 delay(500); yzuo(); delay(520); stop1(); //缓冲 delay(500); qian(); } void zhuan3() //颜色测量 { qian(); delay(220); yyou(); delay(520); stop1(); delay(500); TCS(); //测量颜色 delay(500); yzuo(); delay(520); stop1(); //缓冲 delay(500); qian(); } void zhuan4() { } void zhuan360() { } void main() { inin(); //lcd初始化 while(1){ qian(); if(IN2&IN3) {flag++; switch(flag) { case 1:zhuan1(); break; case 2:zhuan2(); break; case 3: case 4: case 5:zhuan360(); break; case 6:zhuan3(); break; case 7:zhuan4(); break; case 8: case 9: case 10:zhuan360(); break; case 11:stop(); break; default: break; } } if(IN2) you(); if(IN3) zuo(); } } 2、小车驱动 #include <REGX51.H> #define uchar unsigned char #define uint unsigned int sbit moto1=P2^0; sbit moto2=P2^1; sbit moto3=P2^2; sbit moto4=P2^3; sbit ENA=P1^6; sbit ENB=P1^7; void qian() { if(P1^1==0&P1^2==0) { moto1=1; moto2=0; moto3=1; moto4=0; } } void stop1() { moto1=0; moto2=0; moto3=0; moto4=0; } void stop() { while(1){ moto1=0; moto2=0; moto3=0; moto4=0; } } void zuo() { moto1=1; moto2=0; moto3=0; moto4=0; } void yzuo() { moto1=1; moto2=0; moto3=0; moto4=1; } void you() { moto1=0; moto2=0; moto3=1; moto4=0; } void yyou() { moto1=0; moto2=1; moto3=1; moto4=0; } 3、超声波测距 #include <REGX51.H> #include <lcd1602.H> #define uchar unsigned char #define uint unsigned int sbit trig=P3^3; sbit echo=P3^2; uint code tab[5]={0}; uchar num; uint time=0; unsigned long S=0; void display(uint distance) { uchar d1,d2,d3; d1=distance/100; d2=distance/10%10; d3=distance%100%10; writecom(0x80); writedate('L'); delay(5); writedate('='); delay(5); writedate(d1+0x30); delay(5); writedate(d2+0x30); delay(5); writedate(d3+0x30); delay(5); writedate('C'); delay(5); writedate('M'); delay(5); } unsigned long Conut() { time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.7)/100; return S; } void send() { trig=1; de_10us(2); trig=0; } void hc_lcd() { uint distance; inin(); trig=0; EA=1; TMOD=0x01; TH0=0; TL0=0; ET0=1; send(); while(!echo); //当RX为零时等待 TR0=1; //开启计数 while(echo); //当RX为1计数并等待 TR0=0; //关闭计数 distance=Conut(); //计算 delay(3); //80MS display(distance); delay(5); } 4、液晶1602 #include <REGX51.H> #define uchar unsigned char #define uint unsigned int sbit lcd=P2^5; sbit lcdrs=P2^7; sbit lcdrw=P2^6; void delay(uint z) //1ms { uint j,k; for(j=0;j<z;j++) for(k=0;k<115;k++); } void de_10us(uchar z) //10us { uchar i; for(i=0;i<z;i++); } void writecom(uchar com) { lcdrw=0; delay(5); lcdrs=0; delay(5); lcd=1; delay(5); P0=com; delay(5); lcd=0; delay(5); lcdrw=1; delay(5); } void writedate(uchar date) { lcdrw=0; delay(5); lcdrs=1; delay(5); lcd=1; delay(5); P0=date; delay(5); lcd=0; delay(5); lcdrw=1; delay(5); } void inin() { lcd=0; writecom(0x38); writecom(0x0c); writecom(0x06); writecom(0x01); } 5、颜色识别 #include <REGX51.H> #include <lcd1602.H> sbit S2=P1^4; sbit S3=P1^5; sbit OUT=P1^6; uint ryz,gyz,byz;//分别定义红色因子 绿色因子 蓝色因子 uint rb,gb,bb;//RGB值 uchar tab1[]={'0','1','2','3','4', '5','6','7','8', '9','A','B','C', 'D','E','F'}; //****************************************************** //白平衡子程序 void celiang() { //*********求R值************************************ TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=0; TL1=0; S2=0; S3=0;//选择红色滤光器 OUT=0; TR0=1;//10毫秒开始计时 TR1=1;//开始计数 while(TF0==0);//等待定时器溢出 TF0=0;//清楚定时器0溢出标志 TR0=0;//关闭定时0 TR1=0; rb=(unsigned long)(TH1*256+TL1)*255/ryz; if(rb>255)rb=255;//判断RGB值是否合法 //***********求B值************************************** TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=0; TL1=0; S2=0; S3=1;//选择蓝色滤光器 TR0=1;//10毫秒开始计时 TR1=1;//开始计数 while(TF0==0);//等待定时器溢出 TF0=0;//清楚定时器0溢出标志 TR0=0;//关闭定时0 TR1=0; bb=(unsigned long)(TH1*256+TL1)*255/byz; if(bb>255)bb=255;//判断RGB值是否合法 //***********求G值************************************** TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=0; TL1=0; S2=1; S3=1;//选择绿色滤光器 TR0=1;//10毫秒开始计时 TR1=1;//开始计数 while(TF0==0);//等待定时器溢出 TF0=0;//清楚定时器0溢出标志 TR0=0;//关闭定时0 TR1=0; OUT=1; gb=(unsigned long)(TH1*256+TL1)*255/gyz; if(gb>255)gb=255;//判断RGB值是否合法 } //****************************************************** //白平衡子程序 void baipingheng() { //**************求取红色因子*********************** TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=0; TL1=0; S2=0; S3=0;//选择红色滤光器 OUT=0; TR0=1;//10毫秒开始计时 TR1=1;//开始计数 while(TF0==0);//等待定时器溢出 TF0=0;//清楚定时器0溢出标志 TR0=0;//关闭定时0 TR1=0; ryz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1) //**************求取蓝色因子*********************** TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=0; TL1=0; S2=0; S3=1;//选择蓝色滤光器 TR0=1;//10毫秒开始计时 TR1=1;//开始计数 while(TF0==0);//等待定时器溢出 TF0=0;//清楚定时器0溢出标志 TR0=0;//关闭定时0 TR1=0; byz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1) //**************求绿红色因子*********************** TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=0; TL1=0; S2=1; S3=1;//选择绿色滤光器 TR0=1;//10毫秒开始计时 TR1=1;//开始计数 while(TF0==0);//等待定时器溢出 TF0=0;//清楚定时器0溢出标志 TR0=0;//关闭定时0 TR1=0; OUT=1; gyz=TH1*256+TL1;//其实这里的比例因子应该为255/(TH1*256+TL1) } void TCS() { TMOD=0x51; inin(); baipingheng();//上电时先白平衡一次 celiang();//颜色测试 writecom(0x80); writedate('R');//以十进制显示RGB中红色的分值 writedate(rb/100+0x30); //显示百位数据 writedate(rb/10%10+0x30);//显示十位数据 writedate(rb%10+0x30);//显示个位数据 writecom(0x80+5); writedate('G');//以十进制显示RGB中绿色的分值 writedate(gb/100+0x30); //显示百位数据 writedate(gb/10%10+0x30); writedate(gb%10+0x30); writecom(0x80+0X0A); writedate('B');//以十进制显示RGB中蓝色的分值 writedate(bb/100+0x30); writedate(bb/10%10+0x30); writedate(bb%10+0x30); //*****在LCD1602的第二行以16进制显示RGB******************* writecom(0xc0); writedate(tab1[rb/16]); writedate(tab1[rb%16]); writedate('H'); writecom(0xc0+6); writedate(tab1[gb/16]); writedate(tab1[rb%16]); writedate('H'); writecom(0xc0+0x0b); writedate(tab1[bb/16]); writedate(tab1[bb%16]); writedate('H'); delay(2500);//每隔0.25秒测试一次颜色 } 31
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服