Un robot à trois roues.
#43
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
Posté 09 août 2011 - 05:22
Sinon pour le code je t'envoie ça en MP d'ici quelques heures.
Ravis de voir que la robotique attire du monde !
#46
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
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
Posté 10 août 2011 - 01:43
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
Posté 10 août 2011 - 07:08
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...
...................................................
#51
Posté 17 août 2011 - 11:09
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
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à
#52
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
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à
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 !
#54
Posté 01 septembre 2011 - 10:34
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