版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6.1项目描述本项目的主要内容包括:交互式智能家居机器人触觉交互模块的硬件设计与制作;交互式智能家居机器人非接触式红外触觉探测软件的设计;交互式智能家居机器人非接触式超声波触觉软件的设计;交互式智能家居机器人非接触式温度触觉软件的设计;交互式智能家居机器人触觉交互模块的整体调试。返回6.2教学目标通过学习和实践,学生应掌握以下知识和技能:(1)进一步掌握底层控制板IO接口的使用方法。(2)掌握非接触红外传感器的原理和使用方法。(3)能够编写非接触红外传感器的程序。(4)掌握非接触式超声波的工作原理。(5)能够编写非接触超声波的程序。(6)掌握非接触红外测温的原理。(7)能够编写非接触红外测温的程序。(8)能够掌握非接触传感器和机器人结合起来操作的方法。(9)能够熟练地调试基于非接触传感器的软硬件。返回6.3知识准备6.3.1超声波传感器超声波传感器可向前方空间发射和接收超声波信号,其测量距离的原理就是通过发射与接收到信号的时间差来计算传感器与被测物体的距离。它是一种非接触式测量的传感器,因此常用于一些不与被测物体接触的场合,比如汽车倒车、液位、深井测量等。本项目中配套的超声波传感器如图6.3.1所示,它有一个发射头和一个接收头。服务机器人主控制器中的超声波传感器如图6.3.2所示。6.3.2超声波测距的原理及计算公式超声波测距的工作原理是:超声波发射头向前方空间发射超声波信号,信号遇到障碍物后返回,当接收头检测到返回的超声波信号时,使信号脚输出为低电平,如图6.3.3所示。下一页返回6.3知识准备超声波传感器的标准工作时序如图6.3.4所示。其中:触发信号——启动信号脉冲长度,最小为10μs,内型值为25μs。模块内部信号——发射的超声波信号参数,持续发出8个频率为40kHz的超声波。输出回响信号——接收的超声波信号时长。工作时,底层控制板的一个IO口向超声波传感器Trig引脚发送10μs的启动信号,然后超声波传感器内部启动发射8个频率为40kHz的超声信号,发送完后,将在Echo引脚上输出高电平并持续到接收头检测到返回的超声波信号为止,通过这个高电平的持续时间便能计算出障碍物离传感器的距离。上一页下一页返回6.3知识准备超声波在空气中的传播速度为340m/s(25℃时),高电平的持续时间为t,则距离为(t×340)/2(m)。6.3.3关于非接触式红外触觉探测非接触式红外传感器能检测运动的人或动物身上发出的红外线,并输出开关信号,所以可以应用于各种需要检测运动人体的场合。本项目中配套的非接触式红外触觉传感器如图6.3.5所示。服务机器人非接触式红外触觉传感器如图6.3.6所示。上一页下一页返回6.3知识准备6.3.4非接触式红外触觉探测传感器介绍及其控制方式6.3.4.1探头介绍这款非接触式红外触觉传感器采用数字一体化集成非接触式红外触觉探头AM412。AM412是一个将数字智能控制电路与人体探测敏感元都集成在电磁屏蔽罩内的热释电红外探头。人体探测敏感元将感应到的人体移动信号通过一个甚高阻抗差分输入电路耦合到数字智能集成电路芯片上,数字智能集成电路将信号转化成15位ADC数字信号,当PIR信号超过选定的数字阈值时就会有延时的高电平输出。所有的信号处理都在一个芯片上完成。上一页下一页返回6.3知识准备6.3.4.2触发模式在检测范围内,当探头接收到的热释电红外信号超过探头内部的触发阈值之后,其内部会产生一个计数脉冲。当探头再次接收到这样的信号时,它会认为接收到了第二个脉冲,一旦在4s之内接收到两个脉冲,探头就会产生报警信号,同时输出引脚输出高电平。另外,只要接收到的信号的幅值超过触发阈值的5倍以上,那么只需要一个脉冲就能触发输出端的高电平输出。图6.3.7所示为触发逻辑图示例。对于多次触发的情况,输出高电平的维持时间从最后一次有效脉冲开始计时。上一页下一页返回6.3知识准备6.3.4.3调整延迟本款非接触红外传感器默认的高电平延时时间为2.3~3s,取AM412最短的延迟时间,但保留了修改延迟时间的设计。6.3.5非接触式温度测量在本项目中使用的非接触红外测温传感器是一款长距离的测温计,采用了高灵敏度、高精度、低噪声和低功耗的设计。该红外测温传感器采用了MEMS热电堆检测器和高精度的环境温度补偿技术。上一页下一页返回6.3知识准备6.3.6非接触式温度测量传感器介绍及其控制方式6.3.6.1非接触式温度测量传感器的特点非接触式红外温度计模块采用高灵敏度、高精度、低功耗的设计,如图6.3.8所示。MEMS热电堆可以准确地测量出环境温度,采用温度补偿技术并将之运用在TNm红外温度计模块上。ZyTemp开发出独有的集成了所有硬件电路的红外片上系统。应用该红外片上系统(SoC),TNm红外温度模块具有很高的集成度和性价比。ZyTemp’s的产品可以承受10℃的热冲击。该产品擅长在宽范围温度变化环境中保持精度。例如,对于传统的红外测温仪,温度变化带来的误差可达到1.6℃,需要30分钟的稳定时间,而ZyTemp’sTNm产品的误差仅仅是0.7℃,仅需要7分钟的稳定时间。TNm产品只需要3V电源供电,而多数其他红外温度计需要9V电压供电。上一页下一页返回6.3知识准备ZyTemp保证温度标准溯源到NIST或者国际测量实验室,所有的TNm产品经过溯源的红外温度标准源校准,校准的数据和产品的序列号保存在模块上的EEPROM内。6.3.6.2非接触式传感器测量的视角范围当测试距离是10英寸①时,被测点的尺寸也是10英寸,如果测试距离是20英寸,被测点的尺寸也是20英寸。换句话说,视场FOV是26.6×2=53.2°,如图6.3.9所示。6.3.6.3非接触式测温传感器的引脚排列V:电源;G:地;D:数据(串行);C:时钟(串行);A:测试脚(拉低开始测试,当写数据到测温仪时该脚是浮动态),如图6.3.10所示。注意:TN0、TN9引脚排列相同上一页下一页返回6.3知识准备6.3.6.4非接触式红外测温传感器的控制方式1.串行输出模式非接触式红外测温传感器串行控制框图如图6.3.11所示。测试设备连接到TTL接口(MCU)。V:电源;D:数据;C:时钟(2kHz);G:接地;A:测试脚(低电平时连续测试黑体温度),当MCU接收数据时,DUT输出数据。注意:没有数据传输时,数据引脚(DataPin)为高电平,间歇时间大于2ms。2.SPI通信模式SPI通信时序如图6.3.12所示,通信信息格式如表6.3.1所示。上一页返回6.4任务实现6.4.1方案设计在设计非接触式触觉交互传感器时,应从人性化的角度多方面考虑,如人或其他动物的靠近时,智能服务机器人会通过用非接触式红外传感器检测人体热释电量的多少来判断对象是否靠近,其一旦靠近,机器人可以通过超声波传感器测量出距离,从而尽快避开人,以免撞到人。还可利用非接触式温度传感器测出人员的体温,这样可以提供一个服务“护士”,从而判断服务对象是不是发烧等。其总体框架如图6.4.1所示。下一页返回6.4任务实现6.4.2总体硬件电路设计由于涉及的传感器比较多,而且前面内容中也有较多模块的介绍,故底层控制板的IO口资源比较紧张,这里利用了不是很常用的PC0-PC5(一般情况下其是用来作ADC采集的,这里被用作数字IO口使用)。在作数字IO口使用的时候,PC0为14,PC1为15,PC2为16,PC3为17,PC4为18,PC5为19端口号,具体如图6.4.2所示。上一页下一页返回6.4任务实现6.4.3非接触式超声波触觉软件的编写这里使用超声波传感器进行距离的测量,然后在嵌入式控制器的显示器上面显示结果,那么就有两个方面的程序需要编写。第一个为底层驱动程序,就是驱动超声波传感器得到距离值,然后传递给嵌入式控制器,嵌入式控制器驱动显示屏显示距离值,如图6.4.3所示;另一个为嵌入式控制板程序。底层控制板(Arduino)的范例程序如下:#include<Wire.h>#defineSLAVE_ADDRESS0x04intnumber=0;intstate=0;上一页下一页返回6.4任务实现constintpingTig=15;//PC1constintpingEco=14;//PC0voidsetup(){Serial.begin(9600);//startserialforoutputpinMode(pingTig,OUTPUT);pinMode(pingPEco,INPUT);//initializei2casslaveWire.begin(SLAVE_ADDRESS);//definecallbacksfori2ccommunicationWire.onReceive(receiveData);Wire.onRequest(sendData);上一页下一页返回6.4任务实现Serial.println("Ready!");}voidloop(){longduration,inches,cm;digitalWrite(pingTig,LOW);delayMicroseconds(2);digitalWrite(pingTig,HIGH);delayMicroseconds(5);digitalWrite(pingTig,LOW);上一页下一页返回6.4任务实现duration=pulseIn(pingEco,HIGH);inches=microsecondsToInches(duration);cm=microsecondsToCentimeters(duration);delay(100);}longmicrosecondsToInches(longmicroseconds){returnmicroseconds/74/2;}longmicrosecondsToCentimeters(longmicroseconds)上一页下一页返回6.4任务实现{returnmicroseconds/29/2;}//callbackforreceiveddatavoidreceiveData(intbyteCount){}//callbackforsendingdatavoidsendData(){Wire.write(inches);}上一页下一页返回6.4任务实现嵌入式控制板的范例程序如下:importsmbusimporttime#forRPIversion1,use"bus=smbus.SMBus(0)"bus=smbus.SMBus(1)#ThisistheaddresswesetupintheArduinoProgramaddress=0x04defwriteNumber(value):bus.write_byte(address,value)#bus.write_byte_data(address,0,value)return-1上一页下一页返回6.4任务实现defreadNumber():number=bus.read_byte(address)#number=bus.read_byte_data(address,1)returnnumberwhileTrue:number=readNumber()ifnumber==0returnmessage=‘Distance:’+str(number)+’in’text_surface=font.render(message,True,(127,127,127))screen.fill(255,255,255)上一页下一页返回6.4任务实现screen.blit(text_surface,(100,100))w=screen.get_width()-20proximity=((100-dist)/100.0)*wifproximity<0:proximity=0pygame.draw.rect(screen,(0,255,0),Rect(10,10),(w,50)))pygame.draw.rect(screen,(255,0,0))Rect((10,10),(proximity,50))Pygame.display.update()上一页下一页返回6.4任务实现6.4.4非接触式红外触觉探测软件的编写非接触式红外触觉传感器一般是用来检测人体热释电的,如果检测到热释电,该模块就会在控制端口输出低电平,否则为高电平。程序如下,其在嵌入式控制器上显示热释电的情况。底层控制板(Arduino)的范例程序如下:#include<Wire.h>#defineSLAVE_ADDRESS0x04intnumber=0;intstate=0;bytesensorPin=16;//PC2上一页下一页返回6.4任务实现voidsetup(){Serial.begin(9600);//startserialforoutputpinMode(sensorPin,INPUT);//initializei2casslaveWire.begin(SLAVE_ADDRESS);//definecallbacksfori2ccommunicationWire.onReceive(receiveData);Wire.onRequest(sendData);Serial.println("Ready!");}上一页下一页返回6.4任务实现voidloop(){bytestate=digitalRead(sensorPin);delay(500);}//callbackforreceiveddatavoidreceiveData(intbyteCount){}//callbackforsendingdatavoidsendData(){inti;Wire.write(state);}上一页下一页返回6.4任务实现嵌入式控制板的范例程序如下:importsmbusimporttime#forRPIversion1,use"bus=smbus.SMBus(0)"bus=smbus.SMBus(1)#ThisistheaddresswesetupintheArduinoProgramaddress=0x04defwriteNumber(value):bus.write_byte(address,value)#bus.write_byte_data(address,0,value)return-1上一页下一页返回6.4任务实现defreadNumber():number=bus.read_byte(address)#number=bus.read_byte_data(address,1)returnnumberwhileTrue:number=readNumber()print"PIR:"numberprint上一页下一页返回6.4任务实现6.4.5非接触式温度触觉软件的编写这里使用非接触式红外温度传感器进行人体温度的测量,然后在嵌入式控制器的显示器上显示结果,那么就有两个方面的程序需要编写。一个为底层驱动程序,其驱动非接触式红外温度传感器得到温度值,然后传递给嵌入式控制器,嵌入式控制器驱动显示屏显示距离值,如图6.4.4所示;另一个为嵌入式控制板程序。底层控制板(Arduino)的范例程序如下:#include<Wire.h>#defineSLAVE_ADDRESS0x04intnumber=0;intstate=0;上一页下一页返回6.4任务实现#defineClockPin17//clockin#defineDataPin18//datain#defineTestPin19//driverpinsetpinlowtostartdeliverdatavoiddata_read(int*p){inti,j,PinState,tempData;digitalWrite(TestPin,LOW);for(i=0;i<5;i++){for(j=0;j<8;j++)上一页下一页返回6.4任务实现{do{PinState=digitalRead(ClockPin);}while(PinState);delayMicroseconds(100);PinState=digitalRead(DataPin);if(1==PinState)tempData=(tempData<<1&0xfe)+1;elsetempData=(tempData<<1&0xfe);do{上一页下一页返回6.4任务实现PinState=digitalRead(ClockPin);}while(PinState!=1);}*p++=tempData;}digitalWrite(TestPin,HIGH);}voidsetup(){pinMode(DataPin,INPUT);pinMode(ClockPin,INPUT);pinMode(TestPin,OUTPUT);digitalWrite(TestPin,HIGH);上一页下一页返回6.4任务实现Serial.begin(9600);//startserialforoutput//initializei2casslaveWire.begin(SLAVE_ADDRESS);//definecallbacksfori2ccommunicationWire.onReceive(receiveData);Wire.onRequest(sendData);delay(100);Serial.println("Ready!");}voidloop(){上一页下一页返回6.4任务实现intdata_buf[5]={0};inttempData=0;while(1){data_read(data_buf);tempData=data_buf[1]*256+data_buf[2];floatrealTemp=(float)tempData/16-273.15;Serial.print("Temp[C]=");Serial.println(realTemp);delay(500);上一页下一页返回6.4任务实现}}//callbackforreceiveddatavoidreceiveData(intbyteCount){}//callbackforsendingdatavoidsendData(){Wire.write(realTemp);}上一页下一页返回6.4任务实现嵌入式控制板的范例程序如下:importsmbusimporttime#forRPIversion1,use"bus=smbus.SMBus(0)"bus=smbus.SMBus(1)#ThisistheaddresswesetupintheArduinoProgramaddress=0x04defwriteNumber(value):bus.write_byte(address,value)#bus.write_byte_data(address,0,value)return-1上一页下一页返回6.4任务实现defreadNumber():number=bus.read_byte(address)#number=bus.read_byte_data(address,1)returnnumberwhileTrue:number=readNumber()ifnumber==0Returnmessage=‘当前温度值:’+str(number)+’°’text_surface=font.render(message,True,(127,127,127))上一页下一页返回6.4任务实现screen.fill(255,255,255)screen.blit(text_surface,(100,100))w=screen.get_width()-20proximity=((100-dist)/100.0)*wifproximity<0:proximity=0pygame.draw.rect(screen,(0,255,0),Rect(10,10),(w,50)))pygame.draw.rect(screen,(255,0,0))Rect((10,10),(proximity,50))Pygame.display.update()上一页下一页返回6.4任务实现6.4.6程序代码的编辑、调试及运行通过上面运行的程序,可基本上对这几个传感器进行测试,这里利用了嵌入式控制板直观地显示运行结果,使测试变得更加直观、方便。在测试过程中,由于有人员的操作,测试人体热释电的时候,程序很容易被触发,所以在测试的时候,应尽量远离机器人,然后接近机器人,查看对应的变化。如果不方便观察,可以用一个红色LED指示灯。这几个例子中的代码比较多,在输入的时候一定要注意,不要出现一些不易被发现的错误。上一页返回6.5考核评价任务1编写感应人体接近动作的响应程序要求:能够理解感应人体热释电的基本概念;能使用非接触式红外传感器准确地判断人员是否接近;能测试感应的灵敏度及反应时间;能够使用嵌入式控制板编写具有图形化GUI的程序;能够用专业的语言正确流利地展示项目成果,思路清晰、有条理;能圆满回答老师与同学提出的问题;项目总结报告的格式符合标准,内容完整,有详细的过程记录和分析,并能提出一些新的建议。下一页返回6.5考核评价任务2用超声波判断人体离机器人的距离要求:能够读懂超声波传感器的时序图;能够理解超声波传感器测距的基本
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 茶园小绿叶蝉绿色防控手册
- 痛风关节理疗缓解方案
- 水产养殖尾水处理排放标准
- 复合肥采购验收检验操作规范
- 肉鸭种蛋孵化技术管理规范
- 草莓植株控旺促花管理措施
- 通信工程信号与系统试卷及详解
- 颈椎病风险评估诊断流程
- 药膳食材精准搭配规范
- 足部反射区按摩实操流程
- 要素式行政起诉状(政府信息公开)
- 四川省德阳市2024-2025学年八年级下学期期末考试物理试题(含答案)
- 体育馆大跨度钢结构技术难点及监理措施
- 2025年浙江6月高考地理真题
- 统编版语文二年级下册 课文5 写话 心中的问号 课件
- 城管编外笔试题目及答案
- JG/T 137-2007结构用高频焊接薄壁H型钢
- 2025届贵州省联考2024-2025学年七年级下学期期中数学试卷(含答案)
- 2025玉门事业单位笔试真题
- 2025年中考生物答题技巧与模式题型03资料分析题解题技巧(学生版+解析)
- 城轨专用通信设备维护授课曾光30课件
评论
0/150
提交评论