整理无线传感器网络实验指导书0506fWord文档格式.docx
《整理无线传感器网络实验指导书0506fWord文档格式.docx》由会员分享,可在线阅读,更多相关《整理无线传感器网络实验指导书0506fWord文档格式.docx(36页珍藏版)》请在冰豆网上搜索。
一、实验目的
了解光敏电阻传感器的特性,掌握其工作原理。
二、实验环境
光照传感器模块、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;
8;
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_Threshod)
{
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();
}
#ifdefUSE_FULL_ASSERT
voidassert_failed(uint8_t*file,uint32_tline)
{
/*Usercanaddhisownimplementationtoreportthefilenameandlinenumber,
ex:
printf("
Wrongparametersvalue:
file%sonline%d\r\n"
file,line)*/
/*Infiniteloop*/
#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作为指示。
通过串口传输信号。
GPIO_Init(GPIOD,GPIO_PIN_3,GPIO_MODE_IN_FL_NO_IT);
GPIO_Init(GPIOD,GPIO_PIN_2,GPIO_MODE_OUT_PP_HIGH_SLOW);
Sensor_Type=4;
Sensor_I