导航:首页 > 操作系统 > 基于单片机温度控制

基于单片机温度控制

发布时间:2022-08-01 15:48:53

⑴ 基于单片机的温度控制系统的设计

利用温度传感器DS18B20检测环境温度并直接输出数字温度信号给单片机AT89C52进行处理。

在LCD液晶上显示当前环境温度值、预设温度值、使用者设定的温度差以及目前风扇所处的档位。其中预设温度值只能为整数形式,检测到的当前环境温度可精确到小数点后一位。

同时采用PWM脉宽调制方式来改变直流风扇电机的转速。

并通过两个按键改变预设温度值,一个提高预设温度,另一个降低预设温度值。通过另一个按键控制温度差的大小。

设有红外热释传感器检测环境范围内是否有人,如果有人确定出风方向,如果无人,降低转速或一定时间内自动关闭。

回答

正如你所说的,一共用了DS18B20模块,LCD模块,红外传感模块,按键,直流电机模块,程序方面只有一个PWM。现在一一为你分析:

DS18B20模块:

下图是它的原理图,采用单总线来进行开发,不像电赛的哪个温度传感器需要AD转换,它是可以直接传出数字信号的。

⑵ 基于单片机的热水器温度控制系统

东华理工大学毕业设计(论文)

基于单片机的热水器温度控制

摘 要

温度是日常生活中不可缺少的物理量,温度在各个领域都有积极的意义。很多行业中以及日常生活中都有大量的用电加热设备,如用于加热处理的加热热水器,用于洗浴的电热水器及各种不同用途的温度箱等,采用单片机对它们进行控制具有控制方便、简单、灵活性大等特点,而且还可以大幅提高被控系统的性能,从而能被大大提高产品的质量。因此,智能化温度控制技术正被广泛地应用。

本温度设计采用现在流行的AT89C51单片机为控制器,用PID控制方法,再配以其他电路对热水器的水温进行控制。

关键词:89C51; PID; 温度控制

I

1/41页
东华理工大学毕业设计(论文)

ABSTRACT

Temperature is essential physical in daily life ,and in various fields has positive implications.A lot of businesses and daily lives have a lot of electric heating equipment.Such as electric water heater for bathing and variety of different uses of the temperature boxes. MCU to control them with easy to control,simple,flexibility and other characteristics,also can significantly improve the performance of the controlled system,which can be greatly improved proct quality. Therefore,intelligent temperature control technology is being widely used.

The temperature control design uses the now popular AT89C51 MCU controller,with PID control method, which together with

⑶ 基于51单片机的温度控制器

图片为温度控制电路图。温度到达上限时led灯亮,并停止对RT的加热,温度达到下限时led灯灭并开始对RT进行加热。A1和A2为uA741运算放大器。引脚号在图上已经标出。再给你一个单片机采集DS18B20温度的程序,用四位数码管显示的。你把DS18B20接在RT附近就可以测试出RT的温度,调节图中的滑动变阻器可改变温度的上下限。这样就能做到温度控制了。

//安装目录下的EXE文件打开后可在电脑上显示当前温度值

#include<reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitDS=P1^0;//defineinterface

uinttemp;//variableoftemperature

ucharflag1;//

//sbitla=P2^6;

//sbitwela=P2^7;

//unsignedcharcodetable2[]={0x3f,0x30,0x5b,0x4f,0x66,0x6d,0x7d,

//0x07,0x7f,0x67/*,0x77,0x7c,0x39,0x5e,0x79,0x71*/};

//unsignedcharcodetable1[]={0xbf,0xb0,0xdb,0xcf,0xe6,0xed,0xfd,

//0x87,0xff,0xe7};

//unsignedcharcodetable2[]={0x40,0x5e,0x24,0x21,0x13,0x09,0x08,

//0x63,0x00,0x03/*,0x77,0x7c,0x39,0x5e,0x79,0x71*/};

//unsignedcharcodetable1[]={0xc0,0xde,0xa4,0xa1,0x93,0x89,0x88,

//0xe7,0x8f,0x87};

unsignedcharcodetable5[]={0x77,0x22,0x6d,0x5d,0x1e,0x5b,0x7b,

0x15,0x7f,0x1f};

unsignedcharcodetable6[]={0xf7,0xa2,0xed,0xdd,0x9e,0xdb,0xfb,

0x95,0xff,0x9f};

voiddelay(uintcount)//delay

{

uinti;

while(count)

{

i=200;

while(i>0)

i--;

count--;

}

}

///////功能:串口初始化,波特率9600,方式1///////

voidInit_Com(void)

{

TMOD=0x20;

PCON=0x00;

SCON=0x50;

TH1=0xFd;

TL1=0xFd;

TR1=1;

}

voiddsreset(void)//复位,初始化函数

{

uinti;

DS=0;

i=103;

while(i>0)i--;

DS=1;

i=4;

while(i>0)i--;

}

bittmpreadbit(void)//readabit读1位数据函数

{

uinti;

bitdat;

DS=0;i++;//i++fordelay

DS=1;i++;i++;

dat=DS;

i=8;while(i>0)i--;

return(dat);

}

