Aller au contenu


Photo

Roberto [PPE]


  • Veuillez vous connecter pour répondre
11 réponses à ce sujet

#1 Jekert

Jekert

    Auteur

  • Modérateur
  • Pip
  • 96 messages
  • Gender:Male

Posté 08 janvier 2017 - 03:35

Salut à tous !

 

Je viens perturber la monarchie d'Oracid sur cette catégorie :D  avec la présentation de notre (nous sommes un groupe de 5) projet de terminale SI.

 

Donc l'objet de ce projet est de créer un robot stabilisateur de caméra pour la prise de vue au sol. On a donc séparer le projet en deux parties, le système de déplacement et celui de stabilisation.

 

Mon rôle dans ce projet est de choisir l'alimentation, programmer le système de déplacement et étudier les signaux de sortie des capteurs. Mais si vous avez des questions ou autres sur les autres parties du projet n'hésitez pas.

 

Pour la base mécanique du système de déplacement nous avons choisi d'utiliser des LEGO combiné à un EVShield (un Shield Arduino) pour le contrôle des 4 moteurs et des différents capteurs (de distance et d'inclinaison). La documentation du shield est disponible ici.

 

evshield-for-arduino-duemilanove-or-uno.jpg.png

 

Nous avons jusqu'en avril pour finir nos tâches mais voici un aperçu du système de déplacement (qui nécessite encore quelques modifications) :

 

15608593_1641217639512638_1828761564_o.jpg

15608836_1641217619512640_191563867_o.jpg

15609323_1641217599512642_1777660190_o.jpg

15658160_1641217592845976_367032436_o.jpg

15658890_1641217572845978_1821202811_o.jpg

 

Après avoir choisi une batterie lipo, je suis passé à la programmation des éléments du robot à commencer par les moteurs :

Test d'un moteur sur la Bank A port M1 :

// Bibliothèques :
#include <Wire.h>
#include <EVShield.h>

EVShield evshield(0x34, 0x36); //Adresses i²c des deux cotés du shield.

void setup()
{
  Serial.begin(9600); //Communication Série pour debugging

  evshield.init( SH_HardwareI2C ); //Initialisation de l'EV Shield

  evshield.bank_a.motorReset();
  evshield.bank_b.motorReset();

  Serial.println("Appuyez sur le bouton GO pour commencer");
  evshield.waitForButtonPress(BTN_GO); //Attente de commande utilisateur

  evshield.ledSetRGB(200,100,100);
}

void loop()
{
  evshield.bank_a.motorRunUnlimited(SH_Motor_1, SH_Direction_Forward, 100); //Remplacer Forward par Reverse pour modifier le sens de rotation

  delay(1000);
  
  evshield.bank_a.motorStop(SH_Motor_Both, SH_Next_Action_Brake);

 Serial.println("Appuyez sur le bouton GO pour commencer");
 evshield.waitForButtonPress(BTN_GO); //Attente de commande utilisateur
}

Test avec 4 moteurs :

// Bibliothèques :
#include <Wire.h>
#include <EVShield.h>

EVShield evshield(0x34, 0x36); //Adresses i²c des deux cotés du shield.



void setup()
{
  Serial.begin(9600); //Communication Série pour debugging

  evshield.init( SH_HardwareI2C ); //Initialisation de l'EV Shield

  evshield.bank_a.motorReset();
  evshield.bank_b.motorReset();

  Serial.println("Appuyez sur le bouton GO pour commencer");
  evshield.waitForButtonPress(BTN_GO); //Attente de commande utilisateur

  evshield.ledSetRGB(200,100,100);
}

void loop()
{
 evshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Reverse, 100); //Démarre les moteurs à 100%
 evshield.bank_b.motorRunUnlimited(SH_Motor_Both, SH_Direction_Forward, 100); //Démarre les moteurs à 100%

 delay(1000);

 evshield.bank_a.motorStop(SH_Motor_Both, SH_Next_Action_Float);
 evshield.bank_b.motorStop(SH_Motor_Both, SH_Next_Action_Float);

 Serial.println("Appuyez sur le bouton GO pour commencer");
 evshield.waitForButtonPress(BTN_GO); //Attente de commande utilisateur
}

L'ensemble des programmes que je posterai sur ce fil seront aussi disponible ici.

 

Au programme des prochaines séances : mise en place du capteur de distance et d'inclinaison.

 

Voilà tout pour le moment, j'essayerai de mettre à jour régulièrement ce fil :)

 

PS: J'ai hésité à placer ce sujet dans LEGO vu que tout les programmes seront en Arduino, mais je pense que ça peut tout de même donner une idée de ce que l'on peut faire avec l'EVShield



#2 Path

Path

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 685 messages
  • Gender:Male
  • Location:Paris

Posté 08 janvier 2017 - 03:51

