Aller au contenu


Photo
- - - - -

Robot Ulysse


25 réponses à ce sujet

#1 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 25 juin 2012 - 12:31

Voici mon robot Ulysse , il n'est pas encore fini , je méttré une déscription plus tard , pour le moment voici quelque photo.

Image IPB

Image IPB

Image IPB

Image IPB


Voila pour le moment.

@Cordialement.

#2 Microrupteurman

Microrupteurman

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 210 messages
  • Gender:Male
  • Location:Aquitaine,Gironde

Posté 25 juin 2012 - 12:54

Salut !
joli, les caissons de basse a l'arriere et tout !....
:clapping:
IL parle ?

J'attend la description avec impatiente !
GG !

 
Page Facebook : https://www.facebook...appartelier2.0/
Page Twitter :  https://twitter.com/2Appartelier (bateau seulement)
Boutique Robot-Maker : https://www.robot-ma...er-20/produits/

Besoin d'une impression 3D grand format ? Contactez moi !
 


#3 thermo_nono

thermo_nono

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 825 messages

Posté 25 juin 2012 - 01:57

Magnifique. Qu'est-ce qu'il fait exactement ? Il est télécommandé ou indépendant ?
En tous cas il est beau ! Bravo !

#4 Microrupteurman

Microrupteurman

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 210 messages
  • Gender:Male
  • Location:Aquitaine,Gironde

Posté 25 juin 2012 - 02:04

Je dirai qu'il est 100% radiocommandé. On voit le recepteur a l'avant, et il n'y a aucun capteur de proximité.

 
Page Facebook : https://www.facebook...appartelier2.0/
Page Twitter :  https://twitter.com/2Appartelier (bateau seulement)
Boutique Robot-Maker : https://www.robot-ma...er-20/produits/

Besoin d'une impression 3D grand format ? Contactez moi !
 


#5 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 25 juin 2012 - 10:43

Bonjour, sympa ton robot ;) Bon ben comme les autres j'attends la description ! :D

#6 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 25 juin 2012 - 12:08

Bonjour à tous.

Bon comme vous l'avez remarqué ( enfin je pense ) que je n'été pas souvent sur le forum c'est dernier temps , normale d'une par j'ai du refaire mon

blog , pour l’évoluer en forum , et j'ai beaucoup bossé sur le robot Ulysse , j'ai u pas mal de problèmes avec quelque module , mes

ces chose la , on été réglé.

Bon passons , voici la description , plus achat des pièce.

Alors chassie plateforme robot mobile 4 roues motrices Mon lien

Une carte Romeo Tout-en-un (ATMega328) rev 1.1 Mon lien

Une Carte Arduino Uno Rev 3 Mon lien

Une Pince en Aluminium (avec Servomoteurs) Dagu Mon lien

Un Kit télécommande Infrarouge pour Arduino + 2 capteur. Mon lien

Une batterie 9,2V 2200mAh pris sur une voiture télécommandé.( pas de lien ).

Un boitier pour 4 piles LR6-AA Mon lien

Un module de Répétition MP3 ''DFRduino Player'' Mon lien

Après les petite baffe sur les deux coté de mon robot , on été pris sur des viel PC.

Voila je pense que j'ai fait le tour.

Voilà , ce que fait le robot.

Comme la dit microrupteurman2 , mon robot un bien télécommandé ( bien vue!!!! ) je contrôle mon robot , la pince , et aussi quelque voie , tout ça avec la télécommande.

Je compte acheter 2 modules pour une reconnaissance vocale
, donc un module Analyseur Audio Mon lien et un Capteur sonore analogique Mon lien

Je conte lui rajouté une colonne ( un étage ) pour rajouté un écran LCD , qui me donnera l'heure et la date , et voir aussi a rajouté un Module

caméra et un Module Bluetooth Mon lien pour contrôlé le robot à distance ou pour le traitement d'image , mes je ne suis pas sur de mois.

Voilà je pense que j'ai tous dit , si vous avez des questions hésité pas , ou des remarques.

Je travaille toujours sur le programme de Ulysse.

Une foi que tous serra fini je métré des photos et une vidéo.

#7 thermo_nono

thermo_nono

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 825 messages

Posté 25 juin 2012 - 01:08

Bravo ! Je sent que je vais m'inspirer de ton travail si je me lance de mon côté...
Si tu ajoutes les modules de reconnaissance vocale, ça m'intéressera tout particulièrement. ;)
et merci pour ce partage, je ne crois pas être le seul à être jaloux en regardant ton joujou.. "j'en veux un !"
:thank_you:

