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

在这里插入图片描述

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、实验场景图

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/132223069
今日推荐