検索コード

RoboJaxタッチカウンターV2 LCD1602-I2Cディスプレイ使用

RoboJaxタッチカウンターV2 LCD1602-I2Cディスプレイ使用

はじめに

このガイドでは、Arduino Uno、TTP223B静電容量式タッチセンサー、およびI2C対応のLCD1602ディスプレイを使用して、シンプルでありながら非常に機能的なタッチカウンターを構築する方法を示します。このプロジェクトはRobojax Touch Counter V2として知られ、電子プロジェクトに直感的なタッチベースの入力を追加したいと考えている人にとっての理想的な出発点です。機械的ボタンの代わりに、センサーのパッドに簡単に触れることでカウンターが増加し、現在のカウントがLCD画面に明確に表示されます。別のプッシュボタンを使用すれば、いつでもカウントをゼロにリセットすることができます。

LCD1602-I2C display module with 4 wires
TTP223 Touch module - Top view

このプロジェクトは単なる学習エクササイズではなく、幅広い実用的な応用があります。あなたを刺激するいくつかのアイデアを以下に示します:

  • 人数カウンター:部屋や特定のエリアに入る人の数をカウントするための簡単なデバイスを作成してください。
  • 生産ラインカウンター:小さなコンベヤーベルトや組立工程のポイントを通過するアイテムをカウントするために使用します。
  • 出席トラッカー:クラスやイベントの出席を追跡するためのシンプルなシステムを構築します。
  • インタラクティブアートインスタレーション:触れられる回数に反応するアート作品の一部として使用してください。
  • 教育ツール:センサー、割り込み、表示インターフェースの基本を楽しく、実践的に教えます。

このガイドの終わりまでに、あなたは完全に機能するタッチカウンターを持ち、タッチセンサー、I2Cディスプレイ、ユーザー入力をあなた自身のArduinoプロジェクトに統合する方法をしっかり理解できるようになります。

ハードウェアコンポーネント

このプロジェクトを構築するには、以下のコンポーネントが必要です:

  • Arduino Uno(または互換性のあるボード)
  • TTP223BまたはTTP223静電容量式タッチセンサーモジュール(赤または青のバリアント)
  • I2Cインターフェースモジュール付きLCD1602ディスプレイ
  • リセット用ボタン
  • ジャンパーワイヤー
  • ブレッドボード

配線ガイド

このプロジェクトの配線は簡単ですが、赤と青のタッチモジュールのピンの順序が異なることに注意することが重要です。ここでは、すべてを接続する方法の内訳を示します。

まず、タッチセンサーを接続しましょう。次に、青いモジュールピンの順序は、信号、VCC、およびグラウンドです。信号ピンをArduinoのピン2に接続し、VCCを5Vに、グラウンドをGNDに接続します。次に、赤いモジュールピンの順序はグラウンド、信号、VCCです(ビデオの02:57で)。グラウンドピンをGNDに、信号(中央)ピンをArduinoのピン2に、VCCピンを5Vに接続します(ビデオの03:01で)。

次に、LCDディスプレイを接続します。I2Cインターフェースは4本のワイヤーだけを使用します。ディスプレイのGNDピンをArduinoのGNDに接続し、VCCピンを5Vに、SDAピンをArduinoのアナログピンA4に、SCLピンをArduinoのアナログピンA5に接続します(ビデオ03:55)。これらはArduino Unoの正しいピンです。Arduino Megaのような別のボードを使用している場合、SDAおよびSCLピンはそれぞれ20および21にあります(ビデオ04:18)。

最後に、リセットボタンを接続します。ボタンをブレッドボードに置き、1つのピンをArduinoのGNDに接続し、もう1つをArduinoのピン12に接続します(動画の03:33にて)。これらの配線の順序は関係ありません。

このプロジェクトでは、タッチセンサーやボタンに抵抗器は必要ありません。コードはボタンのためにArduinoの内部プルアップ抵抗を使用します。

コードの解説

このプロジェクトのコードは、理解しやすく、修正しやすいように設計されています。ユーザーが設定可能な主要部分は、スケッチの上部にあります。

ここが最もカスタマイズしたいと思うコードのセクションです:

// start of settings for LCD1602 with I2C
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
// end of settings for LCD1602 with I2C

const int touchPin = 2;// the input pin where touch sensor is connected
const int resetPin = 12;// the input pin for reset button
const int touchDelay = 500;//millisecond delay between each touch

int count=0;// variable holding the count number

これらの設定それぞれが何をするのか分解してみましょう:

  • LCDアドレス:そのlcd(0x27, 16, 2)行は表示を設定します。0x27これは特定のLCDモジュールのI2Cアドレスです。ほとんどのモジュールはこのアドレスを使用しますが、ディスプレイが機能しない場合は、別のアドレスの可能性があります。0x3Fこの値を変更して、表示に合わせることができます。
  • タッチピン:この定数は、タッチセンサーの信号線が接続されているArduinoピンを定義します。別のピンを使用したい場合は、これを変更できます。
  • リセットPIN:この定数は、リセットボタンのためのArduinoピンを定義します。デフォルトではピン12に設定されています。
  • タッチ遅延:これは重要な設定です。これにより、2つの登録されたタッチ間の最小時間をミリ秒で制御します(ビデオで05:13)。500msの値は、単一のタッチや非常に速いタップからの偶発的な複数カウントを防ぎます。カウンターをより反応良くしたい場合は、この値を100msのようなものに減らすことができます(ビデオで10:31)。

