您现在的位置是:首页 >技术教程 >路灯控制系统网站首页技术教程

路灯控制系统

m0_71122770 2024-07-09 18:01:02
简介路灯控制系统

1.1 采样方法选择

光亮检测方案:

光亮检测采用的是光敏电阻检测,由于光敏电阻的阻值可以随外界光照强度的变化而发生改变,从而将光信号转化为电信号来自动控制路灯的亮度,此种方案简单易于实现,而且成本低廉因而采用此中方案。

    物体检测方案:

   物体检测采用的是红外检测,当有物体通过时红外发射管发射的红外线被此物体反射回来,被红外接收头捕捉,然后将信息送给单片机处理,判断是否有物体经过。考虑到路灯是放在室外的,为了避免外界红外线对其产生干扰,我们采用抗干扰能力很强的一体化接收头(型号:VS1838B)。

1.2 处理器的选择

  单片机STC89C52RC作为模拟路灯控制系统的核心。STC89C52RC 具有许多优点:RAM,ROM空间大、指令周期短、运算速度快、低功耗、低电压,易于编程和调试。本题要求支路控制器有声光报警功能,由此看来单片机STC89C52RC更具有优越性。

2  系统设计

2.1  总体设计

2.1.1系统总框图如下:

2.2单元电路设计

2.2.1明暗检测电路

光敏反馈电路是通过光敏电阻的变化来调节输出,由于上图中只有光敏电阻是可变的,通过电阻的改变使流过R4,R5,R6,R7 电流发生改变,从而自动控制LED灯亮度,其中可调电阻R1是调节灵敏度的,R2是控制路灯的工作电流(1mA—300mA),LED_1—LED_4分别是四路路灯驱动电路的控制端。

2.2.2  红外遥控及数码管显示电路

 

     采用红外遥控输入,比起传统的键盘扫描方式,电路简单,并且性能非常稳定,显示方式采用的是数码管显示。

2.2.3  4路LED灯电路构成

  LED的内在特征决定了它是最理想的光源去代替传统的光源,它有着广泛的用途。体积小 ,LED基本上是一块很小的晶片被封装在环氧树脂里面,所以它非常的小,非常的轻。耗电量低,LED耗电非常低,一般来说LED的工作电压是2-3.6V。工作电流是0.02-0.03A。这就是说:它消耗的电不超过0.1W。灯体内也没有松动的部分,这些特点使得LED可以说是不易损坏的。

      1. 故障检测及声光报警装置

     蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 ;蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。而我们用的是电磁式蜂鸣器,图如上所示,当P3^2接上20HZ-20KHZ的脉冲波时就可以驱动蜂鸣器发声。

2.2.5  物体检测电路

2.2.6  直流稳压电路

     三端集成稳压电路,这是一种集成电路的稳压电路,其功能是稳定直流输出电压。这种集成电路只有三根引脚,使用很方便,在许多场合都有着广泛应用。稳压电路的作用是使得输出的直流电压在电网电压或负载电流发生变化时保持稳定。它由电源变压器、整流电路、滤波电路、稳压电路等4部分组成的。变压器的作用是将交流市电变换成所需要的交流电压;整流电路的作用是将交流电变换成单向脉动直流电;滤波电路的作用是将脉动电压中的脉动成分去掉,输出比较平滑的直流电压;稳压电路的作用是使得输出的直流电压在电网电压或负载电流发生变化时保持稳定。

软件设计

主控制芯片为STC89C52RC,测量周期为Atmega16实现,由于处理器速度较快,所以采用c语言编程方便简单.软件流程图如下: 

                 

附录:

附1:元器件明细表:

  1. STC89C52
  2. 74HC245
  3. 74HC244
  4. 4位数码管
  5. 555时基芯片

附2:仪器设备清单

  1. 数字示波器
  2. 数字万用表            
  3. 信号发生器
  4. 稳压电源

附3:电路图图纸

附4:PCB板设计图

附5:程序清单

 /*   *********

 ************

  模拟路灯程序

***************

***************/

#include"entire.h"

#include<reg52.h>

uchar miao=0;

void main()

{

         led_1=1;                // 初始化 使系统启动时路灯处于熄灭状态

         led_2=1;

         led_3=1;

         led_4=1;

     dinginit();      //定时器初始化

         Exter_Init();  //外部中断初始化

         while(1)

         {           

                        if(time>500||time==500) //time计时达到500时即为1秒

                        {                                             

                            time=0;                           //time清零

                               miao++;

                                if(miao==60)

                                    miao=0;

                        }

              

                        if(timeflag!=miao)            //每隔一秒,亮灯时间就减少一秒

                        {

                                Count_Down();

                                timeflag=miao;                  //存储当前时间,等待下一秒

                        }

                        if(set==3)                                   //亮度调节显示,

                        {

                                 led_1=VH;

                                 led_2=VH;

                                 led_3=VH;

                                 led_4=VH;   

                        }

                        else

                                PWM_play();                     //PWM方波函数

                        IR_Solve();               //红外解码

                    Obs_Test();                       //障碍物检测

                shuma_play();           //数码管显示

                   

                        IR_Key();                                //红外按键功能定义

         }

}

