ESP32でタッチセンサーを使ってLチカする(スイッチとしての使用)

ESP32でタッチセンサを使ってLチカする(スイッチとしての使用)

こんにちは。wak-tech Advent Calender 19日目です。
今回は「ESP32でタッチセンサを使ってみた」で紹介したタッチセンサを使って、LEDをオンオフさせてみました。

動いている様子

実行環境

ソフトウェア関連

  • windows10 home
  • Arduino 1.8.5
  • ESP32 core for arduino 1.0.0

使用部品

回路

  • GPIO25に抵抗とLEDを接続
  • GPIO14に導体を接続(ここでは下の方にある抵抗がそれ)

たったこれだけのシンプルな回路です。
実際の写真がこちら

ソースコード(コピペで動きます)

double default_value = 0;
double value_ratio = 0;

void setup()
{
  Serial.begin(115200);
  delay(1000);
  Serial.println("ESP32 Touch Test");
  default_value = touchRead(T6); //最初の値を記録
  pinMode(25,OUTPUT);
}

void loop()
{
  value_ratio = touchRead(T6)/default_value;
  if(value_ratio < 0.7){
    digitalWrite(25,HIGH);
  }else{
    digitalWrite(25,LOW);
  }
  delay(50);
}

解説

setup()

まずGPIO14にはTOUCH6という機能が割り当てられています。

これを使うには

value = touchRead(T6);

とします。例えばGPIO13にはTOUCH4が割り当てられているので

value_4 = touchRead(T4);

とすればその値をvalue_4に入れることができます。簡単ですね。

起動したての時にはセンサーには何も触れてないと仮定して、その時の値をデフォルト値として記憶します。

default_value = touchRead(T6);

また、LEDが接続されているピンのGPIO25を出力に設定するのも忘れずに。

pinMode(25,OUTPUT);

loop()

「ESP32でタッチセンサを使ってみた」で紹介したvalue_ratioを使ってタッチされたかどうかの判定をしています。判定部分はここです。

value_ratio = touchRead(T6)/default_value;
  if(value_ratio < 0.7){
    digitalWrite(25,HIGH);
  }else{
    digitalWrite(25,LOW);
  }

前述の記事では、センサーに触れるとvalue_ratioが0.5程になることが分かりました。これにある程度のマージンをとって0.7以下かどうかを基準にLEDをオンオフさせています。

あんまり早くてもと思ったので、一応

delay(50);

として50msごとにセンサーの値を取得していますが、なくても動くと思います。

最後に

twitterアカウントの方で最新記事のお知らせや記事にならないような小さな情報を小出ししています。もしよろしければフォローお願いいたしますm(__)m

ご覧いただきありがとうございました!

2件のコメント

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です