pic12f683 C语言编译,使用PIC单片机制的简单拍手开关

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

声控拍手开关的原理

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

48744fa3e67f0f2f2d13f58d05d8b0b6.png

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

d378362d54ce5f99955723a01b13a1b0.png

我们将集电极输出电压(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在这里用于说明目的,如果您想用它来控制电器,可以用机电继电器代替。

01efcbe823a978c812f40c1312e0827e.png

声控拍手开关程序

该程序用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);

}

关键字:

PIC单片机

拍手开关

切换动作

编辑:什么鱼 引用地址:

http://news.eeworld.com.cn/mcu/ic504002.html

本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值