Projet BAC RFID
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Projet BAC RFID



  1. #1
    craftsdance

    Projet BAC RFID


    ------

    Bonjour à tous,

    Je suis actuellement en Terminale SI et j'ai un projet à réaliser pour le baccalauréat. Ainsi, j'aimerais avoir quelques conseils pour mener au mieux les dernières modifications que je peux encore faire. Je vous présente en quelques lignes mon projet : nous devons réaliser un distributeur d'affaires scolaires et je traite de la partie communication homme/machine. Pour ce faire, j’ai choisi de prendre un afficheur lcd (pour les éventuelles informations), un module RFID (pour payer le produit choisi-> http://www.gotronic.fr/art-module-rf...c522-25651.htm ) et des boutons poussoirs (pour le choix du produit).
    Au départ, je voulais créditer la carte RFID mais finalement, j’ai réalisé un programme qui déduirait à chaque fois à une variable le montant du produit choisi. Le problème c’est que ce n’est pas spécifique à une carte RFID. Je m’explique : je passe la carte , et on a une variable ARGENT=10, puis je choisi le produit crayon, ainsi mon crédit va diminuer de 1€ (admettons). Le crédit de la carte 1 sera donc de 9€. En revanche, si je passe la carte 2, et que je choisi le crayon, le crédit sera de 8€ car le programme va garder la valeur précédente... Il faudrait donc affecter une variable spécifique à une carte mais comment faire ? Ou alors, écrire sur la carte…

    Ensuite, si je passe une carte inconnue au distributeur, cela va s’afficher. Mais, nous pouvons quand même commander. Il faudrait donc que je change mon programme pour que ça ne le fasse pas…

    Finalement, j’avais commandé ceci : http://www.gotronic.fr/art-clavier-v...2080-21533.htm . Cependant, mon professeur a dit que, finalement, ce serait trop compliqué à insérer dans mon programme… Quelques idées ???
    Merci d’avance pour votre aide ! Bien évidemment, je ne vous demande pas de faire mon projet mais simplement de m’orienter dans la programmation arduino (RFID) car je suis plutôt débutant dans ce domaine.

    Voici mon programme :

    Code:
    #include <SPI.h>  
    #include <RFID.h>
    #include <Wire.h> 
    #include <LiquidCrystal_I2C.h>
    
    const int buttonPin1 = 2; 
    int buttonState1 = 0; 
    
    LiquidCrystal_I2C lcd(0x27,16,2);  //Déclaration de l'afficheur LCD
    
    
    RFID RFID(10,9);
    
    int UID[5]={};
    
    int MASTERKEY[5]={22,79,141,171,127}; // UID de la carte 1 acceptée sous forme de tableau (Array).
    
    int CLE[5]={106,125,65,219,141};      // UID de la carte 2 acceptée sous forme de tableau (Array).
    
    int CODE[5]={192,171,198,128,45};     // UID du badge accepté sous forme de tableau (Array).
    
    int ARGENT=10; 
    
    bool statut = 3;
    
    void setup()                          //Fonction d'initialisation de la carte
    {
      Serial.begin(9600);
      SPI.begin();                        //Initialisation du lecteur et de la carte 
      RFID.init();
     
     
    }
    
    void loop()                           //Fonction principale, elle se répète (s'éxecute) à l'infini
    {
      buttonState1 = digitalRead(buttonPin1);
       if (buttonState1 == LOW && ARGENT>1) 
      {
      Serial.print(buttonState1);  
      lcd.init();          
      lcd.backlight();
      lcd.setCursor ( 4 , 0 );
      lcd.print("PRODUIT:");
      lcd.setCursor ( 4 , 1 );
      lcd.print("CRAYON");
      ARGENT-=1;
      
      delay(1000);
      
      lcd.init();          
      lcd.backlight();
      lcd.setCursor ( 2 , 0 );
      lcd.print("IL VOUS RESTE");
      lcd.setCursor ( 6 , 1 );
      lcd.print(ARGENT);
      }
      
       if (buttonState1 == LOW && ARGENT==0) 
      {
      Serial.print(buttonState1);  
      lcd.init();          
      lcd.backlight();
      lcd.setCursor ( 3 , 0 );
      lcd.print("CREDIT");
      lcd.setCursor ( 3 , 0 );
      lcd.print("INSUFFISANT");
      Serial.print(ARGENT);
      }
      
        if (RFID.isCard()) {  
    
              /* Lecture du tag */
              if (RFID.readCardSerial()) 
              {        
              /*Serial.print("L'UID est: ");*/  
                for(int i=0;i<=4;i++)
                {
                  UID[i]=RFID.serNum[i];
                  Serial.print(UID[i],DEC);    //Ecriture en décimale
                  Serial.print(".");
                  
                }
    
                /*Serial.println("");*/
              }
              /* fin de  Lecture du tag */
              
              if (UID[0] == MASTERKEY[0]   // Si l'UID 0  est égale à 22
               && UID[1] == MASTERKEY[1]   // Et si l'UID 1  est égale à 79
               && UID[2] == MASTERKEY[2]   // Et si l'UID 2  est égale à 141
               && UID[3] == MASTERKEY[3]   // Et si l'UID 3  est égale à 171
               && UID[4] == MASTERKEY[4])  // Et si l'UID 4  est égale à 127
             
      
                {
                  ouverture();
                }
               
                
              else if (UID[0] == CLE[0]   // Si l'UID 0  est égale à 106
               && UID[1] == CLE[1]   // Et si l'UID 1  est égale à 125
               && UID[2] == CLE[2]   // Et si l'UID 2  est égale à 65
               && UID[3] == CLE[3]   // Et si l'UID 3  est égale à 219
               && UID[4] == CLE[4])  // Et si l'UID 4  est égale à 141
    
                {
                   accepte();
                }
                
                else if (UID[0] == CODE[0]   // Si l'UID 0  est égale à 192
               && UID[1] == CODE[1]   // Et si l'UID 1  est égale à 171
               && UID[2] == CODE[2]   // Et si l'UID 2  est égale à 198
               && UID[3] == CODE[3]   // Et si l'UID 3  est égale à 128
               && UID[4] == CODE[4])  // Et si l'UID 4  est égale à 45
               
                {
                   accord();
                }
                
                
                else
                {
                  refuse();
                }
                
              RFID.halt();
        }
        delay(50);  
                  
    }
    
    void ouverture()
    {
    
      Serial.println("Coucou");
      lcd.init();                     //Instructions pour l'afficheur
      lcd.backlight();
      lcd.setCursor ( 4 , 0 );
      lcd.print("BONJOUR");
      lcd.setCursor ( 5 , 1 );
      lcd.print("UTILISATEUR1");
    
      delay(1000);                   //Attente
    
      lcd.init();          
      lcd.backlight();
      lcd.setCursor ( 3 , 0 );
      lcd.print("VOUS AVEZ");
      lcd.setCursor ( 6 , 1 );
      lcd.print("10e"); 
        
      delay(1000);
    
      lcd.init();          
      lcd.backlight();
      lcd.setCursor ( 3 , 0 );
      lcd.print("CHOISISSEZ");
      lcd.setCursor ( 3, 1 );
      lcd.print("UN PRODUIT"); 
     
    {
                  commande();
    }
    } 
    
    
    void commande()
    {
     
    }
    
    void accepte()
    {
    
      Serial.println("Salut");
      lcd.init();          
      lcd.backlight();
      lcd.setCursor ( 4 , 0 );
      lcd.print("BONJOUR");
      lcd.setCursor ( 4 , 1 );
      lcd.print("UTILISATEUR2");
    
      delay(1000);
    
      lcd.init();          
      lcd.backlight();
      lcd.setCursor ( 3 , 0 );
      lcd.print("VOUS AVEZ");
      lcd.setCursor ( 7 , 1 );
      lcd.print("10e"); 
      
      delay(1000);
    
      lcd.init();          
      lcd.backlight();
      lcd.setCursor ( 3, 0 );
      lcd.print("CHOISISSEZ");
      lcd.setCursor ( 3 , 1 );
      lcd.print("UN PRODUIT"); 
      
    }
    
    void accord()
    {
    
      Serial.println("Hi");
      lcd.init();          
      lcd.backlight();
      lcd.setCursor ( 4 , 0 );
      lcd.print("BONJOUR");
      lcd.setCursor ( 5 , 1 );
      lcd.print("UTILISATEUR3");
    
      delay(1000);
    
      lcd.init();          
      lcd.backlight();
      lcd.setCursor ( 3 , 0 );
      lcd.print("VOUS AVEZ");
      lcd.setCursor ( 7 , 1 );
      lcd.print("10e"); 
      
      delay(1000);
    
      lcd.init();          
      lcd.backlight();
      lcd.setCursor ( 1 , 0 );
      lcd.print("CHOISISSEZ");
      lcd.setCursor ( 2 , 1 );
      lcd.print("UN PRODUIT"); 
      
    
    }
    
    void refuse()
    {
    
      Serial.println("Au revoir");
       lcd.init();          
      lcd.backlight();
      lcd.setCursor ( 5 , 0 );
      lcd.print("CARTE");
      lcd.setCursor ( 4 , 1 );
      lcd.print("INCONNUE");
      
    }

    -----
    Dernière modification par JPL ; 08/04/2017 à 14h27. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    craftsdance

    Re : Projet BAC RFID

    Pas de petite idée?

  3. #3
    albanxiii
    Modérateur

    Re : Projet BAC RFID

    Bonjour,

    Combien de cartes RFID votre programme doit-il gérer ? J'avoue que ça n'est pas très clair à la lecture de votre message.
    Not only is it not right, it's not even wrong!

  4. #4
    Jack
    Modérateur

    Re : Projet BAC RFID

    Je pense que le plus logique est d'affecter un crédit à chaque carte, une carte étant affectée à une seule personne. Chaque produit sera donc débité et le solde mis à jour sur la carte.

  5. A voir en vidéo sur Futura
  6. #5
    craftsdance

    Re : Projet BAC RFID

    Bonjour,
    Il est vrai que je me suis peut être mal exprimé... En fait, je n'ai pas de nombre de cartes limite, j'ai utilisé celle qui était à ma disposition. Comme nous sommes quatre à faire ce projet j'ai pris 4 cartes différentes, la mienne n'étant pas défini dans le programme pour que cela affiche "Carte inconnue"

  7. #6
    craftsdance

    Re : Projet BAC RFID

    Et pour ce qui est des crédits, c'est ce que j'ai finalement fait dans mon programme: j'ai affecté un crédit à chaque carte. Cependant, j'ai raccordé un bouton poussoir à mon dispositif (module RFID+afficheur LCD) pour pouvoir donc commander un crayon (par exemple) mais il faudrait que l'on puisse commander seulement quand une carte connue est passée... Alors que pour le moment, on peut même commander lorsque aucune carte n'est passée devant le module. J'avais essayé de changer de place la boucle SI incluant le bouton poussoir mais le programme ne marchait plus...

  8. #7
    albanxiii
    Modérateur

    Re : Projet BAC RFID

    Re,

    La programmation doit venir une fois que vous avez les idées claires sur le fonctionnement de votre dispositif.

    A mon avis, le plus simple et le plus parlant est de faire un graphe avec les différentes étapes à suivre pour pouvoir acheter un objet (exemple : 1- présenter sa carte, 2 - s'il reste des crédits, alors passer au 3, sinon message d'information à l'utilisateur et retour au début, 3 - choix de l'objet à acheter, 4 - est-ce qu'il y a assez de crédit pour cet objet ? oui, on passe à la suite, non, message d'info et retour au début, etc.).

    Une fois que ceci est clair, le cas que vous décrivez ne doit plus arriver (commander sans qu'une carte ne soit passée devant le module en premier), et il ne reste plus qu'à le traduire en programme.
    Not only is it not right, it's not even wrong!

  9. #8
    craftsdance

    Re : Projet BAC RFID

    J'ai effectivement réalisé un schéma qui permettrait d'éclaircir mes idées (qui j'avoue partent dans tous les sens...) mais il n'est pas assez poussé

    J'avais mis:
    1-Détecter l'utilisateur
    2-Communiquer avec l'utilisateur
    3-Choisir le produit et communiquer avec l'utilisateur
    4-Payer
    5-Communiquer avec l'utilisateur

    Du coup, je n'ai pas pris en compte les crédits et autres...

    On aurait donc:

    Code:
    Passer la carte devant le lecteur 
    
    Si carte connue alors 
        Afficher le nom de l'utilisateur 
        Lire le crédit de la carte 
    
        Si le crédit est supérieur à 0 alors 
            Afficher le crédit 
            Demander à l'utilisateur de choisir un produit 
    
            Si le produit choisi est crayon et si le crédit est supérieur ou égal au prix du crayon (donc bouton poussoir sous un certain état)
                Alors afficher "Produit:crayon"            (Ici, il faudrait une boucle si jamais l'utilisateur en veut plusieurs)
                Déduire 1€ du crédit
                Afficher le crédit restant 
                Distribuer le produit
    
            Sinon si le produit choisi est.....
        
        Sinon si le crédit est égale à 0 alors 
        Afficher crédit insuffisant
    
    Sinon 
    Afficher carte inconnue 
    Attente 
    Afficher passer une carte devant le lecteur
    Pensez vous que c'est déjà bien organisé de cette façon?
    Dernière modification par JPL ; 17/04/2017 à 14h04. Motif: Activation des liens

Discussions similaires

  1. Projet cave à vin RFID
    Par anakin59490 dans le forum Électronique
    Réponses: 22
    Dernier message: 27/11/2019, 14h46
  2. [Programmation] Projet RFID
    Par cobrafox dans le forum Électronique
    Réponses: 6
    Dernier message: 10/03/2016, 21h26
  3. projet température RFID
    Par gilles0001 dans le forum Électronique
    Réponses: 9
    Dernier message: 15/08/2015, 23h42
  4. Projet RFID
    Par mich-mich dans le forum Électronique
    Réponses: 16
    Dernier message: 11/05/2014, 17h56
  5. Mini projet RFID
    Par invitea48a3f86 dans le forum Électronique
    Réponses: 4
    Dernier message: 03/01/2010, 04h19