Badgeuse RFID d'entrée et de sortie et système de facturation

Bonjour à tous,

Dans le cadre d'un stage dans une start up, j'ai comme projet de confectionner une badgeuse afin d'effectuer un suivis simplifié et plus précis sur l'ensemble des activiés des membres. Le but est donc de creer une badgeuse d'entrée et de sortie et d'y gérer la gestion en sorte que les membres de l'atelier peuvent y rentrer 7jr/7 24h/24.
La gestion par badge ainsi que l'utilisation des machines doivent permettre la reservation de créneau horaires, l'acces à l'atelier, la mise en fonctionnement des machines ainsi que la faturation des prestations des comptes des utilisateurs.

Pour le moment j'ai commandé un lecteur RFID 13.56MHz et je l'ai programmé, ainsi j'arrive à lire mes badges et à la fois à affiché sur un écran lcd si la carte est autorisé ou non mais aussi à allumer des LED rouges et vertes suivant le fontionnement ou non du badge.

A present, il me faut faire en sorte que quand je détecte un badge, un compteur se mets en route et ce jusqu'à ce que cette même carte soit re badger. Sachant que plusieurs autre carte peuvent etre lu entre temps.

Merci pour votre aide :slight_smile:

voici le code que j'utilise pour l'instant :

#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 7);
SoftwareSerial RFID(2, 3); // RX and TX
 
int data1 = 0;
int ok = -1;
int yes = 13;
int no = 8;
int m=0;
int test1=0;
int tempo=0;

// use first sketch in http://wp.me/p3LK05-3Gk to get your tag numbers
int tag1[14] = {2,48,68,48,48,53,48,54,51,68,67,69,50,3};
int tag2[14] = {2,49,48,48,48,53,67,66,70,66,48,52,51,3};
int newtag[14] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // used for read comparisons
 
void setup()
{
  RFID.begin(9600);    // start serial to RFID reader
  Serial.begin(9600);  // start serial to PC
  pinMode(yes, OUTPUT); // for status LEDs
  pinMode(no, OUTPUT);
  lcd.begin(16, 2);
  lcd.print("Chez la start up!");
}
 
boolean comparetag(int aa[14], int bb[14])
{
  boolean ff = false;
  int fg = 0;
  for (int cc = 0 ; cc < 14 ; cc++)
  {
    if (aa[cc] == bb[cc])
    {
      fg++;
    }
  }
  if (fg == 14)
  {
    ff = true;
  }
  return ff;
}
 
void checkmytags() // compares each tag against the tag just read
{
  ok = 0; // this variable helps decision-making,
  // if it is 1 we have a match, zero is a read but no match,
  // -1 is no read attempt made
  if (comparetag(newtag, tag1) == true)
  {
    ok++;
  }
  if (comparetag(newtag, tag2) == true)
  {
    ok++;
  }
}
 
void readTags()
{
  ok = -1;
 
  if (RFID.available() > 0)
  {
    // read tag numbers
    delay(100); // needed to allow time for the data to come in from the serial buffer.
 
    for (int z = 0 ; z < 14 ; z++) // read the rest of the tag
    {
      data1 = RFID.read();
      newtag[z] = data1;
    }
    RFID.flush(); // stops multiple reads
 
    // do the tags match up?
    checkmytags();
  }
 
  // now do something based on tag type
  if (ok > 0) // if we had a match
  {
    Serial.println("Acces autorise");
    digitalWrite(yes, HIGH);
    delay(1000);
    digitalWrite(yes, LOW);
 
 //affichage de l'acces autorisé
    lcd.setCursor(0,0);
    lcd.print("Chez la start up! ");
    lcd.setCursor(0,1);
    lcd.print("Acces autorise");
    
    ok = -1;
  }
  else if (ok == 0) // if we didn't have a match
  {
    Serial.println("Acces refuse");
    digitalWrite(no, HIGH);
    delay(1000);
    digitalWrite(no, LOW);
 
 //affichage de l'acces refusé
    lcd.setCursor(0,0);
    lcd.print("Chez la start up! ");
    lcd.setCursor(0,1);
    lcd.print("Acces refuse");
    
    ok = -1;
  }

}

