Aller au contenu


Photo
- - - - -

Projet "SAMU" : un Robot Trieur roulant grâce à deux moteurs avec odometre et reducteur integres


138 réponses à ce sujet

#61 arobasseb

arobasseb

    Membre passionné

  • Administrateur
  • PipPipPip
  • 737 messages
  • Gender:Male
  • Location:BORDEAUX (33)
  • Interests:Informatique, robotique et sciences technique en générale.

Posté 23 août 2011 - 04:19

... Mais par contre, elle est bien pratique pour alimenter mon sonar US URM37 si je voulais le connecter en I2C...


à condition que sa consommation n’excède pas les 300mA :)

#62 Luj

Luj

    Habitué

  • Membres
  • PipPip
  • 295 messages
  • Gender:Not Telling

Posté 23 août 2011 - 06:50

à condition que sa consommation n'excède pas les 300mA :)


et qu'il fonctionne en I2C... j'ignorais que l'URM37 pouvait sortir un signal I2C... mais je ne sais pas tout :)

#63 Astondb8

Astondb8

    Membre chevronné

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

Posté 23 août 2011 - 10:48

Re bonjour
Décidément, je joue de malchance
Le contrôleur que j'ai acheté d'occasion ne semble pas fonctionner

Voila le code que je lui envois

C'est un code trouvé sur la toile
Je l'ai modifié car les infos était envoyées vers un LCD en série
J'ai donc modifié le code pour envoyer les données sur le serial monitor.

J'ai bien une communication entre la Mega et le contrôleur
Les branchements sont donc bon
Les adresse Master Slave sont également OK

Par contre,
Les moteurs ne tournent pas
Un seul des deux codeurs envoi des data au serial lorsque je les tournent à la main.

/*Arduio example code for MD23 and LCD03 using the wire and software Serial librarys*/

#include <SoftwareSerial.h>
#include <Wire.h>

#define md23Address 0x58                                    // Address of the MD22
#define softwareReg 0x0D                                    // Byte to read the software version
#define speed1 0x00                                         // Byte to send speed to first motor
#define speed2 0x01                                         // Byte to send speed to second motor
#define cmdByte 0x10                                        // Command byte
#define mvCsr 0x02                                          // Command for LCD03 to move cursor
#define hideCsr 0x04                                        // Byte to hide LCD03 cursor
#define clrScrn 0x0C                                        // Byte to clear LCD03 screen
#define encoderOne 0x02                                     // Byte to read motor encoder 1
#define encoderTwo 0x06                                     // Byte to read motor encoder 2
#define voltRead 0x0A                                       // Byte to read battery volts
#define rxPin 2                                             // software serial rx pin
#define txPin 3                                             // software serial tx pin

SoftwareSerial lcd_03 =  SoftwareSerial(rxPin, txPin);      // Defines software serial port for LCD03

int x=0;                                                    // int x stores a value to be used as speed data for the motors

void setup(){
  Wire.begin();
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  //lcd_03.begin(9600);                                       // Begin serial for LCD03
  Serial.begin(9600);
  delay(100);                                               // Wait for everything to power up
  /*
  lcd_03.print(clrScrn, BYTE);          
  lcd_03.print(hideCsr, BYTE);
  lcd_03.print("MD23 Example   V:");
  int softVer = getSoft();                                  // Gets the software version of MD23
  lcd_03.print(softVer, DEC);                               // Print software version to the screen
*/
Serial.print(clrScrn, BYTE);          
Serial.print(hideCsr, BYTE);
Serial.print("MD23 Example   V:");
int softVer = getSoft();                                  // Gets the software version of MD23
Serial.print(softVer, DEC);                               // Print software version to the screen

  encodeReset();                                            // Cals a function that resets the encoder values to 0
}

