Suchcode

RoboJax Touch Zähler V2 mit LCD1602-I2C Display

RoboJax Touch Zähler V2 mit LCD1602-I2C Display

Einführung

Dieser Leitfaden zeigt Ihnen, wie Sie einen einfachen, aber hochfunktionalen Touch-Zähler mit einem Arduino Uno, einem TTP223B kapazitiven Touch-Sensor und einem I2C-fähigen LCD1602-Display bauen können. Dieses Projekt, bekannt als Robojax Touch Counter V2, ist ein perfekter Ausgangspunkt für alle, die intuitive, berührungsbasierte Eingaben in ihre Elektronikprojekte integrieren möchten. Anstelle eines mechanischen Knopfs erhöht eine einfache Berührung auf dem Pad des Sensors einen Zähler, dessen aktuelle Zahl deutlich auf dem LCD-Bildschirm angezeigt wird. Ein separater Druckknopf ermöglicht es Ihnen, den Zähler jederzeit auf null zurückzusetzen.

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

Dieses Projekt ist nicht nur eine Lernübung; es hat eine Vielzahl von praktischen Anwendungen. Hier sind einige Ideen, um Sie zu inspirieren:

  • Personenzähler:Einen einfachen Gerät herstellen, um die Anzahl der Personen zu zählen, die einen Raum oder einen bestimmten Bereich betreten.
  • Produktionslinienzähler:Verwenden Sie es, um Artikel zu zählen, während sie einen Punkt auf einem kleinen Förderband oder in einem Montageprozess passieren.
  • Teilnehmerverzeichnis:Bauen Sie ein einfaches System, um die Anwesenheit in einer Klasse oder Veranstaltung zu verfolgen.
  • Interaktive Kunstinstallation:Verwenden Sie es als Komponente in einem Kunstwerk, das auf die Anzahl der Berührungen reagiert.
  • Bildungswerkzeug:Lehren Sie die Grundlagen von Sensoren, Interrupts und Anzeige-Schnittstellen auf eine unterhaltsame, praktische Weise.

Am Ende dieses Leitfadens werden Sie über einen voll funktionsfähigen Touch-Zähler und ein solides Verständnis verfügen, wie Sie Touch-Sensoren, I2C-Displays und Benutzereingaben in Ihre eigenen Arduino-Projekte integrieren.

Hardware Komponenten

Um dieses Projekt zu bauen, benötigen Sie die folgenden Komponenten:

  • Arduino Uno (oder kompatibles Board)
  • TTP223B oder TTP223 kapazitiver Touch-Sensor-Modul (rote oder blaue Variante)
  • LCD1602-Display mit I2C-Schnittstellenmodul
  • Tastendruck (zum Zurücksetzen)
  • Jumperdrähte
  • Brotbrett

Verdrahtungsanleitung

Die Verkabelung für dieses Projekt ist unkompliziert, aber es ist wichtig zu beachten, dass die Pinbelegung der roten und blauen Touchmodule unterschiedlich ist. Hier ist eine Übersicht, wie alles verbunden wird.

Zuerst verbinden wir den Touchsensor. Für dieblaues Modul, die Pinbelegung ist Signal, VCC und Masse. Verbinden Sie den Sign_Pin mit dem Arduino-Pin 2, VCC mit 5V und Masse mit GND. Für dierotes Modul, die Pinreihenfolge ist Ground, Signal und VCC (im Video bei 02:57). Verbinden Sie den Ground-Pin mit GND, den Signal-Pin (Mitte) mit Arduino-Pin 2 und den VCC-Pin mit 5V (im Video bei 03:01).

Als nächstes verbinden Sie das LCD-Display. Die I2C-Schnittstelle verwendet nur vier Drähte. Verbinden Sie den GND-Pin des Displays mit dem GND des Arduino, den VCC-Pin mit 5V, den SDA-Pin mit dem analogen Pin A4 des Arduino und den SCL-Pin mit dem analogen Pin A5 des Arduino (im Video bei 03:55). Dies sind die richtigen Pins für das Arduino Uno. Wenn Sie ein anderes Board wie ein Arduino Mega verwenden, befinden sich die SDA- und SCL-Pins an 20 bzw. 21 (im Video bei 04:18).

Verbinden Sie schließlich den Reset-Druckknopf. Platzieren Sie den Knopf auf dem Breadboard und verbinden Sie einen seiner Pins mit Arduino GND und den anderen mit dem Arduino-Pin 12 (im Video bei 03:33). Die Reihenfolge dieser Drähte ist nicht wichtig.

