Aller au contenu


Photo
- - - - -

Un robot à trois roues.


53 réponses à ce sujet

#41 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 16 avril 2011 - 12:29

Distance obstacle < 30 ET Distance obstacle > 4 ?


Malédiction du Créatif :
Plus vous avez d’idées et moins vous arrivez à les structurer.


#42 ANT-001

ANT-001

    Membre occasionnel

  • Membres
  • Pip
  • 123 messages
  • Gender:Male
  • Location:La premiére à gauche après jupiter.

Posté 16 avril 2011 - 12:54

Merci pour votre aide les gars, je vois comment faire maintenant je vais faire des tests.

#43 bennurre

bennurre

    Habitué

  • Membres
  • PipPip
  • 160 messages
  • Gender:Male

Posté 18 juillet 2011 - 05:45

Merci pour votre aide les gars, je vois comment faire maintenant je vais faire des tests.


Salut, je commence dans la programmation arduino et j'ai trouvé ton sujet trés interressant! Sympa de faire partager tes projets avec tout le monde!

Est ce que je peux me permettre de te demander de mettre ton code en ligne? Histoire de me faire avancer et m aider à comprendre tout ça!

J'ai aussi une petite question: tu dis que tu as un sonar a trigger et écho, pourquoi ce choix de matériel? Quels sont les avantages ?

Merci d avance et bonne continuation...

Où en es tu de ton projet?

Bonne soirée...

...................................................

Mon premier projet arduino...

Blog de ma Tondeuse RC...

...................................................


#44 ANT-001

ANT-001

    Membre occasionnel

  • Membres
  • Pip
  • 123 messages
  • Gender:Male
  • Location:La premiére à gauche après jupiter.

Posté 09 août 2011 - 05:22

J'ai simplement pris un sonar "Trigger-Echo" pour la simplicité de mise en œuvre, je n'avais pas besoin d'utiliser I2C, déjà car je débutais en programmation et alourdir la tâche en employant un bus n'était pas une bonne solution sur le moment, et ensuite car il n'y avait pas énormément de capteur donc la nécessité d'avoir un bus était vraiment futile.

Sinon pour le code je t'envoie ça en MP d'ici quelques heures.

Ravis de voir que la robotique attire du monde !

#45 Astondb8

Astondb8

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 111 messages
  • Gender:Male
  • Location:Paris

Posté 09 août 2011 - 06:10

Bonjour

Pour le code, pourquoi en MP ?
C'est ca qui est bien sur les forums, c'est l'echange.
Sauf si tu ne le souhaites pas bien sur.
Rien d'obligatoir. Mais c'est bien quand ca circule dans les deux sens. ;)

Cdlt
Yves

 


#46 ANT-001

ANT-001

    Membre occasionnel

  • Membres
  • Pip
  • 123 messages
  • Gender:Male
  • Location:La premiére à gauche après jupiter.

Posté 09 août 2011 - 09:25

Bonjour

Pour le code, pourquoi en MP ?
C'est ca qui est bien sur les forums, c'est l'echange.
Sauf si tu ne le souhaites pas bien sur.
Rien d'obligatoir. Mais c'est bien quand ca circule dans les deux sens. ;)

Cdlt
Yves


Bien sûr, j'aime cet esprit de libre-échange ! Je vais le mettre dans ce sujet, mais je m'attends à quelques critiques, je pense.
Il n'est pas finalisé, il est simplifié mais pas au maximum, ça manque d'optimisation.
De plus quelques bouts de code ne viennent pas de mon cerveau, mais son des déductions à partir de code donné par le constructeur, il y-a même des codes qui ne servent qu'au débogage etc ...
Je ne sais pas si ça intéressera forcement !
De plus certaine valeure de vitesse son réglée évidemment seulement pour mon robot et par rapport à mon ressenti durant les tests.
Je n'ai toujours pas eu le temps de résoudre les soucis de zone morte entre 0 et 4 cm, je n'ai pas pu bosser dessus, trop occupé sur l'autre robot.


