1.簡介
自動窗簾控制系統核心采用的是單片機STC89C52,其次利用了光照傳感器、按鍵、顯示屏以及信號調理電路等外圍電路,使整個系統在各模塊的配合下可實現半自動控制、自動控制、定時控制等功能。 其主要功能有6個,分別為:
1.手動控制:該功能是根據用戶的需求通過按鍵進行窗簾的開關,此功能可以使窗簾的開閉處于任何一種狀態;
2.光照自動控制:系統可以根據用戶設定的光照強度值通過感光器采集光照自動開關窗簾; 3.時間控制:此功能是根據用戶設定的時間一次性開關窗簾,并顯示當前溫度。
4.溫度報警系統:可以自行設置溫度報警溫度。
5.時間顯示及鬧鐘系統:可以自行設置鬧鐘時間。
6.手動自動控制按鍵隨時切換
2.硬件設計
自動窗簾控制系統的構成主要由STC89C52單片機最小系統、蜂鳴器報警電路、電源模塊、按鍵電路、LCD1602液晶顯示電路、步進電機驅動電路、DS1302時鐘電路、光照檢測模塊和溫度檢測電路組成。 其系統框圖如圖:
(1)光照檢測電路
窗簾自動控制系統的光控功能是可以根據光照的強弱來自動控制窗簾的開閉的,因此需要用到光照傳感元器件,在本設計中采用了光敏電阻,并和一個常規電阻串聯在一起,根據光線的變化改變光敏電阻的分壓值,然后通過ADC0832數模轉換芯片傳輸給單片機,經過單片機處理后在液晶上顯示。 電路圖如圖:
(2)燈光驅動電路
燈光電路使用了3個LED燈作為光源,采用了三極管作為LED燈開關的控制芯片,同時也對驅動電流進行放大,以達到LED燈工作電流的要求。 原理圖如圖:
(3)步進電機驅動電路
本系統的設計目的為了高效控制步進電機的轉動,因此需要將單片機發出的脈沖轉化為步進角度,才能控制步進電機轉動,我們在這里采用ULN2003作為步進電機的驅動芯片,其作用為增強單片機的驅動能力。 其工作原理為:根據單片機引腳的輸出狀態,使ULN2003與單片機連接的四個管腳中每時刻只有一個管腳處于導通狀態(采用單拍方式對步進電機控制),其他管腳處于斷開狀態。 這樣就使得與ULN2003連接的步進電機只有一個引出端導通。 驅動原理圖如圖:
(4)按鍵電路
按鍵在單片機應用系統中能實現向單片機輸入數據,傳送命令等功能,是人工干預單片機的主要手段。 本設計中的按鍵采用獨立按鍵式,共有五個。 其中S2是自動和手動切換鍵,S3是設置退出鍵,S4是手動反轉和設置參數減鍵,S5是手動正轉和設置參數加鍵,S6是參數設置鍵。 電路圖如圖:
(5)DS1302時鐘電路
本設計采用DS1302時鐘芯片為系統提供時鐘源,它通過串行方式與單片機進行數據傳送,能夠向單片機提供包括秒、分、時、日、月、年等在內的實時時間信息,并可對月末日期、閏年天數自動進行調整; 電路如圖:
電路圖中,Vcc1為后備電源,Vcc2為主電源。 VCC1在單電源與電池供電的系統中提供低電源并提供低功率的電池備份。 VCC2在雙電源系統中提供主電源,在這種運用方式中VCC1連接到備份電源,以便在沒有主電源的情況下能保存時間信息以及數據。
(6)總體電路圖
3.軟件設計
系統軟件設計主要有幾部分組成,主要分為主程序和各個模塊子程序。
(1)主程序設計
主程序構成無限循環,主要完成單片機初始化,關中斷,菜單顯示內容初始化,按鍵掃描,電機運行,計時等功能。 流程圖如圖:
代碼:
void main()
{
init_eepom(); //初始化EEPROM
init_1602(); //lcd1602初始化
init_1602_dis_csf(); //lcd1602初始化顯示
init_ds1302_io(); //初始化ds1302Io
init_time0(); //初始化定時器
menu_1_break(); //菜單初始界面
init_ds1302(); //ds1302初始化
temperature1 = read1_temp(); //讀溫度1
delay_1ms(650);
while(1)
{
key(); //按鍵程序
if(key_can < 10)
{
key_with();
}
shoudong_kaiguan(); //手動開關窗簾
if(flag_200ms == 1)
{
flag_200ms = 0;
temperature1 = read1_temp(); //讀溫度1 環境溫度
if(temperature1 >= 99)
temperature1 = 99;
zinengchuanglian_dis(); //智能窗簾處理函數
guanxian = ad0832read(1,0) * 9.0 / 255;
if((menu_1 == 0))
{
read_time(); //讀時間
init_1602_ds1302(); //顯示時鐘
write_sfm_18b20(2,13,temperature1); //顯示溫度
write_sfm1(2,0,guanxian); //顯示溫度
if(guanxian <= guanxian_set)
LED=0;
else
LED=1;
if(temperature1 >= t_high)
beep = ~beep; //溫度報警 ,蜂鳴器報警
else
beep = 1;
}
}
bujindj(); //步進電機函數
}
}
(2)步進電機驅動程序設計
步進電機程序設計主要實現的功能為判斷旋轉方向; 按順序傳送控制脈沖; 判斷所要求的控制步數是否傳送完畢。 程序流程圖如圖:
代碼:
void bujindj() //步進電機函數
{
static uchar i;
if(flag_z_f != 0)
{
if(flag_z_f == 1) //開
{
if(bjdj_value >= 254)
{
flag_z_f = 0;
bjdj_value = 254;
P2 = P2 & 0xf0; //讓4個IO口都不輸出
write_eepom(); //保存
}else
bjdj_value ++;
}
if(flag_z_f == 2) //關
{
if(bjdj_value <= 1)
{
flag_z_f = 0;
bjdj_value = 1;
P2 = P2 & 0xf0; //讓4個IO口都不輸出
write_eepom(); //保存
}else
bjdj_value --;
}
for(i=0;i<4;i++) //4相
{
if(flag_z_f == 1) //開
P2=zheng[i];// & (P2 | 0xf0); //
else if(flag_z_f == 2)//關
P2=fan[i];// & (P2 | 0xf0); //
delay_uint(500); //改變這個參數可以調整電機轉速
}
}
}
-
單片機
+關注
關注
6037文章
44558瀏覽量
635298 -
控制系統
+關注
關注
41文章
6620瀏覽量
110608 -
STC89C52
+關注
關注
41文章
330瀏覽量
82061 -
步進電機
+關注
關注
150文章
3111瀏覽量
147486 -
驅動電路
+關注
關注
153文章
1530瀏覽量
108525
發布評論請先 登錄
相關推薦
評論