传感器课程报告第11组校园滴漏检测.docx
《传感器课程报告第11组校园滴漏检测.docx》由会员分享,可在线阅读,更多相关《传感器课程报告第11组校园滴漏检测.docx(17页珍藏版)》请在冰豆网上搜索。
传感器课程报告第11组校园滴漏检测
传感器实验导论课程设计报告
校园滴漏检测
华侨大学电子工程系
一、实验的要求与目的
利用传感器设计电路来实现检测到校园水龙头滴漏的功能。
二、所用传感器
三、传感器简介
1.红外反射传感器
该传感器模块其具有一对红外线发
射与接收管,发射管发射出一定频率
的红外线,当检测方向遇到障碍物时,
红外线反射回来被接收管接收,经过
比较器电路处理之后,绿色指示灯会
亮起,同时信号输出接口输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,有效距离范围2~30cm,工作电压为3.3V-5V。
内部电路图如下
2.压力传感器
称重传感器的工作原理:
应变式力传感器的受力工作原理如图所示。
将应变片粘贴到受力的力敏型弹性元件上,当弹性元件受力产生变形时,应变片产生相
应的应变,转化成电阻变化。
将应变片接成如图所示的电桥,力引起的电阻变化将转换为测量电路的电压变化,通过测量输出电压的数值,再通过换算即可得到所测量物体的重量。
3.湿度传感器
四、单片机
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
引脚图如右图所示.
5、原理图
1.红外传感器
2.压力传感器
3.湿度传感器
六、程序清单
1.红外传感器
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitspeaker=P2^0;
sbitled=P2^1;
sbitjieshou=P2^2;
//
voiddelay(ucharx)
{
uchari;
while(x--);
for(i=10;i>0;i--);
}
//
voidbaojing()
{
while
(1)
{
speaker=1;
led=1;
}
}
//
voidmain()
{
speaker=0;
led=0;
jieshou=1;
while
(1)
{
if(jieshou==1)
{
delay(20);
baojing();
}
speaker=0;
led=0;
jieshou=1;
}
}
2.压力传感器
#include"HX711.h"
//****************************************************
//延时函数
//****************************************************
voidDelay__hx711_us(void)
{
_nop_();
_nop_();
}
//****************************************************
//读取HX711
//****************************************************
unsignedlongHX711_Read(void)//增益128
{
unsignedlongcount;
unsignedchari;
HX711_DOUT=1;
Delay__hx711_us();
HX711_SCK=0;
count=0;
while(HX711_DOUT);
for(i=0;i<24;i++)
{
HX711_SCK=1;
count=count<<1;
HX711_SCK=0;
if(HX711_DOUT)
count++;
}
HX711_SCK=1;
count=count^0x800000;//第25个脉冲下降沿来时,转换数据
Delay__hx711_us();
HX711_SCK=0;
return(count);
}
主要程序:
#include"main.h"
#include"HX711.h"
unsignedlongHX711_Buffer=0;
unsignedlongWeight_Maopi=0,Weight_Shiwu=0;
unsignedcharPrice_Buffer[3]={0x00,0x00,0x00};
bitFlag_OK=0;
//****************************************************
//主函数
//****************************************************
voidmain()
{
Get_Maopi();//称毛皮重量
while
(1)
{
if(Flag_OK==0)
{
Get_Weight();//称重
}
}
}
//****************************************************
//称重
//****************************************************
voidGet_Weight()
{
HX711_Buffer=HX711_Read();
HX711_Buffer=HX711_Buffer/100;
if(HX711_Buffer>Weight_Maopi)
{
Weight_Shiwu=HX711_Buffer;
Weight_Shiwu=Weight_Shiwu-Weight_Maopi;//获取实物的AD采样数值。
Weight_Shiwu=(unsignedint)((float)Weight_Shiwu/4.22+0.05);//计算实物的实际重量
//因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的4.30这个除数。
//当发现测试出来的重量偏大时,增加该数值。
//如果测试出来的重量偏小时,减小改数值。
//该数值一般在4.0-5.0之间。
因传感器不同而定。
//+0.05是为了四舍五入百分位
Buzzer=1;//关闭警报
}
//elseif(HX711_Buffer//{
//Buzzer=0;//负重量报警
//}
//elseif(HX711_Buffer>Weight_Maopi+200)//大于限定范围,报警
//{
//Buzzer=0;
//}
}
//****************************************************
//获取毛皮重量
//****************************************************
voidGet_Maopi()
{
HX711_Buffer=HX711_Read();
Weight_Maopi=HX711_Buffer/100;
}
//****************************************************
//MS延时函数(12M晶振下测试)
//****************************************************
voidDelay_ms(unsignedintn)
{
unsignedinti,j;
for(i=0;ifor(j=0;j<123;j++);
}
3.湿度传感器
#include
#defineucharunsignedchar
#defineuintunsignedint
longuintpulse=0;//计数输入的方波的个数;
longuintfreq=0;//频率
uchartemp=0;//临时变量
voiddelay_1ms(uinti)//延时函数,约1ms
{
uintx,j;
for(j=0;j
for(x=0;x<=148;x++);
}
voidTime0_Init()//定时器和计数器的初始化函数
{
EA=1;//打开全局中断
TMOD=0x15;//设定定时器1和计数器0的工作方式为方式1
TH0=0xff;//计数器0的初值
TL0=0xff;//计数器0的初值
ET0=1;//允许计数器0中断
TR0=1;//打开计数器0,开始计数
TH1=0x3c;//定时器1的初值
TL1=0xb0;//定时器1的初值
ET1=1;//允许定时器1中断
TR1=1;//打开定时器1,开始计数
}
voidmain()
{
Time0_Init();//初始化定时器和计数器
while
(1)
{
delay_1ms
(1);
if(freq>3000&&freq<6719)
{
P1=0xff;//开灯
}
else
{
P1=0;//关灯
}
}
}
voidISQ_timer0(void)interrupt1//用来计数脉冲数,每一个方波脉冲,计数器进入中断,脉冲数加一
{
TR0=0;
pulse++;
TH0=0xff;
TL0=0xff;
TR0=1;
}
/****************************************************************
用来设定时间,定时器的周期为50ms,当经过20次后,
也即1s后,关断定时器和计数器,将一秒内计数的脉冲数赋给频率pulse,
一秒内采集的脉冲数即为输入方波的频率
****************************************************************/
voidISQ_time1()interrupt3
{
TH1=0x3c;
TL1=0xb0;
temp++;
if(temp==20)
{
TR0=0;
TR1=0;
temp=0;
freq=pulse;
pulse=0;//将脉冲数清零,重新计数
TR0=1;//打开计数器0,进入下一个循环
TR1=1;//打开定时器1,进入下一个循环
}
}
7、实验结果
三个传感器分别做成的单元电路都能够检测出滴漏Whenyouareoldandgreyandfullofsleep,
Andnoddingbythefire,takedownthisbook,
Andslowlyread,anddreamofthesoftlook
Youreyeshadonce,andoftheirshadowsdeep;
Howmanylovedyourmomentsofgladgrace,
Andlovedyourbeautywithlovefalseortrue,
Butonemanlovedthepilgrimsoulinyou,
Andlovedthesorrowsofyourchangingface;
Andbendingdownbesidetheglowingbars,
Murmur,alittlesadly,howlovefled
Andpaceduponthemountainsoverhead
Andhidhisfaceamidacrowdofstars.
Thefurthestdistanceintheworld
Isnotbetweenlifeanddeath
ButwhenIstandinfrontofyou
Yetyoudon'tknowthat
Iloveyou.
Thefurthestdistanceintheworld
IsnotwhenIstandinfrontofyou
Yetyoucan'tseemylove
Butwhenundoubtedlyknowingthelovefromboth
Yetcannotbetogether.
Thefurthestdistanceintheworld
Isnotbeingapartwhilebeinginlove
ButwhenIplainlycannotresisttheyearning
Yetpretendingyouhaveneverbeeninmyheart.
Thefurthestdistanceintheworld
Isnotstrugglingagainstthetides
Butusingone'sindifferentheart
Todiganuncrossableriver
Fortheonewholovesyou.