#define echoPin 2                            // echo pin 
#define trigPin 3                            // trigger pin
#define md25Address 0x58                                    // Adresse du MD25
#define softwareReg 0x0D                                    // Adresse pour lire la version du soft
#define speed1 0x00                                         // Adresse pour envoyer la vitesse moteur 1
#define speed2 0x01                                         // Adresse pour envoyer la vitesse moteur 2
#define cmdByte 0x10                                        // Command byte
#define encoderOne 0x02                                     // Adresse pour lire l'encodeur 1
#define encoderTwo 0x06                                     // Adresse pour lire l'encodeur 2
#define voltRead 0x0A                                       // Adresse pour lire la tension batterie
#define rxPin 2                                             // software serial rx pin
#define txPin 3                                             // software serial tx pin
#include <Servo.h>
#include <Wire.h>



int x=0;                                                    // Valeur référence indiquant la vitesse des moteurs



int distance;     // distance instantanée
int distancedroite; // distance à droite
int distancegauche; // distance à gauche
int lastdir;          // derniére direction connue
int objdet;           // non utilisé pour le moment
Servo servo; // déclaration du servo
int posn = 93;  //position neutre du servo

void setup() {
    Wire.begin();
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  delay(100);                                               // Pause pour attendre la mise en route de l’électronique.
  int softVer = getSoft();                                  // Lire la version du logiciel de la carte (non utilisé)
  
  encodeReset();                                            // RAZ des encodeurs
                 
  Serial.begin(9600);             // Démarrage de la liaison série pour débuggage
  pinMode(echoPin, INPUT);            // "echopin" en mode entrée
  pinMode(trigPin, OUTPUT);           // "trigpin" en mode sortie
servo.attach(10);                     // Servo de la tourelle sur PWN 10
servo.write(posn);                    // Mise au neutre du servo
delay(500);                            
delay(500);                          // Pause d'une seconde et demi (fin du cycle)
delay(500);
}

void sonar()                                    // sous programme de mesure instantanée de la distance 
{
  digitalWrite(trigPin, LOW);                   // trigpin à l'état bas pendant 2us
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);                  // trigpin à l'état haut pendant 10us
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);                   // tripgpin à l'état bas confirmant la mesure
  distance = pulseIn(echoPin, HIGH);            // lecture de l'impulsion
  distance= distance/58;                        // calcule de la distrance en cm par rapport à l'impulsion
  Serial.println(distance);                     
  delay(50);                                    // pause de 50ms pour ne pas empietter sur l'autre mesure
} 
void detecter()                                // sous programme pour regarder à droite et à gauche et comparer
{
  servo.write(60);
  delay(500);
  sonar();
  distancedroite = distance;
  delay(500);
  servo.write(120);
  delay(500);
  sonar();
  distancegauche = distance;
  delay(500);
}

void loop() //boucle principale

