37 個のセンサーとモジュールについての言及はインターネット上で広く広まっていますが、実際には、Arduino と互換性のあるセンサー モジュールは 37 個以上あるはずです。真の知識(実践的でなければならない)の概念に従って、学習とコミュニケーションの目的でいくつかのセンサーとアクチュエーターモジュールを手元に蓄積しているという事実を考慮して、ここではさらに試してみるつもりです成功しても失敗しても、それは記録されます ——小さな進歩や解決できない問題、レンガを投げてヒスイを輝かせることができれば幸いです。
【Arduino】168種類のセンサーモジュールシリーズ実験(データコード+シミュレーションプログラミング+グラフィックプログラミング)
実験13:TTP223タッチボタンモジュールセルフロックジョギング静電容量スイッチシングルチャンネル変換SUNLEPHANT
TTP223B 静電容量式タッチボタンモジュールに関するいくつかの実験
1. 実験環境
1. 実験に必要なハードウェアリスト —
Arduino Uno 開発ボード X1
DuPont ライン (10 個用意)
LED 発光ダイオード (青) X1
220 Ω 電流制限抵抗(1 /8W) x1
ローレベルトリガーシングルチャンネル 5V リレーモジュール X1
TTP223B 静電容量式タッチキーモジュール (4 種類) X4
Proto Shield プロトタイプ拡張ボード (ミニブレッドボード付き) X1
キースイッチモジュール (プルダウン抵抗とプルアップ)抵抗器各1)×2
5. 実験 7: 静電容量式タッチ ボタンを押してリレーを引き込み (LED がオン)、押して解放します (LED がオフ) 1.
実験 7 は、オープン ソース コード (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. 実験8 オープンソースシミュレーションプログラミング(Linkboy V4.2)
4. 実験 9: オープンソース グラフィックス プログラミング (Mind+、編集しながら学習)
6. 実験 10: シリアル ポート モニターを介して静電容量式タッチ キーの状態を検出する
1. 実験 10 は、オープン ソース コード (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. 実験10のシリアルポートフィードバック
7. 実験 11: Arduino CapacitiveSensor 静電容量式タッチ センサー (ソフトウェア実装)
1. 必要な CapacitiveSensor ライブラリをインストールします
(1) IDE を開き、プルダウンしてクリックして管理ライブラリを開きます
(2) 検索バーで CapacitiveSensor を検索します
(3) 取り付けはこんな感じ
2. 実験 11 参照オープンソース コード (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 ライブラリを通じて、大きな抵抗、ワイヤ、2 つのポートが使用され、他のコンポーネントを必要としない静電容量式タッチ トリガー方式が使用されます。この方法の考え方は、まずデジタルポートを低電位に設定し、Arduino の内部プルアップ抵抗をオンにして、このポートが高電位に達するまでに必要な時間を計算し始めることです。この時間は、このポートのグランドに対する静電容量値に関係しており、静電容量が大きいほど時間が長くなります。ハードウェアでは、1 つのポートに接続する必要があるワイヤは 1 つだけです。このワイヤの裸端を指で触れると静電容量が変化し、これを上記の方法で Arduino が検出できます。感度を上げたい場合は、ワイヤーに錫箔を接続できます。手の強い静電気によってチップが破壊されるのを防ぐために、錫箔を絶縁紙の薄い層で覆うことができます。
6. CapacitiveSensor ライブラリには 3 つの主要なメソッドといくつかのユーティリティ メソッドが含まれています—
(1) CapacitiveSensor CapacitiveSensor(byte sendPin, byte acceptPin)
CapacitiveSensor はライブラリのインスタンスを作成します (以下のメソッドとは異なる大文字に注意してください)。
(2) long capacitiveSensorRaw(byte tables)
CapacitySensorRaw はパラメータ サンプルを必要とし、任意の単位で絶対静電容量を含む長整数を返します。サンプル パラメーターを使用すると、パフォーマンスを犠牲にして、返される解像度を上げることができます。返された値はサンプル サイズ全体で平均化されず、合計値が報告されます。容量値がミリ秒単位の CS_Timeout_Millis の値を超える場合、CapacitySensorRaw は -2 を返します。CS_Timeout_Millis のデフォルト値は 2000 ミリ秒 (2 秒) です。
(3) long capacitiveSensor(byte tables)
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 replace_CS_AutoCal()
replace_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. 実験シーン図