MEMS/传感技术
在许多情况下,使用触摸传感器代替按钮。优点是我们不必提供力量来按下按钮,并且我们可以使用触摸传感器在不触摸它的情况下激活一个键。触摸传感技术日益流行。在过去十年左右的时间里,很难想象没有触敏电子产品的世界。电阻式和电容式触摸方法都可以用于开发触摸传感器,在本文中,我们将讨论使用 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);
}
全部0条评论
快来发表一下你的评论吧 !