arduino. 电容传感器:在这里,您可以了解如何使用a 单针 和 没有外部硬件 创建通过木材,塑料或玻璃操作的按钮。
对于某些设计,您需要隐藏的按钮,这是
实际方法 - 电容式触摸感应。实际上
技术通过测量充电时间来真正测量电容
外部电容。
用于检测电容式触摸输入的通常方法是使用两个
带有高值电阻的引脚。在这个设置中
通过操纵两个引脚来测量传感器销处的电容。这 电容传感器 库用于此(双引脚)方法。
当控制器引脚设置为高电平的电容时
通过电阻充电。当传感器处的输入电压时
达到输入的高阈值电压(VIH),表示有效
输入(逻辑电平高)。
传感器的总电容和电容器电阻到输入的电容决定了上升时间
(充电率),当您添加更多电容时
将手指放在传感器附近,电容增加(减慢
充电率)。这是因为并行地加在一起的电容。
测量上升时间允许您检测手指的存在!
Compuitivensor库文档谈论更改阻力的值,如下所示:
您可以根据您的设计选择这些参数。使用 下面的单引脚ADC方法可以通过更改调整灵敏度 测量ADC阈值。
该ADC Arduino电容传感器方法的优点是它只需要一个 单个模拟密码 每个输入。
因此,这种方法最适合针限制设计 作为ATTINY85(8个引脚 - 6个可用),而电容器库 如果您有许多输入,是有用的,因为你有更好的控制 选择外部组件时的传感能力。
该方法有三种元素:
如果将上述元素绘制为单个图表,则会获取:
将小铜板连接到模拟输入引脚(带串联
ESD保护的电阻 - 显示不显示)。当对象(或手指)是
将板靠近其电容增加。
该想法是将外部电容与内部进行比较
样品并保持电容 - 如果它们相似,则ADC将读取
2.5V,随着C增加而变低。
为此,外部电容充电至5V,而内部电容放电到地面:
现在断开上拉并连接电容器,然后根据相对电容值电荷分配。
现在使ADC读数检测电容变化。
电容式触摸传感器的库:Adctouch
从: //github.com/martin2250/ADCTouch 并解压缩到库文件夹(通常是C:/用户/
或使用库管理器,搜索AdCtouch。
图书馆安装详细信息是 这里 .
更新后来的代码已更新以适应学历,如此 寄存器值不同,所以您应该使用最新版本但是 下面的代码是arduino uno,更容易读取(来自github 2016).
/*
ADCTouch.cpp - Library for Capacittive touch sensors using only one ADC PIN
Created by martin2250, April 23, 2014.
Released into the public domain.
*/
#include "Arduino.h"
#include "ADCTouch.h"
在 t ADCTouchClass::read(byte ADCChannel, 在 t 样本)
{
long _value = 0;
for( 在 t _counter = 0; _counter < 样本; _counter ++)
{
pinMode(ADCChannel, INPUT_PULLUP);
ADMUX |= 0b11111;
ADCSRA |= (1<<ADSC); //start conversion
while(!(ADCSRA & (1<<ADIF))); //wait for conversion to finish
ADCSRA |= (1<<ADIF); //reset the flag
pinMode(ADCChannel, INPUT);
_value += analogRead(ADCChannel);
}
return _value / 样本;
}
最新代码有一些评论,但基本操作是这样的:
使用硬件:Arduino Uno。
arduino. 电容传感器的以下代码是一个例子
显示连接到两个电容式触摸传感器输入的读取
模拟输入引脚A0和A1。请注意,使用标准感测
方法您需要三个引脚进行两种电阻和两个电阻
可能有两个电容器。
你需要的只是电线和铜板(我使用了压电盘
仅使用连接到铜板的电线)。你所做的就是
在Arduino Uno上的A0和A1引脚中的这些连接。
当线连接到A1时,铜盘连接到A0。您可以看到草图下面的输出结果。
#include <ADCTouch.h>
在 t ref0, ref1; //reference values to remove offset
void setup()
{
// No pins to setup, pins can still be used regularly, although it will affect readings
Serial.begin(9600);
ref0 = ADCTouch.read(A0, 500); //create reference values to
ref1 = ADCTouch.read(A1, 500); //account for the capacitance of the pad
}
void loop()
{
在 t value0 = ADCTouch.read(A0); //no second parameter
在 t value1 = ADCTouch.read(A1); // --> 100 samples
value0 -= ref0; //remove offset
value1 -= ref1;
Serial.print(value0 > 40); //send (boolean) pressed or not pressed
Serial.print("\t"); //use if(value > threshold) to get the state of a button
Serial.print(value1 > 40);
Serial.print("\t\t");
Serial.print(value0); //send actual readingc
Serial.print("\t");
Serial.println(value1);
delay(100);
}
ADCTouchClass ADCTouch;
0 0 1 2
0 0 1 1
0 0 0 2
0 0 1 0
0 0 1 0
0 0 1 1
0 0 1 3
0 0 0 1
0 0 1 0
0 0 1 1
0 0 0 2
0 0 2 1
0 0 5 1
1 0 293 8
1 0 338 8
1 0 382 2
1 0 355 3
0 0 1 0
0 0 1 0
0 0 1 2
0 0 0 2
0 0 1 4
0 0 1 6
0 0 0 10
0 0 1 15
0 1 2 70
0 1 1 78
0 1 2 77
0 1 2 79
0 1 2 84
0 1 2 70
0 0 1 5
0 0 1 2
0 0 1 0
左边的结果
如果感测到手指,则显示1。在右侧是原始ADC值。
由于铜盘附着到A0,因此电容值是
在结果中显示出更高。
使用ADS1115精度16位ADC进行教程进行低功耗。
arduino. 模拟输出:如何创建最精确的PWM模拟输出以及如何创建模拟PWM正弦波。
了解DigitalWrite()的工作原理......现在使用17倍宏宏!
如何使用TCS230(/ TCS3200)彩色检测器芯片并轻松将其添加到您的任何项目中。
使用ADXL345 Acellerometer,您可以检测到16G!您还可以了解如何使用它来点击检测等。
HMC5883L - 如何制作数字罗盘,了解HMC5883L和QMC5883L之间的差异以及它们是否兼容。
新的! Comments
让你说到你刚刚阅读的东西!留下下面的框中的评论。