#8 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 25 juin 2012 - 01:10

Merci pour ce compliment thermo_nono , et je suis ravi si mon projet peu t'être utile.

#9 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

Posté 25 juin 2012 - 02:14

Merci pour ce compliment thermo_nono , et je suis ravi si mon projet peu t'être utile.



salut
pas mal le robot!

tu comptes arrété les kit un jour ? ;)
a quand le tout automatique?
(bon ben quoi j'ai bien le droit d'etre desagreable! :tatice_03: )

allez chapeau quand meme!:thank_you:

#10 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 25 juin 2012 - 02:19

Lol julkien , pas bien petit vilain.

Oui je compte bientôt arrêté les kits , en fessent un robot bipède tous simple bien sûr ,et terminé mon robot Wall-E , voila.

#11 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 28 mai 2013 - 12:58

Bonjour a tous, me revoie si.

Je me suis relancé sur divers projet que je posterai sur le fofo.

Pour commencé , cela concerne le robot ulysse.

j'ai viré la pince, plus les 3 capteurs infrarouge sharp , est les baffe,

pour rajouter le capteur IR Compound Eye = ( IR œil composé )

Celui si:

Image IPB

j'ai monté le capteur IR Compound Eye = ( IR œil composé ) plus le pont en H en guise de tourelle , pour que le capteur suis un objet ou ma mains , voici une photo:

Image IPB

Est voici le programme , avec quelque bout de code que j'ai trouvais sur le net , cette programmation n'est pas fini , car le capteur lui , suis que les objet ou ma mains ,

mais le chassie lui , ne se déplace pas , donc je cherche la solution pour que le chassie puisse roulé en fonction de l'objet mis devants lui.

Donc si vous avez une idée , je suis preneur.

Voici le code:

#include <Servo.h>

#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

#define panPin 3 // PAN Servo - digital output D3
#define tiltPin 5 // TILt Servo - digital output D5


int sServoPin = 6;
int sServoPin2 = 5;
int dServoPin = 7;
int dServoPin2 = 4;