uchartmpread(void)//readabytedate读1字节函数

{

uchari,j,dat;

dat=0;

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

{

j=tmpreadbit();

dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里

}

return(dat);

}

voidtmpwritebyte(uchardat)//writeabytetods18b20向1820写一个字节数据函数

{

uinti;

ucharj;

bittestb;

for(j=1;j<=8;j++)

{

testb=dat&0x01;

dat=dat>>1;

if(testb)//write1

{

DS=0;

i++;i++;

DS=1;

i=8;while(i>0)i--;

}

else

{

DS=0;//write0

i=8;while(i>0)i--;

DS=1;

i++;i++;

}

}

}

voidtmpchange(void)//DS18B20beginchange开始获取数据并转换

{

dsreset();

delay(1);

tmpwritebyte(0xcc);//addressalldriversonbus写跳过读ROM指令

tmpwritebyte(0x44);//写温度转换指令

}

uinttmp()//getthetemperature读取寄存器中存储的温度数据

{

floattt;

uchara,b;

dsreset();

delay(1);

tmpwritebyte(0xcc);

tmpwritebyte(0xbe);

a=tmpread();//读低8位

b=tmpread();//读高8位

temp=b;

temp<<=8;//twobytecomposeaintvariable两个字节组合为1个字

temp=temp|a;

tt=temp*0.0625;//温度在寄存器中是12位,分辨率是0.0625

temp=tt*10+0.5;//乘10表示小数点后只取1位,加0.5是四折五入

returntemp;

}

voidreadrom()//readtheserial

{

ucharsn1,sn2;

dsreset();

delay(1);

tmpwritebyte(0x33);

sn1=tmpread();

sn2=tmpread();

}

voiddelay10ms()//delay

{

uchara,b;

for(a=10;a>0;a--)

for(b=60;b>0;b--);

}

voiddisplay(uinttemp) //显示程序

{

ucharA1,A2,A2t,A3,ser;

ser=temp/10;

SBUF=ser;

A1=temp/100;

A2t=temp%100;

A2=A2t/10;

A3=A2t%10;

//la=0;

d4=0;

P0=table5[A1];

delay(1);

d4=1; //显示百位

//la=1;

//la=0;

/*wela=0;

P0=0x7e;

wela=1;

wela=0; */

//la=0;

d3=0;

P0=table6[A2];

delay(1);

d3=1; //显示十位

//la=1;

//la=0;

/*wela=0;

P0=0x7d;

wela=1;

wela=0; */

d2=0;

P0=table5[A3];

delay(1);

d2=1; //显示个位

//la=1;

//la=0;

/*P0=0x7b;

wela=1;

wela=0; */

}

voidmain()

{

uchara;

Init_Com();

do

{

tmpchange();

//delay(200);

for(a=1;a>0;a--)

{display(tmp());

}

}while(1);

}

⑷ 基于单片机的温度控制系统怎么控制温度的

加热部件可以在淘宝上买个 USB 5V 加热片,USB供电的电流不会超过 500mA, 控制可以用单片机脚控制一个 C8050三极管控制加热片的通断电。

⑸ 基于单片机的电烤箱温度控制系统的流程图及程序怎么设计怎么编啊C语言的

首先:
一·硬件:单片机*1 温度传感器*1 继电器 (220V,大电流的)电加热管(若干) 焊锡丝 烙铁 导线若干
二·将上面的硬件连接,用温度传感器测试温度 ->利用单片机读取传感器的内部寄存器的值,一般传感器都有接口(spi,i2c等),程序可以从网上找,很多改一下设置就能读取传感器的数值(比如引脚定义)->根据所测温度可以设置上限与下限的温度值,还有加热的时间。这主要是控制继电器通断就可以实现的。程序很简单。

⑹ 怎么实现单片机控制温度

你可以选用DS18B20型号的温度传感器采集温度,用一总线将信号传输给单片机处理,进行反馈控制温度。

⑺ 基于单片机的温度控制系统

加热部件可以在淘宝上买个
usb
5v
加热片,usb供电的电流不会超过
500ma,
控制可以用单片机脚控制一个
c8050三极管控制加热片的通断电。

阅读全文

与基于单片机温度控制相关的资料

热点内容
vb编程10个随机函数 浏览:19
程序员个人简介100 浏览:770
土木工程师算法工程师 浏览:90
javaexcel导入oracle 浏览:877
如何设置异地服务器 浏览:882
为什么安卓手机蓝牙耳机不会弹窗 浏览:546
linuxf77编译器安装教程 浏览:949
android本地录音权限 浏览:446
加密u盘内容怎么拷贝 浏览:283
安卓手机为什么看不到iso文件 浏览:582
用图片做文件夹图标 浏览:693
java正则表达式语法 浏览:865
美图秀在线压缩图片 浏览:184
苹果自带控制app是什么 浏览:907
孩子学编程怎么样 浏览:589
网络编程经典书籍 浏览:612
曲靖创建网站java程序员 浏览:690
256位加密中是什么意思 浏览:97
php多维数组去重 浏览:308
做程序员这一行储备人才怎么看 浏览:462