Code de recherche

RoboJax Compteur Tactile V2 utilisant un écran LCD1602-I2C

RoboJax Compteur Tactile V2 utilisant un écran LCD1602-I2C

Introduction

Ce guide vous montrera comment construire un compteur tactile simple mais très fonctionnel en utilisant un Arduino Uno, un capteur tactile capacitif TTP223B et un affichage LCD1602 compatible I2C. Ce projet, connu sous le nom de Robojax Touch Counter V2, est un point de départ parfait pour quiconque souhaitant ajouter une entrée intuitive basée sur le toucher à ses projets électroniques. Au lieu d'un bouton mécanique, un simple toucher sur le pad du capteur incrémente un compteur, avec le décompte actuel clairement affiché sur l'écran LCD. Un bouton-poussoir séparé vous permet de réinitialiser le décompte à zéro à tout moment.

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

Ce projet n'est pas seulement un exercice d'apprentissage ; il a une large gamme d'applications pratiques. Voici quelques idées pour vous inspirer :

  • Compteur de personnes :Créez un dispositif simple pour compter le nombre de personnes entrant dans une pièce ou une zone spécifique.
  • Compteur de ligne de production :Utilisez-le pour comptabiliser les articles au fur et à mesure qu'ils passent à un point sur un petit tapis roulant ou dans un processus d'assemblage.
  • Suivi de présence :Construisez un système simple pour suivre la présence à un cours ou un événement.
  • Installation d'art interactive :Utilisez-le comme un composant dans une œuvre d'art qui réagit au nombre de fois qu'il est touché.
  • Outil éducatif :Enseignez les bases des capteurs, des interruptions et des interfaces d'affichage de manière ludique et pratique.

À la fin de ce guide, vous aurez un compteur tactile pleinement fonctionnel et une solide compréhension de la manière d'intégrer des capteurs tactiles, des affichages I2C et des entrées utilisateur dans vos propres projets Arduino.

Composants matériels

Pour réaliser ce projet, vous aurez besoin des composants suivants :

  • Arduino Uno (ou carte compatible)
  • Module de capteur tactile capacitif TTP223B ou TTP223 (variante rouge ou bleue)
  • Module d'affichage LCD1602 avec interface I2C
  • Bouton poussoir (pour réinitialiser)
  • Fils de connexion
  • Plaque d'essai

Guide de câblage

Le câblage de ce projet est simple, mais il est important de noter que l'ordre des broches sur les modules tactiles rouge et bleu est différent. Voici un aperçu de la manière de tout connecter.

Tout d'abord, connectons le capteur tactile. Pour lemodule bleu, l'ordre des broches est Signal, VCC et Terre. Connectez la broche Signal à la broche 2 de l'Arduino, VCC à 5V et Terre à GND. Pour lemodule rouge, l'ordre des broches est Terre, Signal, et VCC (dans la vidéo à 02:57). Connectez la broche Terre à GND, la broche Signal (du milieu) à la broche 2 de l'Arduino, et la broche VCC à 5V (dans la vidéo à 03:01).

Ensuite, connectez l'écran LCD. L'interface I2C utilise seulement quatre fils. Connectez la broche GND de l'écran au GND de l'Arduino, la broche VCC à 5V, la broche SDA à la broche analogique A4 de l'Arduino, et la broche SCL à la broche analogique A5 de l'Arduino (dans la vidéo à 03:55). Ce sont les bonnes broches pour l'Arduino Uno. Si vous utilisez une autre carte comme un Arduino Mega, les broches SDA et SCL se trouvent sur 20 et 21 respectivement (dans la vidéo à 04:18).

Enfin, connectez le bouton de réinitialisation. Placez le bouton sur la breadboard et connectez une de ses broches à GND Arduino et l'autre à la broche 12 de l'Arduino (dans la vidéo à 03:33). L'ordre de ces fils n'a pas d'importance.

Ce projet ne nécessite aucun résistor pour le capteur tactile ou le bouton, car le code utilisera le résistor de tirage interne de l'Arduino pour le bouton.

Explication du code

Le code de ce projet est conçu pour être simple à comprendre et à modifier. Les principales parties configurables par l'utilisateur se trouvent en haut du croquis.

Voici la section du code que vous voudrez probablement personnaliser :

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

Décomposons ce que chacun de ces paramètres fait :

  • Adresse LCD :Lelcd(0x27, 16, 2)la ligne configure l'affichage. Le0x27est l'adresse I2C de votre module LCD spécifique. La plupart des modules utilisent cette adresse, mais si votre affichage ne fonctionne pas, cela pourrait être0x3FVous pouvez modifier cette valeur pour l'adapter à votre affichage.
  • touchPin:Cette constante définit la broche Arduino à laquelle le fil de signal de votre capteur tactile est connecté. Vous pouvez changer cela si vous souhaitez utiliser une broche différente.
  • resetPin:Cette constante définit la broche Arduino pour votre bouton de réinitialisation. Elle est définie par défaut sur la broche 12.
  • touchDelay:C'est un paramètre crucial. Il contrôle le temps minimum en millisecondes entre deux touches enregistrées (dans la vidéo à 05:13). Une valeur de 500ms empêche les comptages multiples accidentels provenant d'une seule touche ou de tapotements très rapides. Si vous souhaitez que le compteur soit plus réactif, vous pouvez réduire cette valeur à quelque chose comme 100ms (dans la vidéo à 10:31).

Lecountla variable est un entier qui contient la valeur actuelle du compteur. Elle est initialisée à zéro et est incrémentée chaque fois que le capteur est touché. Le code lui-même gère la logique de lecture du capteur, de mise à jour de l'affichage et de vérification du bouton de réinitialisation, donc vous n'avez pas à vous en soucier. Il vous suffit d'ajuster les constantes ci-dessus pour correspondre à votre configuration spécifique et au comportement souhaité.

Démonstration de projet en direct

Une fois que tout est câblé et que le code est téléchargé sur votre Arduino, le projet fonctionnera comme suit :

Lorsque vous alimentez l'appareil, l'écran LCD affichera "Robojax Touch" et "Counter V2" pendant quelques secondes avant de commencer à compter. Chaque fois que vous touchez le pad capteur, le compteur s'incrémente d'un, et le nouveau compte sera affiché sur la ligne inférieure de l'écran LCD, à côté du mot "Touched:" (dans la vidéo à 07:51). Les mêmes informations sont également imprimées dans le Moniteur Série de l'IDE Arduino à des fins de débogage ou de journalisation.

Pour réinitialiser le compteur, appuyez simplement sur le bouton poussoir. L'écran LCD se videra et affichera "Réinitialisé", et le compteur reviendra à zéro (dans la vidéo à 08:49). L'appareil est maintenant prêt à compter à nouveau. Cette boucle de rétroaction simple et claire rend facile de voir le projet fonctionner en temps réel.

Chapitres

  • [00:00] Introduction et aperçu du projet
  • [00:44] Composants et leur fonctionnement
  • [02:30] Guide de câblage pour le capteur tactile et le bouton
  • Guide de câblage pour l'écran LCD
  • [04:26] Explication du code et configuration
  • [06:47] Comprendre la boucle principale et la logique tactile
  • [09:25] Démonstration en direct et test
  • [11:08] Conclusion et idées de projets futurs

Images

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

Ce dont vous pourriez avoir besoin

Ressources et références

Fichiers📁

Fichier Fritzing

Autres fichiers