C'est intéressant !! Merci du partage



#3 Oliver17

Oliver17

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 626 messages
  • Gender:Male
  • Location:La Rochelle

Posté 08 janvier 2017 - 04:41

+1 :)



#4 Oracid

Oracid

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 971 messages
  • Gender:Male

Posté 08 janvier 2017 - 05:34

Salut à tous !
 
Je viens perturber la monarchie d'Oracid sur cette catégorie :D  avec la présentation de notre (nous sommes un groupe de 5) projet de terminale SI.
 
Au programme des prochaines séances : mise en place du capteur de distance et d'inclinaison.
 
PS: J'ai hésité à placer ce sujet dans LEGO vu que tout les programmes seront en Arduino, mais je pense que ça peut tout de même donner une idée de ce que l'on peut faire avec l'EVShield

Bien au contraire, tout l'honneur est pour moi et je pense que cette réalisation a toute sa place dans la rubrique Lego plutôt qu'ailleurs.

Quelques remarques :
- vous utilisées des servos NXT et non pas EV3. Mais c'est bien aussi, d'autant qu'ils sont plus puissants.
- pourquoi les servos sont-ils orientés à 90° alors que l'axe en prise direct est fait pour ce genre de mobile ?
- les petites chenilles caoutchouc d'origine ont une longueur fixe, ce qui pourra vous poser des problèmes d'adaptabilité en cas de modification de structure. Ma chenille est autrement plus efficace, voir ma vidéo #13, mais vous avez peut-être vos raisons.
- concernant le capteur d'inclinaison, vous ne savez peut-être pas où vous mettez les pieds. Voici quelques liens qui devraient vous intéresser :




Et un exemple de programme minimaliste qui affiche l'inclinaison sur une brique EV3, à adapter donc :
Affiche inclinaison.jpg

J'attends la suite avec impatience.
Ma chaine vidéo YouTube : 'https://www.youtube....Mz-IzZqyvqEUek'

#5 Oracid

Oracid

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 971 messages
  • Gender:Male

Posté 08 janvier 2017 - 06:17

Voilà 2 vidéos sur le même sujet que j'ai trouvé très intéressantes.


Ma chaine vidéo YouTube : 'https://www.youtube....Mz-IzZqyvqEUek'

#6 Jekert

Jekert

    Auteur

  • Modérateur
  • Pip
  • 96 messages
  • Gender:Male

Posté 08 janvier 2017 - 10:24

Merci pour vos retours :)

 

 

- vous utilisées des servos NXT et non pas EV3. Mais c'est bien aussi, d'autant qu'ils sont plus puissants.
- pourquoi les servos sont-ils orientés à 90° alors que l'axe en prise direct est fait pour ce genre de mobile ?

Oui l'ensemble du matériel LEGO est de la génération NXT.

On avait orienté les servos à 90° pour avoir le maximum d'espace au centre pour éviter que si un objet passe au centre le robot soit stopper ainsi que pour ajouter une réduction (qui a finalement été retirée).

 

 

les petites chenilles caoutchouc d'origine ont une longueur fixe, ce qui pourra vous poser des problèmes d'adaptabilité en cas de modification de structure. Ma chenille est autrement plus efficace, voir ma vidéo #13, mais vous avez peut-être vos raisons.

On avait commencé par le robot à chenilles du guide compris dans les boites LEGO (qui avait l'air de bien fonctionner), que nous avons adapter pour notre projet. Mais si on rencontre des problèmes avec, on se tournera vers ta vidéo (mais ce robot n'est pas prévu pour monter des grandes pentes(~10%)). Et une autre raison est le fait que nous pensions que cela réduirai les "dérapages" (ou déraillement) si les moteurs ne tournent pas exactement à la même vitesse.

 

 

concernant le capteur d'inclinaison, vous ne savez peut-être pas où vous mettez les pieds. Voici quelques liens qui devraient vous intéresser :

 

Le capteur d'inclinaison LEGO que le lycée possède provient de chez Hitec. Mais je n'ai pas encore réussi à le faire fonctionner avec l'EVShield donc je suis en train de me renseigner sur l'utilisation d'un MPU-6050 au cas où il ne soit pas compatible.

 

Merci pour les vidéos sur la stabilisation mais j'ai oublié de préciser la partie orientation du stabilisateur, on est donc parti sur un type de gimbal (composée de 3 moteurs brushless) commandé avec SimpleBCG que l'on placera sur le robot.



#7 Oracid

Oracid

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 971 messages
  • Gender:Male

Posté 09 janvier 2017 - 07:48

Mettre les motors à 90° pour le passage entre les chenilles, je suis dubitatif. Surtout quand je vois l'utilisation de barres transversales sous les moteurs alors que les moteurs possèdent des prises hautes. Mais bon...

