无线传感器网络实验指导书0506F.docx

上传人:b****2 文档编号:24150533 上传时间:2023-05-24 格式:DOCX 页数:43 大小:595.06KB
下载 相关 举报
无线传感器网络实验指导书0506F.docx_第1页
第1页 / 共43页
无线传感器网络实验指导书0506F.docx_第2页
第2页 / 共43页
无线传感器网络实验指导书0506F.docx_第3页
第3页 / 共43页
无线传感器网络实验指导书0506F.docx_第4页
第4页 / 共43页
无线传感器网络实验指导书0506F.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

无线传感器网络实验指导书0506F.docx

《无线传感器网络实验指导书0506F.docx》由会员分享,可在线阅读,更多相关《无线传感器网络实验指导书0506F.docx(43页珍藏版)》请在冰豆网上搜索。

无线传感器网络实验指导书0506F.docx

无线传感器网络实验指导书0506F

无线传感器网络实验指导书

电子信息工程教研室

实验一光照传感器实验

一、实验目的

了解光敏电阻传感器的特性,掌握其工作原理。

二、实验环境

光照传感器模块、ST-Link仿真器、USB2UART模块、IARforSTM81.30开发软件、AccessPort串口调试软件。

三、实验原理

1、光敏电阻

光敏电阻是一种对光敏感的元件,它的电阻值能随着外界光照强弱变化而变化。

光敏电阻的结构如图1所示,光照特性曲线如图2所示。

 

图1光敏电阻结构图2光照特性曲线

图3电路原理图

2、光敏传感器模块原理图

如图3所示,光敏电阻阻值随着光照强度变化时,在引脚Light_AD输出电压也随之变化。

STM8的PD2引脚采集Light_AD电压模拟量转化为数字量,当采集的AD值大于某一阈值时,则将PD3即Light_IO引脚置低,表明有光照。

传感器使用的光敏电阻的暗电阻为2M欧姆左右,亮电阻为10K左右。

可以计算出:

在黑暗条件下,Light_AD的数值为3.3V*2000K/(2000K+10K)=3.28V。

在光照条件下,Light_AD的数值为3.3V*10K/(10K+10K)=1.65V。

STM8单片机内部带有10位AD转换器,参考电压为供电电压3.3V。

根据上面计算结果,选定1.65V(需要根据实际测量结果进行调整)作为临界值。

当Light_AD为1.65V时,AD读数为1.65/3.3*1024=512。

当AD读数大于512时说明无光照,当AD读数小于512时说明有光照,并点亮LED3作为指示。

并通过串口函数来传送触发(有光照时)信号。

3、源码分析

#include"main.h"

u8CMD_rx_buf[8];//命令缓冲区

u8DATA_tx_buf[14];//返回数据缓冲区

u8CMD_ID=0;//命令序号

u8Sensor_Type=0;//传感器类型编号

u8Sensor_ID=0;//相同类型传感器编号

u8Sensor_Data[6];//传感器数据区

u8Sensor_Data_Digital=0;//数字类型传感器数据

u16Sensor_Data_Analog=0;//模拟类型传感器数据

u16Sensor_Data_Threshod=0;//模拟传感器阈值

voidmain(void)

{

u8i=0;

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//设置内部时钟16M为主时钟

Uart1_Init();

LED_Init();

for(i=0;i<14;i++)

DATA_tx_buf[i]=0;

for(i=0;i<8;i++)

CMD_rx_buf[i]=0;

/*根据不同类型的传感器进行修改*/

Sensor_Type=2;

Sensor_ID=1;

CMD_ID=1;

DATA_tx_buf[0]=0xEE;

DATA_tx_buf[1]=0xCC;

DATA_tx_buf[2]=Sensor_Type;

DATA_tx_buf[3]=Sensor_ID;

DATA_tx_buf[4]=CMD_ID;

DATA_tx_buf[13]=0xFF;

GPIO_Init(GPIOD,GPIO_PIN_3,GPIO_MODE_OUT_PP_HIGH_SLOW);

//ADC

ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS,

ADC1_CHANNEL_3,

ADC1_PRESSEL_FCPU_D4,

ADC1_EXTTRIG_TIM,

DISABLE,

ADC1_ALIGN_RIGHT,

ADC1_SCHMITTTRIG_CHANNEL3,

DISABLE);

ADC1_Cmd(ENABLE);

ADC1_StartConversion();

Sensor_Data_Analog=0;

Sensor_Data_Threshod=700;

delay_ms(1000);

while

(1)

