硬件非常简单,只有一个微控制器、一个驻极体麦克风、一个继电器和一些分立元件。微控制器是该项目的大脑,我使用了 atmega8,因为它是我可用的。
信号由麦克风捕获并由晶体管 (BC548) 放大,该信号通过低通滤波器去除高频并进入 mega8 ADC。为了使电路简单,仅使用一个晶体管进行信号放大。两个按钮用于提高或降低信号的灵敏度。您可以在下面看到完整的示意图。虚线上的组件是可选的。
该电路可以使用 7 ~ 12V 供电,并且继电器必须适合该电压。
软件
该软件是使用 AVR Studio 和WinAVR库用 C 语言编写的。不断读取 ADC,并将返回值与变量进行比较。如果用户按下按钮 S1 或 S2,则可以更改此变量。
因此,用户可以增加或减少触发电路所需的信号强度。如果 ADC 的值小于变量,则不会发生任何情况,否则定时器0被激活并开始计数。每次定时器溢出时,称为定时器的变量都会递增。
变量timer的值与三个常量burst_time、ready_time和time_out进行比较。如果变量的值等于常量burst_time,则全局变量burst的值变为1。如果定时器的值等于常量ready_time,则变量burst的值变为0,变量ready变为1。如果定时器的值等于常量ready_time,则变量burst的值变为0,变量ready变为1。time_out所有变量都变为等于 0。
当检测到另一个拍手时,如果burst = 1,则微控制器清除所有变量并再次启动循环。如果突发 = 0且就绪 = 1,则输出会切换。
仅当拍手与另拍手之间的时间大致正确时,继电器才会关闭,从而减少了灯意外打开或关闭的机会。
下面的流程图有助于理解该软件。
流动
USART
USART 用于调试代码并帮助了解软件的工作原理。
超级终端配置
clapper_hyperterm