历史上的今天
返回首页

历史上的今天

今天是:2025年07月22日(星期二)

正在发生

2020年07月22日 | 使用PIC单片机制的简单拍手开关

2020-07-22 来源:elecfans

  拍手开关对于初学者来说是一个很有趣的单片机方案。它以拍手的声音打开和关闭电器。在本文中,单片机开发工程师们将使用PIC单片机制作一个简单的拍手开关,当它连续检测到两个拍手声音时,该开关便会运行。在这个方案中,使用驻极体麦克风作为换能器,将拍手声转换为电信号。麦克风的输出由晶体管放大,然后发送到PIC12F683单片机,当检测到有效拍手时,PIC12F683单片机执行ON/OFF切换动作。


  声控拍手开关的原理

  拍手开关的输入端需要一个换能器,以将拍手的声音振动转换为电能。为此使用驻极体麦克风或简单的麦克风(OBO-04FN-0B)。麦克风的输出中的声音信号电流很低,因此我们需要一个放大器电路来增强检测到的声音信号。以下电路图显示了麦克风和单个晶体管放大器。当没有声音时,饱和的晶体管的集电极电压(Vout)约为0.2V。当麦克风检测到拍手声时,其两端的电压突然下降。由于电容麦克风的输出电压通过电容器C1耦合到晶体管的基极,因此基极-发射极电压也降低了,因此基极-发射极结点的正向偏置较少。拍手时,可以看到峰值电压可以高达4.0V,具体取决于拍手的响度。

  使用PIC单片机制的简单拍手开关

  现在我们知道了如何将拍手声转换为电信号。下一步是将该信号提供给PIC12F683单片机进行开关动作。PIC12F683单片机具有一个内置的比较器模块,该模块可用于比较两个模拟电压并获得其相对幅度的数字指示。根据CMCON0寄存器中CM2-CM0的设置,比较器模块可以以八种不同的模式工作。为了我们的目的,我们将其配置为:CIN-引脚配置为模拟,CIN +引脚配置为I/O,COUT引脚配置为I/O,内部提供比较器输出,CVREF为同相输入(见下图)。

  使用PIC单片机制的简单拍手开关

  我们将集电极输出电压(Vout)与内部产生的参考电压进行比较。参考电压在内部连接到比较器模块的正输入(CIN +),而传感器的输出电压则馈送到比较器的负输入(CIN-)。CIN-引脚与PIC12F683的GP1 I/O引脚复用。参考电压的大小可通过VRCON寄存器进行编程和控制。我们将参考电压设置为0.625V(假设电源电压为5.0V)。因此,在正常情况下,参考电压(0.625V)大于Vout(= 0.2V),比较器输出(COUT)为高。COUT可通过GP2 I/O引脚在内部和外部进行访问。当有拍手声时,COUT会变低。通过将CMCON0寄存器中的比较器输出反相(CIN)位置1,可以将比较器输出逻辑反相。可以对PIC12F683单片机进行编程,以根据比较器输出采取开关动作。


  声控拍手开关电路原理图

  这个简单的拍击开关方案的完整电路图如下所示。内部比较器模块的正和负输入分别可通过GP0/CIN +和GP1/CIN-引脚从外部访问。由于正输入连接到内部基准电压源,因此GP1引脚可用作I/O引脚。传感器放大器的输出将到达GP0/CIN +引脚。LED连接到GP5引脚以指示单片机的开关动作。当单片机连续检测到两个拍手声时,它将在GP5引脚上切换逻辑输出。LED在这里用于说明目的,如果您想用它来控制电器,可以用机电继电器代替。

  使用PIC单片机制的简单拍手开关

  声控拍手开关程序

  该程序用C语言开发,并使用MikroC Pro进行PIC编译器编译。程序以1.5秒的间隔连续寻找两个拍手声。如果发生这种情况,则将GP5引脚切换。当检测到拍手时,Timer1模块将打开以保持时间记录。 1.5秒后,它将生成一个超时信号。如果在此之前没有第二个拍手,则单片机将忽略第一个拍手,并返回到主程序。


  sbit Output_LED at GP5_bit;

  unsigned short i, TIME_UP;

  void interrupt(void){

  if(PIR1.TMR1IF) {

  i ++;

  if(i == 3) TIME_UP = 1; // TIme Up in 1.5 sec

  PIR1.TMR1IF = 0;

  }

  }

  void main() {

  TRISIO = 0b00000011 ;

  ANSEL = 0x00;

  INTCON = 0b11000000 ; // Enable GIE and PEIE for TImer1 overflow interrpt

  PIE1 = 0b00000001 ; // Enable TMR1IE

  // Configure Comparator module

  // CIN- pin is configured as analog,

  // CIN+ pin is configured as I/O,

  // COUT pin is configured as I/O,

  // Comparator output available internally,

  // CVREF is non-inverting input

  // CINV is set to 1

  CMCON0 = 0b00010100;

  VRCON = 0b10100011; // Vref is set to VDD/8

  Output_LED = 0;

  do{

  TMR1H = 0x00;

  TMR1L = 0x00;

  TIME_UP = 0;

  i = 0;

  T1CON = 0b00110000; // Configure Timer 1

  if(CMCON0.COUT){ // First clap detected

  Delay_ms(100);

  T1CON.TMR1ON = 1; // Start Timer1

  while(!CMCON0.COUT && !TIME_UP); // Wait until second clap is

  T1CON.TMR1ON = 0; // detected or Timer1 overflows

  if(CMCON0.COUT && !TIME_UP) Output_LED = ~Output_LED;

  Delay_ms(100);

  }

  } while(1);

  }

