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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    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 averti
    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
    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 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 251
    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.

  5. #5
    Membre averti
    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
    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 confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    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 ?

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