void loop(){
 x = 255;                                                   // Put a value of 255 in x, this will dive motors forward at full speed
 
 do{                                                        // Start loop to drive motors forward
    Wire.beginTransmission(md23Address);                    // Drive motor 2 at speed value stored in x
    Wire.send(speed2);
    Wire.send(x);                                           
    Wire.endTransmission();
  
    Wire.beginTransmission(md23Address);                    // Drive motor 1 at speed value stored in x
    Wire.send(speed1);
    Wire.send(x);
    Wire.endTransmission();
 
    encoder1();                                             // Calls a function that reads and displays value of encoder 1 to LCD03
    encoder2();                                             // Calls a function that reads and displays value of encoder 2 to LCD03
    volts();                                                // Calls function that reads and displays battery volts
    if(encoder1() > 4500)                                   // When value of encoder 1 is greater than 4500 put 138 in x to slow motor down
      x = 138;
 }while(encoder1() < 5000);                                 // Loop untill encoder 1 is 5000 or more
 
 stopMotor();                                               // Calls function to stop motors
 delay(1000);
 
 x = 0;                                                     // Put a value of 0 in x, this will drive motors at full reverse speed
 
 do{                                                        // Start loop to drive motors reverse
    Wire.beginTransmission(md23Address);                    // Drive motor 2 at speed value stored in x
    Wire.send(speed2);
    Wire.send(x);
    Wire.endTransmission();
  
    Wire.beginTransmission(md23Address);                    // Drive motor 1 at speed value stored in x
    Wire.send(speed1);
    Wire.send(x);
    Wire.endTransmission();
  
    encoder1();                                             // Calls a function that reads and displays value of encoder 1 to LCD03
    encoder2();                                             // Calls a function that reads and displays value of encoder 2 to LCD03
    volts();                                                // Calls function that reads and displays battery volts
    if(encoder1() < 500)                                    // When value of encoder 1 is less than 500 put 118 in x to slow motor down
      x = 118;   
  }while(encoder1() > 0);                                   // Loop untill encoder 1 is 0 or less
  
  stopMotor();                                              // Calls function to stop motors
  delay(1000);
}

int getSoft(){                                              // Function that gets the software version
  Wire.beginTransmission(md23Address);                      // Send byte to read software version as a single byte
  Wire.send(softwareReg);
  Wire.endTransmission();
  
  Wire.requestFrom(md23Address, 1);                         // request 1 byte form MD23
  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(md23Address);
  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(md23Address);                      // Send byte to get a reading from encoder 1
  Wire.send(encoderOne);
  Wire.endTransmission();
  
  Wire.requestFrom(md23Address, 4);                         // Request 4 bytes from MD23
  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
  /*
  lcd_03.print(mvCsr, BYTE);  
  lcd_03.print(21, BYTE);                                   // Move cursor to space 21
  lcd_03.print("Encoder 1 ");
  lcd_03.print(poss1, DEC);                                 // Print encoder 1 value to LCD03
  lcd_03.print("   ");                                      // Print some spaces to clear space after encoder value
  delay(50);                                                // Wait for everything to make sure everything is sent
  */
 Serial.print(mvCsr, BYTE);  
 Serial.print(21, BYTE);                                   // Move cursor to space 21
 Serial.print("Encoder 1 ");
 Serial.print(poss1, DEC);                                 // Print encoder 1 value to LCD03
 Serial.print("   "); // Print some spaces to clear space after encoder value
 Serial.print("\n");
  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(md23Address);                      // Send byte to get a reading from encoder 2                   
  Wire.send(encoderTwo);
  Wire.endTransmission();
  
  Wire.requestFrom(md23Address, 4);                         // Request 4 bytes from MD23
  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
  /*
  lcd_03.print(mvCsr, BYTE);
  lcd_03.print(41, BYTE);                                   // Move cursor to space 41
  lcd_03.print("Encoder 2 ");
  lcd_03.print(poss2, DEC);                                 // Print value of encoder 2 position
  lcd_03.print("   ");                                      // Print some spaces to clear space after encoder value
  delay(50);  // Wait for everything to make sure everything is sent
  */
  Serial.print(mvCsr, BYTE);
  Serial.print(41, BYTE);                                   // Move cursor to space 41
  Serial.print("Encoder 2 ");
  Serial.print(poss2, DEC);                                 // Print value of encoder 2 position
  Serial.print("   ");                                      // Print some spaces to clear space after encoder value
  delay(50);   
  return(poss2);                                            // Returns encoder 2 position as a long
}