{

//获取传感器数据

Sensor_Data_Analog=ADC1_GetConversionValue();

if(Sensor_Data_Analog

{

Sensor_Data_Digital=0;//无光照

GPIO_WriteHigh(GPIOD,GPIO_PIN_3);

}

else

{

Sensor_Data_Digital=1;//有光照

GPIO_WriteLow(GPIOD,GPIO_PIN_3);

}

//组合数据帧

DATA_tx_buf[10]=Sensor_Data_Digital;

//发送数据帧

UART1_SendString(DATA_tx_buf,14);

LED_Toggle();

delay_ms(1000);

}

}

#ifdefUSE_FULL_ASSERT

voidassert_failed(uint8_t*file,uint32_tline)

{

/*Usercanaddhisownimplementationtoreportthefilenameandlinenumber,

ex:

printf("Wrongparametersvalue:

file%sonline%d\r\n",file,line)*/

/*Infiniteloop*/

while

(1)

{

}

}

#endif

四、实验步骤

1)首先,我们要把传感器模块插到USB2UART模块上,再把ST-Link插到JTAG口上,最后把两根USB线插到PC机的USB端口。

2)我们用IARSWSTM81.30软件,打开..\2-Sensor_光照传感器\Project\Sensor.ewp。

然后,在窗口左侧的User文件夹下的main.c中输入上述源代码。

3)打开后点击“Project”的“RebuilAll”或者选中工程文件右键“RebuilAll”把我们的工程编译一下。

4)点击“RebuilAll”编译完后,无警告,无错误。

5)编译完后我们要把程序烧到模块里,点击中间的DownloadandDebug进行烧写。

6)打开串口工具..\AccessPort.exe,配置好串口参数,波特率115200,8个数据位,1个停止位,无校验位。

单片机采集的信息发送给PC机。

7)传感器底层串口协议返回14个字节,第1位字节和2位字节是包头,第3位字节是传感器类型,第4位字节是传感器ID,第5位字节是节点命令ID,第6位字节到11位字节是数据位,其中第11位字节是传感器的状态位,第12位字节和第13位字节是保留位,第14位字节是包尾。

例如:

返回“EECC0201010000000000000000FF”时,第11位字节为“0”时,表示无光照,返回“EECC0201010000000000010000FF”时,第11位字节为“1”是表示有光照。

测试结果如图4所示。

图4测试结果

五、思考题

1、如何编程控制PD3输出高低电平?

2、编程实现求解光敏电阻的阻值。

 

实验二红外反射传感器实验

一、实验目的

了解红外反射传感器的特性,掌握其工作原理。

二、实验环境

红外反射传感器模块、ST-Link仿真器、USB2UART模块、IARforSTM81.30开发软件、AccessPort串口调试软件。

三、实验原理

1、红外反射传感器

红外反射传感器使用的是反射型红外光电开关,反射型红外光电开关把一个红外光发射器和一个红外光接收器装在一个同一面上,前方装有滤镜,滤除干扰光。

发光器能发出红外光,在无阻情况下光接收器不能收到光。

但当前方有障碍物时,光被反射回接收器,光电开关便动作,输出一个开关控制信号,切断或接通负载电流,从而完成一次控制动作。

图5电路原理图

2、红外反射传感器模块原理图

如图5所示,红外光电开关U3供电电压为5V,集电极开路输出。

当无障碍物时,U3的1脚输出高电平,Q1导通,IR_DATA为低电平;当有障碍物时,U3的1脚输出低电平,Q1截止,IR_DATA为高电平。

通过STM8单片机读取IR_DATA的高低电平状态,即可获知红外反射传感器是否检测到障碍物,当检测到障碍物时,可以点亮LED3作为指示。

通过串口传输信号。

3、源码分析

#include"main.h"

u8CMD_rx_buf[8];//命令缓冲区

u8DATA_tx_buf[14];//返回数据缓冲区

u8CMD_ID=0;//命令序号

u8Sensor_Type=0;//传感器类型编号

u8Sensor_ID=0;//相同类型传感器编号

u8Sensor_Data[6];//传感器数据区

u8Sensor_Data_Digital=0;//数字类型传感器数据

u16Sensor_Data_Analog=0;//模拟类型传感器数据

u16Sensor_Data_Threshod=0;//模拟传感器阈值

voidmain(void)

