Réalisation d’une carte 5 boutons raccordée sur une entrée analogique

image principale Réalisation d’une carte 5 boutons raccordée sur une entrée analogique

Difficulté:

Comme beaucoup de personnes débutantes, j’ai eu besoin pour mon projet arduino d’un écran LCD et de boutons pour pouvoir interagir.


En avançant dans mon projet, je me suis tourné vers des shields boutons dédiés :

Module DFR0075  OU  Module d-Pad 5 boutons

SAUF que je me suis rendu compte que les shields ci-dessus étaient trop gros pour mon projet .


J’ai donc décidé de réaliser ma propre carte 5 boutons.


Je vous propose de me suivre dans sa réalisation. (Mon premier projet!)


Matériel :

Budget : 10€

  • 1 Bornier 3 entrées pour circuit imprimé.
  • 1 plaquette à pastilles type perfboard
  • 5 boutons poussoirs
  • 5 résistances
  • Quelques fils, de la soudure, le fer qui va avec, scie à métaux, …

Etape 1 : Un peu de théorie

Ci dessus le schéma de principe :

En résumé, le circuit est un pont diviseur de tension branché sur une entrée analogique et comprenant le nombre de boutons souhaités.

La valeur de la tension lue sur l’entrée analogique détermine le bouton appuyé.


Après recherche sur internet, je me suis principalement inspiré de :

https://granddiego.blogspot.com/2015/11/plusieurs-boutons-sur-une-seule-entree.html

+

https://modelleisenbahn.triskell.org/spip.php?article59

+

et surtout

https://savignyexpress.wordpress.com/2013/11/18/connecter-plusieurs-boutons-poussoir-a-un-microcontroleur/

et son fichier excel calculateur des valeurs des résistances


Après lecture et application de la partie théorique (merci au fichier excel du site savignyexpress), on abouti aux valeurs de résistances suivantes :

R1 : 600 Ohms, R2 : 150 Ohms, R3 :220 Ohms, R4 : 470 Ohms, R5 : 1500 Ohms

(Personnellement, j’ai acheté des résistances de précision pour éviter tout problème)


Etape 2 : Validation du bon fonctionnement

En premier lieu, vérifiez que tout fonctionne correctement sur une breadboard :

Pour cela, vous pouvez utilisez le schéma Fritzing ci-dessus :

(comme vous pouvez vous en douter : VCC en haut, GND en bas)

La borne du milieu du bornier est a relier à l’entrée analogique de votre carte arduino.

Une fois le cablage effectué, pour tester le bon fonctionnement : 

- si vous ne disposez pas d’un écran LCD,  vous pouvez utiliser le programme fourni avec le shield DFR0075 (Je vous laisse chercher sur internet). Le résultat s’affiche sur le port série.

- si vous disposez d’un écran I2C, vous pouvez utiliser le programme ci-dessous adapté par mes soins :

/*
* Programme de test de la carte 5 boutons fait maison sur StripoBoard avec une seul entrée analogique 
* Pour cela nous mesurons la valeur de la tension d'une entrée analogique afin de savoir quel bouton a été pressé.
 *
 * Adapté à partir du programme fourni avec le shield DFR_0075 de DFR Robots
 * Ce programme affiche un message lorsqu'un bouton est pressé sur le port série et l'écran LCD et la valeur de la tension servant a mesurer le bouton pressé sur le port série 
 * Ce programme est doté d'un anti-rebond logiciel
 *
 * Prévu pour fonctionner avec un écran I2C (ici un seed studio 104020113)
 * Branchements : Alimentation (Vcc 5V + GND), Signal d'entrée (A0)
 */


#include "rgb_lcd.h"
#include <Wire.h>


rgb_lcd lcd;
const int colorR = 255;
const int colorG = 0;
const int colorB = 0;


#define Broche_Lecture A0 // On va lire la tension sur la broche A0


