单片机设计声控开关电源_用单片机设计声控灯开关电路 - CSDN
  • 详细的介绍了利用51系统单片机,开发智能声光控智能开关的过程,包括代码编写,仿真调试
  • 设计一款声控LED智能灯,该灯含有8个灯珠,采用一个按键统一控制灯的开与关,也可以通过声音控制开灯,开灯后根据环境光亮度,点亮多个灯珠(最暗时点亮8个灯珠,最亮时点亮1个灯珠)。 二、使用的硬件 1. 51...

    一、项目要求

    设计一款声控LED智能灯,该灯含有8个灯珠,采用一个按键统一控制灯的开与关,也可以通过声音控制开灯,开灯后根据环境光亮度,点亮多个灯珠(最暗时点亮8个灯珠,最亮时点亮1个灯珠)。

    二、使用的硬件

           1. 51单片机实验板,以及电源线、下载线、杜邦线

           2. 声音传感器、PCF8591数模转换模块、光敏电阻、独立按键、LED灯

    三、设计方案

    通过外部中断的开关和声音传感器统一控制灯的开与关,然后用PCF8591数模转换上的光敏电阻把当前环境光的亮度传给单片机,单片机通过光照强度来控制亮几个灯

    系统连接图:

    四、源代码

    1、PCF8591数模转换函数

    #include <pcf8591.h>
    sbit scl=P2^0;       //I2C  时钟 
    sbit sda=P2^1;       //I2C  数据 
    bit ack;             //应答标志位
    /******************************************************************* 
    功能:     启动I2C总线,即发送I2C起始条件.  
    ********************************************************************/
    void Start_I2c()
    {
      sda=1;         /*发送起始条件的数据信号*/
      _nop_();
      scl=1;
      _nop_();        /*起始条件建立时间大于4.7us,延时*/
      _nop_();
      _nop_();
      _nop_();
      _nop_();    
      sda=0;         /*发送起始信号*/
      _nop_();        /* 起始条件锁定时间大于4μs*/
      _nop_();
      _nop_();
      _nop_();
      _nop_();       
      scl=0;       /*钳住I2C总线,准备发送或接收数据 */
      _nop_();
      _nop_();
    }
    
    /******************************************************************* 
    功能:     结束I2C总线,即发送I2C结束条件.  
    ********************************************************************/
    void Stop_I2c()
    {
      sda=0;      /*发送结束条件的数据信号*/
      _nop_();       /*发送结束条件的时钟信号*/
      scl=1;      /*结束条件建立时间大于4μs*/
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      sda=1;      /*发送I2C总线结束信号*/
      _nop_();
      _nop_();
      _nop_();
      _nop_();
    }
    
    /*******************************************************************
    功能:     将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
              此状态位进行操作.(不应答或非应答都使ack=0)     
               发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
    ********************************************************************/
    void  I2C_SendByte(u8  c)
    {
     u8  i;
     
     for(i=0;i<8;i++)  /*要传送的数据长度为8位*/
        {
         if((c<<i)&0x80)sda=1;   /*判断发送位*/
           else  sda=0;                
         _nop_();
         scl=1;               /*置时钟线为高,通知被控器开始接收数据位*/
          _nop_(); 
          _nop_();             /*保证时钟高电平周期大于4μs*/
          _nop_();
          _nop_();
          _nop_();         
         scl=0; 
        }
        
        _nop_();
        _nop_();
        sda=1;                /*8位发送完后释放数据线,准备接收应答位*/
        _nop_();
        _nop_();   
        scl=1;
        _nop_();
        _nop_();
        _nop_();
        if(sda==1)ack=0;     
           else ack=1;        /*判断是否接收到应答信号*/
        scl=0;
        _nop_();
        _nop_();
    }
    
    /*******************************************************************
    功能:        用来接收从器件传来的数据,并判断总线错误(不发应答信号),
              发完后请用应答函数应答从机。  
    ********************************************************************/    
    u8   I2C_RcvByte()
    {
      u8  retc=0,i; 
      sda=1;                     /*置数据线为输入方式*/
      for(i=0;i<8;i++)
          {
            _nop_();           
            scl=0;                  /*置时钟线为低,准备接收数据位*/
            _nop_();
            _nop_();                 /*时钟低电平周期大于4.7μs*/
            _nop_();
            _nop_();
            _nop_();
            scl=1;                  /*置时钟线为高使数据线上数据有效*/
            _nop_();
            _nop_();
            retc=retc<<1;
            if(sda==1)retc=retc+1;  /*读数据位,接收的数据位放入retc中 */
            _nop_();
            _nop_(); 
          }
      scl=0;    
      _nop_();
      _nop_();
      return(retc);
    }
    /********************************************************************
    功能:      主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
    ********************************************************************/
    void Ack_I2c(bit a)
    {  
      if(a==0)sda=0;              /*在此发出应答或非应答信号 */
      else sda=1;				  /*0为发出应答,1为非应答信号 */
      _nop_();
      _nop_();
      _nop_();      
      scl=1;
      _nop_();
      _nop_();                    /*时钟低电平周期大于4μs*/
      _nop_();
      _nop_();
      _nop_();  
      scl=0;                     /*清时钟线,住I2C总线以便继续接收*/
      _nop_();
      _nop_();    
    }
    /************************************************************
    * 函数功能      : PCF8591的输出端输出模拟量
    ******************* *****************************************/
    bit Pcf8591_DaConversion(u8 addr,u8 channel,u8 Val)
    {
       Start_I2c();              //启动总线
       I2C_SendByte(addr);            //发送器件地址
       if(ack==0)return(0);
       I2C_SendByte(0x40|channel);              //发送控制字节
       if(ack==0)return(0);
       I2C_SendByte(Val);            //发送DAC的数值  
       if(ack==0)return(0);
       Stop_I2c();               //结束总线
       return(1);
    }
    /************************************************************
    * 函数功能		: 写入一个控制命令
    ************************************************************/
    bit PCF8591_SendByte(u8 addr,u8 channel)
    {
       Start_I2c();              //启动总线
       I2C_SendByte(addr);            //发送器件地址
       if(ack==0)return(0);
       I2C_SendByte(0x40|channel);              //发送控制字节
       if(ack==0)return(0);
       Stop_I2c();               //结束总线
       return(1);
    }
    /************************************************************
    * 函数功能   	: 读取一个转换值*/
    
    u8 PCF8591_RcvByte(u8 addr)
    {  
       u8 dat;
    
       Start_I2c();          //启动总线
       I2C_SendByte(addr+1);      //发送器件地址
       if(ack==0)return(0);
       dat=I2C_RcvByte();          //读取数据0
    
       Ack_I2c(1);           //发送非应答信号
       Stop_I2c();           //结束总线
       return(dat);
    }

    2、Main函数

    #include<config.h>
    #include<uart.h>
    #include <pcf8591.h>
    sbit RL=P2^2;	//声控
    sbit gnd=P3^4;
    //sbit Switch=P3^2;
    sbit beep=P2^3;	//蜂鸣器引脚
    int flag=1,flag1=1;
    u8 print[20];
    void delay_ms(u16 x)//毫秒延时函数
    {u16 i;
     u8 j;
     for(i=0;i<x;i++)
        for(j=0;j<115;j++);
    }
    
    void delay_us(u8 t) //10倍微秒延时函数,延时10*t微秒
    {u8 i;
     for(i=0;i<=t;i++);
    }
    
    void Alarm(u8 t) //蜂鸣器报警,持续t秒
    {
     u8 i,j,k; 	
     for(j=0;j<t;j++)
     { for(i=0;i<200;i++)
          {beep=0;delay_us(50);beep=1;delay_us(50);}
       for(k=0;k<100;k++)
          {beep=0;delay_us(110);beep=1;delay_us(110);}
     }
    }
    void main()
    {
    	u8 light;
    	P1=0xff;
    	EA=1;
    	IT0=1;
    	EX0=1;
    	gnd=0;
        Init_COM();   //初始化
    	flag=1;
       while(1)
        {
    		PCF8591_SendByte(AddWr,1);//启动AIN0通道模数转换,光敏
            light=PCF8591_RcvByte(AddWr);//读出转换数字值
    		light=255-light;
    		delay_ms(200);
    	 
    	    sprintf(print,"L:%3bu",light);
    	    Print_str_COM(print);	  //将采集的值送串口
    	 	if(RL==1){flag=!flag;delay_ms(150);}		
    		if(flag==0)
    		{
    				//if(light=0){	P1=0XFF;}
    				if(light>0&&light<30){P1=0X00;}
    				if(light>=30&&light<60){P1=0X01;}
    				if(light>=60&&light<90){P1=0X03;}
    				if(light>=90&&light<120){P1=0X07;}
    				if(light>=120&&light<150){P1=0X0F;}
    				if(light>=150&&light<180){P1=0X1F;}
    				if(light>=180&&light<210){P1=0X3F;}
    				if(light>=210&&light<=255){P1=0X7F;}
    				//delay_ms(3000);
    				//P1=0XFF;
    			}
    			else	
    		{
    			P1=0XFF;delay_ms(10);//break;
    		}	
    		}	 
    }
    void int0() interrupt 0
    {
    	flag=!flag;	
    }
    	

    五、实验效果

    由于不能上传视频,所以我将效果视频上传至优酷,请点击观看------->声控LED智能灯

     

     

    展开全文
  • 电子设计.doc

    2020-07-30 23:33:22
    0233、UC3843控制多路输出开关电源设计与实现 0234、1.8V 5.2 GHz 差分结构CMOS 低噪声放大器 0235、40kHZ_超声波测距 0236、51单片机开发板实验板程序60例汇编及C语言资料带原理图 0237、12864-12 LCD模块与射频SoC...
  • 1, 先得了解MCU 的功能及每一个管脚的作用,确定用什么样的电源输入,有无大电流负载及一些安规方面的要求,体积封装大小有无规定. 2, 采用电池供电时是否要考虑做一些省电低功耗线路 3, 带检测功能的产品是否...

    1, 先得了解MCU 的功能及每一个管脚的作用,确定用什么样的电源输入,有无大电流负载及一些安规方面的要求,体积封装大小有无规定.
    2, 采用电池供电时是否要考虑做一些省电低功耗线路
    3, 带检测功能的产品是否用到A/D功能,有无必要用到一些精密参考源,主要针对测量及充电电路,或是可否直接采用RC充放电线路来做模拟量检测, A/D通道转换需要一定的稳定时间,在软件设计时需要作考量。为了保证每次A/D转换的稳定与正确,最好在每次A/D转换前都重新确定A/D转换通道、A/D转换分辨率、A/D时钟源选择位,而且根据所应用场合对所取得数据进行合理的处理。A/D转换在硬件设计方面的注意事项:信号源要尽量与A/D转换输入端接近,而且要视芯片输入阻抗添加合适的电容并入信号源输入端。此外需保证A/D转换基准电压的稳定,模拟地与数字地要分开或隔离。
    4, 操作时有多少个按键,能否采用跟其他I/O口复用,按键是否采用唤醒功能,即采用带有唤醒功能的I/O口,按键输入可否采用矩阵扫描,以便节省单片机的I/O
    5, 输出指示能否跟输出控制I/O复用,这样可以节省I/O,但要考虑到输出电流的大小,不能影响负载的正常输出控制
    6, 有无精确度要求较高的定时,用来确定采用什么样的振荡源( 晶振,陶振及RC)
    7, 复位电路的选取,I/O不够时能否采用内部复位, 芯片的上电复位时间与系统电压上升速度,外部振荡器频率、种类及外部Reset 电路造成的delay都有关联。
    8, 有无显示电路,是LED还是LCD,是否必要采用外挂驱动IC 或直接采用i/o推动,一般采用I/O推动的 LCD都采用1/2 偏压
    9, 大电流负载输出采用mos管,继电器还是可控硅控制,当输出为可控硅时,是否采用共地或共电源控制,或是直接用耦合或用光电耦合,同时得考虑是否要用到到同步信号做一些调速、调光、调功、调温度待可调的功能(同时些交流同步信号也可以做一些定时产品的参考)
    10, 输入尽可能放在同一I/O,输出放在同一I/O,同时应该考虑到PCB布线,输入输出保护电阻应尽可能靠近I/O口
    11, I/O口内部有无上拉电阻,有些I/O只能做单一的输入且无上拉电阻
    12, 对空闲口的设置,空闲口一般设定为输入上拉或输出低电平。对ADC I/O通道,应用P4CON的设定,可以避免I/O口的漏电流。对于不同的外部硬件电路,考虑I/O的状态设置,设定不当,会有漏电流,特别 注意上拉电阻的正确设定,若 I/O 在 outputlow level, 又将pull-up enable会造成漏电, 例如: VDD=5V 会有约 5V / 100K = 50uA 漏电.
    输入部分电路的设计
    按键部分硬件电路部分应用实例
    普通独立按键:
    图中S1、S2、S3为常用的三种按键,其中S3接在U1第4脚为低电平触发脚有效,因为U1第4脚内部没有上拉电阻,所以得在U1第4脚外面接一上拉电阻以确保在不按下按键时让U1第4脚维持在高电平状态,采用S2接法时,为高电平触发有效,因这颗IC内部没有下拉电阻,所以得在U1第4脚外面接一下拉电阻以确保在不按下按键时让U1第4脚维持在低电平状态,S1因Ic内部有上拉电阻,则不要外加器件。
    在这里插入图片描述纯按键矩阵描按键:
    电路中扫描口都得为双向的I/O口,如此电路是用电池供电需要省电功能(让ic进睡眠模式),则将COM1、COM2或SEG口用到具有唤醒功能的I/O口即可。
    在这里插入图片描述
    LED矩阵描复用按键:
    在这里插入图片描述加二极管的按键复用1:
    在这里插入图片描述加二极管的按键复用2:
    在这里插入图片描述加二极管的按键复用3:
    在这里插入图片描述加电阻并联型复用:
    在这里插入图片描述在这里插入图片描述加电阻的按键复用:
    在这里插入图片描述上图中按键同样可以复用在COM口上!
    采用移位寄存器的按键复用:
    在这里插入图片描述在这里插入图片描述采用A/D功能的按键:
    在这里插入图片描述触摸式按键:
    在目前MCU应用领域里,很多场合都离不开开关信号,这些开关信号的实现都是通过按键操作实现。而传统的按键应用最广最普遍的就是机械式按键(或称为B键),这一类按键的共同点就是透过金属触点来得到开关信号,也正是这些共同点决定了机械式按键的应用场合和使用寿命。如在一些带有油烟或腐蚀性气体的应用场合;另外,在很多小家电应用领域,也都是在模具表面开孔,使用PVC胶来做按键触摸点,这些PVC胶随着使用时间的增加也很容易损坏。因此,目前市场上出现了一种新型的按键输入方式——触摸式按键(或称感应型按键)。
    顾名思义,这种按键输入方式与传统机械式按键不同,它不需要金属触点,取而代之的是感应人体的触摸动作。目前市场上常见的触摸按键方案中,多为采用MCU+专用IC以及只用MCU实现两种,在MCU+专用IC方案中,具有代表性的触摸信号专用IC是英国昆腾(QUANTUM)公司的QT系列IC,如QT1080就是带有8路独立触摸按键输入的处理芯片。但是使用MCU+专用IC方案面临的一大挑战就是其抗干扰能力不强以及其成本较高的问题,也正是这一缺陷决定了在很多MCU应用场合这种方案显得有些无能为力了。下面就从应用的角度对采用独立MCU方案开发感应型按键的原理进行讨论。
    一、 感应型按键的电气原理
    这种感应型按键的实现原理是基于电容对高频脉冲信号的耦合特性,通常称该电容为耦合电容。当该耦合电容的容值发生改变时,经过该电容耦合得到的高频脉冲的高电平幅值将发生改变。如图所示:
    在这里插入图片描述如图所示,高频信号OSC经过电容C1耦合,再经过电容C2滤波,这样在K1点可以得到一直流信号;A点为按键电极连接点,电极的表面可以是一些如玻璃或塑料的绝缘物质。当人体透过电极表面的介质触摸按键时,此时人体、电极和这些介质就等效成一个电容,该等效电容与耦合电容C1并联,最终就相当与改变了耦合电容的容值,从而经由C1耦合得到的高频脉冲的高电平幅值就将发生变化,在K1点得到的直流信号也将随之发生改变。当人体接触按键时,K1点的电压将降低。由MCU的AD口读取K1点的电压变化,便可知道按键与否。K1点的电压变化范围一般在几十至一百毫伏范围变化,这与电极表面的介质和高频信号的频率有关。在有些应用中,由于K1点的电压变化太小,通常还会在K1点接一级放大器,这样MCU AD口端的电平变化范围将相应变大。由于SONiX 8bit MCU,至少提供12bit 的AD,所以在采用SONiX 8bit MCU开发时并不需要增加一级放大电路。
    针对上图所示的参数,下面将给出A点在人体触摸前后的波形变化(电极表面的介质为压克力板)。
    人体触摸前A点的波形
    在这里插入图片描述人体触摸时A点的波形
    在这里插入图片描述对于高频脉冲的产生,通常都在几百KHz,根据具体的应用可以有不同的选择。常见的电路形式有采用NE555和CD4069:
    在这里插入图片描述通常SONiX的MCU都有提供至少一路PWM功能,根据应用的需求,也可以采用该PWM功能作为
    高频脉冲发生器。对于应用中可能会出现按键数量超出MCU提供的AD通道数的情形,此时可以增加一模拟开关,如CD4051。
    一、 感应型按键的软件实现
    从上述电气原理的讨论中,可以看出,到达MCU AD口的直流信号并不是十分理想的直流信号,由于是经由104电容滤波直接得到,其纹波系数很大,因此,在软件的实现中,应充分考虑AD口信号的正常波动。其次,程序判断按键与否的根据是AD口信号变化的大小,当AD值负变化达到给定量时,认为有键按下;反之,AD值正变化达到给定量时,则认为是按键弹起。
    由于程序判定按键的根据是AD值的变化量,所以在程序中,还应确定一个基准值,所有的变化量都应相对这个基准值,一般情况下,在上电时应将这个基准值确定,或通过实验计算出一个基准值保存在程序中,但后者随着使用时间的增加,可能会出现基准值变化而导致按键失灵,最好的做法是将两者都考虑进去。
    在程序中应充分考虑对AD值做数字滤波处理,常见的数字滤波如滑动平均值滤波和中位值滤波,在此不讨论具体的滤波算法,可以参考相关的书籍。此外,程序中还应做好按键去抖动的动作,这是任何形式的按键处理程序都应考虑的。
    通过以上对感应型按键的原理的讨论,重点在于如何使得整个系统稳定可靠,即抗干扰能力要强,这主要与程序编制有关。所以,关键的还是强调程序处理。本人按照上面讨论的原理,有做一跑马灯DEMO,可以轻松通过EFT日规2000V测试。
    一种简易的接触式触摸电路:
    直接采用人体感应电压去改变输入检测口的电平做按键检测,此电路稳定性比较差,但成本低,图中的触摸开关为一导体。
    在这里插入图片描述常见的单片机输入部分线路:
    风扇外壳触摸保检测电路:
    在这里插入图片描述高灵敏度MIC声控线路:
    在这里插入图片描述R9可以调节灵敏度
    单管mic放大电路:
    在这里插入图片描述
    压电陶瓷蜂鸣片声控电路:
    在这里插入图片描述

    展开全文
  • 本案例由Arduino爱好者通过改造普通灯泡,使用Arduino Pro mini和Wifi模块接入机智云物联网平台,实现远程APP、声控及离线按钮控制开关等功能。作者分材料准备、固件烧录、主程序烧写、灯的模型改造、心得感悟和项目...

    [ 本文概述 ]

    本案例由Arduino爱好者通过改造普通灯泡,使用Arduino Pro mini和Wifi模块接入机智云物联网平台,实现远程APP、声控及离线按钮控制开关等功能。作者分材料准备、固件烧录、主程序烧写、灯的模型改造、心得感悟和项目演示等环节记录了改造过程。

     

    机智云物联网平台支持STM32、51单片机、树莓派、Arduino及SoC等方案接入,Demo App提供iOS、Android、APiCloud版开源框架,实现IoT设备产品定义、远程控制、数据采集等功能,详见www.gizwits.com 物联网平台 机智云开发者中心。

    [ 进入正文 ]

    这个灯怎么来的,源于一句话:“我有一个大胆的想法!!!”,应该是这样,然后就有了这个灯。差不多花了20天的时间,也没有20天,就是偶尔花点时间弄一下。

     

    先说下具体功能:

    • 离线按钮控制开关

    • 远程APP控制开关

    • 声控控制开关

    • 胶粘在了懒人支架上

    前方高能预警!注意!这不是演习!制作过程如下:

    [ Step1 材料准备 ]

    1.1   主控:Arduino Pro mini以及FTD1232串口下载器

    1.2   通信:正点原子ESP8266 WIFI模块

    1.3   声控:声音检测模块

    1.4   光源:5W 白灯10颗灯珠,5V供电

    1.5   供电:DC 5V-2A 适配器

    1.6   支架:懒人手机支架(后续改装用)

    1.7   工具:电烙铁,热熔胶,钩刀,

    1.8   模型:亚克力板20x30cm,厚度2mm

    1.9   额外:1路继电器,轻触开关,自锁开关,洞洞板,火牛电源头,散热硅脂、铝制散热块各一个

    [ Step2 固件烧录 ]

    2.1 固件烧写

    机智云物联网平台烧录GAgent固件方法参考:

    http://club.gizwits.com/forum.php?mod=viewthread&tid=3551&highlight=8266

     

    2.2 主控烧录

    2.2.1 在机智云物联网平台中添加两个数据点,LED_Switch,Sound_Switch,布尔类型,可写,

    将下载的代码文件夹Gizwits放入Arduino编程器文件目录libraries下。

    如果开发流程不清楚可以详见官方开发流程!附上地址:dev.gizwits.com

     

    2.2.2 下载ProtoThreads多线程的库,同上放入libraries。

    修改Gizwits文件夹下的Gizwits.h头文件,打开头文件,将公有成员函数void process(void);改为bool process(void);

    同样,在Gizwits.cpp中将函数修改为bool类型,还需对代码修改,如下:

    解释一下为什么,在我的代码中有一行:

     

                       PT_WAIT_UNTIL(pt,myGizwits.process());

     

    这个函数的第二个参数是布尔类型的参数,所以需要修改Gizwits的源代码,当串口无数据是该线程阻塞的,当串口接收到数据时,线程运行,这样可以节省CPU查询if语句的资源。

     

    2.3总体代码

    移植networkConfig中的部分代码,按键1的代码去掉(基本用不到),修改按键2为D4,方便随时都配置网络。

     

    声音传感器使用中断触发的方式,连接在D3(外部中断1),使用计算时差的方式过滤掉一些杂音或避免多次重复触发开关。

     

    由于单片机的IO提供电流太小,所以LED灯通过继电器控制,继电器低电平驱动,连接在D5。

     

    附上代码:

    项目代码&ProtoThreads库源码以及代码

     ▼ 点击图片,可打包下载

     

    [ Step3 模型设计 ]

    3.1 灯的改造

    这是买来时的灯:

    拆了后如图:

     

    这样,把固定灯的环壳用钩刀裁剪下来  

     

    在LED灯板上用钻孔机(这个东西实验实有)钻两个孔,涂上硅脂,固定在散热块上

     

    3.2 外壳设计

    由于灯的最大直径为60mm,所以四面的长方形块大小为60x73mm,顶部的方形块大小为60x60mm,都用钩刀裁剪就可以了。

     

    3.3 顶部电源设计

    如图想办法挖槽吧,用钻孔机+钩刀,是的,楼主我只有这些工具。

      

     

     

     

     

    [ Step4 安装模型 ]

    先用热熔胶粘两个侧面,然后固定LED灯。再把元器件也粘进去,接下来把其它两块也粘上去,这样大体就差不多了

    以上步骤在做的时候边粘边连线的!

     

    最后,盖上顶部的盖子。

    [ 个人感悟 ]

    说一下感悟吧:

             用心做好一个灯

             不只是电科的专业与执着

             更是使命

             用实在的原料

             佐以专业独运的焊接工艺

             所融入的不只是优美代码

             还有与之相得益彰的模型

             让人陶醉,更令人沉迷的

             电科精神

     

             打包,懒人声控致瞎灯

             以亚克力熔制的躯壳

             融入困、懒、惰、倦之气

             让每一次起床开关灯的想法万念俱灰

             声控也更为庸人自扰

             懒得到豆腐渣工艺

             更享受到无比诚意

     

             ——修改于匠汤海鲜面

    [ 项目演示 ]

    项目演示视频地址

    http://v.youku.com/v_show/id_XMzA4OTQzMzcwOA==.html

     

    题外话:本来想做花样七彩+白色LED灯的(WS2812B RGB七彩转圈圈的,很漂亮,美滋滋),后来发现驱动RGB灯需要占用极大的CPU使用率,又由于Arduino 串口库不能中断收发数据(即实时性低)  影响用户体验,就没做了。

     文章由 物联网平台 机智云 www.gizwits.com 整理发布

    展开全文
  • 在现代自动控制设备中,都存在一个电子电路(弱电)与电气电路(强电)的互相连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(如电动机、电磁铁、电灯等),另一方面又要为电子线路的电气电路...

    转之http://www.hificat.com/pic/dpj_step/jdq.asp

    在现代自动控制设备中,都存在一个电子电路(弱电)与电气电路(强电)的互相连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(如电动机、电磁铁、电灯等),另一方面又要为电子线路的电气电路提供良好的电隔离,以保护电子电路和人身的安全。继电器便能完成这一桥梁作用。

    继电器的工作原理与分类


        继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。在大多数的情况下,继电器就是一个电磁铁,这个电磁铁的衔铁可以闭合或断开一个或数个接触点。当电磁铁的绕组中有电流通过时,衔铁被电磁铁吸引,因而就改变了触点的状态。继电器一般可以分为电磁式继电器、热敏干簧继电器、固态继电器等。增强型PIC实验板上配置的继电器如图1所示。

        电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。这样吸合、释放,从而达到了在电路中的导通、切断的目的。对于继电器的“常开、常闭”触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。

        热敏干簧继电器是一种利用热敏磁性材料检测和控制温度的新型热敏开关。它由感温磁环、恒磁环、干簧管、导热安装片、塑料衬底及其他一些附件组成。热敏干簧继电器不用线圈励磁,而由恒磁环产生的磁力驱动开关动作。恒磁环能否向干簧管提供磁力是由感温磁环的温控特性决定的。
    固态继电器是一种两个接线端为输入端,另两个接线端为输出端的四端器件,中间采用隔离器件实现输入输出的电隔离。

    图1 继电器实物图

    固态继电器按负载电源类型可分为交流型和直流型。按开关型式可分为常开型和常闭型。按隔离型式可分为混合型、变压器隔离型和光电隔离型,以光电隔离型为最多。在此,我们以电磁继电器为例,介绍其用法。

    继电器的控制电路


        在单片机系统中继电器的控制一般通过一个三极管来驱动,典型的驱动电路如图2所示:
                  
                                 图2(a)                           图2(b)

    图2继电器的一般驱动电路

        继电器电路中一般都要在继电器的线圈两头加一个二极管以吸收继电器线圈断电时产生的反电势,防止干扰。上图中AB为常开触点,AC为常闭触点。图(a)中当控制信号为高电平时,继电器常开触点吸合(AB导通),当控制信号为低电平时,继电器常开触点断开常闭触点吸合(AC导通)。在图(b)中控制信号极性正好与图(a)相反,本书配套实验板上就是采用这个电路。

    单片机控制继电器


        从实验板原理图中,我们可以看到,单片机RD6脚与一个PNP型三极管基极相连,经三极管电流放大后,直接驱动继电器,继电器的开和关完全由三极管的基极电平进行控制。当单片机RD6口输出高电平,PNP型三极管截止,这时继电器不工作;反之为低电平的话,PNP型三极管导通,继电器得电吸合。



    注:在实验中一定要注意安全!!!

        在掌握了继电器的工作原理和驱动方法后我们来看一个单片机控制继电器开合从而控制电灯的例子。实验板上的电路原理图如下,读者可以将继电器的触点引出,用来控制220V的电灯(虚线右边部分)。将220V市由AD端输入,继电器控制电灯的亮灭。如左图右侧绿色接线端子即为板载继电器的常开、常闭端。

    #include<pic.h>
    void delay_1ms(void)
    {
    unsigned int n;
    for(n=0;n<50;n++)
    {
    NOP();
    }
    }
    void delay_ms(unsigned int time)
    {
    for(;time>0;time--)
    {
    delay_1ms();
    }
    }
    void main(void)
    {
    TRISD=0X00;
    while(1)
    {
    PORTD=0x00;
    delay_ms(1000);
    PORTD=0x40;
    delay_ms(1000);
    }
    }

    以上实验程序为继电器每隔1秒时间闭合、断开一次,程序控制原理类似前一篇我们讲过的蜂鸣器控制方法,大家可以参考前篇文章。
    展开全文
  • 通过拨码开关来设置LED闪烁的频率。  2.关门时喇叭不想,灯熄灭。  3.旁路模式时,灯处于闪烁状态,此时关门灯扔闪烁。  关于此次代码我觉得还是有可以优化的地方,电源方案也还是可以再改变的更好。  因为...

       智能声光报警器基本功能调试完成。

        1.通过拨码开关来设置LED闪烁的频率。

        2.关门时喇叭不想,灯熄灭。

        3.旁路模式时,灯处于闪烁状态,此时关门灯扔闪烁。

        关于此次代码我觉得还是有可以优化的地方,电源方案也还是可以再改变的更好。

        因为这次选用的是7805芯片,由于7805是线性电源器件。发热比较大。

        所以再准备改进一下电源方面的设计,选用数字开关电源电路来供电,效果会更好一些。

    转载于:https://www.cnblogs.com/dzswise/p/9541785.html

    展开全文
  • 高级创意,单片机电子DIY制作精华资料汇总 今天给大家分享创意小生活,电子DIY制作精华资料汇总,资料有点多,将近400个电子创意,够同学们学习和交作业的了,需要的可以在闯客网技术论坛下载,有问题加群解决:...
  • 想做一个好的电子发烧友,玩转各种DIY作品,怎么能不会一两个开关设计呢!一个好的开关设计在整个电子作品中起着不可描述的作用。本次搜集的开关设计主要包括远程智能开关以及各类传感器开关等,适合大部分发烧友...
  • 电子毕业设计题目 默认分类2009-10-22 18:42:31阅读1795评论2字号:大中小1.基于labVIEW虚拟滤波器的设计与实现 2.双闭环直流调速系统设计 3.单片机脉搏测量仪 4.单片机控制的全自动洗衣机...
  • VCC、 VDD、VEE、VSS  版本一: 简单说来,可以这样理解: 一、解释 VCC:C=circuit 表示电路的意思, 即接入电路的电压; VDD:D=device 表示器件的意思, 即器件内部的工作电压;...二、
  • 微控制器电路模块:单片机,FPGA,ARM,DSP 2. 微控制器外围电路模块:键盘及LED数码管显示器模块,LCD显示器模块,触摸屏显示器模块,RS-485总线通信模块,CAN总线通信模块,不同位数和速率的ADC模块,不同位数和...
  • 1、 电源模块: ①常用的电源稳压模块12V,9V,5V,3.3V和双电源±5V,±12V; ②可调升压电源模块; 2、 最小系统: 确定一类竞赛用的单片机,C51,AVR,FPGA,STM32等,做一个最小系统,引出所以端口。 3、 驱动模块...
  • 简单的电路课程设计

    2019-01-07 19:03:25
    1.跑马灯设计(音调显示) 2.跑马灯设计(音调定时设计) 3.呼吸灯设计 4.更完善的呼吸灯设计 5.NE555定时器的应用 NE555触摸定时开关 成电路IC1是一片555定时电路,在这里接成单稳态电路。平时...
  • LED点灯实验 将数据线一端连接主机 USB 接口,另一端连接好Arduino板 面包板正极连接板上的2号数字引脚Pin2,负极花色连接板上的GND,通过程序定义输出引脚2,并实验LED闪灭。 //led正极接2 负极接GND ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 1000套物联网毕业设计资料和电赛设计资料822,大四同学马上要写毕业设计了,我把之前收藏的毕业设计资料分享给大家,供大家学习参考。 如果出现解压问题,联系管理员毕业设计及产品设计资料:其他资料: 0001...
  • 0001、PC 机与单片机通信(RS232 协议) 0002、C与VB语言联合在proteus上仿真 0003、IC卡读写仿真 0004、Integrate就医服务平台论文 0005、PC红外线遥控器上位机及电路图 0006、PLC电梯控制系统论文 0007、VB...
  • &#13; 电路中GND和GROUND、VCC,VDD,VEE,VSS有什么区别一、解释DCpower一般是指带实际电压的源,其他的都是标号(在有些仿真软件中默认的把标号和源相连的)VDD:电源电压(单极...声控载波(VoiceControlledCarrie...
  • 微机综合设计.ddb 手机.DDB 打印专用.Ddb 控制板.DDB 搜球机.ddb 搜球机_完成.ddb 搜球机通信电路.ddb 放大器.DDB 教室灯控制器.ddb 数字电位器.Ddb 数字钟1.ddb 数控电压表.ddb 数控电源.DDB 数控直流电流源.ddb ...
1 2 3 4
收藏数 63
精华内容 25
关键字:

单片机设计声控开关电源