Arduinoと抵抗で作る自作タッチセンサ

抵抗で作る!Arduinoのタッチセンサーの作り方

この記事では、Arduinoと抵抗1本を使ったタッチセンサーの作り方を解説していく。今回紹介するタッチセンサーは静電容量方式となる。

静電容量式タッチセンサーの原理

抵抗に触れるとLチカする配線図
抵抗に触れるとLチカする配線図

A8とA9は1MΩの抵抗で繋がっている。A9からはワイヤーを伸ばし、その電極をタッチセンサーにする。

プログラムの手順としては次の通り。

  1. A8を出力モード、A9を入力モードに設定する。
  2. A8をHIGHにし、A9ではその信号を監視をする。

タッチセンサーに触れていない時では、A8がHIGHになった瞬間にA9もHIGHとなる。

タッチセンサーによる波形の変化
タッチセンサーによる波形の変化

しかしタッチセンサーに触れた場合では状況が変わる。

電極部分を指で触れると人の体がコンデンサの役割となって、ローパスフィルタの回路になる。するとデジタルピン出力をHIGHにした時の電圧の立ち上がりが少しだけ遅くなる。

Arduinoのデジタルピンでは約3V以上の電圧にならないとHIGHとは認識されない。つまり、A8とA9の遅延時間を監視すればタッチされたかどうかを判定できるのだ。

人の体がキャパシタの役割をする
人の体がキャパシタの役割をする

タッチセンサーでLチカをやってみよう!

先ほどの配線をブレッドボードに組んで、実際に指で触れてLEDを点滅させてみよう。

開発環境

項目バージョン
ArduinoデバイスLeonardo Pro Micro
Arduino IDE1.8.10
パソコンmacOS Big Sur 11.0.1

自作タッチセンサーでLチカプログラム

自作タッチセンサーでLチカチカ
自作タッチセンサーでLチカチカ

タッチセンサーに触れた瞬間、LEDが点灯するプログラムがこちら。

/*
  Created by Toshihiko Arai.
  https://101010.fun/iot/arduino-diy-touch-sensor.html
*/

const int SENSOR_1_OUT = 8;
const int SENSOR_1_IN = 9;
const int LED_PIN = 10;
const int threshold = 5;

void setup() {
  pinMode(SENSOR_1_OUT, OUTPUT);
  pinMode(SENSOR_1_IN, INPUT);
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  int counter = 0;
  digitalWrite(SENSOR_1_OUT, HIGH);
  while (digitalRead(SENSOR_1_IN)!=HIGH) counter++;
  digitalWrite(SENSOR_1_OUT, LOW);  
  delay(1);

  if (counter > threshold) {
    digitalWrite(LED_PIN, HIGH);
  } else {
    digitalWrite(LED_PIN, LOW);
  }
}

複数のタッチセンサーの実現

今度は複数のタッチセンサーを実現してみよう。

複数のタッチセンサーの製作

タッチセンサーの製作
タッチセンサーの製作

複数のタッチセンサーを作るため、銅基板をカットしてルーターやヤスリで削ってボタンの仕切りを作った。また、ブレッドボードに挿して使いたいのでピン端子を取り付けた。そして最後に、銅の腐食を防止するためラッカースプレーで塗装した。塗装してもまったく問題なくセンサーとして反応する。

タッチセンサーの完成
タッチセンサーの完成

複数のタッチセンサーに反応するプログラム

それでは、自作したタッチセンサーを使ってみよう。先ほどのLチカのプログラムを改良して複数のタッチに反応できるようにした。

下のプログラムではKeyboardライブラリを使ってArduinoをHIDとして認識させている。タッチセンサーに触れるとMacへショートカットキーが送信され、デスクトップが切り替わるようになっている。

/*
  Created by Toshihiko Arai.
  https://101010.fun/iot/arduino-diy-touch-sensor.html
*/

#include "Keyboard.h"

const int btnCount = 6;
const int btnPairs[btnCount][2] = {{1, 0}, {2, 3}, {4, 5}, {6, 7}, {8, 9}, {10, 16}};
const int threshold = 5;
const char numberKeys[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};

void setup() {
  Serial.begin(9600);
  Keyboard.begin();
  for (int i = 0; i < btnCount; i++) {
    pinMode(btnPairs[i][0], OUTPUT);
    pinMode(btnPairs[i][1], INPUT);
    Serial.println(btnPairs[i][0]);
  }
}

int checkTimeLag(int a, int b) {
  int counter = 0;
  digitalWrite(a, HIGH);
  while (digitalRead(b)!=HIGH) counter++;
  digitalWrite(a, LOW);
  delay(1);
  return counter;
}

int sendKeyboard(int number) {
  Serial.println(number);
  Keyboard.press(KEY_LEFT_CTRL);
  Keyboard.press(numberKeys[number]);
  delay(100);
  Keyboard.releaseAll();
}


void loop() {
  for (int i = 0; i < btnCount; i++) {
    int counter = checkTimeLag(btnPairs[i][0], btnPairs[i][1]);
    if (counter > threshold) {
      sendKeyboard(i);
    }
  }
}

しかし、これを実際に使ってみて次の2点が気になった。

  1. 動作が不安定で反応しないことがたまにある。
  2. 1つのタッチセンサーで2つのデジタルピンを使用するため、あまり多くのタッチセンサーをつけられない。

今回はここまでで良しとし、これらは今後の課題とする。

製品版のタッチセンサーを使った記事も参考に

KKHMF TTP229 4x4 キーボード デジタル タッチ センサー 静電容量式 タッチ スイッチ モジュール Arduino用
KKHMF TTP229 4x4 キーボード デジタル タッチ センサー 静電容量式 タッチ スイッチ モジュール Arduino用

