《智能微系统设计/》课程
实 验 报 告
班级:02131201
姓名:
学号:
北京理工大学
实验一、环境参数测量实验
1. 实验项目
①测试环境温湿度;
②测量环境气压;
③测试人体表面温湿度(选做)。
2. 实验方法
1)实验准备
①连接PC机与智能系统实验平台;
②接通电源,电源指示灯亮,OLED屏显示开机界面;
2)单次测量
①拨开关S1和S2至断开,系统进入单次检测浮点输入状态;
②按键Key3,完成一次环境参数单次测量,记录OLED显示屏上的浮点数据;
③拨开关S2至连接状态,S1保持断开,系统进入单次检测码值输出状态;
④按Key3,完成一次环境参数单次测量,记录OLED显示屏上的码值数据;
⑤将码值数据根据关系进行换算,将计算结果与②中的浮点数据进行对比;
3)连续测量
①启动软件, 选com1,设置9600,软件显示正常;
②拨S1至连接,系统进入连续测量状态;
③按键Key3,启动连续检测;
④观察温湿度和压力曲线,截取数据曲线显示界面;
⑤拨开关S1至断开,停止检测。
4)体表温湿度测量
①启动软件,选com1,设置通讯速度为9600,;
②拨开关S1至连接;
③按键Key3,启动连续检测;
④放手指置于传感器表面,截取数据曲线显示界面;
⑤拨开关S1至断开,停止连续检测。
3.1单次检测
3.1.1单次检测实验结果结果分析:
由表格易看出,经过码值计算得到的温湿度数据与实际测量的温湿度数据结果虽有误差,但结果相近.
3.1.2实验结论:
由上述实验结果可知该传感器较准确有效的测出实际环境温度湿度.
3.2连续检测曲线图
(粘贴实验截图)
1) 体表温湿图曲线图
(粘贴实验截图)
3.2.1连续检测实验结果分析
由图像可知,随着时间的变化,环境温度和湿度呈缓慢下降趋势,但湿度有小幅度波动.体表温度和湿度呈缓慢上升趋势.
3.4 实验结论
由环境连续检测图像可得环境温度变化比湿度变化缓慢.
由体表连续检测图像可得该传感器对外界温度的感知较为缓慢,对外界湿度的突变较为敏感.
注:各标题用宋体四号字,内容用宋体小四号字,行距22磅。
实验二、运动参数测量实验
1. 实验项目
①基于重力加速度的姿态倾角检测;
②*挥臂检测/记步检测(选做)
2. 实验方法
1) 实验准备
① 将智能系统实验平台通过USB连接至PC机;
② 接通电源开关,电源指示灯亮,OLED显示屏显示开机界面;
2) 基于重力加速度的姿态倾角检测
① 转动智能系统实验平台,观察并记录实验平台处于6个稳态状态下的三轴加速度数据。
② 将智能系统实验平台一侧抬高并形成稳定角度,使用量角器测量该角度;
③ 观察并记录实验平台处于该倾角状态下的三轴加速度数据。
④ 通过三角函数计算实验平台的倾角,并将计算结果与测量值进行对比。
3) 挥臂检测/记步检测
① 启动环境参数测量软件,选择串口com1,将通讯速度设置为9600,软件显示“串口连接正常”。
② 将拨码开关4设置为连接状态,开启连续测量功能;
③ 手持实验平台模拟行走摆臂动作,并记录摆臂次数;
④ 观测三轴加速度测量曲线,并截取曲线界面;
⑤ 统计曲线中产生的波动数量,并与摆臂次数进行对比,建立数学关系模型;
⑥ 重复上述实验步骤,验证数学模型。
3. 实验结果记录
1) 基于重力加速度的姿态倾角检测;
2) 摆臂检测/计步检测
摆臂次数检测数学模型: 波峰=与摆动平面平行的坐标轴波峰数
4. 实验结果分析
经过上述实验可以了解加速度传感器和角速度传感器的测量原理和测量特性,加速度传感器在重力作用下可以很明显的测出误差较小的数据,角速度传感器在一定角度下可以较准确地测量数据;运动传感器中验证了数学模型:摆臂次数= ,实验数据较为精确。
5. 实验结论
在上述实验中,我们体会到了实验数据的来之不易,懂得了实验不是与数学模型100%吻合,我们应当稳扎稳打,按照步骤做实验,不可心急气躁,尽量得到准确的实验数据。
6. 实验注意事项
1) 进行测量时,应注意动作幅度,避免跌落和碰撞。
2) 摆动传感器平台时,应注意防止传输数据线脱落。
3) 为使得图像相邻两个周期便于分辨,摇动传感器的周期应较大些。
/*基于盛群单片机开发的 获得温湿传感器dht11和光敏电阻的数据 并且发送到1602显示屏的程序*/
#include <ht46r232.h>
#pragma vector isr_4 @ 0x4
#pragma vector isr_8 @ 0x8
#pragma vector isr_c @ 0xc
#pragma vector isr_ad @ 0x10 //ad中断服务程序(r232地址是10)
//ISR for safequard
void isr_4(){} // external ISR
void isr_8(){} // timer/event 0
void isr_c(){} // timer/event 1
//initialize registers for safeguard
void safeguard_init(){
_intc0=0;
_intc1=0;
_tmr0h=0;
_tmr0l=0;
_tmr0c=0;
_tmr1h=0;
_tmr1l=0;
_tmr1c=0;
_pac=0xff;
_pbc =0xff; //input mode
_pcc =0xff;
}
typedef unsigned char u8;
#define rs _pc2
#define ep _pc0
#define rw _pc1
#define dht _pb1
#define ko _pb2
#define ky _pb3
#define LED_DATA_CRL _pac
#define DHT_DATA_CRL _pbc
#define LED_DATA_DATA _pa
#define LED_CRL_CRL _pcc
#define ad_start _26_7
void busycheck(void);
void init(void); //屏幕的控制rs //屏幕的控制rs //屏幕的控制rs //外部按键定义 //屏幕数据管脚的I/O控制 //dht数据管脚的I/O控制 //屏幕数据管脚的数据传递 //屏幕控制管脚的I/O控制 //定义ad转换的start位(r232的adcr寄存器地址是0x26h)
void cmd(unsigned char);
void data(int);
signed char U8FLAG,U8temp,U8comdata;
int
U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;/*中间数值,校对校验码后付给最终的结果*/
int U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;/*实际数值*/ int k; //外部按键常量
unsigned int light; //光强的数字值
int light_b; //百位
int light_s; //十位
int light_g; //个位
int count;
void ADtrans(){ //ad转换开始
ad_start=0;
ad_start=1;
ad_start=0;
}
//--------------------------------------屏幕部分------------------------------
//********************************屏幕初始************************************ void init()
{
LED_DATA_CRL=0;
LED_CRL_CRL=0;
LED_DATA_DATA=0;
_pc=0;
_delay(5000);
_delay(5000);
_delay(5000);
cmd(0x38);
_delay(5000);
cmd(0x38);
_delay(5000);
cmd(0x38);
_delay(5000);
cmd(0x38);
busycheck();
cmd(0x08);
busycheck();
cmd(0x01);
busycheck();
cmd(0x06);
busycheck();
cmd(0x0c);
busycheck();
}
//****************************
//***********送指令函数******** void cmd(u8 mingling)
{
//busycheck();
rs= 0;
rw = 0;
ep = 0;
LED_DATA_DATA=mingling; _delay(100);
ep=1;
_delay(100);
ep=0;
}
//***************************
//*********送数据************
void data(int zimu)
{//busycheck();
rw=0;
rs = 1;
rw = 0;
ep = 0;
LED_DATA_DATA= zimu;
_delay(100);
ep = 1;
_delay(100);
ep = 0;
}
//***************************
//**********busycheck***********
void busycheck(void){
u8 val;
do{
ep=0;
LED_DATA_CRL=0xff;
rs=0;
rw=1;
ep=1;
_delay(100);
val=LED_DATA_DATA;
_delay(100);
ep=0;
}while(val&(u8)0x80);
rw=0;
LED_DATA_CRL=0;
}
//*****************************************************
//******************写入地址***************************
void pos(u8 x)
{
cmd(x|0x80);
}
//***************************************************** //-------------------dht21 部分------------------------
//**************获取8位二进制数************************
/*COM获取一个8位二进制数*/
void COM(void)
{
u8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!dht)&&U8FLAG++);
_delay(35);
U8temp=0;
if(dht)U8temp=1;
U8FLAG=2;
while((dht)&&U8FLAG++);
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata<<=1;
U8comdata|=U8temp;
}//rof
}
//*********************************************************** /*--------------------------------*/
/*-----温湿度读取子程序 ----------*/
/*--------------------------------*/
/*-----以下变量均为全局变量-------*/
/*----温度高8位== U8T_data_H------*/
/*----温度低8位== U8T_data_L------*/
/*----湿度高8位== U8RH_data_H-----*/
/*----湿度低8位== U8RH_data_L-----*/
/*----校验 8位 == U8checkdata-----*/
void RH(void)
{ int c=0;
DHT_DATA_CRL=0;
dht=0;
_delay(20000); //主机拉低500us
DHT_DATA_CRL=0xff; //主机设为输入(电平由上拉电阻拉高) 在20~40us后判断从机响应信号
while((dht==1)&&(c++<100)); //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
if(!dht)
{
U8FLAG=2;
while((!dht)&&U8FLAG++);//判断从机是否发出 80us 的低电平响应信号是否结束
U8FLAG=2;
while((dht)&&U8FLAG++); //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
COM(); //数据接收状态
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
//数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp)
if(1)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp; }
}
}
//******************************************************************
//---------------------华丽的main函数分割线-------------------------
void main()
{
//*********变量定义***********
u8 r='r';
u8 h='h';
u8 t='t';
u8 c='c';
u8 l='l';
u8 z=':';
u8 si='4';
u8 wu='5';
u8 liu='6';
u8 ling='0';
int rhdatas; //湿度数据十位
int rhdatag; // 湿度数据个位
int tdatas;
int tdatag;
int i=0;
//*****************************
//*********初始化**************
safeguard_init();
init();
DHT_DATA_CRL=0xff;
_acsr=0x01; //ad转换8分频
_adcr=0x08; //设置通道 pb0 an0作为ad输入
ad_start=1; //设置分频和通道
ad_start=0;
_emi=0; //关总中断
_adf=0; //清除ad中断标志位
_eadi=1; // 开ad中断使能
_emi=1; //开总中断
//*******************************
while(1){
RH();
ADtrans(); //ad转换开始
if(ko==0)k=1; //查询键盘
else if(ky==0)k=0;
//**把获得的数据转换成屏幕可以显示的数字(根据屏幕的编码表)**********
rhdatas=U8RH_data_H/10;
rhdatag=U8RH_data_H%10;
rhdatas=(rhdatas|0x30)&0x3f;
rhdatag=(rhdatag|0x30)&0x3f;
if(ko==0)k=1; //查询键盘
else if(ky==0)k=0;
tdatas=U8T_data_H/10;
tdatag=U8T_data_H%10;
tdatas=(tdatas|0x30)&0x3f;
tdatag=(tdatag|0x30)&0x3f;
if(ko==0)k=1; //查询键盘
else if(ky==0)k=0;
light_b=light/100;
light_s=(light-light_b*100)/10;
light_g=light%10;
light_b=(light_b|0x30)&0x3f;
light_s=(light_s|0x30)&0x3f;
light_g=(light_g|0x30)&0x3f;
//***********************************
cmd(0x08); //先关显示屏!!!!!! _delay(60000);
cmd(0x01); // 清屏!!!!!!!!!! _delay(60000);
_delay(60000);
if(ko==0)k=1; //查询键盘
else if(ky==0)k=0;
pos(0); //显示温度
data(h);
data(z);
data(rhdatas);
data(rhdatag);
if(ko==0)k=1; //查询键盘
else if(ky==0)k=0;
pos(43); //显示湿度
data(t);
data(z);
data(tdatas);
data(tdatag);
if(ko==0)k=1; //查询键盘
else if(ky==0)k=0;
pos(8);
data(r); //显示推荐数据
data(c);
data(z);
if(tdatas=='3') {if (k==1) {data(si);data(ling);}
else {data(si);data(wu);}}
if(U8T_data_H<30&&U8T_data_H>=25) {if (k==1) {data(si);data(wu);} else {data(wu);data(ling);}}
if (U8T_data_H<25) {if (k==1) {data(wu);data(wu);} else {data(liu);data(ling);}}
pos(0x4a); //显示当前光强 data(l);
data(z);
data(light_b);
data(light_s);
data(light_g);
pos(0x48);
data(count);
if(ko==0)k=1;
else if(ky==0)k=0;
cmd(0xc);
_delay(250000);
if(ko==0)k=1;
else if(ky==0)k=0;
_delay(250000);
if(ko==0)k=1;
else if(ky==0)k=0;
_delay(250000);
if(ko==0)k=1;
else if(ky==0)k=0;
_delay(250000);
if(ko==0)k=1;
else if(ky==0)k=0;
_delay(250000);
if(ko==0)k=1;
else if(ky==0)k=0;
_delay(250000);
if(ko==0)k=1;
else if(ky==0)k=0;
_delay(250000);
if(ko==0)k=1;
else if(ky==0)k=0;
_delay(250000);
if(ko==0)k=1; //查询键盘 //开显示屏@!!!!!!!!!!!!!! //查询+延时
else if(ky==0)k=0;
}
}
//________________________________________________
//***********中断服务程序******************** void isr_ad(){
_adf=0;
light=_adrh;
count++;
} //清除ad中断标志位 //读取ad数据寄存器高八位;
智能微系统设计课程实验报告班级姓名学号北京理工大学实验一环境参数测量实验1实验项目测试环境温湿度测量环境气压测试人体表面温湿度选做…
大学物理实验报告注1所有电子版实验报告必须使用统一摸版内容按统一规定编辑2学院班姓名等用宋体正文五号不要加粗3实验名称用宋体正文四…
关于温度传感器特性的实验研究摘要温度传感器在人们的生活中有重要应用是现代社会必不可少的东西本文通过控制变量法具体研究了三种温度传感…
电子092班林楚狄32号温度传感器实验报告一实验目的1了解各种电阻的特性与应用2了解温度传感器的基本原理与应用二实验器材传感器特性…
温度传感器课程设计报告组员:专业:年级:学院:系别:完成日期:指导教师:目录1引言..32设计要求..33工作原理..34方案设计…
温度传感器课程设计报告组员:专业:年级:学院:系别:完成日期:指导教师:目录1引言..32设计要求..33工作原理..34方案设计…
关于温度传感器特性的实验研究摘要温度传感器在人们的生活中有重要应用是现代社会必不可少的东西本文通过控制变量法具体研究了三种温度传感…
大学物理实验报告注1所有电子版实验报告必须使用统一摸版内容按统一规定编辑2学院班姓名等用宋体正文五号不要加粗3实验名称用宋体正文四…
温度传感器DS18B20实验报告一实验目的12复习掌握Protueskeil软件的使用了解掌握DS18B20的工作原理以及编程方法…
电子092班林楚狄32号温度传感器实验报告一实验目的1了解各种电阻的特性与应用2了解温度传感器的基本原理与应用二实验器材传感器特性…
第一次实验做实验一金属箔式应变计性能应变电桥实验二金属箔式应变计三种桥路性能比较第二次实验做实验十四电感式传感器差动变压器性能实验…