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