【雕爷学编程】Arduino动手做(13)---TTP223B电容式触摸模块之通过串口监视器检测电容触摸键的状态与控制继电器

news2024/11/28 2:48:28

在这里插入图片描述

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验十三:TTP223 触摸按键模块 自锁 点动 电容式 开关 单路改造SUNLEPHANT

在这里插入图片描述
TTP223B电容触摸按键模块几个实验
一、实验环境
1、实验所需硬件清单——
Arduino Uno开发板 X1
杜邦线 若干(备了10条)
LED发光二极管(蓝色)X1
220欧姆限流电阻(1/8W)x1
低电平触发单路5V继电器模块X1
TTP223B电容触摸按键模块(四种)X4
Proto Shield 原型扩展板(带mini面包板)X1
按键开关模块(下拉电阻与上拉电阻款各1只)X2

在这里插入图片描述

五、实验七:电容触摸键按下继电器吸合(LED亮),再按下释放(LED灭)
1、实验七参考开源代码(Arduino):

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验七:电容触摸按下继电器吸合(LED亮),再按下释放(LED灭)
  接线:D13板载LED灯
  触摸模块    Uno
  VCC        Vcc
  GND        GND
  SIG         D2
  继电器模块   Uno
  VCC        Vcc
  GND        GND
  IN         D8
*/

// 引脚定义
int LED = 13;
int Relay = 8;//继电器接D8
int Touch_Sensor = 2;//触摸模块接D2
int condition = 0;//记录传感器的状态,标识它是否被触摸
int state = 0; //记录LED和继电器的状态,开启或关闭

void setup() {
  pinMode(LED, OUTPUT);//触摸传感器是输入,继电器和LED引脚是输出
  pinMode(Relay, OUTPUT);
  pinMode(Touch_Sensor, INPUT);
}

void loop() {
  condition = digitalRead(2); // 触摸传感器在触摸时将逻辑0更改为1
  //digitalRead()函数读取该值,并且将值存储在变量condition中。

  if (condition == 1) {
    delay(500); // 使用去抖动延迟500毫秒,用于确认单点触摸
    if (condition == 1) {
      state = ~state; //更改开关的状态(自锁反转)
      digitalWrite(LED, state);
      digitalWrite(Relay, state);
    }
  }
}

2、实验场景图
在这里插入图片描述

3、实验八开源仿真编程(Linkboy V4.2)

在这里插入图片描述
4、实验九开源图形编程(Mind+、编玩边学)

在这里插入图片描述
六、实验十:通过串口监视器检测电容触摸键的状态
1、实验十参考开源代码(Arduino):

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验十:通过串口监视器检测电容触摸键的状态
  接线:
  触摸模块    Uno
  VCC        Vcc
  GND        GND
  SIG         D2
*/

#define TOUCH_SIG 2

//获取状态
boolean get_touch() 
{
  boolean touch_stat = 0;
  touch_stat = digitalRead(TOUCH_SIG); //读入状态
  return touch_stat;
}

void setup() 
{
  pinMode(TOUCH_SIG, INPUT); //设置2号端口为输入模式
  Serial.begin(115200);
}

void loop()
 {
  boolean touch_stat;
  Serial.print("\nrunning\nTouch Stat - ");
  touch_stat = get_touch();
  Serial.print(touch_stat);//串口打印触摸按键状态值
  delay(1000);//延时1000毫秒
}

2、实验十的串口反馈情况

在这里插入图片描述
七、实验十一:Arduino CapacitiveSensor电容式触摸传感器(软件实现)
1、安装需的CapacitiveSensor库
(1)打开IDE,下拉点开管理库

在这里插入图片描述
(2)在搜索栏中搜索CapacitiveSensor

在这里插入图片描述
(3)安装好是这样

在这里插入图片描述
2、实验十一参考开源代码(Arduino):

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验十一:Arduino CapacitiveSensor电容式触摸传感器
  安装库:IDE-工具-管理库-搜索CapacitiveSensor-安装
  接线:引脚2和4之间接1-10M电阻,在引脚8上连接杜邦线(触摸端)