推荐阅读

史海拾趣

Daniels Manufacturing公司的发展小趣事

随着全球电子行业的快速发展,DMC意识到必须走向国际市场,以寻求更大的发展空间。在20世纪90年代,DMC开始实施国际化战略,通过设立海外分支机构、与当地企业合作等方式,逐步拓展国际市场。同时,DMC还积极参与国际展览和技术交流,提高品牌知名度和影响力。这些努力使得DMC在国际市场上逐渐崭露头角,产品出口量持续增长。

浙江凡华(FANHAR)公司的发展小趣事

随着全球电子行业的快速发展,DMC意识到必须走向国际市场,以寻求更大的发展空间。在20世纪90年代,DMC开始实施国际化战略,通过设立海外分支机构、与当地企业合作等方式,逐步拓展国际市场。同时,DMC还积极参与国际展览和技术交流,提高品牌知名度和影响力。这些努力使得DMC在国际市场上逐渐崭露头角,产品出口量持续增长。

EICHHOFF公司的发展小趣事

在电子行业的快速发展中,EICHHOFF公司始终保持着对技术创新的追求。XX年代,公司成功研发出了一款具有革命性意义的连接器产品,该产品凭借其独特的设计和卓越的性能,迅速在市场上获得了广泛认可。这一创新不仅为EICHHOFF带来了丰厚的利润,也进一步巩固了其在行业中的领先地位。

此后,EICHHOFF公司继续加大研发投入,不断推出具有竞争力的新产品。这些产品不仅在性能上有所提升,还在设计和功能上进行了创新,满足了客户日益增长的需求。

Crystalfontz America Inc公司的发展小趣事

随着产品技术的不断提升,Crystalfontz America Inc公司开始积极拓展市场。公司通过与各大电子设备制造商建立合作伙伴关系,将产品应用于嵌入式系统、机架式服务器、仪器集群等领域。同时,公司还积极参加各类行业展会和技术交流活动,提升品牌知名度,吸引更多潜在客户。这些举措有效推动了公司市场份额的扩大和业务的快速增长。

ECM [ECM Electronics Limited.]公司的发展小趣事

