lundi 7 mars 2011

Matériel Contrôle d'accès RFID.



L'autre jour, je suis tombé sur ce matériel : 


       Contrôle d'accès RFID


     Ce module permet pour la modique somme de 18 euros de réaliser des ouvertures en présence de cartes ou badges RFID ou code d'accès. Le module permet d'enregistrer multiples badges, cartes en 120khz.
Il est livré avec une dizaine de cartes ainsi qu'un dizaine de badges, sympa ....


Voici les démonstrations en vidéo : 



(notez la musique trés télé-achat ;))





Enfin c'est surtout cette vidéo qui m'a donné envie :


        Et oui quand on a une alarme, l'idée est donc de l'activer simplement, le Rfid est parfaitement adapté pour ça. Je sors de la maison et je passe mon badge devant le capteur, 1 minute plus tard, l'alarme s'active.


J'entre dans la maison, je désamorce l'alarme en passant le badge devant le capteur. Je peux aussi taper un code sur le Clavier.


Voici donc ce que j'ai reçu : 


          Boitier de commande en plastique argenté (capteur en haut à gauche), pavé numérique, et bouton pour la sonnette. Ce module s'alimente en 12v 250ma min.

Le dos de l'appareil : 


Un bornier est disponible, dans l'ordre : 

  1. +12v
  2. GND
  3. -(12v)
  4. +(12)
  5. Module serrure à gache électrique contact
  6. Module serrure à gache électrique contact
  7. Module sonnette contact
  8. Module sonnette contact
           Pour info, j'utilise les bornes 1 à 4, les bornes 3 & 4 délivrent du 12v pendant 3 secondes (il est possible de paramétrer le temps d'ailleurs) si les badges/cartes/codes sont reconnus. Un jumper existe pour fournir 12v en continu et 0v lorsque l'authentification est correcte (type NO : normalement ouvert). Il est également possible de combiner un badge RFID associé à un code sur le pavé numérique. Bref assez complet.

          Les cartes fournies (les badges sont petits et bleus, on les distingue sur la photo en haut à droite) :

 
            Maintenant, il va falloir "intégrer tout ça". Pour ce genre de matériel, une solution magique s'impose, l'Arduino ! L'arduino est une carte électronique multifonction et bon marché qui vous permet d'accéder à des valeurs analogiques ou digitales mais également de faire une foultitude d'autres choses. Un langage de programmation (Java style) est disponible avec moults exemples. Les codes (sketchs) sont uploadés sur la carte via un petit logiciel.


           Il existe plusieurs sortes de cartes, perso j'ai un module de base Arduino avec un ethernet shield (permet d'accèder via ethernet à la carte), et j'ai également enfiché une plaque de type Lab.

           Je relie mon transfo aux bornes 0 & 1 du module d'accès. Je relie ensuite les bornes 2 & 3 à un relais 12v (et oui, je ne voudrais mettre du +12v sur mon Arduino). Un relais de type automobile suffira. Il aura pour rôle lorsque le 12v apparaît de fermer le circuit supérieur et donc d'alimenter en 5v la borne digitale 5 de l'Arduino.

Photo du transfo : 

          



Le montage (tout en haut, le fameux jumper permettant le NO ou NC): 


      


       Bon, la partie matérielle est terminée, reste la partie logicielle. 

Côté Serveur : 

           Pour l'instant en attendant le refactoring, j'utilise une action Struts2 qui va récupérer les valeurs que l'Arduino transmettra via une requête HTTP. Cette requête balancera en paramètre les valeurs des différentes bornes (analogiques ou digitales) de l'Arduino. du genre http://monserveur/ArduinoAction?data=d0=1;d1=2;d3=3 .... Il me suffit donc du côté Serveur de récupérer le paramètre data et de l'analyser.

Côté Arduino : 

              On va donc faire un programme qui boucle à l'infinie (avec une pause entre chaque itération) pour transmettre les informations au serveur (Voici le programme, je me suis bien inspiré des exemples fournis sur le site) : 