*/


#include <CapacitiveSensor.h> //调用函数库
CapacitiveSensor cs_2_4 = CapacitiveSensor(2, 4); //设置发射脚和接收脚
//引脚2和4之间的1-10M电阻,在引脚4上连接杜邦线(触摸端)
unsigned long csSum;

void setup() {
  Serial.begin(9600);
}

void loop() {
  CSread();
}

void CSread() {
  long cs = cs_2_4.capacitiveSensor(120); //a: 传感器分辨率设置为120
  if (cs > 100) { //b: 任意数
    csSum += cs;
    Serial.println(cs);
    if (csSum >= 3600) //c: 此值是阈值,高值表示触发时间更长
    {
      Serial.print("Trigger: ");//串口输出触发数值
      Serial.println(csSum);
      if (csSum > 0) {
        csSum = 0;  //重置
      }
      cs_2_4.reset_CS_AutoCal(); //停止读取
    }
  }
  else {
    csSum = 0; //读数错误导致超时
  }
}

3、实验串口输出

在这里插入图片描述

4、实验场景图
在这里插入图片描述

5、实验说明——
Arduino除了接受数字端口的数字信号,唯一能检测的模拟物理量就是电压。任何模拟传感器的检测值几乎都要通过相关电路转化成电压值,再输入 arduino的模拟端口进行模数转换。电容值就需要相对更复杂和昂贵的电路转化为电压值,才能被Arduino检测,而对很多物理过程的检测,都可以很方便可靠地通过来检测电容值来实现,其中最常用的地方就是触摸传感器。风靡一时的MaKey MaKey就是个例子。这里通过CapacitiveSensor库,使用一个大电阻、一段导线和二个端口,不需要其他元器件的电容触摸触发方法。这个方法的思路是,首先把一个数字端口设成低电位,并打开arduino的内部上拉电阻,开始计算这个端口到达高电位所需要的时间。而这个时间与此端口的对地电容值有关,电容越大,时间越长。在硬件上只需要在一个端口上连一根导线即可。用手指触摸这段导线的裸露端,就会导致电容变化,arduino可以通过上述方法检测这个变化。如果要增加灵敏度,可以在导线上连一片锡箔。为防止你手上有强静电击穿芯片,可以在锡箔上盖一薄层绝缘纸。

6、CapacitiveSensor库包含三个主要方法和一些实用程序方法——
(1)CapacitiveSensor CapacitiveSensor(byte sendPin, byte receivePin)
CapacitiveSensor创建库的实例(请注意大写字母,这与下面的方法不同)

(2)long capacitiveSensorRaw(byte samples)
CapacitySensorRaw需要一个参数sample,并以任意单位返回一个包含绝对电容的长整数。可以使用samples参数来增加返回的分辨率,但要以降低性能为代价。返回的值不会在样本数量上取平均值,并且会报告总值。如果电容值超过CS_Timeout_Millis的值(以毫秒为单位),则CapacitySensorRaw将返回-2。CS_Timeout_Millis的默认值是2000毫秒(2秒)。

(3)long capacitiveSensor(byte samples)
CapacitySensor需要一个参数,对其进行采样,并以任意单位返回包含加法(感测)电容的长整数。CapacitySensor会跟踪最低的基线(未检测到)电容,并从检测到的电容中减去该值,因此在未检测到的情况下应报告一个较低的值。以CS_Autocal_Millis确定的间隔重新校准基线值。默认值为200000毫秒(20秒)。可以通过使用set_CS_AutocaL_Millis()方法将CS_Autocal_Millis设置为较高的值来关闭此重新校准。

(4)void set_CS_Timeout_Millis(unsigned long timeout_millis)
set_CS_Timeout_Millis方法可用于设置CS_Timeout_Millis值,该值确定如果接收(检测)引脚未能在与发送引脚相同的方向上切换,则该方法将花费多长时间。超时是必需的,因为除非提供超时,否则while循环将锁定草图。CS_Timeout_Millis的默认值为2000毫秒(2秒)。

(5)void reset_CS_AutoCal()
reset_CS_AutoCal可用于强制立即校准电容传感器功能。

(6)void set_CS_AutocaL_Millis(unsigned long autoCal_millis)
set_CS_AutocaL_Millis(unsigned long autoCal_millis)方法可用于设置电容传感器功能的超时间隔。通过使用set_CS_AutocaL_Millis将CS_AutocaL_Millis设置为“ 0xFFFFFFFF”,可以关闭重新校准。

7、实验场景图

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/866842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习three.js —— 第一天

1.创建三要素 场景 // 创建场景 const scene new THREE.Scene() 相机 // 创建透视相机 const camera new THREE.PerspectiveCamera(a,b,c,d) // 参数含义 // a:相机可视垂直角度&#xff1b;b:相机可视长宽比&#xff1b;c&#xff1a;近端距离&#xff1b;d&#xff1a;远端…

YOLOv5改进系列(19)——替换主干网络之Swin TransformerV1(参数量更小的ViT模型)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

小结:基于 JavaWeb 的宠物店管理系统

宠物店管理系统 系统介绍系统展示登录界面用户注册页面 店主主界面宠物信息管理页面修改宠物信息 宠物出入库管理页面宠物订单查询页面宠物账单查看页面用户信息管理页面修改用户信息 用户主界面宠物订购页面用户订购支付页面 个人资料编辑页面个人订单查看页面 系统说明开发环…

尚硅谷大数据项目《在线教育之采集系统》笔记005

视频地址&#xff1a;尚硅谷大数据项目《在线教育之采集系统》_哔哩哔哩_bilibili 目录 P057 P058 P059 P060 P061 P062 P063 P064 P065 P066 P067 P068 P069 P070 P071 P072 P073 P057 #!/bin/bashMAXWELL_HOME/opt/module/maxwell/maxwell-1.29.2status_ma…

虚拟机的创建与使用

一、虚拟机的下载 链接&#xff1a;百度网盘下载链接 提取码&#xff1a;a9p4 二、新建虚拟机系统 需要有版本序列号 注意: 选择 第一个是纯dos 的窗口指令 桌面没有任何东西 选择第二个就是正常的操作系统.有文件夹 我的电脑之类的 三、从主机中复制文件到虚拟机中需要安装 …

【自用】JAVA复习(初级到循环 0-156集):break、while、for、continue、return

总览 1.break 2.while 3.for 4.continue 5.return 一、break 1.作用 跳出当前的循环。 2.break 在多重循环中的使用&#xff1a;配合标签使用 二、while 三、for 1.for( ; ; )、for( ; i<10 ; ) 四、continue 1.作用 用于结束本次循环&#xff0c;开始下一次循环 …

C语言笔试训练【第九天】

文章目录 &#x1f47f;1、下列程序的输出是&#xff08; &#xff09;&#x1f48e;2、二维数组X按行顺序存储&#xff0c;其中每个元素占1个存储单元。若 X[4][4] 的存储地址为 Oxf8b82140 , X[9][9] 的存储地址为 Oxf8b8221c ,则 X[7][7] 的存储地址为&#xff08; &#xf…

软件外包开发的VUE开发框架

Vue.js&#xff08;通常简称为Vue&#xff09;是一个流行的渐进式JavaScript框架&#xff0c;用于构建用户界面。它的核心库专注于视图层&#xff0c;但也可以结合其他库和工具来构建完整的单页面应用&#xff08;SPA&#xff09;。以下分享Vue.js的开发框架和特点&#xff0c;…

春秋云镜 CVE-2022-0948

春秋云镜 CVE-2022-0948 WordPress plugin Order Listener for WooCommerce SQLI 靶标介绍 WordPress 插件 Order Listener for WooCommerce 3.2.2 之前版本存在 SQL注入漏洞。 启动场景 漏洞利用 EXP curl http://example.com/?rest_route/olistener/new --data {"…

分布式学习最佳实践:从分布式系统的特征开始

