要求:
本次设计是一个基于北斗定位的无人机灭火系统,本次设计主要通过北斗系统定位,能够将获取到的位置信息通过无线通讯技术传输到无人机上,进行火灾救援。本次设计需求主要为一下几点:
1) 北斗定位获取火灾位置信息;
2) 烟雾传感器,火焰传感器监测火情;
3) 火灾位置信息可视化;
4) 无线通讯传递火灾位置信息。
研究方法:
本次设计主要通过北斗定位模块获取火灾位置,并通过火焰传感器和烟雾传感器进行火情监测,通过OLED显示器将火灾信息进行可视化显示,并通过无线传输技术将信息传递给无人机模拟模块。
资料包括:
原理图:
视频讲解:
程序运行图:
#include"ds18b20.h"
/*******************************************************************************
* 函 数 名 : delay_18B20
* 函数功能 : 延时函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void delay_18B20(unsigned int i)//延时1微秒
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : Ds18b20Init
* 函数功能 : 初始化
* 输 入 : 无
* 输 出 : 初始化成功返回1,失败返回0
*******************************************************************************/
void Ds18b20Init()/*ds1820复位*/
{
unsigned char x=0;
DS18B20 = 1; //DQ复位
delay_18B20(4); //延时
DS18B20 = 0; //DQ拉低
delay_18B20(100); //精确延时大于480us
DS18B20 = 1; //拉高
delay_18B20(40);
}
/*******************************************************************************
* 函 数 名 : Ds18b20WriteByte
* 函数功能 : 向18B20写入一个字节
* 输 入 : com
* 输 出 : 无
*******************************************************************************/
void Ds18b20WriteByte(unsigned char dat)/*写数据*/
{
unsigned char i=0;
for (i=0; i<8; i++)
{
DS18B20 = 0;
DS18B20 = dat&0x01;
delay_18B20(10);
DS18B20 = 1;
dat>>=1;
}
}
/*******************************************************************************
* 函 数 名 : Ds18b20ReadByte
* 函数功能 : 读取一个字节
* 输 入 : com
* 输 出 : 无
*******************************************************************************/
unsigned char Ds18b20ReadByte()/*读数据*/
{
unsigned char i=0;
unsigned char dat = 0;
for (i=0;i<8;i++)
{
DS18B20 = 0; //给脉冲信号
dat>>=1;
DS18B20 = 1; //给脉冲信号
if(DS18B20)
dat|=0x80;
delay_18B20(10);
}
return(dat);
}
/*******************************************************************************
* 函 数 名 : Ds18b20ReadTemp
* 函数功能 : 读取温度
* 输 入 : com
* 输 出 : 无
*******************************************************************************/
int get_DS18B20()
{
int temp = 0;
unsigned char tmh, tml;
Ds18b20Init();
delay_18B20(1);
Ds18b20WriteByte(0xcc); //跳过ROM操作命令
Ds18b20WriteByte(0x44); //温度转换命令
Ds18b20Init();
delay_18B20(1);
Ds18b20WriteByte(0xcc); //跳过ROM操作命令
Ds18b20WriteByte(0xbe); //发送读取温度命令
tml = Ds18b20ReadByte(); //读取温度值共16位,先读低字节
tmh = Ds18b20ReadByte(); //再读高字节
temp = tmh;
temp <<= 8;
temp |= tml;
temp = temp*0.0625*100 + 0.5;
return temp;
}