{

u8i=0;

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//设置内部时钟16M为主时钟

Uart1_Init();

LED_Init();

GPIO_Init(GPIOD,GPIO_PIN_3,GPIO_MODE_IN_FL_NO_IT);

GPIO_Init(GPIOD,GPIO_PIN_2,GPIO_MODE_OUT_PP_HIGH_SLOW);

for(i=0;i<14;i++)

DATA_tx_buf[i]=0;

for(i=0;i<8;i++)

CMD_rx_buf[i]=0;

/*根据不同类型的传感器进行修改*/

Sensor_Type=4;

Sensor_ID=1;

CMD_ID=1;

DATA_tx_buf[0]=0xEE;

DATA_tx_buf[1]=0xCC;

DATA_tx_buf[2]=Sensor_Type;

DATA_tx_buf[3]=Sensor_ID;

DATA_tx_buf[4]=CMD_ID;

DATA_tx_buf[13]=0xFF;

delay_ms(1000);

while

(1)

{

//获取传感器数据

if(!

GPIO_ReadInputPin(GPIOD,GPIO_PIN_3))

{

Sensor_Data_Digital=0;//无障碍

GPIO_WriteHigh(GPIOD,GPIO_PIN_2);

}

else

{

Sensor_Data_Digital=1;//有障碍

GPIO_WriteLow(GPIOD,GPIO_PIN_2);

}

//组合数据帧

DATA_tx_buf[10]=Sensor_Data_Digital;

//发送数据帧

UART1_SendString(DATA_tx_buf,14);

LED_Toggle();

delay_ms(1000);

}

}

#ifdefUSE_FULL_ASSERT

voidassert_failed(uint8_t*file,uint32_tline)

{

/*Usercanaddhisownimplementationtoreportthefilenameandlinenumber,

ex:

printf("Wrongparametersvalue:

file%sonline%d\r\n",file,line)*/

/*Infiniteloop*/

while

(1)

{

}

}

#endif

四、实验步骤

我们把红外反射传感器模块插到USB2UART模块上,重复第1个实验的编译、链接、下载代码、与PC机通信过程。

例如:

返回“EECC0401010000000000000000FF”时,第11位字节为“0”时,表示无障碍,返回“EECC0401010000000000010000FF”时,第11位字节为“1”是表示有障碍。

五、思考题

1、简述红外反射传感器模块IR_DATA引脚电平变化原理。

2、编程实现计数,红外反射传感器模块被障碍物挡住的次数。

 

实验三温湿度传感器实验

一、实验目的

了解温湿度传感器的特性,掌握其工作原理。

二、实验环境

温湿度传感器模块、ST-Link仿真器、USB2UART模块、IARforSTM81.30开发软件、AccessPort串口调试软件。

三、实验原理

1、温湿度传感器

AM2302湿敏电容数字温湿度模块是一款含有己校准数字信号输出的温湿度复合传感器。

它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。

传感器包括一个电容式感湿元件和一个高精度测温元件,并与一个高性能8位单片机相连接。

如图6所示,AM2302引脚图。

图6AM2302引脚图

图7AM2302单总线通信协议

AM2302器件采用简化的单总线通信,单总线通信协议如图7所示,单总线通信格式如图8所示。

单总线即只有一根数据线,系统中的数据交换、控制均由数据线完成。

设备(微处理器)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线;单总线通常要求外接一个约5.1kΩ的上拉电阻,这样,当总线闲置时,其状态为高电平。

由于它们是主从结构,只有主机呼叫传感器时,传感器才会应答,因此主机访问传感器都必须严格遵循单总线序列,如果出现序列混乱,传感器将不响应主机。

 

图8AM2302单总线通信格式

2、温湿度传感器模块原理图

如图9所示,AM2302通过DATA与单片机相连。

图9温湿度传感器原理图

3、源码分析

#include"main.h"

u8CMD_rx_buf[8];//命令缓冲区

u8DATA_tx_buf[14];//返回数据缓冲区

u8CMD_ID=0;//命令序号

u8Sensor_Type=0;//传感器类型编号

u8Sensor_ID=0;//相同类型传感器编号

u8Sensor_Data[6];//传感器数据区

u8Sensor_Data_Digital=0;//数字类型传感器数据

u16Sensor_Data_Analog=0;//模拟类型传感器数据

u16Sensor_Data_Threshod=0;//模拟传感器阈值

voidmain(void)

{

u8i=0;

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//设置内部时钟16M为主时钟

Uart1_Init();

LED_Init();

DHT22_Init();

for(i=0;i<14;i++)

DATA_tx_buf[i]=0;

for(i=0;i<8;i++)

CMD_rx_buf[i]=0;

/*根据不同类型的传感器进行修改*/

Sensor_Type=10;

Sensor_ID=1;

CMD_ID=1;

DATA_tx_buf[0]=0xEE;

DATA_tx_buf[1]=0xCC;

DATA_tx_buf[2]=Sensor_Type;

DATA_tx_buf[3]=Sensor_ID;

DATA_tx_buf[4]=CMD_ID;

DATA_tx_buf[13]=0xFF;

delay_ms(1000);

while

(1)

{

//获取传感器数据

if(DHT22_Read())

{

Sensor_Data[2]=Humidity>>8;

Sensor_Data[3]=Humidity&0xFF;

Sensor_Data[4]=Temperature>>8;

Sensor_Data[5]=Temperature&0xFF;

}

//组合数据帧

for(i=0;i<6;i++)

DATA_tx_buf[5+i]=Sensor_Data[i];

//发送数据帧

UART1_SendString(DATA_tx_buf,14);

LED_Toggle();

delay_ms(1000);

}

}

