Page 3 sur 9

re: projet arduino

Posté : sam. déc. 09, 2017 9:21 pm
par maman94
tristanlcf a écrit :tiens voila le code

alors pour le RFID et la MASTERKEY sa marche avec un badge ok

mais je sais pas comment rajouté une 2eme cle

tiens pas compte des led ni du 2 eme relais

merci

Code : Tout sélectionner

 
//definir les librairie
    #include <SPI.h>
    #include <RFID.h>
Donc là, c'est indispensable.

C'est là dedans que sont définies toutes les fonctions spécifiques à la rfid et la gestion du protocole spi.

Code : Tout sélectionner

//code system
    RFID monModuleRFID(10,9);
  
  
//definir les variable
   [color="#008000"] int UID[5]={};
    int MASTERKEY[5]={192,56,115,163,40};[/color]
De ce que je comprends par la suite, ton tag est définit là

Code : Tout sélectionner

    void setup()   { 
    Serial.begin(9600);  //code pour la consol
    SPI.begin();//code system
    monModuleRFID.init();//code system
On finit de lancer initialiser tout le nécessaire.

Code : Tout sélectionner

   void loop(){
      detection_RFID(); //lance le void de detection
      plus_de_3s(); //lance le void de calcul de plus de 3s
      if(contact_activer == true){ //variable si le contact est activer
 
        }
      else{
        
          }
          contact_activer = retar_contact_activer; //sincronise le contact avec le retardateur
      }
   
   
   void plus_de_3s(){
     if (detect_cart_3s == true && dernier_detect_cart_3s == false){ //détection du badge
         debut_de_detection = millis();  //initialisation du compteur
         variable_de_debut_de_detection = true; //enregistrement du changement du badge
      }
      if ( variable_de_debut_de_detection == true && detect_cart_3s == true && dernier_detect_cart_3s == true){ //le badge etait toujours detecter
                                                                                 
         if ((millis() - debut_de_detection) >= temps_defini){ //calcule du temps ecouler                                 
               retar_contact_activer = false; //si plus de 3s alors le retar est = a false
            delay(50); //on laise a delai de 50ms
         }             
      }                                                
      dernier_detect_cart_3s = detect_cart_3s; //on change la variable pour le renouvellement de la boucle
   }
   
 
De ce que je comprends, là c'est la détection de la présence d'un tag. Est-il là suffisamment longtemps etc.
C'est nécessaire. Mais là n'est pas ta question.

Code : Tout sélectionner

   //void de detection du RFID
   void detection_RFID(){
  if (monModuleRFID.isCard()) {  
          if (monModuleRFID.readCardSerial()) {       
            for(int i=0;i<=4;i++)
            {
              UID[i]=monModuleRFID.serNum[i];
            }
          }
          
         [color="#008000"] if (UID[0] == MASTERKEY[0]
           && UID[1] == MASTERKEY[1]
           && UID[2] == MASTERKEY[2]
           && UID[3] == MASTERKEY[3]
           && UID[4] == MASTERKEY[4])[/color]
Nous y voila.

Ce qui est lu UID[] est comparé à ce qui a été stocké MASTERKEY[i allant de 0 à 4].
Tous les UID doient être égaux aux MASTERKEY (&& c'est un ET logique).

Donc si tu veux un deuxième tag, il faut :

- agir ici, style :
il te faut un IUD à comparer avec MASTERKEY1 (tag 1) OU avec MASTERKEY2 (tag 2)

if (
(UID[0] == MASTERKEY1[0]
&& UID[1] == MASTERKEY1[1]
&& UID[2] == MASTERKEY1[2]
&& UID[3] == MASTERKEY1[3]
&& UID[4] == MASTERKEY1[4])

|| //OU logique

(UID[0] == MASTERKEY1[0]
&& UID[1] == MASTERKEY2[1]
&& UID[2] == MASTERKEY2[2]
&& UID[3] == MASTERKEY2[3]
&& UID[4] == MASTERKEY2[4])
)


- donc agir tout au début en définissant MASTERKEY1 et MASTERKEY2

Code : Tout sélectionner

          {
           retar_contact_activer = true; //si il detecte le bon alors on mais le retard = a true
           detect_cart_3s = true; //si il detecte le bon alors on lance le detect cart
          }
          else
          {
           //si il detect le mauvais alor rien ne se passe 
          }          
          monModuleRFID.halt();
    }
    else{
            detect_cart_3s = false; //si il n'en detecte pas alor on ne lance pas ou anule la detection pour le compteur
          }
  }
La suite, c'est la gestion, si égalité UID et MASTERKEY, alors 'retard_contact_activer' vaut 'true' etc, partant de là tu fais ce que tu veux : déclencher une ouverture par exemple.

re: projet arduino

Posté : sam. déc. 09, 2017 9:26 pm
par riga
C'était plus simple avec le grafcet :D

Vous avez essayé ardublock ou un truc du genre ?

re: projet arduino

Posté : sam. déc. 09, 2017 9:29 pm
par tristanlcf
ok je me penche sur le truc un peut plus tard dans la nuit la je suis plus trop dedans je suis sur l imprimante 3d pour la boite qui va bien pour mettre tous le machin dans le toy ;)

merci bien je te dit quoi demain voir demain :D

merci

re: projet arduino

Posté : sam. déc. 09, 2017 9:32 pm
par tristanlcf
riga a écrit :C'était plus simple avec le grafcet :D

Vous avez essayé ardublock ou un truc du genre ?
connait pas du tout le truc :hein:

re: projet arduino

Posté : sam. déc. 09, 2017 9:34 pm
par riga
C'est du code graphique, par boite de fonction.

Regarde sur google image : ardublock

Doit y en avoir d'autres

re: projet arduino

Posté : sam. déc. 09, 2017 9:37 pm
par maman94
riga a écrit :C'était plus simple avec le grafcet :D

Vous avez essayé ardublock ou un truc du genre ?
Oui le grafcet c'est mieux.

C'est inadmissible que de fourguer du code C like en 2017.

Les électroniciens trouvent ça génial. Tu comprends, arduino, il n'y a plus de montage à faire.

Le types qui découvrent la standardisation. Les automaticiens sont à des années lumières devant eux.

(je ne parle pas des électroch qui restent sur une sorte de ladder parce que ne maitrisant pas le graphcet).

ardublock, des collègues ont essayé. les premières versions buggaient des fois.

(depuis ? Il existe des versions francisées)


Comme je fais(ais) les installs de tous les ordis, j'ai pas voulu le faire en plus.

A priori le MIT ou google ont fait des site de programmation en ligne. J'ai pas encore testé.


Sinon, automgen peut faire un fichier que tu peux passer dans l'environnement de dev arduino.

Il existe une manip similaire avec flowcode. (mais c'est nul aussi parce que algorigramme).

Matlab, lui permet de programmer avec des graph d'état ou de séquence sysml (mais comme je sais pas les rêgles d'évolutions entre état, c'est nul aussi).

re: projet arduino

Posté : sam. déc. 09, 2017 9:41 pm
par maman94
tristanlcf a écrit :ok je me penche sur le truc un peut plus tard dans la nuit la je suis plus trop dedans je suis sur l imprimante 3d pour la boite qui va bien pour mettre tous le machin dans le toy ;)
Achète un boitier.
ou
Assemble en un à partir de plaque de plastique.
ou
Mets dans une boite de dérivation.

Le boiter à l'imprimante 3d, ce sont des heures d'impression pour rien.
tristanlcf a écrit : merci bien je te dit quoi demain voir demain :D

merci
Pas de quoi.

re: projet arduino

Posté : sam. déc. 09, 2017 9:44 pm
par riga
Quand j'étais au collège, ya 20 ans donc, on faisait des grafcet sur les PC sous dos, avec le grafcet qu'on connait.
Après au lycée c'était sur des api telemecanique tsx17.
Maintenant y'a pléthores de systèmes, avec chacun ses facultés/ergonomies.
J'ai jamais éte fan de siemens, mais leur régulateirs font le job facilement comparé a d'autres plus laborieux.
Mais toute la prog se fait par boite logique, beaucoup plus simple.

re: projet arduino

Posté : sam. déc. 09, 2017 10:04 pm
par maman94
riga a écrit :Quand j'étais au collège, ya 20 ans donc, on faisait des grafcet sur les PC sous dos, avec le grafcet qu'on connait.
Après au lycée c'était sur des api telemecanique tsx17.

Alors, les profs d'électrotech sont restés bloqués sur du ladder amélioré.
Parce que la logiciel gratuit livré avec leurs automates fonctionne à ça.

Mais comme c'est improgrammable, il font d'abord écrire un grafcet pour après le faire transcrire en ladder (pré, post, etc). En croyant qu'ils sont les seuls à pouvoir le lire.
Des fois, ils utilisent automgen pour avoir visuellement un beau grafect. Mais surtout pas de compilation, transfert avec pour balancer sur l'automate. Parce qu'il faut définir la cible. Alors que dans leur logiciel livré avec l'automate, tu peux directement la choisir à partir d'un visuel.

Bref, programmation compliquée mais désigner une cible plus facile (mais guère plus).
Et avec ça, cela veut programmer des IHM tactiles avec vijeo designer (alors qu'automgen depuis des lustres....)


Les profs d'électronique faisaient de l'algorigramme. Mais grâce à arduino sont revenus au code pure et dure.

Ce qu'ils apprécient c'est de ne pas avoir à faire la carte qui accueille le micro-contrôleur.

Ils découvrent le concept d'automate standardisé. :roll:


Bref en depuis le passage STI, STI2D (6 ans), on a régressé en maitrise programmation. Mais, cela correspond mieux à ce qui se fait dans le monde informatique électronique.
Même moi, j'ai renoncé au grafect parce qu'il faut installer un logiciel en plus, qui coute. Et parce que les codes composants sont donnés en C like que tout le monde utilise.

Les automaticiens ont perdus. Pourtant, ce sont eux qui ont tout fait. :ouin:
riga a écrit : Maintenant y'a pléthores de systèmes, avec chacun ses facultés/ergonomies.
Oui.
M'enfin ladder ou C like pour débuter, c'est à chier.

Le grafcet c'est très bien pour décrire un comportement. Après, il y a un truc qui s'appelle le compilateur pour faire le taf.
riga a écrit : J'ai jamais éte fan de siemens, mais leur régulateirs font le job facilement comparé a d'autres plus laborieux.
Mais toute la prog se fait par boite logique, beaucoup plus simple.
Oui. C'est l'ergonomie.

re: projet arduino

Posté : sam. déc. 09, 2017 10:07 pm
par tristanlcf
maman94 a écrit :

Code : Tout sélectionner

 
//definir les librairie
    #include <SPI.h>
    #include <RFID.h>
Donc là, c'est indispensable.

C'est là dedans que sont définies toutes les fonctions spécifiques à la rfid et la gestion du protocole spi.

Code : Tout sélectionner

//code system
    RFID monModuleRFID(10,9);
  
  
//definir les variable
   [color="#008000"] int UID[5]={};
    int MASTERKEY[5]={192,56,115,163,40};[/color]
De ce que je comprends par la suite, ton tag est définit là

Code : Tout sélectionner

    void setup()   { 
    Serial.begin(9600);  //code pour la consol
    SPI.begin();//code system
    monModuleRFID.init();//code system
On finit de lancer initialiser tout le nécessaire.

Code : Tout sélectionner

   void loop(){
      detection_RFID(); //lance le void de detection
      plus_de_3s(); //lance le void de calcul de plus de 3s
      if(contact_activer == true){ //variable si le contact est activer
 
        }
      else{
        
          }
          contact_activer = retar_contact_activer; //sincronise le contact avec le retardateur
      }
   
   
   void plus_de_3s(){
     if (detect_cart_3s == true && dernier_detect_cart_3s == false){ //détection du badge
         debut_de_detection = millis();  //initialisation du compteur
         variable_de_debut_de_detection = true; //enregistrement du changement du badge
      }
      if ( variable_de_debut_de_detection == true && detect_cart_3s == true && dernier_detect_cart_3s == true){ //le badge etait toujours detecter
                                                                                 
         if ((millis() - debut_de_detection) >= temps_defini){ //calcule du temps ecouler                                 
               retar_contact_activer = false; //si plus de 3s alors le retar est = a false
            delay(50); //on laise a delai de 50ms
         }             
      }                                                
      dernier_detect_cart_3s = detect_cart_3s; //on change la variable pour le renouvellement de la boucle
   }
   
 
De ce que je comprends, là c'est la détection de la présence d'un tag. Est-il là suffisamment longtemps etc.
C'est nécessaire. Mais là n'est pas ta question.

Code : Tout sélectionner

   //void de detection du RFID
   void detection_RFID(){
  if (monModuleRFID.isCard()) {  
          if (monModuleRFID.readCardSerial()) {       
            for(int i=0;i<=4;i++)
            {
              UID[i]=monModuleRFID.serNum[i];
            }
          }
          
         [color="#008000"] if (UID[0] == MASTERKEY[0]
           && UID[1] == MASTERKEY[1]
           && UID[2] == MASTERKEY[2]
           && UID[3] == MASTERKEY[3]
           && UID[4] == MASTERKEY[4])[/color]
Nous y voila.

Ce qui est lu UID[] est comparé à ce qui a été stocké MASTERKEY[i allant de 0 à 4].
Tous les UID doient être égaux aux MASTERKEY (&& c'est un ET logique).

Donc si tu veux un deuxième tag, il faut :

- agir ici, style :
il te faut un IUD à comparer avec MASTERKEY1 (tag 1) OU avec MASTERKEY2 (tag 2)

if (
(UID[0] == MASTERKEY1[0]
&& UID[1] == MASTERKEY1[1]
&& UID[2] == MASTERKEY1[2]
&& UID[3] == MASTERKEY1[3]
&& UID[4] == MASTERKEY1[4])

|| //OU logique

(UID[0] == MASTERKEY1[0]
&& UID[1] == MASTERKEY2[1]
&& UID[2] == MASTERKEY2[2]
&& UID[3] == MASTERKEY2[3]
&& UID[4] == MASTERKEY2[4])
)


- donc agir tout au début en définissant MASTERKEY1 et MASTERKEY2

Code : Tout sélectionner

          {
           retar_contact_activer = true; //si il detecte le bon alors on mais le retard = a true
           detect_cart_3s = true; //si il detecte le bon alors on lance le detect cart
          }
          else
          {
           //si il detect le mauvais alor rien ne se passe 
          }          
          monModuleRFID.halt();
    }
    else{
            detect_cart_3s = false; //si il n'en detecte pas alor on ne lance pas ou anule la detection pour le compteur
          }
  }
La suite, c'est la gestion, si égalité UID et MASTERKEY, alors 'retard_contact_activer' vaut 'true' etc, partant de là tu fais ce que tu veux : déclencher une ouverture par exemple.





:clap: :clap: :clap: :clap: :clap:

variable d entree de definition du 2eme tag

Code : Tout sélectionner

int MASTERKEY1[5]={192,56,115,163,40};
    int MASTERKEY2[5]={148,126,98,153,17};



et init de ton ajout

Code : Tout sélectionner

 if ( 
            (UID[0] == MASTERKEY1[0]
          && UID[1] == MASTERKEY1[1]
          && UID[2] == MASTERKEY1[2]
          && UID[3] == MASTERKEY1[3]
          && UID[4] == MASTERKEY1[4])

          || //OU logique

            (UID[0] == MASTERKEY2[0]
          && UID[1] == MASTERKEY2[1]
          && UID[2] == MASTERKEY2[2]
          && UID[3] == MASTERKEY2[3]
          && UID[4] == MASTERKEY2[4])
          )
          {

sa fonctionne a merveille

merci ;)