count変数は現在のカウント値を保持する整数です。初期値はゼロで、センサーがタッチされるたびにインクリメントされます。コード自体はセンサーの読み取り、ディスプレイの更新、リセットボタンのチェックのロジックを処理するので、その点を心配する必要はありません。単に、上記の定数を特定のセットアップと望ましい動作に合わせて調整してください。

ライブプロジェクトデモンストレーション

すべて接続され、コードがArduinoにアップロードされると、プロジェクトは次のように動作します:

デバイスの電源を入れると、LCDに「Robojax Touch」と「Counter V2」が数秒間表示された後、カウントが開始されます。センサーパッドに触れるたびにカウンターは1増加し、新しいカウントはLCDの下の行に「Touched:」という単語の横に表示されます(動画は07:51)。同じ情報はデバッグやロギングの目的でArduino IDEのシリアルモニタにも印刷されます。

カウンターをリセットするには、プッシュボタンを押すだけです。LCDがクリアされ、「リセットされた」と表示され、カウントはゼロに戻ります(ビデオの08:49で)。デバイスは再びカウントする準備が整いました。このシンプルで明確なフィードバックループにより、プロジェクトがリアルタイムで動作している様子を簡単に確認できます。

  • [00:00] イントロダクションとプロジェクトの概要
  • [00:44] コンポーネントとその動作
  • タッチセンサーとボタンの配線ガイド[02:30]
  • [03:41] LCDディスプレイの配線ガイド
  • [04:26] コードの説明とセットアップ
  • [06:47] メインループとタッチロジックの理解
  • [09:25] ライブデモンストレーションとテスト
  • [11:08] 結論と今後のプロジェクトアイデア

画像

ロボジャックス タッチカウンター V2 (LCD1602-I2C)
ロボジャックス タッチカウンター V2 (LCD1602-I2C)
TTP223 Touch module - Top view
TTP223 Touch module - Top view
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
166-Robojax Touch Counter V2 (LCD1602-I2C)
言語: C++
//*
 * This is Arduino touch counter V2 using TTP223/TTP223B and LCD1602-I2C
 * This program will function as a counter. Every time the touch module is touched,
 * the counter increments by 1. The count number is displayed on the LCD1602 display.
 * We have a reset button to restart the counting from zero.
 * 
 * Watch video instruction for this video: https://youtu.be/5A9jPD5nUCw
 * 
 * Written by Ahmad Shamshiri on Saturday, 27th of October at 16:28 in Ajax, Ontario, Canada
 * Get this code from Robojax.com
 * 
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

// start of settings for LCD1602 with I2C
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
// end of settings for LCD1602 with I2C

const int touchPin = 2;// the input pin where touch sensor is connected
const int resetPin = 12;// the input pin for reset button
const int touchDelay = 500;//millisecond delay between each touch

int count=0;// variable holding the count number

void setup() {
 // Robojax.com Touch counter 20181027
  // initialize the LCD
  lcd.begin();
  lcd.backlight();// turn the backlight ON for the LCD
      lcd.print("Robojax Touch");
      lcd.setCursor(0,1);
      lcd.print("Counter V2");      
  Serial.begin(9600);// initialize serial monitor with 9600 baud
  Serial.println("Robojax Touch Counter V2");  
  pinMode(touchPin,INPUT);// define a pin for touch module
  pinMode(resetPin,INPUT_PULLUP);// define a pin for reset button
  // see video ( link in the video description) on using PULLUP

  delay(3000);// give time to user to read the display at the beginning

  
  // Robojax.com Touch counter 20181027        
}

void loop() {
  // Robojax.com Touch counter 20181027

  int touchValue = digitalRead(touchPin);// read touchPin and store it in touchValue

  // if touchValue is HIGH
  if(touchValue == HIGH)
  {
      count++;// increment the count   
      
      lcd.clear();// clear previous values from screen      
      lcd.print("Robojax  TCV2");
      lcd.setCursor(0,1);
      lcd.print("Touched:"); 
      lcd.setCursor(9,1);
      lcd.print(count);  
   
      Serial.print("Touched ");//print the information
      Serial.print(count);//print count
      Serial.println(" times.");        
    delay(touchDelay);// touch delay time
  }


      
   // if reset switch is pushed
   if(digitalRead(resetPin) == LOW)
   {
    lcd.clear();// clear previous values from screen     
    count =0;// reset the counter;
      Serial.println("Counter Resetted.");//print the information
      lcd.setCursor(0,0);      
      lcd.print("Robojax  TCV2");
      lcd.setCursor(0,1);
      lcd.print("Resetted");    
    
   }

  // Robojax.com Touch counter 20181027
}

必要かもしれないもの

ファイル📁

フリッツィングファイル

他のファイル