projet arduino

Mécanique et réparations : Vos expériences, vos méthodes, vos coups de gueule...

Modérateur : vincent sch

Avatar du membre
maman94
Quatre-Quatreux
Messages : 5594
Date d’inscription : décembre 2013
Statut : Hors ligne

re: projet arduino

#21

Message 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.
Les idées à la con, c'est maison.
Piéton auto-stoppeur.
Avatar du membre
riga
Quatre-Quatreux
Messages : 1657
Date d’inscription : mars 2011
Localisation : Tours
Statut : Hors ligne

re: projet arduino

#22

Message par riga »

C'était plus simple avec le grafcet :D

Vous avez essayé ardublock ou un truc du genre ?
Avatar du membre
tristanlcf
Quatre-Quatreux
Messages : 14752
Date d’inscription : octobre 2007
Localisation : 05
Contact :
Statut : Hors ligne

re: projet arduino

#23

Message 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
Image
Avatar du membre
tristanlcf
Quatre-Quatreux
Messages : 14752
Date d’inscription : octobre 2007
Localisation : 05
Contact :
Statut : Hors ligne

re: projet arduino

#24

Message 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:
Image
Avatar du membre
riga
Quatre-Quatreux
Messages : 1657
Date d’inscription : mars 2011
Localisation : Tours
Statut : Hors ligne

re: projet arduino

#25

Message par riga »

C'est du code graphique, par boite de fonction.

Regarde sur google image : ardublock

Doit y en avoir d'autres
Avatar du membre
maman94
Quatre-Quatreux
Messages : 5594
Date d’inscription : décembre 2013
Statut : Hors ligne

re: projet arduino

#26

Message 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).
Les idées à la con, c'est maison.
Piéton auto-stoppeur.
Avatar du membre
maman94
Quatre-Quatreux
Messages : 5594
Date d’inscription : décembre 2013
Statut : Hors ligne

re: projet arduino

#27

Message 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.
Les idées à la con, c'est maison.
Piéton auto-stoppeur.
Avatar du membre
riga
Quatre-Quatreux
Messages : 1657
Date d’inscription : mars 2011
Localisation : Tours
Statut : Hors ligne

re: projet arduino

#28

Message 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.
Avatar du membre
maman94
Quatre-Quatreux
Messages : 5594
Date d’inscription : décembre 2013
Statut : Hors ligne

re: projet arduino

#29

Message 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.
Les idées à la con, c'est maison.
Piéton auto-stoppeur.
Avatar du membre
tristanlcf
Quatre-Quatreux
Messages : 14752
Date d’inscription : octobre 2007
Localisation : 05
Contact :
Statut : Hors ligne

re: projet arduino

#30

Message 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 ;)
Image
Répondre