当前位置:文档之家› 消防机器人设计报告

消防机器人设计报告

消防机器人设计报告基于ATmega2560单片机的智能避障灭火小车一、设计方案:1、控制系统:Arduino Mega2560是采用USB接口的核心电路板,具有54路数字输入输出,适合需要大量IO接口的设计。

处理器核心是ATmega2560,同时具有54路数字输入/输出口(其中16路可作为PWM输出),16路模拟输入,4路UART接口,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。

Arduino Mega2560也能兼容为Arduino UNO设计的扩展板。

该核心电路板能提供大量IO接口,因此为以后的传感器和功能拓展提供了便捷,同时搭配传感器拓展板,在使用和调试便捷性上优于其它单片机。

Arduino2560原理电路:2、传感器:方案一:光电循迹传感器+火焰传感器+红外线测距传感器光电开关在一般情况下,由三部分构成,它们分为:发送器、接收器和检测电路。

它的检测头里也装有一个发光器和一个收光器,它的检测头里也装有一个发光器和一个收光器,但前方没有反光板。

正常情况下发光器发出的光受光器是接收不到的,当有物体通过时挡住了光,并把光反射回来,受光器就接收到了光信号,输出一个开关信号。

当遇到黑色线格的时候,由于黑色吸收了大部分光线,因此光电开光就会输出电平变化,单片机接收到信号以后做出相应的动作。

火焰传感器的基本构成及原理:火焰传感器由红外线接收管、电平比较电路、灵敏度调节电位器三部分组成。

通过红外线接收管探测周围环境,当接收到较强的红外线的时候,由电平比较器反馈给单片机电平变化信号。

可通过电位器调节火焰传感器的灵敏度。

红外测距传感器:红外测距传感器由四部分构成,红外线二极管,红外线接收管,电平比较器,距离调节电位器。

通过红外线二极管发射出红外线,接收管收到物体反射的红外线,通过电平比较器后输出一个变化电平信号。

通过电位器调节,可以控制接收管给电平比较器的信号,而达到控制探测距离的目的。

但由于红外线测距模块对火焰比较敏感,因此用在消防机器人上面不是很合适。

方案二:光电循迹传感器+火焰传感器+超声波传感器该方案使用了超声波测距模块,利用超声波发射和接收模组,通过一定频率的超声波并接收该频率的反射波,通过两者的时差进行计算,准确得出障碍距小车的距离,屏蔽了火焰对测距模块的影响,能有效应用于避障机构。

3、动力机构:方案一、四线二相步进电机*2该方案中,步进电机能够按照特定的步进角进行运转,设定好步数,电机则运行相应的角度以下图为例:虽然步进电机能很准确的对小车进行控制,但是由于其功耗和控制电路的因素,该方案未采用。

方案二、直流减速电机*2使用L298N驱动两个直流电机,L298N驱动电路如下图:该驱动电路可两路直流电机或一路步进电机,控制直流电机时,IN1、IN2、IN3、IN4分别接单片机数字IO口,通过IO口控制电机的转动方向,ENA、ENB接单片机PWM输出口,控制电机的转速。

该方案电路简单,控制方便,故采用该方案。

4、灭火风扇:方案一:采用模块化设计,在调试和安装上方便快捷。

用两个直流小电机作为灭火装置,由单片机IO口控制,并通过三极管扩流,由L7805将12V 锂电池电压稳压为5V,供全部系统使用,在测试过程中发现,当火焰传感器探测到火焰,电机转动时使得系统板电压骤降,导致单片机不断复位,达不到灭火的效果。

方案二:通过给单片机系统单独供电,用IO口控制两个继电器来间接控制灭火小电机,电机电源采用电机驱动板上的5V电源接口。

该方案解决了单片机因电压不足而无限重启的现象,使得单片机系统能够稳定运作。

因此我采用该方案。

5、电源模块:现有2200mah航模锂电池一块,输出电压11.1V,最大放电能力30C,完全满足小车需要。

采用两路L7805单独给单片机系统和电机驱动系统供电,传感器由单片机系统电源供电,灭火风扇由电机驱动系统供电。

电源模块电路原理图如下:6、 数据交互模块:传感器的数据除了传递给小车系统之外,还需要通过显示屏呈现出来,同样的,有两套方案,方案一:系统接收到数据之后直接处理,然后显示到LCD1602。

该方案使用到1602液晶,在arduino 上使用液晶来显示数据参数不是很困难,但是由于小车所使用到的单片机系统为8位单片机,虽然已经有很丰富的IO 接口,但数据处理能力着实一般,在使用液晶和单总线的DIS18B20温度传感器时,会使得系统的操作显得很慢,导致程序不能够正常运行。

而且1602液晶只能显示两行、16个字符,对于该小车来说着实有点紧张。

方案二:单片机在处理传感器数据的同时,将数据通过串口转发给另一单片机,在另一单片机进行处理后,将参数显示到2004液晶上面,将控制信号反馈给主控单片机,最大限度的使主控单片机的速度不受影响。

由于本系统采用集成串口的mega2560单片机与mega328p 单片机,只需要通过TXD 和RXD 两根线进行通信。

而且能将部分控制指令直接分配给mega328p ,因此,提高了系统的稳定性和工作效率。

因此我采用方案二。

二、 小车结构:三、 程序设计:小车从安全位置出发,无固定路线,在火焰传感器的引导下自行选择靠近火源的路线行走,距离火源一定距离时停下,进行灭火操作。

灭火完成后继续前往下一个火源。

途中遇到障碍物时能够自行避开障碍物,寻找离火源最近的路线前进。

小车能够自行判断自己在场地中的位置,防止走出场地,其位置判断与火源计数以及报警部分由mega328p 进行。

部分程序://mega2560部分//int Motor_L=4;int Motor_R=5;int 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(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 L&RSerial.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&&analogRead(A0)<870) {left();straight();Serial.print("A");}else{straight();}if(digitalRead(31)==1&&analogRead(A4)>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);analogWrite(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,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(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);digitalWrite(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_K(void){digitalWrite(A11,LOW);}//mega328p串口通讯及LCD测试程序//#include <Wire.h>#include <LiquidCrystal_I2C.h>char D;LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line displayvoid setup(){lcd.init(); // initialize the lcdlcd.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");}}。

相关主题