⑴ 基於單片機的溫度控制系統的設計
利用溫度感測器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三極體控制加熱片的通斷電。