智能灭火小车设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1绪论 (1)
1.1研究的背景和意义 (1)
1.2本次论文设计的主要任务 (1)
2系统方案设计 (1)
2.1总体设计框图 (1)
2.2核心控制单元的选择 (2)
避障方案设计 (6)
2.4小车选择 (12)
3主控制模块主程序设计 (13)
3.1红外循迹模块子程序设计 (14)
3.2红外避障模块子程序设计 (16)
3.3电机控制子程序设计 (17)
结论 (19)
参考文献 (20)
附录 (22)
总体设计框
2.2核心控制单元的选择
AT89C51的主要的特性
•4K字节可编程FLASH存储器
•与MCS-51兼容
•数据保留时间:10年
•寿命:1000写/擦循环
三级程序存储器锁定
•全静态工作:0Hz-24MHz
•32可编程I/O线
•128×8位内部RAM
•5个中断源
•可编程串行通道
•低功耗的闲置和掉电模式
该系统采用AT89C51单片机为中央处理器。
E18-D80NK
三个传感器的硬件电路。
加调制发射管
调制器 整流稳压
接电源
发射器
加调制发射管
整流稳压
接电源
放大器
解调器 时钟逻辑 负载
接收器
E18-D80NK 原理图
E18-D80NK 电气特性如表 3.1。
表 3.1 E18-D80NK 电气特性
避障模块采用三只红外避障传感器,安装于小车两侧及下中央,可以检测两侧和 正前方是否有障碍,检测后将信号送入单片机,单片机对信号进行处理并发出相应的
信号驱动小车电机,使小车躲避障碍。
单片机的 PB0、PB1、PB2
端口分别接左中右
红色 绿色 黄色 工作电压 工作电流 驱动电流 感应距离 VCC
GND
OUT
5VDC
10-15mA
100mA
3-80CM
优
L298N引脚图方案1:采用步进电机
101正转
右均无障碍物默认右转);探测结果001,表明前方及左边15cm内有障碍物,单片机送
出“右转”指令;探测结果100,表明前方及右边15cm内有障碍物,单片机送出“左转”指令;探测结果110,表明右边15cm内有障碍物,单片机送出“左转”指令;探测结果011,表明左边15cm内有障碍物,单片机送出“右转”指令;探测结果010,表明左边
及右边15cm内有障碍物,单片机送出“停止”指令。
红外避障模块外围电路信息处理编码表
3.3电机控制子程序设计
电机控制子程序等待单片机发送指令,接受到指令后,判断指令类型,从而控制
驱动电机电路的输出,控制小车的运动状态。
流程图如图4.5所示。
当接收指令0x00:无数据,无PWM波,无方向信号。
当接收指令0x01:小车前进,两个电机驱动器给予相同的PWM波,相同的方向信号。
当接收指令0x02:小车后退,
在前进的基础上改变方向信号。
当接收指令0x03:小车停止,无PWM波,无方向信号。
当接收指令0x04:结合循迹模块的信号向左微转或左转。
当接收指令0x05:结合循迹
模块的信号向右微转或右转。
结论
本智能小车系统实现了以下功能:
(1)能够按照程序沿预设轨道行驶。
小车在行驶过程中不仅能够实现直道的前进还能实现弧形轨道的前进。
若有偏差,能够自动更正,返回原来预设的轨道上来。
(2)当小车检测到前方有障碍物时,能自动向右转弯行驶,避开前方障碍。
探测到左右方向有障碍时,也能自动的避开障碍行驶。
从运行情况上看,循迹效果符合要求,而避障效果不太理想。
能够使我熟悉以前的知识。
在本次论文中有很多不足之处,还需要改正。
VCC 红
红 1K LEFT VCC
VCC
红 红 红
VCC
1K RIGHT E18-D80NK
红
VCC 1 2 3 4 5 6 7 8
14 15 16 17 18ENA 19 ENB 20 21
VCC IN4148
U2
PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 (T0) (T1) (AIN0) (AIN1) (SS) (MOSI) (MISO) (SCK)
104 MEGA16-DIP40
(ADC0)PA0 (ADC1)PA1 (ADC2)PA2 (ADC3)PA3 (ADC4)PA4 (ADC5)PA5 (ADC6)PA6 (ADC7)PA7
(RXD) (SCL)PC0 (TXD) (SDA)PC1 (INT0) (TCK)PC2 (INT1) (TMS)PC3 (OC1B) (TDO)PC4 (OC1A) (TDI)PC5 (ICP) (TOSC1)PC6 (TOSC2)PC7(TOSC2) 5.1K U1A
40 39 38 37 36 35 34 33
22 23 24 25 26 27 28 29 IN1 IN2 IN3 IN4
5.1K 150
1SEN1
2
3 RV1 10K
OPTOISO1
LM393
E18-D80NK
红 1K FORWORD VCC
5.1K U1B 5.1K 150
红 红
10K
7SEN2
6
E18-D80NK
RST
104
5
RV2 10K
OPTOISO1
LM393
9 1322p
RESET X1
1222p X 27.3728 A VCC AREF
AGND
30 32 31
VCC
5.1K U2A 5.1K 150
1SEN3
2
3 RV3 10K
+5 +5
OPTOISO1
LM393 VCC
C1 C2 0.1uF100uF C3 C4 MG1 0.1uF100uF PC0 PC1 PC2 PC3 PD4 PD5
5 7 10 12
6 11 8 IN1 IN2 IN3 IN4 ENA ENB GND L298N
VSS VS OUT1 OUT2 OUT3 OUT4 9 4
2 3 13 14 ISENA1 ISENB 15 D3 D4 D7 D8
D1 D2 D5 D6 R9 5.1K U2B
5.1K 150
7SEN4
6
5 RV4 10K
OPTOISO1
MOTORSERVO2 V_IN
LM393
1
7805
Vin
V out
3
V_OUT
MOTORSERVO1 R 680
0.1uF
0.1uF
V_OUT LED
附 录
#include<reg52.h>
#define uint unsigned int
+
A
-
+
A -
11
GND
VCC
10
2
GND
#define uchar unsigned char
uint shaomiao;
bit CLK;
/*uchar code table_m[]="Mea:";
uchar code table_s[]="Set:";
uchar code table_qd[]="<ON>";
uchar code table_tz[]="<OFF>";
uchar code table_bengsu[]="speed:";
*/
sbit start_stop=P2^0;
sbit s_fire=P2^1;
sbit put_fire=P2^2;
sbit left_C=P2^3;
sbit right_C=P2^4;
sbit head_C=P2^5;
sbit hou_C=P2^6;
sbit mie=P2^7;
sbit IN1=P3^0;
sbit IN2=P3^1;
sbit IN3=P3^2;
sbit IN4=P3^3;
sbit ENA=P3^4;
sbit ENB=P3^5;
sbit RS=P3^6;
sbit E=P3^7;
void DelayMS(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
/*************液晶显示函数****************/
/****液晶延时*****/
/*void lcd_delay(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<20;i++);
}
}
*/
/************液晶写命令函数***************/
/*void lcd_write_com(uchar com)
{
lcdrs=0;
P0=com;
lcd_delay(5);
lcden=1;
lcd_delay(5);
lcden=0;
}
*/
/************液晶写数据函数****************/ /*void lcd_write_dat(uchar dat)
{
lcdrs=1;
P0=dat;
lcd_delay(5);
lcden=1;
lcd_delay(5);
lcden=0;
}
/************液晶初始化函数***************/ /*void lcd_init(void)
{
lcd_write_com(0x38);
lcd_write_com(0x0c);
lcd_write_com(0x06);
lcd_write_com(0x01);
}
/************三位数显式******************/ /*void lcd_sanweixianshi(uchar wz,uchar xs)
{
lcd_write_com(wz);
lcd_write_dat(xs/100+0x30);
lcd_write_com(wz+1);
lcd_write_dat(((xs/10)%10)+0x30);
lcd_write_com(wz+2);
lcd_write_dat(xs%10+0x30);
}
/************键盘扫描函数***************/ void keyscan()
{
if(start_stop==0)
{
DelayMS(10);
if(start_stop==0)
{
shaomiao=1;
}
}
if(s_fire==0)
{
DelayMS(10);
if(s_fire==0)
{
shaomiao=2;
}
}
if(put_fire==0)
{
DelayMS(10);
if(put_fire==0)
{
shaomiao=3;
}
}
if(left_C==0)
{
DelayMS(10);
if(left_C==0)
{
shaomiao=4;
}
}
if(right_C==0)
{
DelayMS(10);
if(right_C==0)
{
shaomiao=5;
}
}
if(head_C==0)
{
DelayMS(10);
if(head_C==0)
{
shaomiao=6;
}
}
if(hou_C==0)
{
DelayMS(10);
if(hou_C==0)
{
shaomiao=7;
}
}
}
/*******主程序********/ void main()
{
/*TMOD=0x02;
TH0=0x04;
TL0=0x00;
IE=0x82;
TR0=1;
lcd_init();
*/
mie=0;
while(1)
{
keyscan();
switch(shaomiao)
{
case1:
ENA=1;ENB=0;IN1=1;IN2=0;
IN3=0;IN4=0;mie=0;break;
case2:
ENA=0;ENB=0;IN1=0;IN2=0;
IN3=0;IN4=0;mie=0;
DelayMS(10);
ENA=1;ENB=1;IN1=1;IN2=0;
IN3=1;IN4=0;mie=0;break;
case3:
ENA=0;ENB=0;IN1=0;IN2=0;
IN3=0;IN4=0;mie=1;break;
case4:
ENA=1;ENB=0;IN1=1;IN2=0;
IN3=0;IN4=0;mie=0;break;
case5:
ENA=0;ENB=1;IN1=0;IN2=0;
IN3=1;IN4=0;mie=0;break;
case6:
ENA=1;ENB=1;IN1=1;IN2=0;
IN3=1;IN4=0;mie=0;break;
case7:
ENA=1;ENB=1;IN1=0;IN2=1;
IN3=0;IN4=1;mie=0;break;
}
}
}
void Timer0_INT()interrupt1 {
CLK=!CLK;
}。