#ifdefUSE_FULL_ASSERT

voidassert_failed(uint8_t*file,uint32_tline)

{

/*Usercanaddhisownimplementationtoreportthefilenameandlinenumber,

ex:

printf("Wrongparametersvalue:

file%sonline%d\r\n",file,line)*/

/*Infiniteloop*/

while

(1)

{

}

}

#endif

四、实验步骤

我们把温湿度传感器模块插到USB2UART模块上,重复第1个实验的编译、链接、下载代码、与PC机通信过程。

例如:

返回EECC0A01010000HHHLTHTL0000FF,HH,HL代表温度变化,TH,TL代表湿度变化。

五、思考题

1、计算温湿度传感器输出的温度值、湿度值。

2、分析C语言实现单总线协议的过程。

3、编程实现模拟报警系统,当温度超过某一阈值时,LED闪烁。

 

实验四LED灯控制实验

一、实验目的

掌握CC2530芯片的输入输出端口编程控制。

二、实验环境

实验开发箱平台、ZigBee(CC2530)模块、J-Link仿真器、IARforMCS-51开发软件、AccessPort串口调试软件。

三、实验原理

原理图如图10所示,ZigBee(CC2530)模块硬件上设计有2个LED灯,2个按键,用来编程调试使用。

2个LED灯分别连接CC2530的P1_0、P1_1两个IO引脚。

从原理图上可以看出,2个LED灯共阳极,当P1_0、P1_1引脚为低电平时候,LED灯点亮。

图10输入输出原理图

2、源码分析

#include

#defineuintunsignedint

#defineucharunsignedchar

//定义控制LED灯的端口

#defineLED1P1_0//定义LED1为P10口控制

#defineLED2P1_1//定义LED2为P11口控制

//函数声明

voidDelay(uint);//延时函数

voidInitial(void);//初始化P1口

/****************************

//延时函数

*****************************/

voidDelay(uintn)

{

uinti,t;

for(i=0;i<5;i++)

for(t=0;t

}

/****************************

//初始化程序

*****************************/

voidInitial(void)

{

P1DIR|=0x03;//P1_0、P1_1定义为输出

LED1=1;//LED1灯熄灭

LED2=1;//LED2灯熄灭

}

/***************************

//主函数

***************************/

voidmain(void)

{

Initial();//调用初始化函数

LED1=0;//LED1点亮

LED2=0;//LED2点亮

while

(1)

{

LED2=!

LED2;//LED2闪烁

Delay(50000);

}

}

 

四、实验步骤(在实验箱的ZigBee协调器(CC2530)上进行实验)

1)把J-Link仿真器一端连到实验箱右下角的JLink插座上,另一端连到PC机USB端口上。

打开实验箱左上角的开关和ZigBee协调器的开关供电,PowerLED红灯点亮。

按下“选择”按钮,当ZigBee协调器的Debugled黄灯点亮时,选中该模块。

2)用IARforMCS-51软件,打开..\Src\ZigBee\TI\exp\Basic\Exp1.ewp。

然后,在窗口左侧的main.c中输入上述源代码。

3)打开后点击“Project”的“RebuilAll”把工程编译一下。

点击“RebuilAll”编译完后,无警告,无错误。

4)编译完后我们要把程序烧到模块里,点击

左侧的Debug进行烧写。

若烧写失败,重新插拔J-Link仿真器的USB端口。

5)点击

运行,点击

停止。

五、思考题

1、分析输入输出端口的编程控制。

2、编程实现,初始化LED1,LED2全灭;按下S2,LED1,LED2点亮;按下3次S4,LED1,LED2闪烁。

 

实验五片上温度AD实验

一、实验目的

利用CC2530的内部温度传感器作为A\D输入源,将转换后的温度数值利用串口发送给PC机终端。

二、实验环境

实验开发箱平台、ZigBee(CC2530)模块、J-Link仿真器、IARforMCS-51开发软件、AccessPort串口调试软件。

三、实验原理

1、源码分析

#include

#include

#inclu

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

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

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