{
 x = 100;                                                   // Valeur de vitesse des moteurs (entre 129 et 255)
 sonar();
 
 if (distance > 10)
 {                                                        // avancer si la distance le permet
    Wire.beginTransmission(md25Address);                    // faire tourner le moteur 2 à la vitesse X
    Wire.send(speed2);
    Wire.send(x);                                           
    Wire.endTransmission();
  
    Wire.beginTransmission(md25Address);                    // faire tourner le moteur 1 à la vitesse x
    Wire.send(speed1);
    Wire.send(x);
    Wire.endTransmission();
 }
    else
    {
      stopMotor();
   
    detecter();
    servo.write(posn);
    
    if (distancedroite < distancegauche)
    {
    Wire.beginTransmission(md25Address);                    // faire reculer le moteur 2
    Wire.send(speed2);
    Wire.send(150);                                           
    Wire.endTransmission();
  
    Wire.beginTransmission(md25Address);                    // faire reculer le moteur 1
    Wire.send(speed1);
    Wire.send(150);
    Wire.endTransmission();
    delay(500);
    
    Wire.beginTransmission(md25Address);                    // tourner le robot
    Wire.send(speed2);
    Wire.send(156);                                           
    Wire.endTransmission();
  
    Wire.beginTransmission(md25Address);                    // tourner le robot
    Wire.send(speed1);
    Wire.send(x);
    Wire.endTransmission();
    delay(200);
    }
    else
    
    {
    Wire.beginTransmission(md25Address);                    // faire reculer le moteur 2
    Wire.send(speed2);
    Wire.send(150);                                           
    Wire.endTransmission();
  
    Wire.beginTransmission(md25Address);                    // faire reculer le moteur 1
    Wire.send(speed1);
    Wire.send(150);
    Wire.endTransmission();
    
    delay(500);
    
    Wire.beginTransmission(md25Address);                    // moteur 2 à la vitesse x
    Wire.send(speed2);
    Wire.send(x);                                           
    Wire.endTransmission();
  
    Wire.beginTransmission(md25Address);                    // vitesse moteur 1
    Wire.send(speed1);
    Wire.send(156);
    Wire.endTransmission();
    delay(200);
    }
    }
 

 
}

int getSoft(){                                              // Function that gets the software version
  Wire.beginTransmission(md25Address);                      // Send byte to read software version as a single byte
  Wire.send(softwareReg);
  Wire.endTransmission();
  
  Wire.requestFrom(md25Address, 1);                         // request 1 byte form MD25
  while(Wire.available() < 1);                              // Wait for it to arrive
  int software = Wire.receive();                            // Read it in
  
  return(software);
}

void encodeReset(){                                         // This function resets the encoder values to 0
  Wire.beginTransmission(md25Address);
  Wire.send(cmdByte);
  Wire.send(0x20);                                          // Putting the value 0x20 to reset encoders
  Wire.endTransmission(); 
}

long encoder1(){                                            // Function to read and display value of encoder 1 as a long
  Wire.beginTransmission(md25Address);                      // Send byte to get a reading from encoder 1
  Wire.send(encoderOne);
  Wire.endTransmission();
  
  Wire.requestFrom(md25Address, 4);                         // Request 4 bytes from MD25
  while(Wire.available() < 4);                              // Wait for 4 bytes to arrive
  long firstByte = Wire.receive();                          // Recieve 4 bytes highest byte first
  long secondByte = Wire.receive();
  long thirdByte = Wire.receive();
  long fourthByte = Wire.receive();
  
  long poss1 = (firstByte << 24) + (secondByte << 16) + (thirdByte << 8) + fourthByte;  // Put them together
  
  delay(50);                                                // Wait for everything to make sure everything is sent
  
  return(poss1);                                            // returns value of encoder 1 position as a long
}

long encoder2(){                                            // Function to read and display velue of encoder 2 as a long
  Wire.beginTransmission(md25Address);                      // Send byte to get a reading from encoder 2                   
  Wire.send(encoderTwo);
  Wire.endTransmission();
  
  Wire.requestFrom(md25Address, 4);                         // Request 4 bytes from MD25
  while(Wire.available() < 4);                              // Wait for 4 bytes to become available
  long firstByte = Wire.receive();                          // Get four bytes highest byte first
  long secondByte = Wire.receive();
  long thirdByte = Wire.receive();
  long fourthByte = Wire.receive();
  
  long poss2 = (firstByte << 24) + (secondByte << 16) + (thirdByte << 8) + fourthByte;  // Put them together
  

  delay(50);                                                // Wait for everything to make sure everything is sent
   
  return(poss2);                                            // Returns encoder 2 position as a long
}

void volts(){                                               // Function to read and display battery volts as a single byte
  Wire.beginTransmission(md25Address);                      // Send byte to read volts
  Wire.send(voltRead);
  Wire.endTransmission();
  
  Wire.requestFrom(md25Address, 1);                         // Request 1 byte form MD25
  while(Wire.available() < 1);                              // Wait for byte to arrive 
  int batteryVolts = Wire.receive();                        // Get byte
  
  delay(50);                                                // Wait to make sure everything is sent
}