4x4 TTP229 デジタルタッチセンサースイッチモジュール サイズ:49.3x64.5mm 動作電圧:2.4V-5.5V オンボード 電源インジケータ 16キーボードのTTP229静電容量式タッチセンサIC

Amazon
KKHMF 10個 TTP223 静電容量式 タッチ スイッチ ボタン セルフロック モジュール 「国内配送」
KKHMF 10個 TTP223 静電容量式 タッチ スイッチ ボタン セルフロック モジュール 「国内配送」

ジャンパピンによりモーメンタリ・オルタネイトの動作に設定できる。

Amazon

今回使用した関連製品はこちら

KKHMF Leonardo Pro Micro ATmega32U4 5V/16MHz ブートローダ マイクロ USB Pro Mini 開発ボード Arduinoに対応
KKHMF Leonardo Pro Micro ATmega32U4 5V/16MHz ブートローダ マイクロ USB Pro Mini 開発ボード Arduinoに対応

16MHzの水晶付き 電源ジャンパは、外部5Vを接続します。 彼のUSBポートは、他のデバイスを接続するためのUSBケーブル(ホスト)を接続することも、単一の行ピンストリップで利用可能です。 モジュールサイズ:3.4cm x 1.8cm/1.33"X0.7" ArduinoのIDE v1.0.5デベロッパーの下でサポートされています。

Amazon
Arduino Micro
Arduino Micro

ATmega32u4搭載 / SRAM:2.5KB / EEPROM:1KB / Clock Speed:16MHz 動作電圧:5V デジタル入出力ピン:20本 / PWMチャンネル:7本 / アナログ入力チャンネル:12本 直流電流(1ピン当り最大):40mA / 直流電流(3.3Vピン、1ピン当り最大):50 mA Flashメモリ:32KB (ATmega32u4) 内4KBはブートローダーで使用

Amazon

こんな商品も人気です!

1.54インチ 電子ペーパーモジュール 200x200ラズベリーパイ エンベデッドコントローラ付き E-Inkディスプレイ画面
1.54インチ 電子ペーパーモジュール 200x200ラズベリーパイ エンベデッドコントローラ付き E-Inkディスプレイ画面

バックライトがなく、電源を切っても最後のコンテンツが長時間表示される。 超低消費電力、基本的に電力はリフレッシュにのみ必要です。 SPIインターフェイス、Raspberry Pi / Arduino / Nucleoなどのコントローラーボードとの接続用。

AmazonRakuten
M5Stack 開発ボード M5Stack Core2 開発キットデュアルコア32ビット240Mhz LX6プロセッサーUIFlow, MicroPython, A r d u i n o用
M5Stack 開発ボード M5Stack Core2 開発キットデュアルコア32ビット240Mhz LX6プロセッサーUIFlow, MicroPython, A r d u i n o用

Amazon
ELEGOO Arduino用 Nanoボード V3.0 CH340/ATmega328P、Nano V3.0互換
ELEGOO Arduino用 Nanoボード V3.0 CH340/ATmega328P、Nano V3.0互換

NanoはArduinoと互換性があり、ATmega328PやCH340と同じの公式バージョンで使用しています。 これは、最小で、完全で、ブレッドボードに優しいボードです。より多くのアナログ入力ピンとオンボード+ 5V AREFジャンパを備えた(電気的に)すべてが備わっています。

Amazon
ELEGOO Arduino用の 2.8 Inches TFT ターチスクリーン カードソケット付
ELEGOO Arduino用の 2.8 Inches TFT ターチスクリーン カードソケット付

無料チュートリアル(CDに収録)、より良い価格、より良いサービス。 (技術データ付き) 2.8インチ多彩なディスプレイ液晶画面 タッチペンも付き

AmazonRakuten

Arduinoの参考書

ESP32&Arduino 電子工作 プログラミング入門
ESP32&Arduino 電子工作 プログラミング入門

電子工作ファンに人気のマイコンArduino、そしてWiFiとBluetooth内蔵でネットワーク接続しやすいESP32。それらのマイコンでプログラムを組む際に使うのが「Arduino言語」です。「電子工作は好きだけどプログラミングはよくわからない」あるいは「プログラミングの経験がある。それを活かして電子工作を楽しみたい」--そんなみなさまのための電子工作プログラミング入門が本書です。

KindleAmazonRakuten
電子部品ごとの制御を学べる! Arduino 電子工作実践講座 改訂第2版
電子部品ごとの制御を学べる! Arduino 電子工作実践講座 改訂第2版

電子パーツを自由自在に組み合わせて電子工作ができるように、Arduinoによる電子部品ごとの制御方法を詳しく解説。初心者や電子工作に躓いた人でも安心して取り組めるよう、豊富な図・写真で徹底解説。2018年発刊の「Arduino 電子工作 実践講座」の改訂版です。

KindleAmazonRakuten
Arduinoをはじめよう 第3版 (Make:PROJECTS)
Arduinoをはじめよう 第3版 (Make:PROJECTS)

本書では、開発者自らが、Arduinoの哲学、ハードウェア、ソフトウェアの基礎を解説、誰にでもできる簡単なチュートリアルを行います。

AmazonRakuten

Amazonでお得に購入するなら、Amazonギフト券がオススメ!

\Amazonギフトがお得/

コンビニ・ATM・ネットバンキングで¥5,000以上チャージすると、プライム会員は最大2.5%ポイント、通常会員は最大2%ポイントがもらえます!
Amazonギフト券

\この記事をシェアする/