使用ESP32制作电容式触摸传感器的方法

在许多情况下,使用触摸传感器代替按钮。优点是我们不必提供力量来按下按钮,并且我们可以使用触摸传感器在不触摸它的情况下激活一个键。触摸传感技术日益流行。在过去十年左右的时间里,很难想象没有触敏电子产品的世界。电阻式和电容式触摸方法都可以用于开发触摸传感器,在本文中,我们将讨论使用 esp32 制作电容式触摸传感器的粗略方法,之前我们还使用 raspberry pi 构建了电容式触摸按钮。
什么是电容式触摸传感器及其工作原理?
电容器有多种形式。最常见的形式是含铅封装或表面贴装封装,但要形成电容,我们需要用介电材料隔开的导体。因此,很容易创建一个。一个很好的例子是我们将在下面的例子中开发的例子。
考虑到蚀刻后的 pcb作为导电材料,贴纸作为介电材料,所以现在的问题是,触摸铜焊盘如何导致电容发生变化,以使触摸传感器控制器能够检测到?当然是人的手指。
那么,主要有两个原因:一是我们手指的介电特性,二是我们手指的导电特性。我们将使用 基于电容的触摸。因此,我们将把重点转向基于电容的触摸传感器。但在我们讨论所有这些之前,重要的是要注意没有任何传导发生,并且手指是绝缘的,因为贴纸中使用了纸张。因此,手指无法对电容器放电。
手指作为电介质:
众所周知,电容器具有常数值,这可以通过两个导电板的面积、板之间的距离和介电常数来实现。我们不能仅仅通过触摸来改变电容器的面积,但我们可以肯定地改变电容器的介电常数,因为人的手指具有与显示它的材料不同的介电常数。在我们的例子中,它是空气,我们用手指置换空气。 如果你问怎么做?这是因为空气1006在海平面室温下的介电常数和手指的介电常数在80左右要高得多,因为人的手指主要由水组成。因此,手指与电容器电场的相互作用导致介电常数增加,因此电容增加。
现在我们已经了解了原理,让我们继续制作实际的 pcb。
构建四路电容式触摸传感器
本项目使用的电容式触摸传感器有四个通道,制作简单。下面我们已经提到了制作一个的详细过程。
首先,我们在eagle pcb 设计工具的帮助下为传感器制作了 pcb,如下图所示。
在尺寸和 photoshop 的帮助下,我们制作了模板,最后制作了传感器的贴纸,如下图所示,
现在,当我们完成贴纸后,我们继续制作我们将用于制作 pcb 的实际复合板模板,如下图所示,
现在我们可以打印此文件并继续制作自制 pcb 的过程。如果您是新手,可以查看有关如何在家中构建 pcb 的文章。您也可以从以下链接下载所需的 pdf 和 gerber 文件
四通道电容式触摸传感器的 gerber 文件
完成后,实际的蚀刻 pcb 如下图所示。
现在是时候钻一些孔了,我们将一些电线与 pcb 连接起来。这样我们就可以将它与esp32板连接起来。完成后,如下图所示。
由于我们没有在 pcb 上放置过孔,因此焊接时焊料会到处都是,我们通过在 pcb 上钻孔来纠正我们的错误,您可以在上面的下载部分中找到该钻孔。最后,是时候贴上贴纸并制作完成了。如下图所示。
现在我们完成了触控面板,是时候继续制作触控面板的控制电路了。
esp32触控电路所需材料
下面给出了使用 esp32 构建控制器部分所需的组件,您应该能够在当地的爱好商店中找到其中的大部分。
我还在下表中列出了所需的类型和数量的组件,因为我们正在连接一个四通道触摸传感器并控制四个交流负载,我们将使用 4 个继电器来切换交流负载和 4 个晶体管来构建继电器驱动电路。
我们的电容式触摸传感器的控制电路
下图显示了我们基于 esp32 的触摸传感器的完整电路图。
如您所见,这是一个非常简单的电路,所需的组件非常少。
由于它是一个简单的触摸传感器电路,因此在您希望通过触摸与设备交互的地方非常有用,例如,您可以通过触摸打开/关闭设备,而不是使用典型的板载开关。
在原理图中,dc 筒形千斤顶用作输入,我们提供为电路供电所需的必要电源,从那里我们有我们的 7805 稳压器,它将未稳压的 dc 输入转换为恒定的 5v dc,通过它我们提供esp32 模块的电源。
接下来,在原理图中,我们在引脚 25、26、27、28 上有触摸连接器,我们将在此处连接触摸板。
接下来,我们的继电器通​​过 bd139 晶体管切换,二极管 d2、d3、d4、d5 用于保护电路免受继电器切换时产生的任何瞬态电压的影响,这种配置中的二极管被称为反激二极管/续流二极管。每个晶体管基极的 560r 电阻器用于限制通过基极的电流。
电容式触摸传感器电路的 pcb 设计
我们的触摸传感器电路的 pcb 是为单面板设计的。我们使用 eagle 来设计我的 pcb,但您可以使用您选择的任何设计软件。我们的电路板设计的 2d 图像如下所示。
足够的迹线直径用于制作电源迹线,用于使电流流过电路板。我们将螺丝端子放在顶部,因为这样连接负载要容易得多,而电源连接器(一个dc 筒形插孔)被放置在侧面,这也便于使用。可以从下面的链接下载 eagle 的完整设计文件和 gerber。
基于 esp32 的触摸传感器控制电路的 gerber 文件
现在我们的设计已经准备就绪,是时候蚀刻和焊接电路板了。蚀刻、钻孔和焊接过程完成后,电路板如下图所示,
基于 esp32 的电容式触摸传感器的 arduino 代码
对于这个项目,我们将使用我们将在稍后描述的自定义代码对 esp32 进行编程。代码非常简单易用,
我们首先定义所有必需的引脚,在我们的例子中,我们定义了触摸传感器和继电器的引脚。
#define relay_pin_1 15#define relay_pin_2 2#define relay_pin_3 4#define relay_pin_4 16#define touch_sensor_pin_1 13#define touch_sensor_pin_2 12#define touch_sensor_pin_3 14#define touch_sensor_pin_4 27  
接下来,在设置部分,我们首先初始化 uart 以进行调试,接下来我们引入了 1s 的延迟,这给了我们一点时间来打开串行监视器窗口。接下来,我们使用arduinos pinmode函数将 relay 引脚作为输出,这标志着setup()部分的结束。
无效设置(){ 序列号.开始(115200); 延迟(1000); pinmode(relay_pin_1, output); pinmode(relay_pin_2,输出); pinmode(relay_pin_3, output); pinmode(relay_pin_4, output);}  
我们以if语句开始我们的循环部分,内置函数touchread(pin_no)用于确定引脚是否被触摸。touchread (pin_no)函数返回一个整数值范围(0 - 100),该值始终保持在 100 附近,但是如果我们触摸选定的引脚,该值会下降到接近零,并且在变化的值的帮助下,我们可以确定特定的引脚是否被手指触摸。
在if语句中,我们正在检查整数值是否有任何变化,如果该值低于 28,我们可以确定我们已经确认了一次触摸。一旦if 语句为真,我们等待 50ms 并再次检查参数,这将帮助我们确定传感器值是否被错误触发,然后我们使用digitalwrite(relay_pin_1, !digitalread (relay_pin_1)) 方法,其余代码保持不变。
如果(触摸读取(touch_sensor_pin_1)<28){ 如果(触摸读取(touch_sensor_pin_1)<28){ serial.println(传感器一被触摸); digitalwrite(relay_pin_1, !digitalread(relay_pin_1)); } } 否则如果 (touchread(touch_sensor_pin_2) < 28) { 如果 (touchread(touch_sensor_pin_2) < 28) { serial.println(传感器二被触摸); digitalwrite(relay_pin_2, !digitalread(relay_pin_2)); } } 否则,如果(触摸读取(触摸传感器_pin_3)<28){ 如果 (touchread(touch_sensor_pin_3) < 28) { serial.println(传感器三被触摸); digitalwrite(relay_pin_3, !digitalread(relay_pin_3)); } } 否则如果 (touchread(touch_sensor_pin_4) < 28) { 如果 (touchread(touch_sensor_pin_4) < 28) { serial.println(传感器四被触摸); digitalwrite(relay_pin_4, !digitalread(relay_pin_4)); } }  
最后,我们以另外 200 毫秒的阻塞延迟结束我们的代码。
测试基于 esp32 的触摸传感器电路
由于这是一个非常简单的项目,因此测试装置非常简单,如您所见,我连接了 4 个 led 和电阻作为负载,因为它与继电器连接,您可以轻松连接高达 3 安培的任何负载。
#define relay_pin_1 15
#define relay_pin_2 2
#define relay_pin_3 4
#define relay_pin_4 16
//所有继电器引脚定义
#define touch_sensor_pin_1 13
#define touch_sensor_pin_2 12
#define touch_sensor_pin_3 14
#define touch_sensor_pin_4 27
//所有触摸传感器引脚定义
无效设置(){
序列号.开始(115200);//开始uart
延迟(1000);// 给我时间启动串口监视器
pinmode(relay_pin_1, output);
pinmode(relay_pin_2,输出);
pinmode(relay_pin_3, output);
pinmode(relay_pin_4, output);
//所有继电器引脚设置为输出
}
无效循环(){
/*
取消注释以进行调试
序列号.println( );
serial.println(#############################);
serial.print(button1:);
serial.println(touchread(touch_sensor_pin_1)); // 获取 touch 0 pin = gpio 4 的值
serial.print(button2:);
serial.println(touchread(touch_sensor_pin_2));
serial.print(button3:);
serial.println(touchread(touch_sensor_pin_3));
serial.print(button4:);
serial.println(touchread(touch_sensor_pin_4));
serial.println(#############################);
序列号.println( );
*/
if ( touchread(touch_sensor_pin_1) < 28) { // 检查值是否达到 28 以下
延迟(50);
if ( touchread(touch_sensor_pin_1) < 28) { //再次检查值是否低于 28
serial.println(传感器一被触摸);
digitalwrite(relay_pin_1, !digitalread(relay_pin_1));
}
}
否则如果 (touchread(touch_sensor_pin_2) < 28) {
延迟(50);
如果 (touchread(touch_sensor_pin_2) < 28) {
serial.println(传感器二被触摸);
digitalwrite(relay_pin_2, !digitalread(relay_pin_2));
}
}
否则,如果(触摸读取(触摸传感器_pin_3)<28){
延迟(50);
如果 (touchread(touch_sensor_pin_3) < 28) {
serial.println(传感器三被触摸);
digitalwrite(relay_pin_3, !digitalread(relay_pin_3));
}
}
否则如果 (touchread(touch_sensor_pin_4) < 28) {
延迟(50);// 用作去抖动延迟。
如果 (touchread(touch_sensor_pin_4) < 28) {
serial.println(传感器四被触摸);
digitalwrite(relay_pin_4, !digitalread(relay_pin_4));
}
}
延迟(200);
}

高压配电柜的组成及其作用
人工智能最终会以什么样的形式来实现
开放、连接、共创!蓝卓工业操作系统supOS5.0正式发布
搭载TI DLP® Pico™芯片组的Anycubic Photon D2发布
荣耀V40系列将不采用麒麟9000处理器?
使用ESP32制作电容式触摸传感器的方法
STM32F1_ WDG看门狗(独立+窗口)
如何鉴定一块全彩LED显示屏质量的好坏
上半年我国累计光缆产量实现6.3%的增长,下半年或将保持增长态势
压磁式测力装置的原理
同步FIFO之Verilog实现
华为P10系列真机实拍,你会入手他吗?
华为EMUI 11系统升级用户突破1亿
锂电池极片微观结构与电导率优化解析
科创板铂力特董事雷开贵介绍、履历信息
施耐德电气与阿里巴巴集团于杭州共同举办发布会,入驻1688
RV减速器也在传统针摆行星传动基础上演变发展
基于Chirp函数的Nios Ⅱ嵌入式实现
华为畅享8e评测 值不值得买
浅谈联发科在智能电视芯片的布局与创新