Le forum a migré vers l'adresse suivante:

Forum

Masquer ce message

Simple-Duino Index du Forum



Problème de code avec le capteur Dagu IR compound eye


 
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Questions
Sujet précédent :: Sujet suivant  
Auteur Message
seb03000
Débutant

Hors ligne

Inscrit le: 23 Fév 2014
Messages: 55
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Dim 23 Fév - 18:23 (2014)    Sujet du message: Problème de code avec le capteur Dagu IR compound eye Répondre en citant

PublicitéSupprimer les publicités ?
Bonjour/Bonsoir à tous.

Je me suis inscrit sur se forum pour avoir quelque info sur du codage arduino , sur tout pour le

capteur ( Dagu IR Compound eye ) est avoir un peut d'aide.

Donc je possède se châssis  pour mon robot:




4 Motoreducteur 6V




Puis le capteur en question:




Un Buzzer:


Et j'ai également rajouté une led.

j'ai fait mon code , est aussi ( rajouté quelque code trouvais sur le net ).

Le bute du robot dois suivre ma mains ou un objet, tous tan avançant et reculent , aller a droite

est a gauche, ( faire un suivie d'objet ou simplement ma mains ).

Voici mon code:


 
Code:







 #include <Servo.h>
 #include <Tone.h>

//Capteur infrarouge IR EYE
#define IRleft 1    // Compound Eye Left - analog input A1
#define IRright 3  // Compound Eye Right - analog input A3
#define IRup 0    // Compound Eye Up - analog input A0
#define IRdown 2  // Compound Eye Down - analog input A2
#define IRleds 2 // Compound Eye LEDs - digital output D2

//Déclaration des de servo ( suport de la tête du capteur pour le mouvement
#define panPin 3  // PAN Servo - digital output D3
#define tiltPin 8 // TILt Servo - digital output D8

// == LED/SPEAKER PINS ==
#define Speakerpin 1  // digital pin  4 - Speaker output

//déclaration des Motoréducteurs
int MoteurPin = 6;
int MoteurPin2 = 5;
int dMoteurPin = 7;
int dMoteurPin2 = 4;

  //Fonctions
 //motoréducteur pour le mode déplacement automatique
 void Moteur1(int pwm, boolean reverse)
{
 analogWrite(MoteurPin,pwm); //Valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum
 if(reverse)
{
 digitalWrite(dMoteurPin,HIGH);
}
 else
{
 digitalWrite(dMoteurPin,LOW);
}
 }
 void Moteur2(int pwm, boolean reverse)
{
 analogWrite(MoteurPin2,pwm); //Valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum
 if(reverse)
{
 digitalWrite(dMoteurPin2,HIGH);
}
 else
{
 digitalWrite(dMoteurPin2,LOW);
}
 }

// defini les constants
byte LRscalefactor=10;  //facteur d'échelle - calibrer les moteurs - calibrage Selon le servo
byte UDscalefactor=10;  //facteur d'échelle - calibrer les moteurs - calibrage Selon le servo

// distance minimale pour le déplacement de la tête du capteur
int distancemax=250;    // valeur distant du capteur pour l'entrée analogique

// distance qui provoque un décalage de gauche a droite
int bestdistance=330;  // valeur pour trouver expérimentale du capteur
int PanZero=78;        // stop servo di pan
int TiltZero=40;      //arrêter servo haut bas - asservissement d'inclinaison arrêt
int LRmax=170;      // Les valeurs max servo pan
int LRmin=10;      // Valeur min servo de pan
int UDmax=170;    // Max valore inclinable du servo
int UDmin=10;    // min valore inclinable du servo

// Définir le support de la variables - définir les variables globales
int pan=PanZero;
int tilt=TiltZero;
int panscale;
int tiltscale;
int panOld;
int tiltOld;
int distance;
int temp;

// Capteurs infrarouge IR EYE
int updown;
int leftright;
int leftIRvalue;
int rightIRvalue;
int upIRvalue;
int downIRvalue;

//Servomoteurs
Servo panLR;
Servo tiltUD;

/*......................................................................................................................
 |                              Fonctions                                                                               |
 */
 
//                            ----------------------
//                            |        myBeep      |
//                            ----------------------

// fait emettre un son de duree int duration (musical 1 pour blanche, 2 pour noir, 4 pour croche...) et de son int note
// sur la pin int speaker (qui doit avoir ete configuree)
// Le code Dagu notait tone() not used to save memory : gain environ 1Ko sur 7Ko dispo. 

void myBeep(int note , int duration , int speaker)
{
  long pulselength = 100000 / note ;                      //calcul de la longuer d'une onde en temps de la note (tempo fixe 1000*mS)
  long pulses = note / duration ;
  //MISE AU POINT
//  Serial.print ( duration );
//  Serial.print (" / ");
//  Serial.println ( note );
  for(int p=0;p<pulses;p++)                                // tone command not used to save memory
  {
    digitalWrite ( speaker , HIGH );
    delayMicroseconds ( pulselength/2 );                   // 1/2 pulsation haute
    digitalWrite ( speaker , LOW );
    delayMicroseconds ( pulselength/2 );                   // 1/2 pulsation basse
  }
//   tone ( speaker , note , noteDuration ) ;         // decommenter pour comparer le gain en memoire
}


void setup()
{
  // initialise et configure la broche des servos
  panLR.attach(panPin);
  panLR.write(PanZero);
  tiltUD.attach(tiltPin);
  tiltUD.write(TiltZero);

  pinMode(Speakerpin,OUTPUT);// Speaker
 
 pinMode (IRleds,OUTPUT);
 int i;
 for(int i=4;i<=7;i++)
 pinMode(i,OUTPUT); //Met les pin des moteurs 4,5,6,7 en mode sortie
 
   //----------------------------- play tune on powerup / reset -----------------------------------------
  //                        tone command is not used to save memory

  int melody[] = {
    262,196,196,220,196,1,247,262      };
  int noteDuration[] = {
    4,8,8,4,4,4,4,4      };
//MISE AU POINT
//  Serial.begin(9600);
  for (byte note = 0; note < 8; note++)                         // Play eight notes
  {
//    Serial.print ("note : ");
//    Serial.println(melody [note]);
    if ( melody[note] !=1)
    {
      myBeep ( melody[note] , noteDuration[note] ,Speakerpin);
      int pauseBetweenNotes = noteDuration[note] * 0.30;
      delay(pauseBetweenNotes);
    }
    else delay (100/noteDuration[note]);
  }
 }

void loop()
{
  // servo régler pour la vitesse 
  panLR.write(pan);
  tiltUD.write(tilt);

  IReye();  // lire les valeurs du capteur
  IRfollow(); // suivi
}

void IReye()//===============================================================Lire IR œil composé================================================
{
  digitalWrite(IRleds,HIGH);                                   // allumer LED IR pour lire la lumière infrarouge TOTAL (ambiante + reflété)
  delayMicroseconds(800);                                                   // Prévoyez du temps pour phototransistors à répondre - aspetta par permettere LA Risposta dei phototransistors
  leftIRvalue=analogRead(IRleft);                              // TOTAL IR = AMBIENT IR + LED IR REFLECTED FROM OBJECT
  rightIRvalue=analogRead(IRright);                            // TOTAL IR = AMBIENT IR + LED IR REFLECTED FROM OBJECT
  upIRvalue=analogRead(IRup);                                  // TOTAL IR = AMBIENT IR + LED IR REFLECTED FROM OBJECT
  downIRvalue=analogRead(IRdown);                              // TOTAL IR = AMBIENT IR + LED IR REFLECTED FROM OBJECT
  
  digitalWrite(IRleds,LOW);                                    // éteindre LA LED IR pour lire la lumière infrarouge ambiant (IR de l'éclairage intérieur et la lumière du soleil)
  delayMicroseconds(800);                                                    // Prévoyez du temps pour répondre aux phototransistors-aspetta pour permettre LA Raiponce du phototransistors
  leftIRvalue=leftIRvalue-analogRead(IRleft);                  // REFLECTED IR = TOTAL IR - AMBIENT IR
  rightIRvalue=rightIRvalue-analogRead(IRright);                // REFLECTED IR = TOTAL IR - AMBIENT IR
  upIRvalue=upIRvalue-analogRead(IRup);                        // REFLECTED IR = TOTAL IR - AMBIENT IR
  downIRvalue=downIRvalue-analogRead(IRdown);                  // REFLECTED IR = TOTAL IR - AMBIENT IR

  distance=(leftIRvalue+rightIRvalue+upIRvalue+downIRvalue)/3;// la distance de l'objet est en moyenne illustrée - dans la distance de l'objet est la moyenne de la réflexion du capteur IR

}

void IRfollow ()//==============================================Suivre L'objet================================================================
{
        // si la valeur de retour est faible, cela signifie qu'il n'y a pas d'objet voisins
        // si la valeur lue est basse, il n'y a pas l'objet devant le capteur
        if (distance<distancemax)
  {
        // le capteur revient à la position repos - réinitialiser le capteur à position zéro
        if (pan>PanZero)pan=pan-1;
        if (pan<PanZero)pan=pan+1;
        if (tilt>TiltZero)tilt=tilt-1;
        if (tilt<TiltZero)tilt=tilt+1;

  }
  else
  {
        //-------------------------------------------------------------Suivre objet avec la tête------------------------------------------------
        panscale=(leftIRvalue+rightIRvalue)*LRscalefactor/10; //Facteur d'échelle - valeur d'échelle
        tiltscale=(upIRvalue+downIRvalue)*UDscalefactor/10; // Facteur d'échelle - valeur d'échelle

        // si la tête tourne vers la gauche
        if (leftIRvalue>rightIRvalue)
        {
        leftright=(leftIRvalue-rightIRvalue)*8/panscale;
        pan=pan-leftright;


        }
       
        // si la tête tourne à droite
        if (leftIRvalue<rightIRvalue)
        {
        leftright=(rightIRvalue+leftIRvalue)*8/panscale;
        pan=pan+leftright;
       

        }

        // si la tête est levé
        if (upIRvalue>downIRvalue)
        {
        updown=(upIRvalue+downIRvalue)*10/tiltscale;
        tilt=tilt+updown;
        }

       
        // si la tête et vaire le bas
        if (downIRvalue>upIRvalue)
        {
        updown=(downIRvalue-upIRvalue)*10/tiltscale;
        tilt=tilt-updown;
        }

        panOld=pan;
        tiltOld=tilt;
        if (pan<LRmin) pan=LRmin;
        if (pan>LRmax) pan=LRmax;
        if (tilt<UDmin)tilt=UDmin;
        if (tilt>UDmax)tilt=UDmax;

        //-------------------------------------------------------------Tournez le corps du robot des qui suis un objet--------------------------------------------
        // Si la tête tourne a plus de 60 degrés, exécute également le déplacement du corps du robot
        temp=LRmax-panOld;
        if (temp<10)
        {
        }

        
         
        temp=LRmin-panOld;
        if (temp<10)
        {
        }
        

        //------------------------------------------------------Aller de l'avant ou vers l'arrière pour suivre l'objet------------------------------------
        // si l'objet est à une distance inférieure à la distance optimale, revenir à cette distance,
        // si la distance de l'objet est inférieure à la distance, déplacer le robot pour aller de nouveau à la même distance
        temp=distance-bestdistance;
        temp=abs(temp);

        if (temp>-1)
        {
        temp=temp-1;
        if (distance>bestdistance)
        {
         
        Moteur1(200,false);      //j'avance le moteur 1
        Moteur2(200,true);      // j'avance le moteur 2
        delay(100);            //j'attend 1 seconde
 
        Moteur1(0,false);      //j'arréte le moteur 1
        Moteur2(0,true);      // j'arréte le moteur 2
       
        }
        else
        {
         
        Moteur1(255,true);        //j'avance le moteur 1
        Moteur2(90,false);      // j'avance le moteur 2
        delay(100);
 
 
        Moteur1(0,true);        //j'arréte le moteur 1
        Moteur2(0,false);      // j'arréte le moteur 2


    }
        }}}






 
Je voulais savoir quelle est les erreurs sur mon code , car le robot avance est recule

bien , mais ne vas pas a droite et a gauche, et je trouve que mais servos bouge trop vite.

je vais quand même bossé de mon coté;

Merci a vous.


Dernière édition par seb03000 le Dim 6 Avr - 17:57 (2014); édité 2 fois
Revenir en haut
seb03000
Débutant

Hors ligne

Inscrit le: 23 Fév 2014
Messages: 55
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Jeu 27 Fév - 11:30 (2014)    Sujet du message: Problème de code avec le capteur Dagu IR compound eye Répondre en citant

Up sil vous plais 
Revenir en haut
seb03000
Débutant

Hors ligne

Inscrit le: 23 Fév 2014
Messages: 55
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Dim 6 Avr - 17:51 (2014)    Sujet du message: Problème de code avec le capteur Dagu IR compound eye Répondre en citant

Bonjour a tous.

Je viens vous signaler que je suis toujours au même stade , je n'est pas trouvé la solution , ( mais je regarde toujour de mon coté

et je fait divers teste ).

Donc je fait appèle a vous tous pour mon problème;

Je vour remercie de m'avoir lu , est de votre aide a tous;

ps: je continue tout de même a travailler dessus.
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Lun 7 Avr - 11:13 (2014)    Sujet du message: Problème de code avec le capteur Dagu IR compound eye Répondre en citant

Donc le problème c'est quoi précisément ?
J'arrive pas à comprendre ce que tu as écrit à propos de ton problème...
____________________________
http://simple-duino.com
Revenir en haut
seb03000
Débutant

Hors ligne

Inscrit le: 23 Fév 2014
Messages: 55
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Lun 7 Avr - 11:16 (2014)    Sujet du message: Problème de code avec le capteur Dagu IR compound eye Répondre en citant

Bonjour Admin.

Mon problème et que je n'arrive pas a faire aller le robot, de droite a gauche tous tant suivants ma mains ou un objet.

Mais je suis arrivai a faire en sorte que le robot suive ma mains , en avançant est reculant.
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 23:43 (2017)    Sujet du message: Problème de code avec le capteur Dagu IR compound eye

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Questions Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB
Propulsé par Simple-Duino