Código de búsqueda

RoboJax Contador Táctil V2 Usando Pantalla LCD1602-I2C

RoboJax Contador Táctil V2 Usando Pantalla LCD1602-I2C

Introducción

Esta guía te mostrará cómo construir un contador táctil simple pero altamente funcional utilizando un Arduino Uno, un sensor táctil capacitivo TTP223B y una pantalla LCD1602 con I2C. Este proyecto, conocido como el Contador Táctil Robojax V2, es un punto de partida perfecto para cualquier persona que busque agregar una entrada intuitiva basada en el tacto a sus proyectos electrónicos. En lugar de un botón mecánico, un simple toque en la almohadilla del sensor incrementa un contador, con el conteo actual mostrado claramente en la pantalla LCD. Un botón de pulsar separado te permite restablecer el conteo a cero en cualquier momento.

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

Este proyecto no es solo un ejercicio de aprendizaje; tiene una amplia gama de aplicaciones prácticas. Aquí hay algunas ideas para inspirarte:

  • Contador de personas:Crea un dispositivo simple para contar el número de personas que entran a una habitación o a un área específica.
  • Contador de Línea de Producción:Úselo para contar los artículos a medida que pasan por un punto en una pequeña cinta transportadora o proceso de ensamblaje.
  • Rastreador de Asistencia:Construya un sistema simple para rastrear la asistencia a una clase o evento.
  • Instalación de Arte Interactiva:Úsalo como un componente en una obra de arte que reacciona al número de veces que se toca.
  • Herramienta educativa:Enseñar los fundamentos de los sensores, interrupciones y interfaces de pantalla de manera divertida y práctica.

Al final de esta guía, tendrás un contador táctil completamente funcional y un sólido entendimiento de cómo integrar sensores táctiles, pantallas I2C y la entrada del usuario en tus propios proyectos de Arduino.

Componentes de Hardware

Para construir este proyecto, necesitarás los siguientes componentes:

  • Arduino Uno (o placa compatible)
  • Módulo de sensor táctil capacitivo TTP223B o TTP223 (variante roja o azul)
  • Módulo de interfaz I2C con pantalla LCD1602
  • Botón de Reinicio
  • Cables de conexión
  • Protoboard

Guía de cableado

El cableado para este proyecto es sencillo, pero es importante tener en cuenta que el orden de los pines en los módulos táctiles rojo y azul es diferente. Aquí hay un desglose de cómo conectar todo.

Primero, conectemos el sensor táctil. Para elmódulo azul, el orden de los pines es Señal, VCC y Tierra. Conecta el pin de Señal al pin 2 de Arduino, VCC a 5V y Tierra a GND. Para elmódulo rojo, el orden de los pines es Tierra, Señal y VCC (en el video en :57). Conecta el pin de Tierra a GND, el pin de Señal (medio) al pin 2 de Arduino y el pin de VCC a 5V (en el video en :01).

A continuación, conecta la pantalla LCD. La interfaz I2C utiliza solo cuatro cables. Conecta el pin GND de la pantalla al GND del Arduino, el pin VCC a 5V, el pin SDA al pin analógico A4 del Arduino, y el pin SCL al pin analógico A5 del Arduino (en el video a las 03:55). Estos son los pines correctos para el Arduino Uno. Si estás utilizando una placa diferente como un Arduino Mega, los pines SDA y SCL están en 20 y 21 respectivamente (en el video a las 04:18).

Finalmente, conecta el botón de reinicio. Coloca el botón en la placa de pruebas y conecta uno de sus pines a GND de Arduino y el otro al pin 12 de Arduino (en el video a las 03:33). El orden de estos cables no importa.

Este proyecto no requiere resistencias para el sensor táctil o el botón, ya que el código utilizará la resistencia de pull-up interna del Arduino para el botón.

Explicación del código

El código de este proyecto está diseñado para ser sencillo de entender y modificar. Las partes clave configurables por el usuario se encuentran en la parte superior del boceto.

Aquí está la sección del código que probablemente querrás personalizar:

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

Desglosemos lo que hace cada una de estas configuraciones:

  • Dirección LCD:Lalcd(0x27, 16, 2)la línea configura la pantalla. El0x27es la dirección I2C de tu módulo LCD específico. La mayoría de los módulos utilizan esta dirección, pero si tu pantalla no funciona, podría ser0x3FPuedes cambiar este valor para que coincida con tu pantalla.
  • touchPin:Esta constante define el pin de Arduino al que está conectado el cable de señal de su sensor táctil. Puede cambiar esto si desea usar un pin diferente.
  • resetPin:Esta constante define el pin de Arduino para tu botón de reinicio. Por defecto, está configurado en el pin 12.
  • touchDelay:Esta es una configuración crucial. Controla el tiempo mínimo en milisegundos entre dos toques registrados (en el video a las :13). Un valor de 500 ms previene conteos múltiples accidentales a partir de un solo toque o de toques muy rápidos. Si deseas que el contador sea más sensible, puedes reducir este valor a algo como 100 ms (en el video a las :31).

Elcountla variable es un entero que almacena el valor actual del conteo. Se inicializa en cero y se incrementa cada vez que se toca el sensor. El código en sí maneja la lógica de lectura del sensor, actualización de la pantalla y verificación del botón de reinicio, por lo que no tienes que preocuparte por eso. Simplemente ajusta las constantes anteriores para que se adapten a tu configuración específica y comportamiento deseado.

Demostración de Proyecto en Vivo

Una vez que tengas todo cableado y el código cargado en tu Arduino, el proyecto funcionará de la siguiente manera:

Cuando enciendes el dispositivo, la LCD mostrará "Robojax Touch" y "Counter V2" durante unos segundos antes de que comience a contar. Cada vez que toques la almohadilla del sensor, el contador se incrementará en uno, y el nuevo conteo se mostrará en la línea inferior de la LCD, al lado de la palabra "Touched:" (en el video a las 07:51). La misma información también se imprime en el Monitor Serial del IDE de Arduino para fines de depuración o registro.

Para restablecer el contador, simplemente presione el botón de pulsar. La pantalla LCD se borrará y mostrará "Restablecido", y la cuenta volverá a cero (en el video a las 08:49). El dispositivo está ahora listo para contar de nuevo. Este bucle de retroalimentación simple y claro facilita ver el proyecto funcionando en tiempo real.

Capítulos

  • [00:00] Introducción y Resumen del Proyecto
  • [00:44] Componentes y Cómo Funcionan
  • Guía de cableado para el sensor táctil y el botón
  • [03:41] Guía de cableado para la pantalla LCD
  • [04:26] Explicación del código y configuración
  • [06:47] Comprendiendo el Bucle Principal y la Lógica Táctil
  • [09:25] Demostración y Prueba en Vivo
  • [11:08] Conclusión e Ideas de Proyectos Futuros

Imágenes

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

Cosas que podrías necesitar

Archivos📁

Archivo de Fritzing

Otros archivos