正文   在延伸feature&#xff08;分布式系统需要考虑的特性&#xff09;的时候&#xff0c;我逐渐明白&#xff0c;这是因为要满足这些feature&#xff0c;才设计了很多协议与算法&#xff0c;也提出了一些理论。比如说&#xff0c;这是因为要解决去中心化副本的一致性问题&…

SCAU操作系统知识点之(六)并发:死锁和饥饿

1、死锁原因&#xff1a;竞争资源、进程推进顺序不当 2、资源分配图&#xff08;若死锁&#xff0c;则资源分配图中必有环路&#xff0c;但有环路时不一定死锁&#xff09; 3、死锁的四个必要条件 ①互斥 ②占有且等待 ③不可抢占 ④循环等待 在死锁的四个必要条件中&#xff…

jupyter默认工作目录的更改

1、生成配置文件&#xff1a;打开Anaconda Prompt&#xff0c;输入如下命令 jupyter notebook --generate-config询问[y/N]时输入y 2、配置文件修改&#xff1a;根据打印路径打开配置文件jupyter_notebook_config.py&#xff0c;全文搜索找到notebook_dir所在位置。在单引号中…

Vue组件库

Vue组件库 ViteVue3TypescriptTSX 1、项目搭建 1.1、创建项目&#xff08;yarn&#xff09; D:\WebstromProject>yarn create vite yarn create v1.22.19 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh pa…

python使用matplot库绘图颜色表

matlpot的color参数可以是十六进制&#xff0c;也可以是颜色描述的字符串。 下面是字符串描述的颜色表。为了颜色间要有区分度。同时要求颜色比较明显&#xff0c;特意选择一些比较有代表性的颜色&#xff0c;以供使用&#xff08;颜色由于个人需要&#xff0c;除去了红色和绿…

SpringBoot启动图标替换-banner文件

1.banner.txt文件内容如下 ${AnsiColor.BRIGHT_YELLOW}${AnsiStyle.BOLD}_________ .__ __________ __ / _____/____________|__| ____ ____\______ \ ____ _____/ |_ \_____ \\____ \_ __ \ |/ \ / ___\| | _//…

实践|Linux 中查找和删除重复文件

动动发财的小手&#xff0c;点个赞吧&#xff01; 如果您习惯使用下载管理器从互联网上下载各种内容&#xff0c;那么组织您的主目录甚至系统可能会特别困难。 通常&#xff0c;您可能会发现您下载了相同的 mp3、pdf 和 epub&#xff08;以及各种其他文件扩展名&#xff09;并将…

tkinter文件对话框

文章目录 文件对话框文件对象文件类型其他参数 tkinter系列&#xff1a; GUI初步&#x1f48e;布局&#x1f48e;绑定变量&#x1f48e;绑定事件&#x1f48e;消息框扫雷小游戏&#x1f48e;强行表白神器 文件对话框 filedialog提供了多种与文件交互相关的对话框&#xff0c…

Linux:Shell编辑之文本处理器(awk)

目录 绪论 1、用法 1.1 格式选项 1.2 awk 常用内置变量 1.3 awk的打印功能 1.4 奇偶打印 1.5 awk运算 1.6 awk的内置函数&#xff1a;getline 1.7 文本过滤打印 1.8 awk条件判断打印 1.9 三元表达式&#xff0c;类似于java 1.10 awk的精确筛选 1.11 awk和tr比较改变…

【Django】无法从“django.utils.encoding”导入名称“force_text”

整晚处理 Django 的导入错误。 我将把它作为提醒&#xff0c;希望处于相同情况的人数会减少。 原因 某些软件包版本不支持Django 4 请看下表并决定Django和Python的版本 方案 如果出现难以响应&#xff0c;或者更改环境麻烦&#xff0c;请尝试以下操作 例如出现以下错误 …

【Github】SourceTree技巧汇总

sourceTree登录github账户 会跳转到浏览器端 按照Git Flow 初始化仓库分支 克隆远程仓库到本地 推送变更到远程仓库 合并分支 可以看到目前的本地分支&#xff08;main、iOS_JS&#xff09;和远程分支&#xff08;origin/main、origin/HEAD、origin/iOS_JS&#xff09;目前所处…