我';我拥有一个蓝色雪人话筒已有五年多了。它';它是一款相当不错的视频通话话筒,我非常喜欢它有自己的(直通式)耳机音频接口,以及专用的硬件静音功能。我';我在大约1500次通话中使用了它,但只有一个问题:静音按钮会发出噪音。
在那五年的大部分时间里,我的同事通常都能告诉我什么时候想加入对话,因为静音按钮有一个令人满意的触觉反馈,不幸的是,它将振动传递到它所连接的东西上,而这个东西是一个高度敏感的振动传感器……一个麦克风!
这种噪音困扰了我好几年了。对于能指而言,我并没有那么多,我';我正要发言,但我不能';不要在没有人期待我说话的情况下让自己哑口无言。另外,它';It’麦克风上有个按钮会发出噪音,这让我有点恼火。
所以,我开始着手解决这个问题。我';我一直在玩Espressif的这些ESP32微控制器。这些价格低廉的芯片(和开发板)功能齐全,与15年前我使用的第一代Arduinos相比,它们的性能非常强大。它们内置WiFi和蓝牙,有足够的RAM来做一些基本的事情(以及片外串行总线可访问的RAM,用于更密集的工作),并且易于编程(从软件和硬件的角度来看)。
ESP32酷炫的内置功能之一是电容式触摸传感器。实际上船上有几个这样的传感器,它们';我们经常用来感知触摸来模拟按钮…无声按钮。你可以看到我';我同意这个。
我在试验板上布置了一个测试电路,并使用Arduino框架编写了一点固件(包括一些基本的去抖动),然后进行了测试:
(这是在一个ESP32 WROOM开发板上,对于我的其他一些项目来说并不理想,我更喜欢WROVER作为额外的RAM,但对于这个项目来说,如果不是严重的过度开发,也是理想的。)
不错。但现在我必须做最难的部分:弄清楚麦克风是如何处理按键的。我在网上找了一个';我已经做了类似的事情,我找到了一些撕下的视频,但无法';I don’我找不到示意图。
我把麦克风拆开,把雪人挖了进去;s板,找到了按钮。这比我';d想象中的情况,主要是因为该按钮既亮起(内置和光管LED在静音时闪烁,在取消静音时亮起),又无模式(它是一个瞬时按钮)。通过电压表和USB接口提供的+5V/GND的一些不太理想的热接线进行一些创造性的探索,我跟踪按钮按下到开关上的一个针脚,当按下按钮时,该针脚降低。我焊接在一根电线上,用于我的项目:
我还焊接了一个太大的桶形连接器,无法接入USB接口#39;s+5V和接地线。(用你手头的东西,对吗?尽量不要像我那样把连接器的性别向后拉……而且可能比我焊接得更好。)
我的代码需要修改以模拟这个按钮";按";。除此之外,我';d必须假装按下并松开按钮,也不是向输出引脚提供+5伏电压(发出类似信号的正常方式),而是I';实际上,我必须把5V电压降到地上。这里';这是我最终得到的(Arduino框架)代码(包括一些串行调试):
#包括<;阿杜伊诺。h>#定义触摸屏引脚4#定义LED引脚2#定义外部LED引脚15#定义脉冲延迟500无符号整数阈值=20;//上次切换输出引脚的时间:unsigned long lastDebounceTime=0;//去盎司时间无符号长去盎司延迟=500;无符号长脉冲起始时间=0;bool-toggledLow=false;void gotTouch(){if(millis()<;(lastDebounceTime+debounceDelay)){return;}lastDebounceTime=millis();电视连续剧println(";触摸。";)//脉冲数字写入按钮(LED_引脚,低电平);digitalWrite(外部LED引脚,低电平);电视连续剧println(";(低)";);脉冲起始时间=毫秒();toggledLow=true;}void setup(){Serial.begin(9600);delay(100);Serial.println(";start.";);引脚模式(LED_引脚,输出);引脚模式(外部LED引脚,输出);数码写入(LED_引脚,高);数码写入(外部LED引脚,高电平);touchAttachInterrupt(T0,gotTouch,阈值);}void loop(){//Touch0,T0位于GPIO4 Serial.println(touchRead(T0))//使用T0 Serial.println(";";)获取值;延迟(100);如果;(pulseStartTime+PULSE_DELAY)){digitalWrite(LED_引脚,高);digitalWrite(EXT_LED_引脚,高);toggledLow=false;Serial.println(";(高)";)}
请至少试着避免嘲笑我的弱C++技能……但是这在实践中似乎是惊人的稳定代码。
现在,我';d需要连接ESP32开发板,并部分重新组装麦克风。雪人的情况是铸铝(或另一种软金属,但我假设是铝)。这意味着我可能有希望使用雪人本身作为触摸传感器。我装配了一根传感器线,将其松散地连接到安装孔上(安装孔上有一个用拇指拧紧的螺栓,通过用力将其与外壳进行良好连接),因为它';这是一个巨大的痛苦(最多)焊接到铝:
然后,在重新组装之前进行一些台架测试:它很有效!(你可以看到雪地灯中部的闪烁光39,S板变硬,当我碰到未装配但连接的情况时,它会闪烁。)
太棒了成功我几乎在一个晚上就做到了!我把麦克风放回原处,包括把机箱安装螺栓放回原处,突然它就不工作了。我拆开,通过USB连接串行监视器,然后…好吧…它工作了!也许我只是掐了一个接头或是短路了一个针脚什么的。更多卡普顿录音带!重新组装,又失败了。所以我用一根电缆穿过音量旋钮孔,重新组装,并在现场进行测试。奇怪的电容值都很低。事实上,噪音可能总是(非常接近)0加上一些偶尔的噪音。什么
经过一两天的挠头,然后进行一些测量以确认假设,我意识到当螺栓进入机箱时,机箱连接到机箱,机箱接地到电路板,然后通过USB接地。所以这个案子本身就被搁置了。那';这对浮动电容传感器不利。结果它没有';我根本不工作。
这导致了一些变压器用绝缘瓷漆的实验,我当然用这些漆产生的烟雾烧穿了太多的脑细胞。我放弃了将外壳与地面隔离(不管怎样,从各方面考虑,这可能都是好的),并用一些铝导管胶带、一些可焊接铜带和一块硬纸板制作了一个小触摸板,碰巧我手头有这些(回到使用你们这里的东西)。
正如你在视频中看到的,我还在麦克风背面添加了一个小拨动开关,可以让我完全从麦克风上断开开关线,以防我的黑客攻击开始失败,我正在接一个重要的电话。当然,stock mute按钮仍然有效。但是,我';我很高兴地告诉大家';在过去的几周里,情况一直很稳定;我甚至没有溢出millis()的检查,这仍然让我感到惊讶,我每天都使用新的ka chunk free touch使麦克风静音。