void volts(){                                               // Function to read and display battery volts as a single byte
  Wire.beginTransmission(md23Address);                      // Send byte to read volts
  Wire.send(voltRead);
  Wire.endTransmission();
  
  Wire.requestFrom(md23Address, 1);                         // Request 1 byte form MD23
  while(Wire.available() < 1);                              // Wait for byte to arrive 
  int batteryVolts = Wire.receive();                        // Get byte
  /*
  lcd_03.print(mvCsr, BYTE);
  lcd_03.print(61, BYTE);                                   // Move cursor to space 61
  lcd_03.print("Battery v = ");
  lcd_03.print(batteryVolts/10, DEC);                       // Print batery volts / 10 to give you the number of whole volts
  lcd_03.print(".");                                        // As arduino has truncates floating point numbers we print a . here to act as a decimal point
  lcd_03.print(batteryVolts%10, DEC);                       // Prints Battery volts % 10 to give us the 
  */
  Serial.print(mvCsr, BYTE);
  Serial.print(61, BYTE);                                   // Move cursor to space 61
  Serial.print("Battery v = ");
  Serial.print(batteryVolts/10, DEC);                       // Print batery volts / 10 to give you the number of whole volts
  Serial.print(".");                                        // As arduino has truncates floating point numbers we print a . here to act as a decimal point
  Serial.print(batteryVolts%10, DEC);                       // Prints Battery volts % 10 to give us the 
  
  delay(50);                                                // Wait to make sure everything is sent
}

void stopMotor(){                                           // Function to stop motors
  Wire.beginTransmission(md23Address);
  Wire.send(speed2);
  Wire.send(128);                                           // Sends a value of 128 to motor 2 this value stops the motor
  Wire.endTransmission();
  
  Wire.beginTransmission(md23Address);
  Wire.send(speed1);
  Wire.send(128);                                           // Sends a value of 128 to motor 1 this value stops the motor
  Wire.endTransmission();
}



Une idée ?

Plus j'en apprend plus je me rend compte que je ne sais rien. C'est effrayant...


Merci de votre aide,

Cdlt
Yves

 


#64 Luj

Luj

    Habitué

  • Membres
  • PipPip
  • 295 messages
  • Gender:Not Telling

Posté 23 août 2011 - 11:04

Bonsoir

