一、功能簡(jiǎn)介
本項(xiàng)目使用Proteus8仿真Arduino單片機(jī)控制器,使用LCD1602顯示模塊、人體紅外傳感器、光線檢測(cè)模塊、路燈繼電器控制等。
主要功能:
系統(tǒng)運(yùn)行后,LCD1602顯示時(shí)間、工作模式,光線強(qiáng)度及路燈工作狀態(tài)。
如果晚上11點(diǎn)到凌晨4點(diǎn),通過(guò)紅外感應(yīng)方式控制路燈;
當(dāng)感應(yīng)有人,路燈開(kāi)啟;當(dāng)感應(yīng)沒(méi)人,延遲一會(huì)兒關(guān)閉路燈;
如果在時(shí)間之外則通過(guò)光線強(qiáng)弱方式控制路燈;
當(dāng)光線較暗,路燈開(kāi)啟;當(dāng)光線較亮,延遲一會(huì)兒關(guān)閉路燈;
二、軟件設(shè)計(jì)
/*
作者:嗨小易(技術(shù)QQ交流群:570487280)
*/
//系統(tǒng)數(shù)據(jù)獲取
void sys_data_get(void)
{
while(1)
{
//讀取光線值
sys_ctrl.light=pcf8591_read_adcvalue(0);
sys_ctrl.light=cal_map(sys_ctrl.light,0,255,0,100);
//檢測(cè)是否有人
if(IRED==0)sys_ctrl.man=1;
else sys_ctrl.man=0;
//根據(jù)時(shí)間選擇光控還是紅外控
if(sys_ctrl.hour>=23 || sys_ctrl.hour<=3)sys_ctrl.mode=1;
else sys_ctrl.mode=0;
break;
}
}
//系統(tǒng)數(shù)據(jù)顯示
void sys_data_show(void)
{
while(1)
{
//時(shí)間顯示
lcd1602_show_nums(0,0,sys_ctrl.hour,2,0x80);
lcd1602_show_nums(3,0,sys_ctrl.min,2,0x80);
lcd1602_show_nums(6,0,sys_ctrl.sec,2,0x80);
//控制模式顯示
if(sys_ctrl.mode==1)lcd1602_show_string(11,0,"Ired ");
else lcd1602_show_string(11,0,"Light");
//顯示光線強(qiáng)度
lcd1602_show_nums(2,1,sys_ctrl.light,3,0);
//是否有人顯示
if(sys_ctrl.man==1)lcd1602_show_string(8,1,"Y");
else lcd1602_show_string(8,1,"N");
break;
}
}
//系統(tǒng)數(shù)據(jù)設(shè)置
void sys_data_set(void)
{
}
//系統(tǒng)功能控制
void sys_fun_ctrl(void)
{
//如果是光控
if(sys_ctrl.mode==0)
{
//光線很強(qiáng),路燈關(guān)閉
if(sys_ctrl.light>LIGHT_MAX)sys_ctrl.sta=0;
//如果光線暗,路燈打開(kāi)
else if(sys_ctrl.light<LIGHT_MIN)sys_ctrl.sta=1;
// //中間強(qiáng)度,路燈關(guān)閉
// else sys_ctrl.sta=0;
}
//如果是紅外控制
else
{
//如果感應(yīng)到有人,路燈打開(kāi)
if(sys_ctrl.man==1)sys_ctrl.sta=1;
else
{
delay_ms(1000);
sys_ctrl.sta=0;
}
}
//路燈關(guān)閉
if(sys_ctrl.sta==0)
{
LED=1;
lcd1602_show_string(11,1,"Close");
}
else
{
LED=0;
lcd1602_show_string(11,1,"Open ");
}
}
//應(yīng)用控制系統(tǒng)
void appdemo_show(void)
{
u8 i=2;
sys_parm_init();//系統(tǒng)參數(shù)初始化
ctrl_pin_init();
pcf8591_init();
lcd1602_init();//LCD1602初始化
//讀取數(shù)據(jù),等待穩(wěn)定
while(i--)
{
//讀取光線值
sys_ctrl.light=pcf8591_read_adcvalue(0);
sys_ctrl.light=cal_map(sys_ctrl.light,0,255,0,100);
delay_ms(100);
}
TIM2_Init(400-1,70);//定時(shí)10ms
TIM_Cmd(TIM2,ENABLE);//打開(kāi)定時(shí)器
sys_open_show();//系統(tǒng)初始界面顯示
while(1)
{
sys_data_get();//系統(tǒng)數(shù)據(jù)獲取
sys_data_show();//系統(tǒng)數(shù)據(jù)顯示
sys_data_set();//系統(tǒng)數(shù)據(jù)設(shè)置
sys_fun_ctrl();//系統(tǒng)功能控制
}
}
三、實(shí)驗(yàn)現(xiàn)象
B站演示視頻:https://space.bilibili.com/444388619文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-793997.html
聯(lián)系作者
視頻地址:https://space.bilibili.com/444388619/video
專注于51單片機(jī)、STM32、國(guó)產(chǎn)32、DSP、Proteus、ardunio、ESP32、物聯(lián)網(wǎng)軟件開(kāi)發(fā),PCB設(shè)計(jì),視頻分享,技術(shù)交流。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-793997.html
到了這里,關(guān)于【Proteus仿真】【Arduino單片機(jī)】路燈控制系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!