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灯触摸模块 UnoVCC VccGND GNDSIG D2继电器模块 UnoVCC VccGND GNDIN 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种传感器模块系列实验(资料代码+仿真编程+图形编程)实验十:通过串口监视器检测电容触摸键的状态接线:触摸模块 UnoVCC VccGND GNDSIG 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: 传感器分辨率设置为120if (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、实验场景图