Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Arduino] code capteur de couleur erroné.

    14 août 2013 à 15:29:01

    Bonjour à tous je repost donc un sujet pour cette fois j'ai un problème avec un capteur de couleur. Je sais le branché la dessus il n'y a pas de problème seulement le code qui est dans la documentation est remplit d'erreur du coup je n'arrive pas a m'en servir.

    Voila le code :

    int s0=3,s1=4,s2=5,s3=6;
    int out=2;
    int flag=0;
    byte counter=0;
    byte countR=0,countG=0,countB=0;
    void setup()
     {
     Serial.begin(115200);
     pinMode(s0,OUTPUT);
     pinMode(s1,OUTPUT); 
     pinMode(s2,OUTPUT);
     pinMode(s3,OUTPUT);
    
     }
    void TCS()
     {
     flag=0;  
     digitalWrite(s1,HIGH);
     digitalWrite(s0,HIGH);
     digitalWrite(s2,LOW);
     digitalWrite(s3,LOW);
     attachInterrupt(0, ISR_INTO, LOW);
     timer0_init();
    
     }
    void ISR_INTO()
     {
     counter++;
     }
     void timer0_init(void)
     {
      TCCR2A=0x00;
      TCCR2B=0x07;   //the clock frequency source 1024 points
      TCNT2= 100;    //10 ms overflow again
      TIMSK2 = 0x01; //allow interrupt
     }
     int i=0;
     ISR(TIMER2_OVF_vect)//the timer 2, 10ms interrupt overflow again. Internal overflow interrupt executive function
    {
        TCNT2=100;
        flag++;
     if(flag==1)
      {
        countR=counter;
        Serial.print("red=");
        Serial.println(countR,DEC);
        digitalWrite(s2,HIGH);
        digitalWrite(s3,HIGH);
      }
      else if(flag==2)
       {
        countG=counter;
        Serial.print("green=");
        Serial.println(countG,DEC);
        digitalWrite(s2,LOW);
        digitalWrite(s3,HIGH);
       }
       else if(flag==3)
        {
        countB=counter;
        Serial.print("blue=");
        Serial.println(countB,DEC);
        Serial.println("\n"); 
        digitalWrite(s2,LOW);
        digitalWrite(s3,LOW);
       
        }
        else if(flag==4)
         {
         flag=0;
         }
           counter=0;
    }
    void loop()
     {
      TCS();
    while(1);
     }
    
    

    Voila les erreurs :

    >TCS3200D.cpp: In function 'void timer0_init()': TCS3200D.cpp:38:3: error: 'TCCR2A' was not declared in this scope TCS3200D.cpp:39:3: error: 'TCCR2B' was not declared in this scope TCS3200D.cpp:40:3: error: 'TCNT2' was not declared in this scope TCS3200D.cpp:41:3: error: 'TIMSK2' was not declared in this scope TCS3200D.cpp: At global scope: TCS3200D.cpp:44:5: error: expected constructor, destructor, or type conversion before '(' token

    • Partager sur Facebook
    • Partager sur Twitter
      14 août 2013 à 15:39:54

      Et on est censé deviné le fonctionnement du capteur grâce au code ?

      • Partager sur Facebook
      • Partager sur Twitter

      Retrouvez moi sur mon blog et ma chaine Youtube !

        14 août 2013 à 16:10:52

        non il s'agit juste du code donnée dans la doc car il donne plusieurs explication aussi dans la doc que j'ai a peu près compris mais je ne comprend pas du tout le code surtout qu'il y a des erreurs.

        • Partager sur Facebook
        • Partager sur Twitter
          14 août 2013 à 16:20:09

          Ok je reformule... Comment veux tu qu'on sache comment utiliser ton code/capteur si on a pas de documentation constructeur du dit capteur ? Les capteurs ne fonctionne pas tous pareil !

          • Partager sur Facebook
          • Partager sur Twitter

          Retrouvez moi sur mon blog et ma chaine Youtube !

            14 août 2013 à 16:28:17

            http://www.robotshop.com/productinfo.aspx?pc=RB-Dfr-153&lang=fr-CA La documentation se trouve en bas dans lien utile (mon anglais est très faible ^^ )

            • Partager sur Facebook
            • Partager sur Twitter
              14 août 2013 à 16:38:15

              Tu as chercher à comprendre comprendre comment fonctionne le composant avant de copier "bêtement" le code ?

              Tu vois à qui servent S0..S4 ? comment utiliser OUT ?

              • Partager sur Facebook
              • Partager sur Twitter

              Retrouvez moi sur mon blog et ma chaine Youtube !

                14 août 2013 à 17:28:23

                Bah bien sur j'y ai passé la journée entière dessus hier donc oui j'ai chercher. J'attend pas une réponse toute cru je veux juste qu'on m'aide a comprendre, si je veux faire un projet c'est pour m'améliorer et non pas pour que les autres le fasse a ma place.

                De ce que moi j'ai comprit après je peut me trompé mais pas faute d'avoir essayée : S0 et S1 en fonction de la combinaison qu'on met cela permet de calibré par rapport a la lumière extérieur. S2 et S3 permet de gérer les filtres pour obtenir les trois couleur et donc le code RGB mais pas très bien comprit de l'utilité du "sans filtre" et le OUT c'est al fréquence de sortie mais sincèrement je ne vois pas a quo ça sert et comment ça marche.

                Désolée si j'ai mal réagi mais j'ai un peu mal prit ta réponse car c'est vraiment pas mon genre je suis quel qu'un qui aime chercher et apprendre et surtout comprendre donc je met toujours beaucoup du miens.

                • Partager sur Facebook
                • Partager sur Twitter
                  14 août 2013 à 17:45:56

                  Pas de souci, je voulais juste être sur que tu avais fait l'effort d'aller lire la doc et chercher à la comprendre (car on est pas non plus là pour bosser pour toi et je risquerais de perdre mon temps si tu attends une réponse toute prête ^^). Mais apparemment tu as cherché donc c'est cool :)

                  Alors, S0 et S1 permettent de régler la fréquence max de ta sortie. Ca permet ainsi d'utiliser une plus grande gamme de contrôleur pour le traitement (un contrôleur trop "lent" ne pourrais pas lire une fréquence trop élevé). Pour commencer, je te conseillerais d'utiliser la fréquence la plus faible (à 2% du max, de 10 à 12kHz) afin d'être tranquille de ce côté là. (S0 à Low et S1 à HIGH).

                  Ensuite, S2 et S3 permettent de choisir quelle composante de couleur tu veux étudié (rouge, bleue ou verte). Tu sélectionnes une couleur, et ensuite tu regardes la fréquence obtenu pour savoir si oui ou non il y a beaucoup de bleu/rouge/vert dans la scène étudié.

                  Donc ca c'est le principe. A priori, avec la fonction "pulseIn()" de Arduino, tu peux mesurer un créneau allant jusqu'à 10µs ce qui pourrait faire un signal de 50kHz (période complète de 20µs)...

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Retrouvez moi sur mon blog et ma chaine Youtube !

                    14 août 2013 à 17:52:14

                    Oui oui :)

                    Pour S0 et S1 j'était parti aussi sur la plus faible car en cherchant un peu partout sur le internet il prenais ça en général.

                    Mais pour S2 et S3 est ce que tu comprend l’intérêt du sans filtre ?

                    Bon ça va j'avais comprit a peu près la même chose que toi.

                    J'espère que tu m'en voudras pas mes ta dernière phrase je ne la comprend pas trop j'essaye de la comprendre en la relisant mais ça te dérangerai de me réexpliquer ?

                    -
                    Edité par Natûral 14 août 2013 à 17:53:16

                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 août 2013 à 18:01:29

                      Le sans filtre pourrait servir à "juste" faire une mesure de l'intensité lumineuse ? (car s'il fait tout noir ca vaut pas le coup de faire 3 mesures pour R puis G puis B ?)

                      Pour la dernière chose. chez Arduino il existe une fonction qui s'apelle "pulseIn()". Elle permet de mesurer la durée d'état haut d'un signal. Donc pour toi, en mesurant la durée d'état haut de ta fréquence, tu peux déterminer la fréquence de OUT et ainsi la mettre en relation avec les min et max attendu pour savoir si tu as beaucoup de lumière ou pas.

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Retrouvez moi sur mon blog et ma chaine Youtube !

                        14 août 2013 à 18:04:26

                        Bah ça je pense car le but c'est quand même d'avoir les trois couleur en sorti pour avoir la couleur final ?

                        D'accord je comprend mieux, du coup en fonction de ce qui passe je peut connaître la quantité de rouge qu'il y a dans la couleur (si on a choisi le filtre rouge).

                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 août 2013 à 18:05:11

                          A peu près ouai

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Retrouvez moi sur mon blog et ma chaine Youtube !

                            14 août 2013 à 18:08:15

                            Je te résume ce que je pense avoir comprit avec ton aide. 

                            S0 et S1 je les met a 2%

                            Apres je test les trois filtres  RGB et pour chaque je prend ce qui sort du OUT. Et la fonction qui me permet de voir ce qui sort du OUT est "pulseIn()".

                            • Partager sur Facebook
                            • Partager sur Twitter
                              14 août 2013 à 18:09:46

                              en résumé ouai :)

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Retrouvez moi sur mon blog et ma chaine Youtube !

                                14 août 2013 à 18:13:03

                                D'accord merci beaucoup pour ton aide.

                                Maintenant une autres question ^^ (je sais je suis embétante :p ) quand je regarde le code qui est proposé je vois qu'il affiche des "trucs". Est ce qu'il existe un logiciel pour simulé tout avant d'envoyé dans la Arduino ? Car comment savoir ce que je sort de mon capteur si je vois rien.

                                Je sais si j'ai été claire.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  14 août 2013 à 18:32:35

                                  Tu pourrait utiliser un oscilloscope pour mesurer la fréquence et vérifier que tu obtiens bien pareil avec ton Arduino...

                                  Tu parles de quoi quand tu parles des "trucs" ?

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Retrouvez moi sur mon blog et ma chaine Youtube !

                                    14 août 2013 à 18:42:41

                                    Mais comment je peux voir sur ma arduino ?

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      14 août 2013 à 18:45:49

                                      Bin a toi d'écrire des cas de test. Tu peux par exemple allumer une LED si tu dépasses une valeur, ou comme le programme d'exemple, tu peux envoyer sur la voie série les valeurs que tu as lu

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Retrouvez moi sur mon blog et ma chaine Youtube !

                                        14 août 2013 à 18:52:42

                                        Euh je vais pas te mentir je suis un peu largué la mais je comprend l'idée que tu veux me dire. Le programme je ne comprend pas tout ce qui se passe et bon j'aurai bien voulut l'envoyé mais il y a des erreurs.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          14 août 2013 à 18:56:25

                                          Si tu as compris ce qu'on a dit plus tôt, tu devrais pouvoir rédiger un nouveau programme pour faire ca (l'exemple ne compilant pas)

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Retrouvez moi sur mon blog et ma chaine Youtube !

                                            14 août 2013 à 19:11:31

                                            D'accord je vois de mieux en mieux ce qu'il faut faire. Juste pour être sur du OUT je récupère une fréquence ? (en Hz ?) et je la compare a laquelle ?

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              14 août 2013 à 19:19:34

                                              tu la compares à ce qui est dans la doc technique

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Retrouvez moi sur mon blog et ma chaine Youtube !

                                                14 août 2013 à 19:24:11

                                                d'accord c'est ce que je pensais mais faut-il pas faire un calcule par rapport au 2% qu'on a choisie ? Car sinon je prend comme référence 2HZ ~ 500KHZ qui signifie a 2Hz y a pas la couleur et à 500kHz y en a 255.

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  16 août 2013 à 19:39:11

                                                  Avant de uper, tu as essayé de faire des tests (qui ne coûtent rien, ton composant va pas se détruire parce que tu fais une mesure !).

                                                  Maintenant prenons un exemple. Tu te mets dans le cas 2% de F max (donc 12kHz max). Datasheet page 4, il t'indique les résultats que tu peux attendre entre la longueur d'onde et la fréquence. Pour une longueur d'onde de 470nm (bleu), on obtiendra en sélectionnant le capteur bleu 61 à 84% de Fmax et moins de 50% pour les autres couleurs. Même principe pour les autres couleurs/capteurs.

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Retrouvez moi sur mon blog et ma chaine Youtube !

                                                  [Arduino] code capteur de couleur erroné.

                                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                  • Editeur
                                                  • Markdown