Dieses Projekt benötigt keine Widerstände für den Touchsensor oder den Knopf, da der Code den internen Pull-Up-Widerstand des Arduino für den Knopf verwendet.

Code-Erklärung

Der Code für dieses Projekt ist so gestaltet, dass er einfach zu verstehen und zu modifizieren ist. Die wichtigsten benutzerkonfigurierbaren Teile befinden sich oben im Sketch.

Hier ist der Abschnitt des Codes, den Sie höchstwahrscheinlich anpassen möchten:

// 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

Lass uns erläutern, was jede dieser Einstellungen bewirkt:

  • LCD-Adresse:Daslcd(0x27, 16, 2)Zeile richtet die Anzeige ein. Die0x27ist die I2C-Adresse Ihres spezifischen LCD-Moduls. Die meisten Module verwenden diese Adresse, aber wenn Ihr Display nicht funktioniert, könnte es sein0x3FSie können diesen Wert ändern, um ihn an Ihr Display anzupassen.
  • touchPin:Dieser Constant definiert den Arduino-Pin, an den der Signalkabel Ihres Berührungssensors angeschlossen ist. Sie können dies ändern, wenn Sie einen anderen Pin verwenden möchten.
  • resetPin:Diese Konstante definiert den Arduino-Pin für Ihren Reset-Button. Standardmäßig ist er auf Pin 12 eingestellt.
  • touchDelay:Dies ist eine entscheidende Einstellung. Sie steuert die minimale Zeit in Millisekunden zwischen zwei registrierten Berührungen (im Video bei 05:13). Ein Wert von 500 ms verhindert versehentliche Mehrfachzählungen durch einen einzigen Touch oder durch sehr schnelle Taps. Wenn Sie möchten, dass der Zähler reaktionsschneller ist, können Sie diesen Wert auf etwa 100 ms reduzieren (im Video bei 10:31).

DercountDie Variable ist ein Integer, der den aktuellen Zählerstand speichert. Sie wird auf null initialisiert und bei jeder Berührung des Sensors erhöht. Der Code selbst kümmert sich um die Logik des Lesens des Sensors, das Aktualisieren des Displays und das Überprüfen des Rücksetzknopfs, daher müssen Sie sich darüber keine Gedanken machen. Passen Sie einfach die oberen Konstanten an, um Ihre spezifische Konfiguration und das gewünschte Verhalten zu berücksichtigen.

Live-Projektdemonstration

Sobald Sie alles verkabelt haben und den Code auf Ihren Arduino hochgeladen haben, funktioniert das Projekt wie folgt:

Wenn Sie das Gerät einschalten, zeigt das LCD für einige Sekunden "Robojax Touch" und "Counter V2" an, bevor es mit dem Zählen beginnt. Jedes Mal, wenn Sie das Sensorfeld berühren, erhöht sich der Zähler um eins, und der neue Wert wird in der untersten Zeile des LCD neben dem Wort "Touched:" angezeigt (im Video bei 07:51). Dieselben Informationen werden auch im Serial Monitor der Arduino IDE zum Debuggen oder Protokollieren ausgegeben.

Um den Zähler zurückzusetzen, drücken Sie einfach die Taste. Das LCD wird gelöscht und zeigt "Zurückgesetzt" an, und der Zähler wird auf Null zurückgesetzt (im Video bei 08:49). Das Gerät ist jetzt bereit, wieder zu zählen. Diese einfache und klare Rückkopplungsschleife macht es einfach, das Projekt in Echtzeit arbeiten zu sehen.

Kapitel

  • [00:00] Einführung und Projektübersicht
  • [00:44] Komponenten und wie sie funktionieren
  • [02:30] Verdrahtungsanleitung für den Touch-Sensor und den Knopf
  • [03:41] Verdrahtungsleitfaden für das LCD-Display
  • [04:26] Code-Erklärung und -Einrichtung
  • [06:47] Verständnis der Hauptschleife und der Touch-Logik
  • [09:25] Live-Demonstration und Testen
  • [11:08] Fazit und zukünftige Projektideen

Bilder

Robojax Touch Counter V2 (LCD1602-I2C)
Robojax Touch Counter 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)
Sprache: 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
}

Dinge, die Sie vielleicht brauchen

Dateien📁

Fritzing-Datei

Andere Dateien