void stopper(void)                    //Stop
{
  digitalWrite(sServoPin,LOW); 
  digitalWrite(sServoPin2,LOW); 	
}  
void advance(char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />/>/>          //le robot avance
{  
  analogWrite (sServoPin,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />/>/>;   
  digitalWrite(dServoPin,HIGH);
  analogWrite (sServoPin2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />/>/>;   
  digitalWrite(dServoPin2,HIGH);
} 
void back_off (char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />/>/>        //le robot recule
{ 
  analogWrite (sServoPin,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />/>/>;   
  digitalWrite(dServoPin,LOW);
  analogWrite (sServoPin2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />/>/>;   
  digitalWrite(dServoPin2,LOW);
}
void turn_L (char a)     		//Tourne a gauche
{
  analogWrite (sServoPin,a);
  digitalWrite(dServoPin,HIGH);
  analogWrite (sServoPin2,a);
  digitalWrite(dServoPin2,LOW);
}
void turn_R (char a)     		//Tourne a droite
{
  analogWrite (sServoPin,a);
  digitalWrite(dServoPin,LOW);
  analogWrite (sServoPin2,a);
  digitalWrite(dServoPin2,HIGH); 
}

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

// distance minimale pour déplacer la tête du capteur 
int distancemax=255;    // valeur capteur pour l'entrée analogique

// distance qui provoque un décalage de gauche a droite 
int bestdistance=400;   // 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 sMotorStop=90;   	// servo gauche - Stop: 
int dMotorStop=90;   	// Arrêtez servo droit
int LRmax=170;   		// Les valeurs max servo pan 
int LRmin=10;            // Valeur min servo de pan
int UDmax=170;   		// Max valore inclinable
int UDmin=10;            // min valore inclinable

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

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

//Servomoteurs 
Servo panLR;
Servo tiltUD;

void setup()
{
  // initialise et configure la broche servo
  // servos initialiser et configurer les broches

  panLR.attach(panPin);
  panLR.write(PanZero);
  tiltUD.attach(tiltPin);
  tiltUD.write(TiltZero);
 
 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
 
}

void loop()
{
  // servo régler 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é)
   delay(4);                                           		// 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
  delay(2);
   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) 
  delay(4);                                                    // Prévoyez du temps pour répondre à  phototransistors-aspetta par permettere LA Risposta dei 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================================================================
{
  //servos a l'arrêt
  sSpeed=sMotorStop;
  dSpeed=dMotorStop;

   // 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)*15/panscale;
      pan=pan-leftright;
    }
    // si la tête tourne à droite
    if (leftIRvalue<rightIRvalue)
    {
      leftright=(rightIRvalue-leftIRvalue)*15/panscale;
      pan=pan+leftright;
    }

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


    // si la tête et vaire le bas
    if (downIRvalue>upIRvalue)
    {
      updown=(downIRvalue-upIRvalue)*15/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 corps du robot
    temp=LRmax-panOld;
    if (temp<60)
    {
      sSpeed=sMotorStop-50+temp/2;
      dSpeed=dMotorStop-50+temp/2;
    }
    temp=panOld-LRmin;
    if (temp<60)
    {
      dSpeed=dMotorStop+50-temp/2;
      sSpeed=sMotorStop+50-temp/2;
    }

 	//------------------------------------------------------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>10)
    {
      temp=temp-10;
      if (distance>bestdistance)
      {
        dSpeed=dSpeed-temp/3;
        sSpeed=sSpeed+temp/3;

      }
      else
      {
        dSpeed=dSpeed+temp/3;
        sSpeed=sSpeed-temp/3;

      }
    }
  }
}

Pour se qui est de la pince dagu je rajouterai un étage de plus, sur le robot ulysse.

@Amicalement.

#12 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 519 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 28 mai 2013 - 03:05

Bravo pour ce robot.

Je voudrais savoir comment sont gérer les moteurs de ton robot ainsi que le détecteur infra.
Car avec un robot comme le tien, je gérais les roues avec des codeurs. Je m'explique:
Ton robot avance tout droit, le détecteur infrarouge détecte un objet a suivre=> il recule ou avance ou tourne en fonction de la valeur que le détecteur te donne(car tu lui demande en même temps).

Pour info perso: c'est quoi ton model de détecteur (je connais pas celui la).

Donne nous un peu plus d'info sur ton robot stp.

Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:


#13 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 28 mai 2013 - 03:41

Salut Melmet

Merci pour mon robot.

Alors voilà les composant du robot a l'heure actuel.

Matériel:
Plateforme robot mobile 4 roues motrices

les 4 motoreducteurs du chassie ICI

Une carte Romeo ( ATMega328) rev2

Un capteur infrarouge type "oeil" Dagu

Un Kit Mini Tourelle Pan / Tilt Dagu

Voila je pence que je n'est rien oublier Melmet.

#14 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 519 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 28 mai 2013 - 04:00

Tu as pas de drivers de puissance pour les moteurs?

je connaissais pas le capteur infra, il ma l'air pas mal (on peut travailler sur 4 zones de détections)

Tes moteurs ne consommes pas grand choses a priori. Je pense qu'un drivers avec un L293D suffira.

Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:


#15 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 28 mai 2013 - 08:58

Non je ne pence pas que jan est besoins ( en faite je vais mieux m'expliquer ) les composant du robot en lui même fonctionne bien , sur se coté là.

Le bémol se trouve au niveaux de la programmation.

Le code que j'ai exposé plus haut ^^ est fonctionnel pour le capteur infrarouge le ( IR Compound Eye ) , il suis bien les objet ,

c'est le chassie en lui même qui dois suivre les mouvement, ou l'objet en fonction du suivi du capteur .

En gros voila se que dois fait le robot:

http://www.youtube.com/watch?feature=player_embedded&v=HR-eO_szLCk

( La demande d'aide concerne le codage
)


#16 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

Posté 29 mai 2013 - 08:14

Salut


au risque de me tromper, il te faut des codeur histoire de savoir de combien avance ton robot

après renseigne toi au niveau des PID

il existe des codeur pour se genre de moteurs

je n'ai pas vraiment regarder ton code mais je ne vois pas comment suivre un point sans savoir de combien de pas j'ai fais ^^

#17 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 29 mai 2013 - 09:39

Merci julkien


Bon je ne pensé pas du tout que un de c'est jours j'allais devoir passer par du PID.

Je sens que pour moi cela vas être casse tête pfffffffffff

Merci pour le lien julkien , je vais allai potassé cela.

#18 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 30 mai 2013 - 05:57

Euh... le PID c'est un peu un marteau pour écraser une mouche. Tu n'as pas besoin d'un asservissement pour faire un truc aussi simple. Le PID n'est à mon avis indispensable que si tu veux suivre une trajectoire précise, ce qui n'est pas le cas ici.

Ici, il te suffit de dire à ton robot de tourner à droite s'il voit l'objet plus à droite, et réciproquement. Si possible de manière "proportionnelle" : si l'objet est très à droite, tourne plus vite à droite. Ca devrait suffire. C'est comme du suivi de ligne. C'est beaucoup plus simple qu'un asservissement PID complet.

Leon.

BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)


#19 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 30 mai 2013 - 04:43

Merci Leon pour ta réponse.

Donc je n'aurais pas besoins de faire du PID ( bon c'est déjà ça )

Ici, il te suffit de dire à ton robot de tourner à droite s'il voit l'objet plus à droite, et réciproquement. Si possible de manière "proportionnelle" : si l'objet est très à droite, tourne plus vite à droite


Oui je pence que cela devrai être plus facile a faire comparé a du PID ^^

Ben j'ai tenté aujourd'hui de faire mon programme , cela ne fonctionne pas , mais je doute que c'est pas la bonne façon de programmé cette effet.

Voilà la partit que j'ai fait:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////  
  	
  	
  leftIRvalue = digitalRead(IRleft);
  rightIRvalue = digitalRead(IRright); 
  	
    	// Si le gauche detecte quelque chose le robot tourne a droite
  if (leftIRvalue<rightIRvalue == LOW) { 	
	turn_R(255);
  }  
  else {
	stopper();
  }

  // Si le droite detecte quelque chose le robot tourne a gauche
  if (leftIRvalue>rightIRvalue == LOW) { 	
	turn_L(255);
  } 
  else {
	stopper();
  }

  //si les 2 capteurs IRs detecte en même temps le robot recule puis tourne
  if (leftIRvalue == LOW && rightIRvalue == LOW) {
	back_off(255);
	delay(2000);
	turn_L(255);
	delay(2000);
  } 
  else {
	stopper();
  }

  //sinon le robot avance
  if (leftIRvalue == HIGH && rightIRvalue == HIGH) { 	
	advance(255);
  } 
  else {
	stopper();
 	}
	} 
   }
  }

En code complet ça donne ce si:

#include <Servo.h>

#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

#define panPin 3 // PAN Servo - digital output D3
#define tiltPin 8 // TILt Servo - digital output D8


int sServoPin = 6;
int sServoPin2 = 5;
int dServoPin = 7;
int dServoPin2 = 4;


void stopper(void)                  	//Stop
{
  digitalWrite(sServoPin,LOW); 
  digitalWrite(sServoPin2,LOW);     	
}  
void advance(char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />    	//le robot avance
{  
  analogWrite (sServoPin,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;   
  digitalWrite(dServoPin,HIGH);
  analogWrite (sServoPin2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;   
  digitalWrite(dServoPin2,HIGH);
} 
void back_off (char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />  	//le robot recule
{ 
  analogWrite (sServoPin,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;   
  digitalWrite(dServoPin,LOW);
  analogWrite (sServoPin2,<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;   
  digitalWrite(dServoPin2,LOW);
}
void turn_L (char a)                	//Tourne a gauche
{
  analogWrite (sServoPin,a);
  digitalWrite(dServoPin,HIGH);
  analogWrite (sServoPin2,a);
  digitalWrite(dServoPin2,LOW);
}
void turn_R (char a)                	//Tourne a droite
{
  analogWrite (sServoPin,a);
  digitalWrite(dServoPin,LOW);
  analogWrite (sServoPin2,a);
  digitalWrite(dServoPin2,HIGH); 
}

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

// distance minimale pour déplacer la tête du capteur 
int distancemax=255;	// valeur capteur pour l'entrée analogique

// distance qui provoque un décalage de gauche a droite 
int bestdistance=400;   // 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 sMotorStop=90;  	// servo gauche - Stop: 
int dMotorStop=90;  	// Arrêtez servo droit
int LRmax=170;              	// Les valeurs max servo pan 
int LRmin=10;       	// Valeur min servo de pan
int UDmax=170;              	// Max valore inclinable
int UDmin=10;       	// min valore inclinable

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

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

//Servomoteurs 
Servo panLR;
Servo tiltUD;

void setup()
{
  // initialise et configure la broche servo
  // servos initialiser et configurer les broches

  panLR.attach(panPin);
  panLR.write(PanZero);
  tiltUD.attach(tiltPin);
  tiltUD.write(TiltZero);
 
 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
 
}

void loop()
{
  // servo régler 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é)
  delay(4);                                                 	// 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
  delay(2);
  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) 
  delay(4);                                                 	// Prévoyez du temps pour répondre à phototransistors-aspetta par permettere LA Risposta dei 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================================================================
{
  //servos a l'arrêt
  sSpeed=sMotorStop;
  dSpeed=dMotorStop;

   // 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)*15/panscale;
    	pan=pan==-leftright;
    	}
    	// si la tête tourne à droite
    	if (leftIRvalue<rightIRvalue)
    	{
    	leftright=(rightIRvalue-leftIRvalue)*15/panscale;
    	pan=pan+leftright;
    	}

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


    	// si la tête et vaire le bas
    	if (downIRvalue>upIRvalue)
    	{
    	updown=(downIRvalue-upIRvalue)*15/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 corps du robot
    	temp=LRmax-panOld;
    	if (temp<60)
    	{
    	sSpeed=sMotorStop-50+temp/2;
    	dSpeed=dMotorStop-50+temp/2;
    	}
    	temp=panOld-LRmin;
    	if (temp<60)
    	{
    	dSpeed=dMotorStop+50-temp/2;
    	sSpeed=sMotorStop+50-temp/2;
    	}

    	//------------------------------------------------------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>10)
    	{
    	temp=temp-10;
    	if (distance>bestdistance)
    	{
    	dSpeed=dSpeed-temp/3;
    	sSpeed=sSpeed+temp/3;

    	}
    	else
    	{
    	dSpeed=dSpeed+temp/3;
    	sSpeed=sSpeed-temp/3;
    	}
    	
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////  
    	
    	
  leftIRvalue = digitalRead(IRleft);
  rightIRvalue = digitalRead(IRright); 
    	
    	// Si le gauche detecte quelque chose le robot tourne a droite
  if (leftIRvalue<rightIRvalue == LOW) {    	
    	turn_R(255);
  }  
  else {
    	stopper();
  }

  // Si le droite detecte quelque chose le robot tourne a gauche
  if (leftIRvalue>rightIRvalue == LOW) {    	
    	turn_L(255);
  } 
  else {
    	stopper();
  }

  //si les 2 capteurs IRs detecte en même temps le robot recule puis tourne
  if (leftIRvalue == LOW && rightIRvalue == LOW) {
    	back_off(255);
    	delay(2000);
    	turn_L(255);
    	delay(2000);
  } 
  else {
    	stopper();
  }

  //sinon le robot avance
  if (leftIRvalue == HIGH && rightIRvalue == HIGH) {	
    	advance(255);
  } 
  else {
    	stopper();
    	}
    	} 
     	}
      	}

Donc un avis favorable ou un exemple de programme serré le bienvenue ( si cela est possible )

Je continue mais teste , je doute que je touche au but.

édité: à 00H38




#20 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 01 juin 2013 - 12:00

je constate un problème sur le forum , en rajoutant mon code dans la balise Image IPB

je constate se si:

void advance(char B)/>/>/>/>          //le robot avance
{  
  analogWrite (sServoPin,B)/>/>/>/>;   
  digitalWrite(dServoPin,HIGH);
  analogWrite (sServoPin2,B)/>/>/>/>;   
  digitalWrite(dServoPin2,HIGH);
} 
void back_off (char B)/>/>/>/>        //le robot recule
{ 
  analogWrite (sServoPin,B)/>/>/>/>;   
  digitalWrite(dServoPin,LOW);
  analogWrite (sServoPin2,B)/>/>/>/>;   
  digitalWrite(dServoPin2,LOW);

voici se que se passe: il y a des /> , vous les remarquer ???

a la base le code doit être comme cela

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////void advance(char B) //le robot avance
{
analogWrite (sServoPin,B);
digitalWrite(dServoPin,HIGH);
analogWrite (sServoPin2,B);
digitalWrite(dServoPin2,HIGH);
}
void back_off (char B) //le robot recule
{
analogWrite (sServoPin,B);
digitalWrite(dServoPin,LOW);
analogWrite (sServoPin2,B);
digitalWrite(dServoPin2,LOW);////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


Je n'est pas mis la balise Image IPB pour que vous voyer.



Je suis toujours sur la programmation , je galère , est ne trouve pas comment faire , j'ai testé divers variable de choie.



Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users