Le code est très long (j'ai même pas vu les commentaires lors de ma première lecture).
Même si on indique une correction, comment être sur que tu comprends et que tu sauras appliquer le conseil.

Le problème vient de Software Serial qui essaie d'initialiser la commande avec un périphérique non connecté, donc il ne passe pas dans le reste du code. De toute façon trop complexe pour commencer par tester.

#65 Astondb8

Astondb8

    Membre chevronné

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

Posté 24 août 2011 - 12:00

Bonsoir

Le code est très long (j'ai même pas vu les commentaires lors de ma première lecture).
Même si on indique une correction, comment être sûr que tu comprends et que tu sauras appliquer le conseil ?

Le problème vient de Software Serial qui essaie d'initialiser la commande avec un périphérique non connecté, donc il ne passe pas dans le reste du code. De toute façon trop complexe pour commencer par tester.


Merci Julien
car ta réponse est très intéressante même si tu ne peux m'en dire plus.
Elle ne ferme pas la porte à un problème purement software et pas hardware.

Cela veux dire que si j'arrive a trouver ou écrire un code plus simple qui ne prenne que deux ou trois commandes pour ne prendre en charge que mes moteurs et juste les faire tourner cela pourrait marcher ?
Je ne souhaite que savoir si mon contrôleur fonctionne.

Dans un 1er temps, je crois que je n'ai besoin que d'un code qui m'assure que mon contrôleur fonctionne en faisant tourner mes moteurs.
Pour le reste j'ai le temps d'éplucher la doc et tester des évolutions de ce code.
Mais j'ai bien vu que le code s’arrêtait. Je crois même savoir sur quelle ligne il s’arrête
Mais c'est déjà une piste très rassurante.
Merci
Cdlt
Yves

 


#66 julkien

julkien

    Membre chevronné

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

Posté 24 août 2011 - 05:55

et qu'il fonctionne en I2C... j'ignorais que l'URM37 pouvait sortir un signal I2C... mais je ne sais pas tout :)


ça doit etre nettement plus complexe a utilisé non ? il y as un avantage ?

A+

#67 Astondb8

Astondb8

    Membre chevronné

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

Posté 24 août 2011 - 09:33

Bonjour,,

Tout d'abord, une rectification. Effectivement ce capteur est assez complet en possibilité, mais ne gere pas l'I2C.

Voilà son PinOut
1: +VCC - +5V Power
2: GND - Ground
3: RST - Reset
4: PWM - PWM Output 0-25000US,Every 50US represent 1cm
5: MOTO - Servo control signal output
6: COMP/TRIG
COMP - On/OFF mode, when the detecting distance is smaller than a pre-set value, this pin pulls low.
TRIG - PWM or RS232 trigger pin
7: PWR_ON - Enable pin, enable the sensor when high
8: RXD - RS232,TTL communication
9: TXD - RS232,TTL communication

Pour Julken,
Je suis encore comme vous pouvez le voir assez ignorant en matière d'I2C.
Pourtant, cette méthode me parait bien plus simple à utiliser (je me trompe peut-être et ne manquerais pas de vous donner un avis mieux documenté lorsque je commencerais à maitriser cette techno.
Pourquoi je trouve ça simple?
Une seule Lib Wire.h
Un Bus pouvant accueillir un grand nombre de périphériques.
Mais surtout, deux Pins du µC pour gérer l'ensemble de ces périphériques.
Donc permettant même à un petit µC de gérer un grand nombre de capteurs ou autre.

Si nous regardons ce qui nous permet de relier des périphériques à un µC, nous avons
La méthode normale Plus ou moins gourmande en Pins selon le type de périphérique.
La liaison Serial, mais un seul périphérique par port serbe (La Mega en a plusieurs, mais la Uno a un nombre de ports réduit)
La Liaison SPI assez rapide et plutôt bien nécessite 3 pins communes et 1 par périphérique
La Liaison I2C qui elle ne nécessite que deux Pins quelque soit le nombre de périphériques que tu connectes.

Donc, pourquoi utiliser ces Librairies plutôt que les connexions standard. La raison en est tres simple, ces solutions offrent un elargissement assez copncequent du nombre de périphérique que votre %C peut gerer en même temps.

Mais tu ne manques pas de Pins me direz vous avec une Mega (et sans doute une Uno reliée en Slave) non c'est sur, mais quitte à apprendre à utiliser les µC, autant apprendre à utiliser l'ensemble des possibilités qu'ils nous offrent.

Cdlt
Yves

 


#68 Leon

Leon

    Membre passionné

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

Posté 24 août 2011 - 06:14

Plus j'en apprend plus je me rend compte que je ne sais rien. C'est effrayant...

Apprendre...

C'est le principal intérêt de ce genre de projets! Pour arriver au bout, il faut impérativement se renseigner, apprendre des techniques qu'on ne connait pas du tout. Et c'est clairement ça que je trouve le plus passionnant. Ce que j'ai appris avec mes 2 projets BOB3, et BOB4, c'est tout simplement ENORME! Et ça n'est pas fini!

Pour moi, le résultat est beaucoup moins important que le chemin qui y mène! L'important, c'est d'apprendre, de se faire plaisir, de se prouver à soi même qu'on est capable de relever un petit défi. Se lancer dans un nouveau projet, c'est se lancer dans une petite aventure: on ne sait pas où ça va nous mener, ce qu'on va découvrir, ce qu'on va devoir mettre en oeuvre.

Bref, vous l'avez compris, j'aime la difficulté. Et pas seulement en robotique. Pas de victoire sans effort. C'est ça qui me fait avancer!

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)


#69 Astondb8

Astondb8

    Membre chevronné

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

Posté 24 août 2011 - 08:50

Bref, vous l'avez compris, j'aime la difficulté.


C'est exactement ce que j'ai dit a ma femme le jour ou je l'ai rencontré.
Ça fait 20 ans et je vous assure que j'en bave encore ;)

Non plus sérieusement, Je suis exactement de cet avis. Je chemin est plus intéressante que la destination et souvent lus jolie.

Cdlt
Yves

 


#70 Astondb8

Astondb8

    Membre chevronné

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

Posté 25 août 2011 - 06:05

Bon c'est pas tout ca mais voila enfin une nouvelle agréable.

J'ai remplacé finalement mes contrôleurs par les mêmes que ceux que j'avais grillés. Et vous n'allez pas me croire (quoi que... Pourquoi pas) Mes moteurs tournent enfin.
Il était temps. Seul doute, j’entends un sifflement qui viens de mes contrôleurs. C'est bien sur la fréquence du PWM qui parfois deviens audible. Mais je ne sais pas si c'est normale ou pas.
N'oublions pas que c'est en entendant ce sifflement que mes moteurs ont rendu l’âme. Mais vraiment je ne crois pas qu'il y ait un lien de cause à effet. En effet, je ne vois pas comment une fréquence de PWM peut griller des carte contrôleurs.

Donc si tout ce passe bien, ce soir, finalisation du code. Mise en place de façon plus fine les valeurs de capteurs qui font tourner ou reculer le robot. Et demain, je m'attaque enfin au deuxième étage de la fusée, c'est à dire le bras robotisé.


Cdlt
Yves

 


#71 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 25 août 2011 - 06:20

Salut !

Tant mieux que ça remarche :)
Quelle est la fréquence du signal PWM que tu envoies à tes contrôleurs ??

Mon site internet : http://ferdinandpiette.com/


#72 Luj

Luj

    Habitué

  • Membres
  • PipPip
  • 295 messages
  • Gender:Not Telling

Posté 25 août 2011 - 10:51

C'est bien sur la fréquence du PWM qui parfois deviens audible.


Sauf erreur, la fréquence du PWM est fixe au cours de son utilisation : si tu fais varier la vitesse de ton moteur, c'est le rapport niveau haut / niveau bas qui change, pas la fréquence.
Mais par contre il y a effectivement des vitesses où le son devient audible.

En effet, je ne vois pas comment une fréquence de PWM peut griller des carte contrôleurs.


Comme tu t'en doutes, on en apprends tous les jours :)

Une fréquence de PWM trop basse peut griller un composant ou même le moteur : en effet, si le PWM est utilisé comme un hacheur de courant, cela signifie que le courant augmente progressivement lorsque le signal est au niveau haut, et diminue progressivement lorsque le signal est au niveau bas. Si la fréquence est basse, le courant augmente pendant longtemps jusqu'à dépasser les valeurs acceptées par les composants ou le moteur.

Nous avons pu le constater sur un petit robot à chenilles, lors d'une expérience menée au club. Heureusement qu'un de nos participants est un expert en électronique. J'ai noté ses remarques dans cet article, avec le code pour modifier la fréquence du PWM sur une Arduino (dans le setup). J'ai même mis des enregistrements du son que fait le moteur : http://www.pobot.org...e-d-un-PWM.html

#73 Astondb8

Astondb8

    Membre chevronné

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

Posté 26 août 2011 - 12:50

Trés intéressant cet article Julien. Je vais comparer les sons que j’entends, mais je vais surtout (chose que je n'ai pas encore faite) passer mes PWM au Fréquencemètre.
Je vous donnerais cette fréquence au différentes accélérations.

Et demain, je vais même essayer de vous monter une représentation graphique de mon PWM (puisque désormais, je peux le faire ;) )

Cdlt
Yves

 


#74 Astondb8

Astondb8

    Membre chevronné

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

Posté 26 août 2011 - 06:47

Bon Problème résolu. (je n'ai rien fais de particulier mais ce sifflement a disparu... Il y a parfois des choses qu'il est préférable d'ignorer si on ne veux pas devenir fou... ;


Sinon, Voila la 1ere vidéo de SAMU. Elle à été faite un peux à l’arrache. Donc ne m'en voulez pas pour sa piètre qualité d'image. Mais pas de caméra en ce moment. Elle est donc faite avec mon téléphone (qui m’aura décidément beaucoup servi cet an ci ;) )

Donc voila Pour le moment un seul capteur
A l'approche d'un obstacle, le robot tourne à gauche pendant 100 millisecondes
Puis repart en avant.

Ce n'est bien sur qu'une 1ere vidéo donc qu'un 1er pas.


Cdlt

 


#75 Jbot

Jbot

    Membre passionné

  • Membres
  • PipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris
  • Interests:Robotics

Posté 26 août 2011 - 07:37

Bravo !

Je vois que tu as engagé ton fils pour servir d'obstacle :D


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


#76 Jbot

Jbot

    Membre passionné

  • Membres
  • PipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris
  • Interests:Robotics

Posté 26 août 2011 - 07:50

Au passage :
A mon avis ton "signal sonore" venait du fait que tu ne mettais rien en sortie sur ta pin DIR. Dans le code tu la définissait juste comme OUTPUT mais tu ne la mettait ni high, ni low, ce qui fait que potentiellement elle etait a un état indéfini, donc peut etre qu'elle variait suivant les parasites, ce qui fait que ton moteur recevait des parasites.

Ce n'est qu'une supposition mais si maintenant les bruits ont disparus juste aprés qu'on rajoute les valeurs sur la pin DIR, ca pourrait bien etre ça.


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


#77 julkien

julkien

    Membre chevronné

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

Posté 26 août 2011 - 08:36

Bon Problème résolu. (je n'ai rien fais de particulier mais ce sifflement a disparu... Il y a parfois des choses qu'il est préférable d'ignorer si on ne veux pas devenir fou... ;


Sinon, Voila la 1ere vidéo de SAMU. Elle à été faite un peux à l'arrache. Donc ne m'en voulez pas pour sa piètre qualité d'image. Mais pas de caméra en ce moment. Elle est donc faite avec mon téléphone (qui m'aura décidément beaucoup servi cet an ci ;) )