void stopMotor(){                                           // Fonction pour freiner les moteurs
  Wire.beginTransmission(md25Address);
  Wire.send(speed2);
  Wire.send(128);                                           // Freiner moteur 2
  Wire.endTransmission();
  
  Wire.beginTransmission(md25Address);
  Wire.send(speed1);
  Wire.send(128);                                           // Freiner moteur 1
  Wire.endTransmission();
}  


 

Voilà j’espère que ça aidera !

#47 julkien

julkien

    Pilier du forum

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

Posté 10 août 2011 - 01:17

Bien sûr, j'aime cet esprit de libre-échange ! Je vais le mettre dans ce sujet, mais je m'attends à quelques critiques, je pense.
Il n'est pas finalisé, il est simplifié mais pas au maximum, ça manque d'optimisation.
De plus quelques bouts de code ne viennent pas de mon cerveau, mais son des déductions à partir de code donné par le constructeur, il y-a même des codes qui ne servent qu'au débogage etc ...
Je ne sais pas si ça intéressera forcement !
De plus certaine valeure de vitesse son réglée évidemment seulement pour mon robot et par rapport à mon ressenti durant les tests.
Je n'ai toujours pas eu le temps de résoudre les soucis de zone morte entre 0 et 4 cm, je n'ai pas pu bosser dessus, trop occupé sur l'autre robot.

Voilà j’espère que ça aidera !


moi je dit merci
il manque souvent la publication de ce genre de code et en plus il est assez bien commenté
je reviendrais dessu plus tard pour en voler des bout ;)

#48 Astondb8

Astondb8

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 111 messages
  • Gender:Male
  • Location:Paris

Posté 10 août 2011 - 01:43

Effectivement, nous parlons souvant de notre cide sans veritablement le montrer.
Et je ne trouve pas que cela soit du vol, mais du partage. Dans le pur esprit du LL et de la pedagogie que nous attendons ou prodigons sur les forums.

C'est en tout cas, comme cela que je progresse.
- apprendre un langage grace à des sites comme le Zero
- tester mes connaissances en ecrivant mes propres lignes
- Les proposer a la critique sur les forums
- Regarder comment les zutres ont resolu un probleme semblable.

Le copier coler est utile si il est ajouté a une veritable reflexion.

Cdlt
Yves

 


#49 bennurre

bennurre

    Habitué

  • Membres
  • PipPip
  • 160 messages
  • Gender:Male

Posté 10 août 2011 - 07:08

merci, c'est très sympa d'avoir mis ton code en ligne suite à ma demande meme si ta pas trop le temps en ce moment...

merci de l'avoir pris... le temps !!! ;-)

je te tiens au courant pour la suite... je suis comme toi, j'attends les vacances pour avancer plus vite... enfin , j'espère !!! lol

bonne robotisation à tous ...

...................................................

Mon premier projet arduino...

Blog de ma Tondeuse RC...

...................................................


#50 ANT-001

ANT-001

    Membre occasionnel

  • Membres
  • Pip
  • 123 messages
  • Gender:Male
  • Location:La premiére à gauche après jupiter.

Posté 11 août 2011 - 09:14

Je suis bien content que cela fasse plaisir à tout le monde !

Il me tarde vraiment de revenir bosser sur mes robots !

Bonne soirée à tous !

#51 PapaPoilut

PapaPoilut

    Membre occasionnel

  • Membres
  • Pip
  • 115 messages
  • Gender:Male
  • Location:Etampes (91)

Posté 17 août 2011 - 11:09