企业文化是企业发展的灵魂。ECM Electronics Limited.注重企业文化的建设,倡导“诚信、创新、协作、共赢”的价值观。公司注重员工的培训和发展,为员工提供良好的工作环境和职业发展机会。通过团队建设活动,增强员工的凝聚力和归属感。正是这些积极向上的企业文化和优秀的团队,为ECM Electronics Limited.的持续发展提供了源源不断的动力。

ETI Systems公司的发展小趣事

随着公司业务的不断发展壮大,ETI Systems开始将目光投向国际市场。公司积极参加国际电子产品展览和技术交流活动,与来自世界各地的客户和合作伙伴建立了紧密的联系。同时,ETI Systems也加大了在海外市场的投入力度,通过设立分公司和办事处等方式,进一步拓宽了国际市场渠道。这种国际化战略的实施,为ETI Systems的持续发展注入了新的活力。

问答坊 | AI 解惑

常见的三种无线网络接入技术比较

 1、IEEE802.11家族   IEEE802.11是IEEE最初制定的一个无线局域网标准,主要用于解决办公室局域网和校园网中,用户与用户终端的无线接入,业务主要限于数据存取,速率最高只能达到2Mb/s。目前,3Com等公司都有基于该标准的无线网卡。   由于IE ...…

查看全部问答>

电阻、电容、电压和电流的测量

电阻、电容、电压和电流的测量方法…

查看全部问答>

pic单片机 技术支持

禾琦商贸(原立奇国际)为Microchip全系列产品授权代理。公司于2002年获得Microchip(美国微芯公司)年度杰出服务奖。禾琦商贸亚洲区最大的代理商,全球前五大代理商之一。总年度营业额超过十亿美金。 公司具多位研发出身的专职应用工程师团队, ...…

查看全部问答>

C/C++中跨文件调用变量怎么定义?

我在RTC.c里面定义了extern int year,month,day,weekday,hour,min,sec; 又在Main.c里定义了extern int year,month,day,weekday,hour,min,sec;(Main()函数里面、外面都试了) ADS编译报错:Undefined symbol year(refferred form RTC.o).其它变量报 ...…

查看全部问答>

ARM中断问题,谁用过FreeScale的i.MX31,ADS1.2中,中断搞不定啊!

我用FreeScale的i.MX31(ARM11)做嵌入式系统,在WinCE下能使用中断,但是winCE初始化中断的代码是看不到的! 我在ADS1.2中做BootLoader,中断调不出来!发生中断时,没有自动跳转到中断向量那里去。 1、CP15中VE(Bit24)置0, V( Bit13)置0,即中 ...…

查看全部问答>

頂一下我的編程網吧

頂一下我的編程網吧 www.kingofcoders.com…

查看全部问答>

COMMON/2410lib.c 和asm/2410init.s和 asm/2410slib.s在哪里

COMMON/2410lib.c  和asm/2410init.s和 asm/2410slib.s在哪里 小弟正在看串口实验,文中提到:\"加入如下文件到uart中:common\\2410lib.c ;asm\\2410init.s;asm\\2410slib.s\",可是小弟在ADTIDE中找不到这些文件。请大侠救命。…

查看全部问答>

【STMTouch】STM32再出新品:多点触摸控制器

不必解释,自己看吧,内行看门道,外行看热闹, http://www.st.com/mcu/inchtml-pages-stmtouch.html STMTouch At your fingertips - final version.jpg (147.21 KB) 下载次数:5 2010-1-6 18:01 ...…

查看全部问答>

PCB走线宽度变化产生的反射

如果PCB设计阻抗变化只发生一次,例如线宽从8mil变到6mil后,一直保持6mil宽度这种情况,要达到突变处信号反射噪声不超过电压摆幅的5%这一噪声预算要求,阻抗变化必须小于10%。这有时很难做到,以 FR4板材上微带线的情况为例,我们计算一下。如果线 ...…

查看全部问答>