IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Aide projet arduino


Sujet :

Arduino

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Aide projet arduino
    Bonjour

    j'ai un projet en tpe

    je vous explique le projet Arduino

    c'est un bras articuler qui dois attraper un jeton de poker pour le ranger dans une boite en fonction de sa couleur

    par exemple: le bras se positionne en position initiale puis se position sur la position 1 emplacement du premier jeton et capte la couleur du jeton si le jeton est rouge il le met dans la boite rouge sinon vert boite verte ... puis il se positionne a la position 2 et capte la couleur ...

    le bras articuler à 6 moteurs que je peut piloter la n'est pas mon problème mon problème est le capteur

    Voici mon code pour piloter les moteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <Servo.h>
     
    Servo myservo;   //declaration du moteur
    Servo myservo2;  //les deux moteurs en bas
    Servo myservo3;
    Servo myservo4;
    Servo myservo5;
     
     
    void setup()
    {
      myservo.attach(9);
      myservo.write(90); //rotation en degres du moteur
    delay(1000);
      myservo2.attach(11);
      myservo2.write(90);
    delay(1000);
      myservo3.attach(10);
      myservo3.write(90);
    delay(1000);
      myservo4.attach(6);
      myservo4.write(90);
     delay(1000);
      myservo5.attach(5);
      myservo5.write(30);
      delay(2000);
    }
     
    void loop()
    {
      myservo.attach(9);
      myservo.write(45);
    delay(1000);
      myservo2.attach(11);
      myservo2.write(45);
    delay(1000);
      myservo3.attach(10);
      myservo3.write(45);
    delay(1000);
      myservo4.attach(6);
      myservo4.write(45);
     delay(1000);
      myservo5.attach(5);
      myservo5.write(45);
    }
    et voici le code pour le capteur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    int s0=3,s1=4,s2=5,s3=6;//branchements entrées capteurs
    int out=2;//branchement sortie capteur
    int flag=0; //variable pour distinguer les 3 cas
    int LedR=9;
    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);
     pinMode(LedR,OUTPUT);
     
     }
    void TCS()
     {
     flag=0; 
     digitalWrite(s1,HIGH);
     digitalWrite(s0,LOW); //frequence 20%
     digitalWrite(s2,LOW);// s2 = s3 =0 = RED
     digitalWrite(s3,LOW);
     attachInterrupt(0, ISR_INTO, CHANGE);
     timer0_init();
     
     }
    void ISR_INTO()
     {
     counter++; //couter=counter+1
     }
     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);
     
     
        }
        //if(countR > countB && countR > countG)
        //{digitalWrite(LedR,HIGH);
        }
        else if(flag==4)
         {
         flag=0;
         }
           counter=0;
    }
    void loop()
     {
      TCS();
    while(1);
     }
    Mon problème est que j'aimerais que le capteur soit utiliser après que les moteurs soit positionner mais je ne voit pas comment merci que votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 647
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    Bonjour,

    bizarre ces codes. Tu as 2 Arduino ou 1 seul ? Si tu as 1 Arduino pourquoi séparer les codes ?
    Pour le code "moteurs" :
    - un copier-coller de la fonction setup() dans le loop()

    Je doute réellement que le code pour les capteurs fonctionne :
    - des variables déclarées un peu n'importe où ;
    - un while(1) dans la fonction loop() ;
    - la fonction ISR n'est jamais appelée.

    Quel capteur de couleur utilises-tu ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    salut merci pour ta reponse
    j'ai un seul arduino le code pour les moteurs fonctionne bien. Mais les codes sont sépare parceque j'ai dabord fait le code pour les moteur et mon prof ma donner celui pour le capteur dont je n'est pas la reference mais il est similaire a celui ci http://www.learningaboutelectronics....or-circuit.php

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Salut,
    Et tu souhaites faire quoi au juste ?
    Faire un seul programme avec les deux ?

    Citation Envoyé par Auteur
    - des variables déclarées un peu n'importe où ;
    - un while(1) dans la fonction loop() ;
    - la fonction ISR n'est jamais appelée.
    - Il y a en effet une variable i qui ne sert pas en plus, elle a peut être servi au débogage ?
    - Pour le while(1); dans le loop() tu as raison ce n'est pas normal, ce qu'il fallait faire c'est mettre la fonction TCS() à la fin de setup et ne rien mettre dans loop()
    - ISR = Interrupt Sub Routine, c'est une fonction d'interruption et elle sera appelée lorsque le Timer2 débordera

    Le capteur semble être un convertisseur couleur / fréquence (image d'une couleur) et le programme devrait être une espèce de fréquencemètre mais j'ai pas l'impression qu'il soit fait comme ça !
    Je ne comprends pas bien.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    salut
    oui je souhaiterais faire un programme avec les deux et que le capteur soit utiliser pour capter la couleur et renvoie l'information pour que l'utilise pour nous permettre de l'utiliser

    est ce que c'est mieux comme cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    int s0=3,s1=4,s2=5,s3=6;//branchements entrées capteurs
    int out=2;//branchement sortie capteur
    int flag=0; //variable pour distinguer les 3 cas
    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,LOW); //frequence 20%
     digitalWrite(s2,LOW);// s2 = s3 =0 = RED
     digitalWrite(s3,LOW);
     attachInterrupt(0, ISR_INTO, CHANGE);
     timer0_init();
     
     }
    void ISR_INTO()
     {
     counter++; //couter=counter+1
     }
     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);
     
     
        }
        //if(countR > countB && countR > countG)
        //{digitalWrite(LedR,HIGH);
        }
        else if(flag==4)
         {
         flag=0;
         }
           counter=0;
           TCS();
    }
    void loop()

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 647
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    Citation Envoyé par nicos77186 Voir le message
    oui je souhaiterais faire un programme avec les deux et que le capteur soit utiliser pour capter la couleur et renvoie l'information pour que l'utilise pour nous permettre de l'utiliser

    est ce que c'est mieux comme cela ?
    pas du tout.... Tu as groupé les deux codes sans réfléchir un minimum (je suis sévère, mais c'est l'impression qui ressort quand on lit le code).
    La méthode utilisée (incrément d'une variable flag dans la fonction ISR(TIMER2_OVF_vect)) pour déterminer la couleur me laisse vraiment perplexe. Cela veut dire que tous les 4 bonbons tu retrouves les mêmes couleurs et dans le même ordre : "rouge, vert, bleu, rouge, vert, bleu...."

    Pour la référence du capteur, normalement elle doit être indiquée sur sa platine.
    Je pense que tu devras lire la documentation Arduino : https://www.arduino.cc/en/Reference/HomePage et les cours et tutoriels pour apprendre Arduino.
    - fonction setup
    - fonction loop
    - attachInterrupt
    - Bibliothèque Servo

    Ensuite, ton professeur ne peut pas te guider a minima ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    non je n'ai pas encore regroupé les codes. Je comprend que tu soit sévère, je comprend tout à fait
    voici la référence du capteur RGB TCS3200
    je lit tout ce que tu m'as donné
    mon prof lui même ne connait pas le capteur, il a fait des recherches sur le capteur, c'est lui qui m'a donné le code pour le capteur.

  8. #8
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 647
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    Ok. D'après la documentation (je la mets en pièce jointe) :
    The TCS3200 has an array of photodetectors, each with either a red, green, or blue filter, or no filter (clear). The filters of each color are distributed evenly throughout the array to eliminate location bias among the colors. Internal to the device is an oscillator which produces a square-wave output whose frequency is proportional to the intensity of the chosen color.
    tu dois donc lire un signal puis déterminer sa fréquence. Et cette fréquence te donne la couleur.
    Les graphes en page 5 te donne les fréquences (à peu près) :
    - 460Hz pour le bleu
    - 550Hz pour le vert
    - 610Hz pour le rouge

    Tu as la fonction PulseIn qui te permet de déterminer la fréquence d'un pulse. Ce que je te conseille de faire : recopie l'exemple qui se trouve à la suite de mon lien et teste le avec ta carte (tu devras peut-être modifier le pin d'entrée).

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse j'essaie cela demain pourrais tu me détailler les branchements si il sont différents de ceux que j'ai qui sont sur ce lien

    http://www.learningaboutelectronics....or-circuit.php

  10. #10
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 647
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    Si c'est ce modèle, la connectique est correcte. Le code proposé en exemple me semble bien plus cohérent que celui que ton professeur a trouvé, essaye le.








    Pour info, ton professeur a trouvé le code ici :
    http://www.dfrobot.com/wiki/index.ph...SKU:SEN0101%29

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Le programme que tu m'as donné n'a pas fonctionné
    voici l'erreur
    This report would have more information with
    "Show verbose output during compilation"
    enabled in File > Preferences.
    Arduino: 1.0.6 (Windows NT (unknown)), Board: "Arduino Uno"
    sketch_feb05a:1: error: missing terminating ' character
    sketch_feb05a:2: error: 'Out' does not name a type

  12. #12
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 647
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    Tu as bien copié le code de cette page : http://www.learningaboutelectronics....or-circuit.php ?
    Les erreurs sont explicites. A quelles lignes elles correspondent ? Tu n'as pas fait une faute de frappe quelque part ?

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    bonsoir désole pour le temps que j'ai pris pour répondre j'avais énormément de travail en cours
    non j'ai copier le code qui est sur le pdf que tu ma donner et j'ai fais copier coller donc je ne pense pas que l'erreur vient de moi
    l'erreur vient de la ligne 1

  14. #14
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 647
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    euh.... tu as lu la doc du PDF que j'ai mis en pièce jointe ?
    Now, assuming you're using the MoBoStamp-pe, key the following BS2pe program into the BASIC Stamp Editor.
    Le programme fourni dans le PDF est un simili Basic pour une carte nommée MoBoStamp-pe. Ce n'est pas du C pour Arduino.


    Il faut que tu récupères le code fourni dans cette page : http://www.learningaboutelectronics....or-circuit.php qui lui est fait pour Arduino.

Discussions similaires

  1. aide projet Mastermind
    Par 0coco0 dans le forum Langage
    Réponses: 14
    Dernier message: 14/01/2008, 09h48
  2. Aide projet Firefox
    Par KKshi666 dans le forum C++
    Réponses: 10
    Dernier message: 20/11/2006, 14h25
  3. Demande d'aide - Projet professionnel ambigu
    Par makechange dans le forum Emploi
    Réponses: 5
    Dernier message: 08/09/2006, 13h34
  4. Besoin d'aide projet d'info : la bonne paye sur C++ Builder.
    Par timsupra dans le forum C++Builder
    Réponses: 18
    Dernier message: 25/04/2006, 10h24
  5. aide projet dev
    Par Nickname dans le forum Langage
    Réponses: 16
    Dernier message: 06/02/2006, 13h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo