传感器课程设计.docx
《传感器课程设计.docx》由会员分享,可在线阅读,更多相关《传感器课程设计.docx(18页珍藏版)》请在冰点文库上搜索。
![传感器课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/c239f71e-ac56-42fe-aa9f-ff2fb24f2109/c239f71e-ac56-42fe-aa9f-ff2fb24f21091.gif)
传感器课程设计
目录
1.摘要2
2.系统总体设计方案2
2.1设计要求2
2.2总体框图2
3.系统硬件设计2
3.1总体电路图2
3.2组成模块介绍2
4.元件清单2
5.系统调试与测量结果2
5.1程序流程图2
5.2程序代码2
6.测量结果分析2
7.心得体会2
8.参考文献2
基于光敏电阻的简易传感器
——光感自动控制百叶窗
1.摘要
本设计题目是光感自动控制百叶窗,用光照的强弱来改变光敏电阻的阻值大小,采用了MS-C51单片机为主控制电路,用数码管显示光照强度值,进而控制步进电动机控制百叶窗的旋转包括正转、反转和暂停。
本设计电路各个部分电路的设计原理及功能都能实现,要求对各种基本的电子元器件,电阻、电容、二极管、三极管等熟悉,掌握Proteus仿真软件的运用、Protel99SE工具软件等绘图软件,并加以运用。
用单片机内部的AD转换实现模拟转化为数字量,通过编程控制各个外围电路并实现其功能。
本设计具有有线路简单、结构紧凑、价格低廉、性能优越等特点。
单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于各领域各方面。
本次设计是以单片机为核心,加上其他器件,设计电路来实现百叶窗的控制。
2.系统总体设计方案
2.1设计要求
单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于各领域各方面。
本次设计是以单片机为核心,加上其他器件,设计电路来实现百叶窗的控制。
利用光敏电阻与标准电阻串联输入模拟信号,通过ADC0809芯片转换成数字信号传送给单片机,通过单片机处理并控制LCD显示当前的测量光强值,以及输出步进电动机的驱动信号,再利用达林顿管ULN2003提高单片机的输出功率驱动步进电动机。
2.2总体框图
3.系统硬件设计
3.1总体电路图
3.2组成模块介绍
单片机:
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
AD转换模块:
将光敏电阻用滑动变阻器代替。
R10为标准10K电阻,RV1为10K滑动变阻器,以代替光敏电阻仿真。
由于仿真软件只支持ADC0808芯片仿真,故在仿真时使用此芯片,实际电路板中选用了ADC0808。
处于实际电路板焊接时候引脚选用方便考虑,选用IN7输出口。
即将模拟输入选择口ADDA、ADDB、ADDC接入VCC。
处于实际电路焊接考虑,将ST接入P3.0口,EOC接入P3.1口,OE接入P3.2口,CLK接入P3.3口,具体电路如右图。
步进电动机驱动:
如果直接用单片机驱动步进电动机,因为单片机的输出电流太低,功率不够,无法驱动步进电动机,故接入达林顿管ULN2003来增加输出功率,处于实际电路焊接考虑,使用P3.4~P3.7端口。
电路如下图
暂停控制:
用开关控制,开关闭合时步进电动机暂停,LCD显示暂停状态(*字符),但依旧可以测量出光强值。
LCD显示:
LCD接口如图所示,由于单片机P0口和P2口在单片机的右边,故将LCD的输入口和控制口分别接入P0和P2口,由于P0口无上拉电阻,故接入LCD时接入一排上拉电阻。
如右图
4.元件清单
数量
元件名称
参数
1
AT89C51
1
LCD
LM016L
1
RESPACK-8
1
ULN2003A
1
RES
10K
1
POT-HG
10K
1
SW-SPST
1
MOTOR-STEPPER
+5V
1
ADC0808
5.系统调试与测量结果
5.1程序流程图
5.2程序代码
#include
unsignedcharget_data;
unsignedinttemp;
unsignedcharcodetab1[]="welcomeon!
";
unsignedcharcodetab2[]="light:
";
unsignedcharcodetab3[]="mcd";
sbitST=P3^0;
sbitEOC=P3^1;
sbitOE=P3^2;
sbitCLK=P3^3;
sbitA1=P3^5;
sbitB1=P3^6;
sbitC1=P3^7;
sbitD1=P3^4;
sbitRS=P2^0;
sbitRW=P2^1;
sbitE=P2^2;
sbitkey=P2^4;
#definer1{A1=1;B1=1;C1=1;D1=0;}
#definer2{A1=1;B1=1;C1=0;D1=0;}
#definer3{A1=1;B1=1;C1=0;D1=1;}
#definer4{A1=1;B1=0;C1=0;D1=1;}
#definer5{A1=1;B1=0;C1=1;D1=1;}
#definer6{A1=0;B1=0;C1=1;D1=1;}
#definer7{A1=0;B1=1;C1=1;D1=1;}
#definer8{A1=0;B1=1;C1=1;D1=0;}
voidtimer()
{
TMOD=0x10;
TH0=(65536-190)/256;
TL0=(65536-190)%256;
EA=1;
ET0=1;
TR0=1;
}
voiddelay(unsignedintt)
{
inti,j;
for(i=t;i>0;i--)
for(j=112;j>0;j--);
}
writecom(unsignedcharcom)
{
RS=0;
RW=0;
P0=com;
E=0;
delay
(1);
E=1;
delay
(1);
E=0;
}
writedata(unsignedchardate)
{
RS=1;
RW=0;
P0=date;
E=0;
delay
(1);
E=1;
delay
(1);
E=0;
}
voidwritecount(unsignedintData)
{
switch(Data)
{case0:
writedata(0x30);break;
case1:
writedata(0x31);break;
case2:
writedata(0x32);break;
case3:
writedata(0x33);break;
case4:
writedata(0x34);break;
case5:
writedata(0x35);break;
case6:
writedata(0x36);break;
case7:
writedata(0x37);break;
case8:
writedata(0x38);break;
case9:
writedata(0x39);break;
}
}
voidbujin(unsignedintpd)
{
if(pd)
{
r1
delay(5);
r2
delay(5);
r3
delay(5);
r4
delay(5);
r5
delay(5);
r6
delay(5);
r7
delay(5);
r8
delay(5);
}
else
{
r8
delay(5);
r7
delay(5);
r6
delay(5);
r5
delay(5);
r4
delay(5);
r3
delay(5);
r2
delay(5);
r1
delay(5);
};
}
voiddisp(unsignedinta)
{
unsignedintc;
a*=4;
writecom(0xc0+7);
writecount(a/1000);
writecom(0xc0+8);
writecount(a%1000/100);
writecom(0xc0+9);
writecount(a%100/10);
writecom(0xc0+10);
writecount(a%10);
writecom(0xc0+11);
for(c=0;c<3;c++)
writedata(tab3[c]);
}
pduan(unsignedinta)
{
unsignedintx;
if(a<51)x=0;
elseif(a<102)x=1;
elseif(a<153)x=2;
elseif(a<204)x=3;
elsex=4;
return(x);
}
main()
{
unsignedintcompare=0;
unsignedintdji;
unsignedinti,j,k;
writecom(0x38);
writecom(0x0c);
writecom(0x06);
writecom(0x80+1);
for(i=0;i<11;i++)
writedata(tab1[i]);
writecom(0xc0+1);
for(j=0;j<6;j++)
writedata(tab2[j]);
timer();
while
(1)
{
ST=0;
OE=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
get_data=P1;
OE=0;
temp=get_data;
disp(temp);
dji=pduan(temp);
writecom(0x80+14);
writedata(0x2a);
if(key)
{
writecom(0x80+14);
writedata(0x20);
if(dji>compare)
{
for(k=25*(dji-compare);k>0;k--)
bujin(0);
compare=dji;
}
elseif(dji{
for(k=25*(compare-dji);k>0;k--)
bujin
(1);
compare=dji;
}
elsecompare=dji;
};
};
}
voidt0(void)interrupt1using0
{
TH0=(65536-190)/256;
TL0=(65536-190)%256;
CLK=~CLK;
}
6.测量结果分析
当光敏电阻受光照强度的不同时电阻值改变,进而改变步电机的转速与方向,是室内的采光程度最好。
如果想自己手动改变采光度,停止步电机的工作可以关闭开关。
7.心得体会
通过这一次的电路设计,掌握了LCD液晶显示、AD转换和步进电动机驱动的方法,对单片机运用技术又有了进一步的提高。
单片机可以驱动电路和实现的功能多种多样,对单片机的灵活运用显然还欠缺许多知识,但经过这次的课程设计,相信对单片机的各方面可以慢慢学习渗透,将其融会贯通。
仿真时LCD无任何字符显示,检查源程序的LCD初始化是否正确,修改错误,重新载入源程序仿真。
显示的转换数据为错乱数据,网上查阅ADC0809芯片功能书发现改芯片的输出口与IO口的高低位相反,OUT0~OUT7为高位到低位,恰与我们平时定义的相反。
8.参考文献
《传感器与检测技术》陈杰黄鸿编著
《基于单片机的百叶窗设计》网络文献
《单片机应用实例》网络文献
《沈阳理工大学传感器实验指导书》刘军冯艳君编著