int adc_key_val[5] ={
  102,313, 516, 714, 900 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
void setup()
{
  pinMode(13, OUTPUT);  //Utilise la LED de la broche 13 pour confirmer l'appui sur un bouton
 pinMode(Broche_Lecture, INPUT); // Place la broche analogique sur laquelle on va lire la tension en entrée    


  /* Initialisation du port série*/
 Serial.begin(9600); // 9600 bps
  Serial.println ("Essai de la carte 5 boutons fait maison");
  Serial.print ("Affichage en continu de la tension lue sur la broche et de l'appui bouton détecté");


  /* Initialisation de l'écran LCD */
  lcd.begin(16, 2);
  lcd.setRGB(colorR, colorG, colorB);
  lcd.clear();
 lcd.setCursor(0,0);             // positionne le cureur en haut a gauche de l'ecran 
  lcd.print ("Essai 5 boutons fait maison");
 lcd.setCursor(0,1);


}


void loop()
{
  adc_key_in = analogRead(Broche_Lecture);    // Lecture de la tension sur la broche analogique 
 Serial.print("Valeur tension lue : "); 
 Serial.println(adc_key_in); 


  key = get_key(adc_key_in);  // Appel à la fonction de conversion


    if (key != oldkey)   // Si on détecte un appui sur un bouton
  {
    delay(50);  // Délai d'attente (anti-rebond lmatériel)
    adc_key_in = analogRead(Broche_Lecture);    // 2ème lecture de la valeur de la tension sur la broche analogique 
    key = get_key(adc_key_in);    // Appel à la fonction de conversion
    if (key != oldkey)    
    {   
      oldkey = key;
      if (key >=0){
       digitalWrite(13,HIGH); // Allume la LED de la broche 13
        switch(key)
        {
        case 0:
         lcd.println("B1 OK");
         Serial.println("B1 OK");  
          break;
        case 1:
         lcd.println("B2 OK");   
         Serial.println("B2 OK");  
          break;
        case 2:
         lcd.println("B3 OK");   
         Serial.println("B3 OK");  
          break;
        case 3:
         lcd.println("B4 OK");   
         Serial.println("B4 OK");  
          break;     
        case 4:
         lcd.println("B5 OK");   
         Serial.println("B5 OK");  
          break;  
        } 
        delay(500); // Délai d'affichage du bouton pressé (Bloque tout nouvel appui)
       digitalWrite(13,LOW); // Eteindre la LED de la broche 13


        // Il faut effacer l'écran pour afficher la prochaine mesure
        lcd.clear();
       lcd.setCursor(0,0);             // positionne le cureur en haut a gauche de l'ecran 
        lcd.print ("Essai 5 boutons fait maison");
       lcd.setCursor(0,1);
      }
    }
  }
  delay(100);
}
// Convertir la tension lue sur la broche en numéro de bouton pressé
int get_key(unsigned int input)
{
  int k;
  for (k = 0; k < NUM_KEYS; k++)
  {
    if (input < adc_key_val[k])
    {
      return k;
    }
  }
  if (k >= NUM_KEYS)k = -1;  // La valeur détectée ne correspond a rien
  return k;
}
Etape 3 : Réalisation finale

Une fois le bon fonctionnement du montage validé, vous pouvez passer à la réalisation sur perfboard  en utilisant le schéma ci-dessus.


Une fois votre circuit réalisé, je vous invite a scier l’excédent de plaquette perfboard (Un petit coup de scie à métaux, cela fonctionne très bien!)



Etape 4 : Mon Résultat

Quelques photos de ma réalisation personnelle. (environ 4,5cm*2,5cm)

Les puristes pourront remarquer que les soudures sont perfectibles. Mais moi, ca me convient (Ce n’est pas trop crade et cela fonctionne sans problème, ce qui est le but premier !)

On peut également améliorer la partie fils volants, mais ce sera pour l’étape suivante.


Ce tutoriel est maintenant terminé.

Il ne vous reste plus qu'à utiliser ce clavier pour vos réalisations.

Et comme on dit :

Enjoy !!!!!

et

En espérant avoir été utile.


Excellent! C'est tout bête mais fallait y penser :-)

Ces tutoriels devraient vous plaire

vignette Préparer un fichier pour une découpe et une gravure laser
Préparer un fichier pour une découpe et une gravure laser
vignette Montez facilement votre console de jeu rétrogaming avec RECALBOX !
Montez facilement votre console de jeu rétrogaming avec RECALBOX !
vignette Fabriquer une lampe à lave
Fabriquer une lampe à lave
avaatar ltr-temp44

ltr-temp44

Suivre

Vues: 1366
Mis en favoris: 3

Découvrez d'autres tutoriels de

ltr-temp44

Découvrez tous les tutoriels partagés sur Oui Are Makers

Powered by Oui Are Makers