L'utilisation de 4 chenilles au lieu de 2 va provoquer un frottement maximum dans les virages et surtout dans les demi-tours sur place. Les chenilles ne vont pas tangenter la courbe des virages, mais la couper. Cette solution est utilisé pour un char articulé, mais en toute connaissance de cause. Je pense que mécaniquement, c'est un non sens. Mais pas de problème, ça passera, en force, mais ça passera...

Le NXT ne possédait pas nativement de capteur d'inclinaison, c'est pour cette raison que Hitec le proposait. Je ne connais pas ce capteur et son bloc de programmation, il faut être vigilant, l'utilisation de ces capteurs a toujours posé de gros problèmes, mais les solutions proposées aujourd'hui sont pérennes.

Pour le Gimbad, on est dans la super classe. Je suis impatient de voir le résultat.
Ma chaine vidéo YouTube : 'https://www.youtube....Mz-IzZqyvqEUek'

#8 Oracid

Oracid

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 971 messages
  • Gender:Male

Posté 09 janvier 2017 - 11:32

À la réflexion, mon analyse n'est pas bonne.

Voir schéma ci-dessous.
En cas d'inversion du sens de rotations des paires de moteurs, les deux trains de chenilles A et B, voudraient décrire les petits cercles, mais n'y parviendront pas.
Le grand cercle C correspond au cercle intuitivement souhaité.

Ces 4 chenilles pourraient être vues comme 4 roues, mais avec des frottements beaucoup plus importants.
De plus, dans ce chassis il y a 4 chenilles et 4 moteurs, alors que la dimension et le poids du mobile ne nécessiterait, à mon avis, que 2 moteurs.
Cela ferait économiser environs 150g et surtout libérerait 2 ports sur l'EVShield.

cercle.jpg
Ma chaine vidéo YouTube : 'https://www.youtube....Mz-IzZqyvqEUek'

#9 Jekert

Jekert

    Auteur

  • Modérateur
  • Pip
  • 96 messages
  • Gender:Male

Posté 09 janvier 2017 - 07:12

Merci pour tes remarques, je transmettrai à la personne qui s'en occupe :)

 

 

Le NXT ne possédait pas nativement de capteur d'inclinaison, c'est pour cette raison que Hitec le proposait. Je ne connais pas ce capteur et son bloc de programmation, il faut être vigilant, l'utilisation de ces capteurs a toujours posé de gros problèmes, mais les solutions proposées aujourd'hui sont pérennes.

Nous l'avons déjà utilisé avec la brique NXT mais pas encore avec l'EVShield. Je mettrai un programme si j'y arrive.

 

A propos des chenilles, je n'ai pas trouvé sur bricklink les éléments de la chenille que tu utilise ainsi que les "roues", es-ce que tu aurais encore le lien du site où tu les a achetés ?



#10 Oracid

Oracid

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 971 messages
  • Gender:Male

Posté 10 janvier 2017 - 08:02

A propos des chenilles, je n'ai pas trouvé sur bricklink les éléments de la chenille que tu utilise ainsi que les "roues", es-ce que tu aurais encore le lien du site où tu les a achetés ?

- éléments de chenille gris ou noir, moi j'ai des noirs , réf.57518, http://www.bricklink...=S&O={"st":"4"}
- barbotin noir, réf. 57519, http://www.bricklink...&O={"color":11}

Pour les éléments de chenilles, j'en ai sur lesquels j'ai mis de la colle au pistolet ou du scotch double face très résistant, pour mes tests.
Cela ne les empêche pas de fonctionner, mais c'est pas très propre, sauf si tu as la patience de gratter avec tes ongles.
Alors, comme je ne les utiliserai plus, c'est cadeau. Et je mettrai 4 barbotins en prime.
Si ça t'intéresse, tu m'envoies ton adresse en MP.
Et dis toi que ce n'est vraiment pas grand chose. Lego fait des prix défiants toute concurrence aux AFOLs, mais chut, c'est un secret...
Ma chaine vidéo YouTube : 'https://www.youtube....Mz-IzZqyvqEUek'

#11 Jekert

Jekert

    Auteur

  • Modérateur
  • Pip
  • 96 messages
  • Gender:Male

Posté 11 janvier 2017 - 04:54

Oui, ça m'intéresse, merci ! :)

 

D'ailleurs, as-tu rencontré des problèmes avec l'utilisation de 2 moteurs sur une même chenille ? (juste pour savoir au cas où 2 moteurs au total ne suffiraient pas)

 

J'ai un petit peu avancé sur le capteur de distance (un module à ultrasons HC-SR04), après avoir eu des problèmes avec mon "filtre" (le module s’arrêter pendant l'exécution du programme), j'ai finalement utilisé deux fonctions incluses dans la bibliothèque NewPing (ping_median et convert_cm):

