ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:66.40KB ,
资源ID:12719046      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12719046.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(消防机器人设计报告.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

消防机器人设计报告.docx

1、消防机器人设计报告消防机器人设计报告基于ATmega2560单片机的智能避障灭火小车 一、 设计方案: 1、控制系统: Arduino Mega2560是采用USB接口的核心电路板,具有54路数字输入输出,适合需要大量IO接口的设计。处理器核心是ATmega2560, 同时具有54路数字输入/输出口(其中16路可作为PWM输出),16路模拟输入,4路UART接口,一个16MHz晶体振荡器,一个USB口,一个电源 插座,一个ICSP header和一个复位按钮。Arduino Mega2560也能兼容为Arduino UNO设计的扩展板。 该核心电路板能提供大量IO接口,因此为以后的传感器和功能

2、拓展提供了便捷,同时搭配传感器拓展板,在使用和调试便捷性上优于其它单片机。 Arduino2560原理电路: 2、传感器: 方案一:光电循迹传感器+火焰传感器+红外线测距传感器 光电开关在一般情况下,由三部分构成,它们分为:发送器、接收器和检测电路。 它的检测头里也装有一个发光器和一个收光器,它的检测头里也装有一个发光器和一个收光器,但前方没有反光板。正常情况下发光器发出的光受光器是接收不到的,当有物体通过时挡住了光,并把光反射回来,受光器就接收到了光信号,输出一个开关信号。 当遇到黑色线格的时候,由于黑色吸收了大部分光线,因此光电开光就会输出电平变化,单片机接收到信号以后做出相应的动作。 火

3、焰传感器的基本构成及原理: 火焰传感器由红外线接收管、电平比较电路、灵敏度调节电位器三部分组成。通过红外线接收管探测周围环境,当接收到较强的红外线的时候,由电平比较器反馈给单片机电平变化信号。可通过电位器调节火焰传感器的灵敏度。 红外测距传感器: 红外测距传感器由四部分构成,红外线二极管,红外线接收管,电平比较器,距离调节电位器。 通过红外线二极管发射出红外线,接收管收到物体反射的红外线,通过电平比较器后输出一个变化电平信号。通过电位器调节,可以控制接收管给电平比较器的信号,而达到控制探测距离的目的。但由于红外线测距模块对火焰比较敏感,因此用在消防机器人上面不是很合适。 方案二:光电循迹传感器

4、+火焰传感器+超声波传感器 该方案使用了超声波测距模块,利用超声波发射和接收模组,通过一定频率的超声波并接收该频率的反射波,通过两者的时差进行计算,准确得出障碍距小车的距离,屏蔽了火焰对测距模块的影响,能有效应用于避障机构。 3、动力机构: 方案一、四线二相步进电机*2 该方案中,步进电机能够按照特定的步进角进行运转,设定好步数,电机则运行相应的角度以下图为例: 虽然步进电机能很准确的对小车进行控制,但是由于其功耗和控制电路的因素,该方案未采用。 方案二、直流减速电机*2 使用L298N驱动两个直流电机,L298N驱动电路如下图: 该驱动电路可两路直流电机或一路步进电机,控制直流电机时,IN1

5、、IN2、IN3、IN4分别接单片机数字IO口,通过IO口控制电机的转动方向,ENA、ENB接单片机PWM输出口,控制电机的转速。该方案电路简单,控制方便,故采用该方案。 4、灭火风扇: 方案一:采用模块化设计,在调试和安装上方便快捷。用两个直流小电机作为灭火装置,由单片机IO口控制,并通过三极管扩流,由L7805将12V锂电池电压稳压为5V,供全部系统使用,在测试过程中发现,当火焰传感器探测到火焰,电机转动时使得系统板电压骤降,导致单片机不断复位,达不到灭火的效果。 方案二:通过给单片机系统单独供电,用IO口控制两个继电器来间接控制灭火小电机,电机电源采用电机驱动板上的5V电源接口。该方案解

6、决了单片机因电压不足而无限重启的现象,使得单片机系统能够稳定运作。因此我采用该方案。 5、电源模块: 现有2200mah航模锂电池一块,输出电压11.1V,最大放电能力30C,完全满足小车需要。采用两路L7805单独给单片机系统和电机驱动系统供电,传感器由单片机系统电源供电,灭火风扇由电机驱动系统供电。电源模块电路原理图如下: 6、数据交互模块: 传感器的数据除了传递给小车系统之外,还需要通过显示屏呈现出来,同样的,有两套方案, 方案一:系统接收到数据之后直接处理,然后显示到LCD1602。该方案使用到1602液晶,在arduino上使用液晶来显示数据参数不是很困难,但是由于小车所使用到的单片

7、机系统为8位单片机,虽然已经有很丰富的IO接口,但数据处理能力着实一般,在使用液晶和单总线的DIS18B20温度传感器时,会使得系统的操作显得很慢,导致程序不能够正常运行。而且1602液晶只能显示两行、16个字符,对于该小车来说着实有点紧张。 方案二:单片机在处理传感器数据的同时,将数据通过串口转发给另一单片机,在另一单片机进行处理后,将参数显示到2004液晶上面,将控制信号反馈给主控单片机,最大限度的使主控单片机的速度不受影响。由于本系统采用集成串口的mega2560单片机与mega328p单片机,只需要通过TXD和RXD两根线进行通信。而且能将部分控制指令直接分配给mega328p,因此,

8、提高了系统的稳定性和工作效率。因此我采用方案二。 二、 小车结构: 电源模块 电机驱动模块 灭火小车四路循迹模块 火焰传感器模块 系统板 灭火模块 数据交互模块 三、 程序设计: 小车从安全位置出发,无固定路线,在火焰传感器的引导下自行选择靠近火源的路线行走,距离火源一定距离时停下,进行灭火操作。灭火完成后继续前往下一个火源。途中遇到障碍物时能够自行避开障碍物,寻找离火源最近的路线前进。小车能够自行判断自己在场地中的位置,防止走出场地,其位置判断与火源计数以及报警部分由mega328p进行。 部分程序: /mega2560部分/ int Motor_L=4; int Motor_R=5; in

9、t Track_L=30; int Track_0=31; int Track_1=A4; int Track_R=32; int Flame_L_D=40; int Flame_R_D=41; int Flame_L_A=A0; int Flame_R_A=A1; int Relay_L=A10; int Relay_R=A11; int F_L_A=0; int F_R_A=0; char D; void setup() pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(22,OUTPUT); pinMode(23,OUTPUT); pinMode

10、(24,OUTPUT); pinMode(25,OUTPUT);/Motor_L&Motor_R. pinMode(30,INPUT); pinMode(31,INPUT); pinMode(A4,INPUT); pinMode(32,INPUT);/Track_L&Track_0&Track_R pinMode(40,INPUT); pinMode(41,INPUT); pinMode(A0,INPUT); pinMode(A1,INPUT);/Flame Digital&Analog Input pinMode(A10,OUTPUT); pinMode(A11,OUTPUT);/Relay

11、 L&R Serial.begin(9600); void loop() F_L_A=analogRead(A0); F_R_A=analogRead(A1); while(1) /*Flame*/ if(digitalRead(40)=0) stop(); relay_L_H(); else straight(); relay_L_K(); if(digitalRead(41)=0) stop(); relay_R_H(); else straight(); relay_R_K(); /*Track Start*/ if(analogRead(A4)500&digitalRead(31)=1

12、&analogRead(A0)500&analogRead(A1)870) right(); straight(); Serial.print(B); else straight(); /*Main End*/ /*/ /*Motor Control*/ /*/ /*Straight*/ void straight(void) if(digitalRead(30)=1&digitalRead(32)=1) digitalWrite(22,HIGH); digitalWrite(23,LOW); digitalWrite(24,HIGH); digitalWrite(25,LOW); analo

13、gWrite(4,255); analogWrite(5,240); else if(digitalRead(30)=0) digitalWrite(22,HIGH); digitalWrite(23,LOW); digitalWrite(24,HIGH); digitalWrite(25,LOW); analogWrite(4,255); analogWrite(5,0); else if(digitalRead(32)=0) digitalWrite(22,HIGH); digitalWrite(23,LOW); digitalWrite(24,HIGH); digitalWrite(25

14、,LOW); analogWrite(4,0); analogWrite(5,240); /*Stop*/ void stop(void) digitalWrite(22,HIGH); digitalWrite(23,LOW); digitalWrite(24,HIGH); digitalWrite(25,LOW); analogWrite(4,0); analogWrite(5,0); /*Back*/ void back(void) digitalWrite(22,LOW); digitalWrite(23,HIGH); digitalWrite(24,LOW); digitalWrite

15、(25,HIGH); analogWrite(4,250); analogWrite(5,230); /*Left*/ void left(void) digitalWrite(22,LOW); digitalWrite(23,HIGH); digitalWrite(24,HIGH); digitalWrite(25,LOW); analogWrite(4,240); analogWrite(5,255); delay(700); /*Right*/ void right(void) digitalWrite(22,HIGH); digitalWrite(23,LOW); digitalWri

16、te(24,LOW); digitalWrite(25,HIGH); analogWrite(4,255); analogWrite(5,255); delay(600); /*/ /*Relay*/ /*/ /*Relay_L*/ void relay_L_H(void) digitalWrite(A10,HIGH); delay(600); void relay_L_K(void) digitalWrite(A10,LOW); /*Realay_R*/ void relay_R_H(void) digitalWrite(A11,HIGH); delay(600); void relay_R

17、_K(void) digitalWrite(A11,LOW); /mega328p串口通讯及LCD测试程序/ #include #include char D; LiquidCrystal_I2C lcd(0x27,20,4); / set the LCD address to 0x27 for a 16 chars and 2 line display void setup() lcd.init(); / initialize the lcd lcd.backlight(); lcd.print(X=); lcd.setCursor(0,1); lcd.print(Y=); Serial.begin(9600); void loop() D=Serial.read(); lcd.setCursor(3,0); if(Serial.read()=A) lcd.print(X); lcd.setCursor(3,1); if(Serial.read()=B) lcd.print(Y);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1