/*******************************************************

函数名称 : Exter_Func()

函数功能 :外部中断函数

入口参数 :无

出口参数 :无

备    注 :  外部中断函数

       

*******************************************************/

void Exter_Func()  interrupt 2

{

        static uint i,flag;

        if(flag==1)

        {     

            IR_flag=0;      //开始接收红外线

                if(time0>=33&&time0<63)

                    i=0;

                IR_date[i]=time0;

                i++;

                time0=0;

                if(i==33)

                {

                        i=0;

                        flag=0;

                        IR_flag=1;      //红外线接收完毕

                }

        }

        else

            {time0=0;flag=1;}

               

}

void time0_init()  interrupt 1 /*定时器*/

{     

       

        fengming=!fengming;

        time0++;

}

void time1_init()  interrupt 3 /*定时器*/

{             

     TH1=(65536-2000)/256;

         TL1=(65536-2000)%256;

         time++;

         time1++;

         if(time2==time1)     //PWM方波

         {    time1=0;

                time2=8-time2;

                VH=!VH;

         }

        if(set==3)

        {

                led_1=VH;

                led_2=VH;

                led_3=VH;

                led_4=VH;

        }

        else         

         PWM_play();

}

/*******************************************************

函数名称 : Delay_Ms(uint xms)

函数功能 :延时

入口参数 :无

出口参数 :无

备    注 :

   

*******************************************************/

void Delay_Ms( uint xms)

{

        uint i,j;

        for(i=xms;i>0;i--)

                for(j=100;j>0;j--);

}

/*******************************************************

函数名称 : Obs_Test()

函数功能 :障碍物检测

入口参数 :无

出口参数 :无

备    注 :当有物体经过时,红外接收头将会接收反射回来的红外线,

                   产生一个脉冲送给单片机

   

*******************************************************/

void Obs_Test()

{

        if(red_1==0)

        {     

                Delay_Ms(20);

                if(red_1==0)

                {

                        led1_time=dingshi;

                        timeflag=miao;

                }     

        }

        if(red_2==0)

        {

                Delay_Ms(20);

                if(red_2==0)

                {

                        led2_time=dingshi;

                        timeflag=miao;

                }     

        }

        if(red_3==0)

        {

                Delay_Ms(20);

                if(red_3==0)

                {

                        led3_time=dingshi;

                        timeflag=miao;

                }     

        }

        if(red_4==0)

        {     

                Delay_Ms(20);

                if(red_4==0)

                {

                        led4_time=dingshi;

                        timeflag=miao;

                }

        }     

}

/*******************************************************

函数名称 : Count_Down()

函数功能 : 倒计时

入口参数 :无

出口参数 :无

备    注 :路灯点亮持续时间倒计时

   

*******************************************************/

void Count_Down()

{

        if(led1_time !=0)

         {   

               led1_time--;           

         }

         if(led2_time !=0)

         {

               led2_time--;

         }

         if(led3_time !=0)

         {

               led3_time--;   

         }

         if(led4_time !=0)

         {

               led4_time--;

         }

}

       

/*******************************************************

函数名称 :IR_Key()

函数功能 :红外线遥控按键功能定义

入口参数 :无

出口参数 :无

备    注 :

   

*******************************************************/

void IR_Key()

{

        if(playflag==1)

        {

                switch(IR_date0[2])

                {

                        case 0x07 :  set1 = !set1;      //进入系统设置

                                                 if(set1==1)

                                                       set=1;

                                                 else

                                                       set=0;     

                                                 break;

                        case 0x09 :  if(set1==1)        //点亮时间设置

                                                 {

                                                         dingshi++;       //时间 延长

                                                         set=2;

                                                         if(dingshi==10)

                                                            dingshi=1;

                                                 }

                                                break;

                        case 0x15 :      if(set1==1)            //时间缩短

                                                 {

                                               dingshi--;

                                                         set=2;

                                                  if(dingshi==0)

                                                        dingshi=9;

                                                 }

                                                 break;

                        case 0x43 :      if(set1==1)       //光亮调节

                                                 {                              //亮度增强

                                                        set=3;

                                                         VH=0;

                                                         time1=0;

                                                         time3++;

                                                         if(time3==8)

                                                            time3=1;

                                                         time2=time3;

                                                 }

                                                 break;

                        case 0x40 : if(set1==1)

                                                {                                      //亮度减弱

                                                        set=3;

                                                        VH=0;

                                                        time1=0;

                                                        time3--;

                                                        if(time3==0)

                                                         time3=7;

                                                         time2=time3;

                                                }

                                                break;

                }     

        }

        playflag=0;

}

