Código de Pesquisa

RoboJax Touch Counter V2 Usando Display LCD1602-I2C

RoboJax Touch Counter V2 Usando Display LCD1602-I2C

Introdução

Este guia mostrará como construir um contador de toque simples, mas altamente funcional, utilizando um Arduino Uno, um sensor de toque capacitivo TTP223B e um display LCD1602 com I2C. Este projeto, conhecido como Robojax Touch Counter V2, é um ponto de partida perfeito para qualquer pessoa que queira adicionar entrada intuitiva baseada em toque aos seus projetos eletrônicos. Em vez de um botão mecânico, um simples toque no pad do sensor incrementa um contador, com a contagem atual exibida claramente na tela LCD. Um botão separado permite que você redefina a contagem de volta a zero a qualquer momento.

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

Este projeto não é apenas um exercício de aprendizagem; ele tem uma ampla gama de aplicações práticas. Aqui estão algumas ideias para inspirá-lo:

  • Contador de Pessoas:Crie um dispositivo simples para contar o número de pessoas entrando em uma sala ou em uma área específica.
  • Contador de Linha de Produção:Use-o para contar itens à medida que passam por um ponto em uma pequena esteira transportadora ou processo de montagem.
  • Rastreador de Presença:Crie um sistema simples para rastrear a presença em uma aula ou evento.
  • Instalação de Arte Interativa:Use-o como um componente em uma obra de arte que reage ao número de vezes que é tocado.
  • Ferramenta Educacional:Ensine o básico sobre sensores, interrupções e interfaces de display de forma divertida e prática.

Ao final deste guia, você terá um contador de toque totalmente funcional e uma compreensão sólida de como integrar sensores de toque, displays I2C e entradas de usuário em seus próprios projetos Arduino.

Componentes de Hardware

Para construir este projeto, você precisará dos seguintes componentes:

  • Arduino Uno (ou placa compatível)
  • Módulo de Sensor de Toque Capacitivo TTP223B ou TTP223 (variante Vermelha ou Azul)
  • Módulo de Interface I2C com Display LCD1602
  • Botão de Reset
  • Fios Jumper
  • Placa de ensaio

Guia de Fiação

A fiação para este projeto é simples, mas é importante notar que a ordem dos pinos nos módulos tácteis vermelho e azul é diferente. Aqui está uma explicação de como conectar tudo.

Primeiro, vamos conectar o sensor de toque. Para omódulo azul, a ordem dos pinos é Sinal, VCC e Terra. Conecte o pino Sinal ao pino 2 do Arduino, VCC ao 5V e Terra ao GND. Para omódulo vermelho, a ordem dos pinos é Terra, Sinal e VCC (no vídeo em 02:57). Conecte o pino Terra ao GND, o pino Sinal (meio) ao pino 2 do Arduino e o pino VCC ao 5V (no vídeo em 03:01).

Em seguida, conecte o display LCD. A interface I2C usa apenas quatro fios. Conecte o pino GND do display ao GND do Arduino, o pino VCC ao 5V, o pino SDA ao pino analógico A4 do Arduino e o pino SCL ao pino analógico A5 do Arduino (no vídeo em 03:55). Estes são os pinos corretos para o Arduino Uno. Se você estiver usando uma placa diferente, como um Arduino Mega, os pinos SDA e SCL estão em 20 e 21, respectivamente (no vídeo em 04:18).

Finalmente, conecte o botão de reset. Coloque o botão na placa de ensaio e conecte um de seus pinos ao GND do Arduino e o outro ao pino 12 do Arduino (no vídeo às 03:33). A ordem desses fios não importa.

Este projeto não requer resistores para o sensor de toque ou o botão, pois o código usará o resistor pull-up interno do Arduino para o botão.

Explicação do Código

O código deste projeto é projetado para ser simples de entender e modificar. As principais partes configuráveis pelo usuário estão localizadas no topo do esboço.

Aqui está a seção do código que você provavelmente irá querer 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

Vamos detalhar o que cada uma dessas configurações faz:

  • Endereço LCD:Olcd(0x27, 16, 2)linha configura a exibição. A0x27é o endereço I2C do seu módulo LCD específico. A maioria dos módulos usa esse endereço, mas se o seu display não funcionar, pode ser0x3FVocê pode alterar este valor para corresponder ao seu display.
  • touchPin:Esta constante define o pino do Arduino ao qual o fio do sinal do seu sensor de toque está conectado. Você pode mudar isso se quiser usar um pino diferente.
  • resetarPin:Esta constante define o pino Arduino para o seu botão de reset. Ele está definido como pino 12 por padrão.
  • touchDelay:Esta é uma configuração crucial. Ela controla o tempo mínimo em milissegundos entre dois toques registrados (no vídeo em 05:13). Um valor de 500ms evita contagens múltiplas acidentais de um único toque ou de toques muito rápidos. Se você quiser que o contador seja mais responsivo, pode reduzir esse valor para algo como 100ms (no vídeo em 10:31).

Ocounta variável é um inteiro que armazena o valor atual da contagem. Ela é inicializada em zero e é incrementada cada vez que o sensor é tocado. O código em si lida com a lógica de leitura do sensor, atualização do display e verificação do botão de reset, então você não precisa se preocupar com isso. Basta ajustar as constantes acima para se adequar à sua configuração específica e ao comportamento desejado.

Demonstração de Projeto ao Vivo

Uma vez que você tenha tudo conectado e o código carregado no seu Arduino, o projeto funcionará da seguinte forma:

Quando você ligar o dispositivo, o LCD exibirá "Robojax Touch" e "Counter V2" por alguns segundos antes de começar a contar. Cada vez que você tocar o sensor, o contador será incrementado em um, e a nova contagem será exibida na linha de baixo do LCD, ao lado da palavra "Touched:" (no vídeo em 07:51). A mesma informação também é impressa no Monitor Serial do Arduino IDE para fins de depuração ou registro.

Para reiniciar o contador, basta pressionar o botão. O LCD será limpo e exibirá "Resetado", e a contagem retornará a zero (no vídeo às 08:49). O dispositivo está agora pronto para contar novamente. Esse ciclo de feedback simples e claro facilita ver o projeto funcionando em tempo real.

Capítulos

  • [00:00] Introdução e Visão Geral do Projeto
  • [00:44] Componentes e Como Funcionam
  • [02:30] Guia de Fiação para o Sensor de Toque e Botão
  • Guia de Fiação para o Display LCD
  • [04:26] Explicação do Código e Configuração
  • [06:47] Compreendendo o Loop Principal e a Lógica de Toque
  • Demonstração e Teste ao Vivo :25
  • [11:08] Conclusão e Ideias de Projetos Futuros

Imagens

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
}

Coisas que você pode precisar

Arquivos📁

Arquivo Fritzing

Outros arquivos