Donc voila Pour le moment un seul capteur
A l'approche d'un obstacle, le robot tourne à gauche pendant 100 millisecondes
Puis repart en avant.

Ce n'est bien sur qu'une 1ere vidéo donc qu'un 1er pas.
http://www.youtube.c...h?v=Adm-aW5MqCs

Cdlt


bravo

c'est un premier resultat deja tres convainquant


A+

#78 arobasseb

arobasseb

    Membre passionné

  • Administrateur
  • PipPipPip
  • 737 messages
  • Gender:Male
  • Location:BORDEAUX (33)
  • Interests:Informatique, robotique et sciences technique en générale.

Posté 26 août 2011 - 09:07

Bravo, c'est encourageant B) , en tout cas moi ça me motive à pouvoir donner vie à un de ces petits êtres d'acier :)

#79 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 26 août 2011 - 10:22

Pas mal du tout ! ! ! :)

Il est très réactif ! Bravo et bonne continuation ^_^

Mon site internet : http://ferdinandpiette.com/


#80 Astondb8

Astondb8

    Membre chevronné

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

Posté 26 août 2011 - 10:35

Au passage :
A mon avis ton "signal sonore" venait du fait que tu ne mettais rien en sortie sur ta pin DIR. Dans le code tu la définissait juste comme OUTPUT mais tu ne la mettait ni high, ni low, ce qui fait que potentiellement elle etait a un état indéfini, donc peut etre qu'elle variait suivant les parasites, ce qui fait que ton moteur recevait des parasites.

Ce n'est qu'une supposition mais si maintenant les bruits ont disparus juste après qu'on rajoute les valeurs sur la pin DIR, ca pourrait bien etre ça.


C'est effectivement une explication.
Position indéfini... Je croyais qu'une pin non déclarée était considérée par Arduino comme HIGH
En tout cas Merci

Pour les autres (vous êtes trop nombreux pour vous citer et remercier un à un (j'ai du pain sur la planche...;) )

Bon aller, j'y retourne. Y a encore deux ou trois chose a changer avant de passer au bras articulé.

Cdlt
Yves

 




Répondre à ce sujet



  


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

0 members, 1 guests, 0 anonymous users