/*******************************************************

函数名称 : Exter_Init()

函数功能 :外部中断初始化

入口参数 :无

出口参数 :无

备    注 :  外部中断 中断 1

   

*******************************************************/

void Exter_Init()

{

        EA=1;

        IT1=1;

        EX1=1;

}

/*******************************************************

函数名称 : IR_Solve()

函数功能 :红外解码

入口参数 :无

出口参数 :无

备    注 :  对接收到的红外线进行解码

   

*******************************************************/

void IR_Solve()

{

        uint i,j,k=1,num=0;

        uchar value=0;

        if(IR_flag==1)

        {

             playflag=0;

                for(i=0;i<4;i++)

            {

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

                          {

                                num=IR_date[k];

                                  if(num>7)

                                  {

                                        value=value|0x80;

                                  }

                                  else

                                        value=value;

                                  if(j<7)

                                      value=value>>1;

                                  k++;

                          }

                          IR_date0[i]=value;

                          value=0;

            }

                playflag=1;

                IR_flag=0;       

        }

}

/*******************************************************

函数名称 :shuma_play()

函数功能 :数码管显示

入口参数 :无

出口参数 :无

备    注 :

   

*******************************************************/

 void shuma_play()

 {     

         uint i=4;

         switch(set)

          {

                  case 0: if(led1_time!=0)                //正常显示当前路灯1状态

                                  {

                                          PO=weixuan[0];

                                          SE=duma[led1_time];

                                          Delay_Ms(2);

                                  }

                                  else

                                              PO=0X00;  //关闭显示

                                  if(led2_time!=0)                   //正常显示当前路灯2状态

                                  {

                                          PO=weixuan[1];

                                          SE=duma[led2_time];

                                          Delay_Ms(2);

                                  }

                                  else

                                              PO=0X00;

                                  if(led3_time!=0)                 //正常显示当前路灯3状态

                                  {

                                                PO=weixuan[2];

                                                SE=duma[led3_time];

                                                Delay_Ms(2);

                                  }

                                  else

                                              PO=0X00;

                                  if(led4_time!=0)                   //正常显示当前路灯4状态

                                  {

                                                PO=weixuan[3];

                                                SE=duma[led4_time];

                                                Delay_Ms(2);

                                  }

                                  else

                                              PO=0X00;

                              break;

                  case 1: SE=duma[0];                          //系统设置进入模式初始化

                                while(i)                                      

                                  {    i--;

                                        PO=weixuan[i];

                                          Delay_Ms(2);

                                  }

                                  break;

                                 

                  case 2: SE=duma[dingshi];                 //系统设定led点亮时间调节显示   

                                while(i)

                                  {

                                        i--;

                                          PO=weixuan[i];

                                          Delay_Ms(2);

                                  }

                                  break;

                  case 3: SE=duma[time3];              //系统设定光亮度调节显示

                                while(i)

                                  {

                                        i--;

                                          PO=weixuan[i];

                                          Delay_Ms(2);

                                  }

                                  break;                                                                                        

        }

}

/*******************************************************

函数名称 :PWM_play()

函数功能 :产生PWM方波

入口参数 :无

出口参数 :无

备    注 :  PWM方波用于调节光的亮度

   

*******************************************************/

void PWM_play()

{

  if(led1_time !=0)

        led_1=VH;

 else

        led_1=1;

  if(led2_time !=0)

        led_2=VH;

        else

                led_2=1;

  if(led3_time !=0)

        led_3=VH;

        else

                led_3=1;

  if(led4_time !=0)

        led_4=VH;

        else

                led_4=1;

}

/*******************************************************

函数名称 :dinginit()

函数功能 :定时器初始化

入口参数 :无

出口参数 :无

备    注 :定时器1,2初始化

   

*******************************************************/

void dinginit()

{

        TMOD =0x12;

        TH0=0x00;

        TL0=0x00;

        TH1=(65536-2000)/256;

        TL1=(65536-2000)%256;

        ET0=1;

        ET1=1;

        TR0=1;

        TR1=1;

}

免费送的资源可自行下载留存,万一用到呢。

(2条消息) 2023年稳重系统汇报模板112页够用版资源-CSDN文库

(2条消息) 2023年系统工作汇报模板黑色系列资源-CSDN文库

(2条消息) android-studio-ide-143.2489090-windows资源-CSDN文库

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。