Salut,
je me présente rapidement (c'est mon premier message :) )
je viens de finir mes études en informatique et j'ai une notion de ce qu'est la robotique mais un intérêt grandissant de jour en jour...
Marié et futur papa :D

J'aimerai me mettre à la fabrication d'un robo simple programmable pour l'évitement d'obstacle, standard.


Je voulais te dire que ton post est très intéressant et qu'il participe a me donner envie de fabriquer le dit robo...

Pour ma part je suis dans le genre a vouloir tout récupérer et rien acheter ...

je reviendrais plus tard quand j’aurais commencer pour raconter mais je voulais dire merci pour tous les détails que tu fournis qui m'aident déjà :D

#52 ANT-001

ANT-001

    Membre occasionnel

  • Membres
  • Pip
  • 123 messages
  • Gender:Male
  • Location:La premiére à gauche après jupiter.

Posté 19 août 2011 - 11:28

Salut,
je me présente rapidement (c'est mon premier message :) )
je viens de finir mes études en informatique et j'ai une notion de ce qu'est la robotique mais un intérêt grandissant de jour en jour...
Marié et futur papa :D

J'aimerai me mettre à la fabrication d'un robo simple programmable pour l'évitement d'obstacle, standard.


Je voulais te dire que ton post est très intéressant et qu'il participe a me donner envie de fabriquer le dit robo...

Pour ma part je suis dans le genre a vouloir tout récupérer et rien acheter ...

je reviendrais plus tard quand j’aurais commencer pour raconter mais je voulais dire merci pour tous les détails que tu fournis qui m'aident déjà :D


Salut !

Bienvenue dans la robotique !
Je ne sais pas si avoir un bébé et faire de la robotique est compatible, mais félicitations à toi et à la maman !

Je trouve que faire exclusivement avec de la récupération est vraiment un tour de force à notre époque du tout jetable. Tout semble fait pour justement ne pas pouvoir être récupéré : colle sur les circuits/composants/fils etc ... , moteurs pas à pas "custom" (non-standard niveau bobinage), composants CMS très dur à dessouder proprement, boutons de potars à usage unique, boitiers d'appareils électronique dépourvu de vis (ou est passé le marteau chérie ?), sans compter le nombre incalculable de pièces calibrées pour casser (pièces fusibles calibrées pour péter en fin de garantie) mis à part tout cela on arrive encore à tomber sur des choses assez âgées pour espérer récupérer pas mal de matos (à l'époque on en était au tout réparable, il y-avait un magasin d’électronique/réparation dans toutes villes de plus 1000 âmes).

Tout ça pour dire que ce n'est pas simple, moi personnellement j'ai vite baissé les bras et je me suis équipé en plus de continuer la récupération, car c'est bien beau, mais lorsque ça fait 3 heures que tu te farcis des circuit imprimés à la loupe pour trouver un transistor équivalent pour ton montage et que tu ne trouve rien, tu passe une commande.

J'ai donc opté pour les vendeurs chinois, les boîtes de recyclage de composants (ils vendent des lots), les sites sérieux pour le matos de meilleure facture, et bien sûr l'occasion.

En tout cas chapeau ! Mais ne craque pas comme moi surtout, cette passion peu être onéreuse !

Ou sinon il faut vraiment avoir de la patience.

Je suis bien content que mon post t'aide et te motive pour la suite !

Bon courage !

#53 PapaPoilut

PapaPoilut

    Membre occasionnel

  • Membres
  • Pip
  • 115 messages
  • Gender:Male
  • Location:Etampes (91)

Posté 22 août 2011 - 07:54

merci ANT-001, pour ne pas polluer ici j'ai répondu sur ma page de présentation :) (hello world)

#54 Mic*

Mic*

    Habitué

  • Membres
  • PipPip
  • 232 messages
  • Gender:Male
  • Location:Sarthe

Posté 01 septembre 2011 - 10:34

pour les coins tu met un compteur dans ton programme de vers la gauche et un dans vers la droite, tu testes les compteurs et tu vois s'il fait la navette entre droite et gauche
si c'est le cas, tu forces une direction toujours à droite (ou toujours à gauche) jusqu'à plus d'obstacles



Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users