Cerca codice

RoboJax Touch Counter V2 Utilizzando Display LCD1602-I2C

RoboJax Touch Counter V2 Utilizzando Display LCD1602-I2C

Introduzione

Questa guida ti mostrerà come costruire un contatore touch semplice ma altamente funzionale utilizzando un Arduino Uno, un sensore touch capacitivo TTP223B e un display LCD1602 abilitato I2C. Questo progetto, noto come Robojax Touch Counter V2, è un ottimo punto di partenza per chiunque voglia aggiungere input intuitivo basato sul tocco ai propri progetti elettronici. Invece di un pulsante meccanico, un semplice tocco sul pad del sensore incrementa un contatore, con il conteggio corrente visualizzato chiaramente sullo schermo LCD. Un pulsante separato consente di ripristinare il conteggio a zero in qualsiasi momento.

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

Questo progetto non è solo un esercizio di apprendimento; ha una vasta gamma di applicazioni pratiche. Ecco alcune idee per ispirarti:

  • Contatore di persone:Crea un dispositivo semplice per contare il numero di persone che entrano in una stanza o in un'area specifica.
  • Contatore della linea di produzione:Usalo per conteggiare gli oggetti mentre passano attraverso un punto su un piccolo nastro trasportatore o processo di assemblaggio.
  • Tracker per la Presenza:Crea un sistema semplice per tenere traccia della presenza a una lezione o a un evento.
  • Installazione d'Arte Interattiva:Utilizzalo come componente in un'opera d'arte che reagisce al numero di volte che viene toccata.
  • Strumento educativo:Insegna le basi dei sensori, degli interrupt e delle interfacce di visualizzazione in modo divertente e pratico.

Entro la fine di questa guida, avrai un contatore touch completamente funzionante e una solida comprensione di come integrare sensori touch, display I2C e input dell'utente nei tuoi progetti Arduino.

Componenti hardware

Per costruire questo progetto, avrai bisogno dei seguenti componenti:

  • Arduino Uno (o scheda compatibile)
  • Modulo di Sensore Tattile Capacitivo TTP223B o TTP223 (variante rossa o blu)
  • Modulo Display LCD1602 con interfaccia I2C
  • Pulsante (per reset)
  • Fili jumper
  • Piastra di circuito

Guida al cablaggio

Il cablaggio per questo progetto è semplice, ma è importante notare che l'ordine dei pin sui moduli touch rosso e blu è diverso. Ecco una panoramica su come collegare tutto.

Prima di tutto, connettiamo il sensore tattile. Per ilmodulo blu, l'ordine dei pin è Segnale, VCC e Terra. Collega il pin Segnale al pin 2 dell'Arduino, VCC a 5V e Terra a GND. Per ilmodulo rosso, l'ordine dei pin è Terra, Segnale e VCC (nel video al :57). Collega il pin di Terra a GND, il pin di Segnale (centrale) al pin 2 di Arduino e il pin VCC a 5V (nel video al :01).

Successivamente, collega il display LCD. L'interfaccia I2C utilizza solo quattro fili. Collega il pin GND del display a GND di Arduino, il pin VCC a 5V, il pin SDA al pin analogico A4 di Arduino e il pin SCL al pin analogico A5 di Arduino (nel video al 03:55). Questi sono i pin corretti per Arduino Uno. Se stai utilizzando una scheda diversa come un Arduino Mega, i pin SDA e SCL si trovano rispettivamente sui pin 20 e 21 (nel video al 04:18).

Infine, collega il pulsante di reset. Posiziona il pulsante sulla breadboard e collega uno dei suoi pin a GND di Arduino e l'altro al pin 12 di Arduino (nel video al 03:33). L'ordine di questi cavi non importa.

Questo progetto non richiede resistori per il sensore touch o il pulsante, poiché il codice utilizzerà il resistore di pull-up interno dell'Arduino per il pulsante.

Spiegazione del codice

Il codice per questo progetto è progettato per essere semplice da capire e modificare. Le parti chiave configurabili dall'utente si trovano nella parte superiore dello schizzo.

Ecco la sezione del codice che probabilmente vorrai personalizzare:

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

Analizziamo cosa fa ciascuna di queste impostazioni:

  • Indirizzo LCD:Illcd(0x27, 16, 2)la linea imposta la visualizzazione. Il0x27è l'indirizzo I2C del tuo specifico modulo LCD. La maggior parte dei moduli utilizza questo indirizzo, ma se il tuo display non funziona, potrebbe essere0x3F. Puoi cambiare questo valore per adattarlo al tuo schermo.
  • touchPin:Questa costante definisce il pin Arduino a cui è collegato il filo del segnale del tuo sensore tattili. Puoi cambiarlo se desideri utilizzare un pin diverso.
  • resetPin:Questa costante definisce il pin Arduino per il tuo pulsante di reset. È impostato sul pin 12 per impostazione predefinita.
  • touchDelay:Questa è un'impostazione cruciale. Controlla il tempo minimo in millisecondi tra due tocchi registrati (nel video a 05:13). Un valore di 500ms impedisce conteggi multipli accidentali da un singolo tocco o da tocchi molto rapidi. Se desideri che il contatore sia più reattivo, puoi ridurre questo valore a qualcosa come 100ms (nel video a 10:31).

Lacountla variabile è un intero che tiene il valore attuale del conteggio. È inizializzato a zero e viene incrementato ogni volta che il sensore viene toccato. Il codice stesso gestisce la logica di lettura del sensore, aggiornamento del display e verifica del pulsante di reset, quindi non è necessario preoccuparsene. Basta regolare le costanti sopra per adattarle alla tua configurazione specifica e al comportamento desiderato.

Dimostrazione di progetto dal vivo

Una volta che hai tutto collegato e il codice caricato sul tuo Arduino, il progetto funzionerà come segue:

Quando accendi il dispositivo, il LCD visualizzerà "Robojax Touch" e "Counter V2" per alcuni secondi prima di iniziare a contare. Ogni volta che tocchi il pannello sensore, il contatore aumenterà di uno e il nuovo conteggio verrà visualizzato sulla linea inferiore del LCD, accanto alla parola "Touched:" (nel video alle 07:51). Le stesse informazioni vengono stampate anche nel Monitor Seriale dell'IDE di Arduino per scopi di debug o registrazione.

Per ripristinare il contatore, basta premere il pulsante. Il display LCD si cancellerà e mostrerà "Ripristinato", e il conteggio tornerà a zero (nel video alle 08:49). Il dispositivo è ora pronto per contare di nuovo. Questo semplice e chiaro feedback rende facile vedere il progetto funzionare in tempo reale.

Capitoli

  • [00:00] Introduzione e panoramica del progetto
  • [00:44] Componenti e Come Funzionano
  • Guida al cablaggio per il sensore touch e il pulsante
  • Guida al cablaggio per il display LCD
  • [04:26] Spiegazione del codice e configurazione
  • [06:47] Comprendere il Main Loop e la Logica del Touch
  • [09:25] Dimostrazione e Test in Diretta
  • [11:08] Conclusione e Idee per Progetti Futuri

Immagini

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)
Lingua: 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
}

Cose di cui potresti avere bisogno

File📁

File Fritzing

Altri file