void affiche()
{
  lcd.setCursor(0, 1);
  lcd.print(millis() /1000);
  }
  
      
  void loop()
{
  readTags();
 [size=10pt][/size]
}

saly:
...

Pour le moment j'ai commandé un lecteur RFID 13.56MkHz et je l'ai programmé, ainsi j'arrive à lire mes badges et à la fois à affiché sur un écran lcd si la carte est autorisé ou non mais aussi à allumer des LED rouges et vertes suivant le fontionnement ou non du badge.

A present, il me faut faire en sorte que quand je détecte un badge, un compteur se mets en route et ce jusqu'à ce que cette même carte soit re badger. Sachant que plusieurs autre carte peuvent etre lu entre temps.

Merci pour votre aide :slight_smile:

...

:grin:

13.56MkHz

faut choisir ton camp ! , un (futur) ingé se doit d'etre précis 8)
bon :
dimensionne correctement ton probleme : et déjà = combien de cartes RFID circule(ront) dans la nature pour cette appli ?

J'ai pour l'instant à ma disposition une carte RFID et 5badges. J'ai préféré en prendre une seule (pour le moment) afin d'y effectuer des tests, de comprendre son fonctionnement et aussi de programmer. A l'avenir plusieurs cartes seront à ma disposition.

saly:
J'ai pour l'instant à ma disposition une carte RFID et 5badges. J'ai préféré en prendre une seule (pour le moment) afin d'y effectuer des tests, de comprendre son fonctionnement et aussi de programmer. A l'avenir plusieurs cartes seront à ma disposition.

Désolé, mais repondre "plusieurs" n'est pas une reponse acceptable et digne d'un futur ingé pour exposer le projet. 8)
"plusieurs" ça commence à deux et ça n'a pas de terme fini. :grin:

  • repondre : qq unités, une ou plusieurs dizaines , qq gros milliers , pas mal de millions, etc ...
    est déjà une meilleure information pour quantifier la charge :grin:

J'aurais 5 cartes si je ne me trompe pas

saly:
J'aurais 5 cartes si je ne me trompe pas

ok
tu dois pouvoir gerer une petite dizaine de carte avec l'eeprom embarquée, avant d'envisager de passer à du plus lourd.
il te faut aussi une RTC ---> voir du coté DS1307

Tu trouves des RTC avec une EEPROM à coté cela ne coûte que quelques euros et tu t'affranchis du problème lié à la durée de vie de l'EEPROM intégrée à l'ATmega.

fdufnews:
Tu trouves des RTC avec une EEPROM à coté cela ne coûte que quelques euros et tu t'affranchis du problème lié à la durée de vie de l'EEPROM intégrée à l'ATmega.

bonsoir
Tout a fait fdufnews
J'avais oublié les "shields" surement bien pratiques composé d'un DS1307 ET d'un 24LCxxxx

jamais tripoté perso 8)

fdufnews:
Tu trouves des RTC avec une EEPROM à coté cela ne coûte que quelques euros et tu t'affranchis du problème lié à la durée de vie de l'EEPROM intégrée à l'ATmega.

J'ai pensé à utiliser une carte Galileo plutot qu'une Arduino Uno, ainsi Galileo est compatible avec arduino et comporte deja plusieurs fonctions intégré. Galileo est dotée de 256 Mo de DRAM, de 8 Mo de mémoire flash, d'un connecteur micro-SD et d'un port Ethernet 100Mbps. De plus, une horloge à temps réel y est intégré ce qui facilitera beaucoup plus de chose.
Donc plus besoin de RTC :smiley:

saly:
Donc plus besoin de RTC :smiley:

:grin:
bin si , tu en a toujours besoin
que la RTC soit déjà presente/embarquée ne change rien au fait qu'elle soit indispensable :grin:

Oui en effet, mais pas besoin d'en commander une autre :slight_smile: