Outils pour utilisateurs

Outils du site


wiki:projets:robot-semi-hommeinmoov

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
wiki:projets:robot-semi-hommeinmoov [2014/01/10 13:28]
127.0.0.1 modification externe
wiki:projets:robot-semi-hommeinmoov [2020/10/05 14:39] (Version actuelle)
Ligne 15: Ligne 15:
 08/01/2014 Nous avons reçu le fil de pêche et nous avons pu assembler la main : 08/01/2014 Nous avons reçu le fil de pêche et nous avons pu assembler la main :
 {{ :wiki:projets:20140108_211906.jpg?600 |}} {{ :wiki:projets:20140108_211906.jpg?600 |}}
 +
 +
 +22/09/2014 Pour terminer l'avant bras, nous avons suivis les instructions du site internet, exepter le fait que nous avons modifié la pièce "RobServoBedV5" afin de la fité avec les servos moteurs suivants : Corona DS-319HV, choisit pour leur rapidité 0.05 sec  pour tourner de 60º
 +
 +===== Pierre feuille ciseaux contre la main =====
 +
 +<code=javascript>
 +var Leap = require('leapjs');
 +
 +var controller = new Leap.Controller();
 +
 +// 0 = No cheat (full random)
 +// 1 = Subtile cheat mode (2/3 draw, 1/3 win)
 +// 2 = Full cheat mode (always win)
 +var mode = 1;
 +
 +var step = 0;
 +var underThreshold;
 +var threshold = 150;
 +var steps = ["1...", "2...", "3...", ""];
 +
 +var countFingers = function(hand) {
 + var nbFingers = 0;
 + nbFingers += hand.thumb.extended;
 + nbFingers += hand.indexFinger.extended;
 + nbFingers += hand.middleFinger.extended;
 + nbFingers += hand.ringFinger.extended;
 + nbFingers += hand.pinky.extended;
 + return nbFingers;
 +}
 +
 +var detectGesture = function(hand) {
 + var nbFingers = countFingers(hand);
 + if (nbFingers==0) return "Pierre";
 + if (nbFingers==5) return "Feuille";
 + if (nbFingers==2 && hand.indexFinger.extended && hand.middleFinger.extended) return "Ciseaux";
 + return "Mouvement invalide";
 +};
 +
 +var getWiningGesture = function(gesture) {
 + if (gesture=="Pierre") return "Feuille";
 + if (gesture=="Feuille") return "Ciseaux";
 + if (gesture=="Ciseaux") return "Pierre";
 +};
 +
 +var getSubtleWiningGesture = function(gesture) {
 + var i = Math.floor(Math.random()*3);
 + if (i<=1) return gesture;
 + if (gesture=="Pierre") return "Feuille";
 + if (gesture=="Feuille") return "Ciseaux";
 + if (gesture=="Ciseaux") return "Pierre";
 +};
 +
 +var getRandomGesture = function() {
 + var i = Math.floor(Math.random()*3);
 + if (i==1) return "Feuille";
 + if (i==2) return "Ciseaux";
 + if (i==0) return "Pierre";
 +};
 +
 +var whoWin = function(p1, p2) {
 + if (p1==p2) return 0;
 + if (p1=="Pierre") return (p2=="Feuille")?2:1;
 + if (p1=="Feuille") return (p2=="Ciseaux")?2:1;
 + if (p1=="Ciseaux") return (p2=="Pierre")?2:1;
 +};
 +
 +controller.on("deviceFrame", function(frame) {
 + if (frame.hands[0]) {
 + var hand = frame.hands[0];
 +
 + if (underThreshold && hand.palmPosition[1]>=threshold) {
 + underThreshold = false;
 + } else if (!underThreshold && hand.palmPosition[1]<threshold) {
 + underThreshold = true;
 + step++;
 + console.log(steps[step-1]);
 + }
 +
 + if (step==4) {
 + var userGesture = detectGesture(hand);
 + if (userGesture != "Mouvement invalide") {
 + var aiGesture;
 + if (mode==0)
 + aiGesture = getRandomGesture();
 + else if (mode==1)
 + aiGesture = getSubtleWiningGesture(userGesture);
 + else
 + aiGesture = getWiningGesture(userGesture);
 + console.log("Le robot : "+aiGesture);
 + console.log("Vous : "+userGesture);
 + var result = whoWin(userGesture, aiGesture);
 + if (result==1) {
 + console.log(userGesture+" > "+aiGesture+", vous gagnez !");
 + } else if (result==2) {
 + console.log(userGesture+" < "+aiGesture+", le robot gagne !");
 + } else {
 + console.log(userGesture+" = "+aiGesture+", match nul !");
 + }
 +
 + } else {
 + console.log("Mouvement non reconu");
 + }
 + step = 0;
 + }
 + }
 +});
 +
 +controller.connect();
 +</code>
 +
 +
 +code pour actionner les deux servos moteurs corona des yeux : 
 +
 +<code>
 +#include <Servo.h>
 +
 +Servo myservo;  // On créer un objet MyServo par lequel on envois les instruction au servo
 +
 +int Min = 60; // position max optimales des servos d'après mon montage
 +int Max = 88;
 +
 +
 +int pos = 30;    // variable to store the servo position 
 +int vitesse=5;
 +
 +void setup()
 +{
 +  pinMode(6,OUTPUT);
 +  myservo.attach(6);  // On associe notre objet à la Pin connecté au fil de données du servo
 +  
 +}
 +
 +void loop() 
 +{  
 +  myservo.write(90);     //donne l'ordre de mettre le Servo à sont angle minimum        
 +
 +
 +for(pos = Min; pos < Max; pos += 1)  // goes from 0 degrees to 180 degrees 
 +  {                                  // in steps of 1 degree 
 +    myservo.write(pos);    // tell servo to go to position in variable 'pos'
 +      delay(vitesse);                  // waits 15ms for the servo to reach the position 
 +  }
 +
 + for(pos = Max; pos>=Min; pos-=1)     // goes from 180 degrees to 0 degrees 
 +  {                                
 +    myservo.write(pos+20);    // tell servo to go to position in variable 'pos' 
 +    
 +    delay(vitesse);                       // waits 15ms for the servo to reach the position 
 +  } 
 +
 +
 +  
 +
 +</code>
 +
 +27/06/2015 :J'ai un peu galéré à trouver comment démonter le servo hitec hs805bb afin de sortir le potentiomètre. J'ai trouvé cette vidéo sur internet qui explique étape par étape : https://www.youtube.com/watch?v=4ia6zoRKujI \\
 +
 +D'après l'alimentation du PMClab, le servo Hitec besoin en moyenne de 0,5-0,6 Ampère pour tourner dans le même sens et au moment de changer de sens il y a des pics vers de 1,2-1,4 avec juste quelques composants mis (voir photo bientôt)
 +
 +
 +29/06/2015 : réglage des doigts de la main \\
 +
 +<code>
 + 
 +#include <Servo.h> 
 + 
 +Servo pouce;  // create servo object to control a servo 
 +Servo index;               // a maximum of eight servo objects can be created 
 +Servo majeur;
 +Servo annulaire;
 +Servo auriculaire;
 +
 +int pos = 30;    // variable to store the servo position 
 +int vitesse=15;
 +
 +void setup() 
 +
 +  pouce.attach(3);  // attaches the servo on pin 9 to the servo object 
 +  index.attach(5);
 +  majeur.attach(6);
 +  annulaire.attach(9);
 +  auriculaire.attach(10);
 +
 +//pouce 70,130
 +//doigt 15,110
 +//majeur 28,100
 +//annulaire 20, 130
 +//auriculaire 25,100
 +void loop() 
 +{
 +  //valeur(90); // met tout les servos à la position 90 degré
 + fermer(50,140);
 +
 +}
 +
 +
 +
 +void fermer(int Min,int Max) {
 +    
 +  for(pos = Min; pos < Max; pos += 1)  // goes from 0 degrees to 180 degrees 
 +  {                                  // in steps of 1 degree 
 +    pouce.write(pos);    // tell servo to go to position in variable 'pos'
 +    index.write(pos);
 +    majeur.write(pos);
 +    annulaire.write(pos);
 +    auriculaire.write(pos);  
 +    delay(vitesse);                       // waits 15ms for the servo to reach the position 
 +  } 
 +  for(pos = Max; pos>=Min; pos-=1)     // goes from 180 degrees to 0 degrees 
 +  {                                
 +    pouce.write(pos+20);    // tell servo to go to position in variable 'pos' 
 +    index.write(pos);
 +    majeur.write(pos);
 +    annulaire.write(pos);
 +    auriculaire.write(pos); 
 +    delay(vitesse);                       // waits 15ms for the servo to reach the position 
 +  } 
 +}
 +</code>
 +
 +03/07/2015 : \\
 +code pour le servo qui fait hocher la tête. \\
 +<code>
 +#include <Servo.h>
 +
 +Servo myservo;  // On créer un objet MyServo par lequel on envois les instruction au servo
 +
 +int Min = 20;
 +int Max = 180;
 +
 +
 +int pos = 0;    // variable to store the servo position 
 +int vitesse=15;
 +
 +void setup()
 +{
 +  pinMode(6,OUTPUT);
 +  myservo.attach(6);  // On associe notre objet à la Pin connecté au fil de données du servo
 +  
 +}
 +
 +void loop() 
 +{  
 +//myservo.write(90);     //donne l'ordre de mettre le Servo à sont angle minimum    
 + 
 +
 +
 +for(pos = Min; pos < Max; pos += 1)  // goes from 0 degrees to 180 degrees 
 +  {                                  // in steps of 1 degree 
 +    myservo.write(pos);    // tell servo to go to position in variable 'pos'
 +      delay(vitesse);                  // waits 15ms for the servo to reach the position 
 +  }
 +
 + for(pos = Max; pos>=Min; pos-=1)     // goes from 180 degrees to 0 degrees 
 +  {                                
 +    myservo.write(pos);    // tell servo to go to position in variable 'pos' 
 +    
 +    delay(vitesse);                       // waits 15ms for the servo to reach the position 
 +  } 
 +
 +delay(1500);
 +  
 +  
 +
 +</code>
 +
 +Tout les moteurs des bras sont asservis, voici le code qui permet de controler le robot avec leur extreneum : 
 +<code>
 +#include <Servo.h>
 +
 +//partie gauche
 + Servo g_aisselle;
 + Servo g_homoplate; 
 + Servo g_rotbras;
 + Servo g_contraction;
 + 
 + //partie droite
 + Servo d_aisselle;
 + Servo d_homoplate;  
 + Servo d_rotbras;
 + Servo d_contraction;
 +
 +int mini = 0; // variable to store the servo position
 +int maxi = 180 ;
 +
 +void setup()
 +{
 +  g_aisselle.attach(2);
 +  g_homoplate.attach(3);
 +  g_rotbras.attach(4);
 +  g_contraction.attach(5);
 +  
 +  d_aisselle.attach(9);
 +  d_homoplate.attach(10);
 +  d_rotbras.attach(11);
 +  d_contraction.attach(12);
 +   
 +  // attaches the servo on pin 9 to the servo object
 +}
 + 
 +void loop()
 +{
 +  /*
 +  for(mini = 0; mini < 180; mini += 1)  // goes from 0 degrees to 180 degrees
 +  {                             // in steps of 1 degree
 +  myservo.write(mini);          // tell servo to go to position in variable 'pos'
 +  delay(15);                  // waits 15ms for the servo to reach the position
 +  }
 +  for(maxi = 180; maxi>=1; maxi-=1)   // goes from 180 degrees to 0 degrees
 +  {                            
 +  myservo.write(maxi);          // tell servo to go to position in variable 'pos'
 +  delay(15);                  // waits 15ms for the servo to reach the position
 +  }
 + 
 +  */
 +  // position initale
 +
 + g_aisselle.write(20); //  20-43 semble être le milieu    20 bas  : 43 haut
 + g_homoplate.write(50); //10-100        10 bas : haut : 100
 + g_rotbras.write(90); // 50-130  droite 100 : 180 gauche
 +  g_contraction.write(0); //0-25  bas 0 : 25 haut
 +  
 +  d_aisselle.write(50); //10-70
 +  d_homoplate.write(30); //  70-130
 +  d_rotbras.write(100); // 100-130  droite 100 : 130 gauche
 +  d_contraction.write(165); //110-170  haut 110 : 165 bas
 +
 +//coucou
 +/*
 +  d_aisselle.write(50); //10-70
 +  d_homoplate.write(110); //  70-130 - 110 horizotal
 + 
 +  d_contraction.write(160); // dérontracté   110-160 contracté
 +  d_rotbras.write(150); // 100-130
 +  delay (3000);
 +  d_rotbras.write(100);
 +  delay (3000);
 +
 +  */
 +
 +// WTF
 +
 +/*
 + g_aisselle.write(20); //  20-43 semble être le milieu    20 bas  : 43 haut
 + g_homoplate.write(100); //10-100        10 bas : haut : 100
 + g_rotbras.write(180); // 50-130  droite 100 : 180 gauche
 + 
 +  d_aisselle.write(50); //10-70
 +  d_homoplate.write(100); //  70-130
 +  d_rotbras.write(180); // 100-130  gauche 100 : 130 droite
 +  d_contraction.write(165); //110-170  haut 110 : 165 bas
 +  */
 + 
 +}
 +
 +
 +</code>
  
wiki/projets/robot-semi-hommeinmoov.1389360488.txt.gz · Dernière modification: 2016/09/11 10:51 (modification externe)