#include <NewPing.h>

//Capteur à ultrasons :
#define TRIG 13   // Pin de déclenchement de la mesure
#define ECHO 12   // Pin de retour de la mesure
#define MAXD 30   // Distance maximale de détection en cm
#define DISTANCE_SECU 25 //Distance maximale en cm à laquelle le robot s'arrete d'un objet
NewPing sonar(TRIG, ECHO, MAXD); //Déclaration du capteur à ultrasons

#define LED 11

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  
  //Mesure et conversion :
  int timeD = millis();
  int med = sonar.ping_median(7); //On effectue 7 mesures, retire les valeurs hors de portée et retourne le temps median en us.
  int dist = sonar.convert_cm(med); // Converti le temps en distance en cm
  
  //Affichage :
  Serial.print("Distance: ");
  Serial.print(dist); Serial.print(" | Temps de mesure: ");
  Serial.println(millis() - timeD); //Affiche le temps de mesure
  
  //Réactions :
  if (dist <= DISTANCE_SECU && dist > 0)
  {
    digitalWrite(LED, HIGH); //Allume la led si un objet se trouve à moins de 25 cm du capteur
  }
  else
  {
    digitalWrite(LED, LOW);
  }
}

Le temps de mesure est d'environ 172ms (ce qui est bien mieux que mes 600ms avec le programme précédent quand ça fonctionnait...) et la mesure est précise à environ 1 à 2 cm près sans obtenir de valeurs improbables.

Puis je l'ai combiné au programme pour contrôler 1 Moteur pour vérifier qu'il était possible d'arrêter le robot avec une distance mesurée par le capteur :

// Bibliothèques :
#include <Wire.h>
#include <EVShield.h>
#include <NewPing.h>

EVShield evshield(0x34, 0x36); //Adresses i²c des deux 

//Capteur à ultrasons :
#define TRIG 13   // Pin de déclenchement de la mesure
#define ECHO 12   // Pin de retour de la mesure
#define MAXD 30   // Distance maximale de détection en cm
#define DISTANCE_SECU 25 //Distance en cm à laquelle le robot s'arrete d'un objet
NewPing sonar(TRIG, ECHO, MAXD); //Déclaration du capteur à ultrasons

void setup() {
  Serial.begin(9600);
  
  evshield.init( SH_HardwareI2C ); //Initialisation de l'EV Shield

  evshield.bank_a.motorReset();
  evshield.bank_b.motorReset();

  Serial.println("Appuyez sur le bouton GO pour commencer");
  evshield.waitForButtonPress(BTN_GO); //Attente de commande utilisateur

  evshield.ledSetRGB(200,100,100);
}

void loop() {
  
  //Mesure et conversion :
  int timeD = millis();
  int med = sonar.ping_median(7); //On effectue 7 mesures, retire les valeurs hors de portée et retourne le temps median en us.
  int dist = sonar.convert_cm(med); // Converti le temps en distance en cm
  
  //Affichage :
  Serial.print("Distance: ");
  Serial.print(dist); Serial.print(" | Temps de mesure: ");
  Serial.println(millis() - timeD); //Affiche le temps de mesure
  
  //Réactions :
  if (dist <= DISTANCE_SECU && dist > 0)
  {
   evshield.bank_a.motorStop(SH_Motor_Both, SH_Next_Action_Float);
  }
  else
  {
   evshield.bank_a.motorRunUnlimited(SH_Motor_1, SH_Direction_Forward, 100); 
  }
}

Je vais maintenant passer au capteur d'inclinaison du robot. Suite au prochain épisode :)



#12 Oracid

Oracid

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 971 messages
  • Gender:Male

Posté 11 janvier 2017 - 08:23

Oui, ça m'intéresse, merci ! :)
D'ailleurs, as-tu rencontré des problèmes avec l'utilisation de 2 moteurs sur une même chenille ? (juste pour savoir au cas où 2 moteurs au total ne suffiraient pas)

Non, le problème n'est pas de mettre 2 moteurs sur la même chenille, mais de mettre 2 chenilles de chaque coté du char.
D'ailleurs, la majorité de les mes chars ont 2x2 moteurs, comme ici, http://www.robot-mak...ank-climber-12/

J'ai déjà expérimenté un système à 4 chenilles sur ce char, http://www.robot-mak...v-tank-climber/, le résultat a été très mauvais.

Si je préconise 2 moteurs pour ton projet, c'est parce que je pense que la taille et le poids du char ne nécessitent pas 4 moteurs.
Comme sur ces 2 vidéos,
'https://www.youtube....yJX5UxPy8&t=1s'
'https://www.youtube....WeFkbWRA&t=30s'
Ma chaine vidéo YouTube : 'https://www.youtube....Mz-IzZqyvqEUek'




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

0 members, 0 guests, 0 anonymous users