/*
  Web Client, upload data from arduino Board
*/


#include <SPI.h>
#include <Ethernet.h>


// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1, 6 };


// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
Server server(80);
//  The address of the server you want to connect to (pachube.com):
byte homeAutomate[] = { 
  192,168,1,66 }; // HomeAutomate
  Client client(homeAutomate, 80);


void setup()
{
  // start the Ethernet connection and the server:
   Ethernet.begin(mac, ip);
   //Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
  delay(5000);
  //server.begin();
}


void loop()
{
  
   // output the value of each analog input pin
          String a0="A0=";
          String data0=analogRead(0);
          String a1="A1=";
          String data1=analogRead(1);
          String a2="A2=";
          String data2=analogRead(2);
          String a3="A3=";
          String data3=analogRead(3);
          String a4="A4=";
          String data4=analogRead(4);
          String a5="A5=";
          String data5=analogRead(5);
          
          String d0="D0=";
          String ddata0=digitalRead(0);
          String d1="D1=";
          String ddata1=digitalRead(1);
          String d2="D2=";
          String ddata2=digitalRead(2);
          String d3="D3=";
          String ddata3=digitalRead(3);
          String d4="D4=";
          String ddata4=digitalRead(4);
          String d5="D5=";
          String ddata5=digitalRead(5);
   if (client.connect()) {
    String adata=a0 + data0 +";" + a1 + data1 +";"+ a2 + data2 +";"+ a3 + data3 +";"+ a4 + data4 +";" + a5 + data5 ;
    String ddata=d0 +ddata0 + ";" + d1 + ddata1 + ";" + d2 + ddata2 +";" + d3 + ddata3 + ";" + d4 + ddata4 +";"+ d5 + ddata5;
    client.println("GET /HomeAutomate/ArduinoAction?data=" + adata + ";" + ddata);
    client.println();
  }        
    // Attente de 1 seconde
    delay(1000);
    // close the connection:
    client.stop();
  }


Ps : On aurait pu construire la chaine de data en dynamique en faisant une boucle for sur les différentes bornes, genre : 

for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            data+=analogRead(analogChannel);
          }

mais cela ne fonctionnait pas systématiquement, je suis donc parti sur quelque chose de plus rustique mais qui fonctionne. (à noter le délai de 1000 ms, on transmettra donc les valeurs toutes les secondes).
On uplodad ensuite le code sur l'Arduino



On démarre le serveur Tomcat et O miracle : 




          Du Côté Code, le message Arduino est routé vers l'objet Java Unit Arduino qui analyse les valeurs et déclenche les traitements ici une activation de l'alarme et désactivation.

Démonstration : 




C'est tout pour cet article.

4 commentaires:

  1. Que arrive t'il en cas de sabotage du clavier

    RépondreSupprimer
    Réponses
    1. C'est clair qu'en cas de destruction et intrusion, on peut aisément faire un pont sur le relai et donc désactiver l'alarme. Mais bon comme tout autre matériel d'ailleurs, on trouve toute la documentation sur internet. Après il faut être documenté avant d'agir. Pour se blinder contre ça, il faut s'inventer d'autres protocoles mais humains et non décelables (Genre 2 arrêts via RFID pour confirmer l'arrêt de l'alarme, et ça même avec toute la documentation du monde, c'est imparable).

      Supprimer
  2. bonjour
    je voudrais installer ce clavier rfid pour commander une gache de portillon deja relié a un visiophone mais la notice est incompréhensible
    branché comme vous ma gache reste ouverte en permanence....
    les bornes push et lock delivre du 12v en permanence....
    vous pouvez m'aider?

    RépondreSupprimer
  3. Bonjour, désolé pour la réponse tardive.
    Il sort du 12v en permanence, et en passant un badge rfid, le 12v s'interrompt-il ?
    Un jumper existe pour fournir 12v en continu et 0v lorsque l'authentification est correcte (type NO : normalement ouvert), essayez de changer de place le jumper (petit pont en plastique). il est est peut être en NO ?

    RépondreSupprimer