Aller au contenu


bvking

Inscrit(e) (le) 29 janv. 2019
Déconnecté Dernière activité mai 03 2022 04:06
-----

Sujets que j'ai initiés

Bien paramétrer un mouvement simple et le complexifier.

05 avril 2022 - 08:33

Bonjour à toutes et tous ;)

 

Pour mon installation artistique, j’aimerais à partir du mouvement d’un point tournant à vitesse constante, pouvoir faire que 9 autres points suivent le premier avec des décalages temporels et spatiaux.

Cette partie fonctionne :yahoo: . Merci Mike.

 

Maintenant, j'aimerais l'essayer, non plus à partir d’un point tournant, mais d'un point qui oscille de 0 à 180°, comme un pendule et à vitesse constante.

Peut on simplement changer l'équation du programme? celle commentée  // position du point de depart + vitesse * phi constant ==> ici vitesse du point phases[0] est constante

 

Merci  :king:

String debug =""; 

// MANAGE PERSPECTIVE
import peasy.*;

// change these for screen size
float w = 1000;
float h = 800;

// don't change these
float w2 = w / 2;
float h2 = h / 2;

int frameRatio = 25; // nombre d'image/seconde ou nombre de fois que la bouche principale du programme void draw() tourne en un seconde
int nbBall = 10;
int nbMaxDelais = 2000;

float [][] phases = new float[nbBall][nbMaxDelais];

void setup() {
  new PeasyCam(this, 2000);
  frameRate(frameRatio);  
  for (int i = 0; i < nbBall; i++) {
    for (int j = 0; j < nbMaxDelais; j++)
      phases[i][j] = PI;
  }
} 

public void settings() {
  size(600, 600, P3D);
} 

void draw() { 
  println(frameCount + ": " + ( debug ));
  background(0);
  translate(width/2, -height/2, -1000);// To set the center of the perspective
  rotate(-HALF_PI ); //TO change the beginning of the 0 (cercle trigo) and the cohesion point to - HALF_PI 

    phases[0][frameCount % nbMaxDelais]= PI + (frameCount / 5.0) *  cos (1000 / 500.0);  // position du point de depart + vitesse * phi constant  ==> ici vitesse du point phases[0] est constante
  //point O tourne dans le sens anti-horaire à vitesse constante
  
 //   phases[0][frameCount % nbMaxDelais]= TWO_PI + (frameCount / 50.0) *  cos (frameCount / 500.0);  //position du point de depart + vitesse* phase sinusoidale  ==> ici vitesse 0 progresse suivant une sinusoidale
  //point O tourne dans les deux sens à vitesse non constante. Je cherche un mouvement pendulaire 
  
  
  drawBall(0, phases[0][frameCount % nbMaxDelais] ); // affiche le point 0

  for (int i = 1; i < nbBall; i++) {
 //   follow( i-1, i, 20 * i, 0);  // Modifier les deux derniers paramètres : délais et phase 
    follow( i-1, i, 0 , QUARTER_PI);  // ici, le temps que les points mettent à se suivre est nul, donc l'espace entre eux est constant, il est 180/4=45°
    drawBall(i, phases[i][frameCount % nbMaxDelais] );
  }

  /* 
  for(int i = 0; i < nbBall; i++) { //Animation brute sans suivi, juste avec une formule 
   //drawBall(i, PI + (i * frameCount / 50.0) * cos (frameCount / 500.0) );  
  }*/
}

void drawBall(int n, float phase) {
  pushMatrix();
  translate(-w2, -h2, -1000);
  noStroke();
  float side = height*0.15*1/nbBall;
  float rayon = width/2; 
  float x = rayon*cos(phase);
  float y = rayon*sin(phase);
  translate (x, y, 200+(50*5*n));  
  colorMode(RGB, 255, 255, 255);
  fill( 0, 255, 0 ); 
  sphere(side*3);
  popMatrix();
}

void follow( int target, int follower, int delais, float deltaphase) {
  int step = frameCount % nbMaxDelais;
  int followedStep = (step + nbMaxDelais - delais) % nbMaxDelais;
  phases[follower][step] = diffAngle(phases[target][followedStep] + deltaphase, 0);
}

float diffAngle(float angle1, float angle2) { // return the difference angle1 - angle2 between two angle between -PI PI
  float result = angle1 - angle2;
  while (result > PI) {
    result -= 2 * PI;
  }
  while (result < -PI) {
    result += 2 * PI;
  }
  return result;
}

Fonction qui déclenche des événements en fonction de l'espace et du temps.

26 mars 2022 - 06:52

Bonjour à toutes et tous.

 

Je repose cette question de programmation de manière plus explicite, dites moi si ce service nécessite une rémunération.

Voilà une petite demo pour vous montrer à quoi peut servir le programme que je mets en piece jointe

https://youtu.be/a6RVfLpc1QA

 

Ma question est enregistrée sur cette vidéo,https://youtu.be/skhBxpsSW2Y Attention à un moment je dis que le point 2 doit suivre le point 2, mais c'est le point 3 qui doit suivre le point 2. Comme toujours d'ailleurs.

 

Hello.

Pour mon installation artistique, j’aimerais à partir du mouvement d’un point tournant à vitesse constante, pouvoir faire que 9 autres points suivent le premier avec des décalages temporels et spatiaux.
Mon problème est que j’aimerais que le point 4 suivent le point 3 avec le meme décalage temporel et spatiale que le premier point 3 qui suit le point tournant, appelé point 2.
 
Explication de la fonction.
Pour commencer, il faut pouvoir faire en sorte qu’un point 2 se deplaçant de maniere circulaire, soit suivi par un autre point 3 se deplacant aussi de maniere de circulaire. 
A la base le point 3 n’a pas de vitesse et il est à la position 0
 
Pour ce fairre, il faut un décalage de phase entre 3 et 2 de deux manières.
une temporelle: 
 
De telle sorte que 3 ait la phase 2 avec un temps de décalage nul ou de 225 ms par exemple. 
Dans le premier cas 2 et 1 ont exactement la meme position
Dans le second on observe un retard de 225 ms. Il faut taper sur la fleche de gauche pour augmenter le temps. Sur l’écran, on voit D ratio qui augmente par pas de 75ms. 
 
une spatiale:
 
De telle sorte que 3 ait la phase 2 avec une position de décalage, cest à dire, que sil y a un ecart entre la position 1 en mouvement et la position 2 à l’arrêt, la position 2 avance par à coup, dès que la difference entre la position 3 et 2 est supérieure à , par exemple 45°, soit TWO_PI/8.
 
Dans mon programme, il faut 6400 pas pour faire un tour, donc 45 °= 6400/8= 800 points. On change l’espace de la phase avec la fleche droite; ce qui change le parametre K phi. K phi= 1==> 100 points, donc pour 45°, il faut taper sur la fleche de droite 8 fois.
 
Puis essayer de voir si on peut combiner les deux : 
 
Faire en sorte que la position 3 avance de 45° apres 225 ms à compter du moment où la difference entre la position 3 et 2 a été supérieure à 45°.
Normalement le point 3 devrait être à la position du point 2, où il se trouvait il y a 225 ms, si le point a avancé de plus de 800 points.
Pour que le point 3 suive le point 2 où il etait, j’ai rajouté une variable appelée interphase. 
 
Cest sur cette derniere partie que je sèche,le point 3 suit bien le point 2, mais je n'arrive pas à faire en sorte aue le point 4 suive le point 3 en attendant 225 ms avant de se mettre à la position du point 3,  là, où il etait il y a 225 ms. La 3 devrait suivrent la deux avec une retard de 225 ms et un ecart de 45° et ainsi de suite pour les positions i+1 et i, mais mon programe ne semble pas fonctionner.
 
J'ai pré-enregistré une sequence avec différents paramètres de décalage de phase spatiale et temporelle. 
En bas de l'écran:
K phi=0 veut dire 0 décalage de phase.  K phi=2 ==> 200 points de décalage
D ratio =225 veut dire 225 ms de décalage de phase.
 
Fonctionnement du programme avec les touches du claviers.
 
Pour basculer le mouvement des points en mode circulaire, enfoncez la touche *
Pour basculer en mode pendulaire avec $, mais vous n'aurez pas besoin de l'utiliser pour l'instant.
Réaligner les points vers le haut avec ç
Augmenter le décalage de  phase avec la flèche de gauche
Augmenter le décalage de  temporel avec la flèche de droite
Mettre le point 2 à vitesse 2 avec A
Diviser la fréquence par 2 avec n
Multiplier la fréquence par 2 avec N
Pour arrêter l'animation, touche !
Pour relancer l'animation, touche :
 
Si la fonction s'arrête, on la relance avec la touche o. On la trouve dans le programme en cherchant void formerkeyo
 
Pour ne plus avoir les pre enregistrements, il faut choisir le fichier vide, qui est placé sous le commentaire fichier vide.
 
Merci et dites moi, combien faut’il vous financer pour resoudre mes erreurs de programmation.
 
Pour ce qui sont motivé, il faudrait mieux communiquer par tel.
Mercis @ l'infini !8)

Décaler un événement de 200ms. Pourquoi je ne peux en décaler plusieurs?

05 mars 2022 - 10:08

Bonjour à tous!

 

Pour mon installation artistique, j’aimerai à partir du mouvement d’un point tournant à vitesse constante, pouvoir faire que 9 autres points suivent le premier avec des decalages temporels et spatiaux.
Voici le lien pour voir des exemples d'utilisations avec des différents décalages temporels et spatiaux. https://youtu.be/IJ1tZstcywA
Dans la video, je commence à changer le temps en millisecondes et la phase de décalage. Mais le problème c'est que tous les points suivants se décalent instantanément, sans attendre les 2XX millisecondes.  :help:
 
Pour commencer, il faut pouvoir faire en sorte qu’un point appelé 3 se deplaçant de maniere circulaire, soit suivi par un autre point appelé 2 se deplacant aussi  de maniere de circulaire. Le point 2 à une vitesse circulaire constante
A la base le point 3 n’a pas de vitesse et il est à la position 0
 
J'arrive à gerer un décalage de phase entre 3 et 2 de deux manières.
une temporelle: 
 
De telle sorte que 3 ait la phase 2 avec un temps de décalage nul ou de 200 ms par exemple. 
Dans le premier cas, 3 et 2 ont exactement la meme position
Dans le second on observe une latence.
 
une spatiale:
 
De telle sorte que 3 ait la phase 2 avec une position de décalage, cest à dire, que sil y a un ecart entre la position 2 en mouvement et la position 3 à l’arrêt, la position 3 avance par à-coups, dès que la difference entre la position 3 et 2 est supérieure à 45° par exemple. 
 
Puis essayer de voir si on peut combiner les deux : 
 
Faire en sorte que la position 3 avance de 45° apres 200 ms à compter du moment où la difference entre la position 2 et 3 a été supérieure à 45°.
 
Cest sur cette derniere partie que je sèche, jarrive à le faire avec la position 3 et 2, mais jarrive pas à généraliser avec les positions suivantes. La 4 devrait suivre la 3 avec une retard de 200 ms et un ecart de 45° et ainsi de suite pour les positions i+1 et i. 
Espérant avoir été clair, je mets la fonction ci dessous, si vous avez des idées.
Merci pour vos efforts!   ;)
 
 
 
void formerKeyo() {
 if (circularMov==true ){   
if (d>=0){
    decay=d; // decay in millis (50,.. 1000 ms),  before changing phase i+1 with the phase from i
}   
   if (k>=0){
      phiShift=k*-PI/16; // here the position to add or substrat to the next point (i+1)
      mapShiftCircular= map (phiShift, 0, 16*-PI/16, 0, 6400);   // one revolution is 6400 step 
  //  mapShiftCircular is the space to reach in order to follow the previous point 
}
   formerEvent[2]=millis();   // time from the beginning of the launch of the program.
}

  for (int i = 2; i < (3); i++) {
      
       if ( circularMov==true  && // mapShiftCircular is the space between two points
   //points goes in clock wise
    ((CircularOldVirtualPosition[2] <= CircularVirtualPosition[2+1]+mapShiftCircular) && (CircularVirtualPosition[2] >= CircularVirtualPosition[2+1]+mapShiftCircular) &&
     (CircularOldVirtualPosition[2]+800*0.1 < CircularVirtualPosition[2]+800*0.1))
   
    ||
    ((CircularOldVirtualPosition[2]+mapShiftCircular >= CircularVirtualPosition[2+1]) && (CircularVirtualPosition[2]<= CircularVirtualPosition[2+1]+mapShiftCircular) &&
     (CircularOldVirtualPosition[2]+800*0.1 > CircularVirtualPosition[2]+800*0.1))
  //points goes in counter clock wise
    )
  
     { 
         twoTree = true;
  }
     else twoTree= false;  
   if  (//formerEvent[2]%250>200
     formerEvent[2]>formerEvent[3]+decay && twoTree== false // twoTree== true do not trig the program below
       ){
          net.phase[3]=(net.phase[2])-phiShift*1;//
          net.phase[3]= net.phase[3]%TWO_PI;//   
         memoryi=i;  
         formerEvent[3]=formerEvent[2];
       // noLoop();
          }        
   }

 for (int j = 3; j < (11); j++) {
      
       if ( circularMov==true  &&
   
    ((CircularOldVirtualPosition[j] <= CircularVirtualPosition[j+1]+mapShiftCircular) && (CircularVirtualPosition[j] >= CircularVirtualPosition[j+1]+mapShiftCircular) &&
     (CircularOldVirtualPosition[j]+800*0.1 < CircularVirtualPosition[j]+800*0.1))
   
    ||
    
    ((CircularOldVirtualPosition[j]+mapShiftCircular >= CircularVirtualPosition[j+1]) && (CircularVirtualPosition[j]<= CircularVirtualPosition[j+1]+mapShiftCircular) &&
     (CircularOldVirtualPosition[j]+800*0.1 > CircularVirtualPosition[j]+800*0.1))
  
    )
  
     { 
         followNumber[j]= true;
         formerEvent[j+0]=formerEvent[2];
  }
         else followNumber[j]= false;
     
   if  (
 //  formerEvent[2]>formerEvent[j+1]+decay && followNumber[j]==false
     formerEvent[j+0]>formerEvent[j+1]+decay && followNumber[j]==false
   ){
   
         print ("net.phase ") ;  print (j); print (" ") ; print (net.phase[j+0]) ; //  println();
         print ("net.phase ") ;  print (j+1); print (" ") ; println (net.phase[j+1]) ; //  println();
         net.phase[j]=net.phase[j]%TWO_PI;
          net.phase[j+1]=(net.phase[j])-phiShift;// 
          net.phase[j+1]= net.phase[j+1]%TWO_PI;//  keep phase between 0 and TWO_PI
    
        memoryi=j;  
        formerEvent[j+1]=formerEvent[2];  
        }       
   }
 
 

 


Fixe une roue denté autour d'un axe moteur. Sur un nema 17

19 décembre 2021 - 06:41

Bonjour,

 

J'ai reçu une roue dentée dont le diamètre du trou intérieure mesure 3 mm.

Le site chinois s'est trompé dans les cotes, le trou devait faire 5 mm

Elle fait partie du kit pour mettre un réducteur sur un nema 17

Je dois la fixer à la sortie de mon moteur qui mesure 5 mm avec une partie qui est plate.

J'ai vu une solution pour fixer cette roue dentée sur mon axe qui m'a l'air bien compliqué.

 

https://www.webastro...-dessuie-glace/

 

En regardant la roue de profil, est ce que si je faisais un trou de 4 mm sur une moitié, puis sur l'autre moitié un autre trou de 5 mm et qu'avec le foret de 4 mm, je fasse une espece de cone pour avoir une cone allant de 4 à 5 mm, je pourrais forcer la roue denté à se fixer sur l'arbre moteur, en la martelant delicatement et en mettant de la colle à metal avant?

 

Aussi comment integer une zone plate au trou de la roue dentée qui coïnciderait avec la zone plate de l'arbre moteur? une lime à metal suffirait? 

 

 

Merci. Je suis assez pressé de trouver un solution pour voir si je peux faire tourner un truc moyen lourd à la vitesse que je veux, ensuite je dois aller dans une sorte de fab lab suivre vos conseils! 

 

Au final, je vendrai mes nema 17 et acheter directement ceux avec le réducteur.

 

 

 

 

 


Couplage moteur pas à pas NEMA 17. Quel bon réducteur choisir ?

03 décembre 2021 - 12:48

Bonjour,

 
J'ai fixé un poids de 15 g sur une barre en aluminium de 40 cm. Cette barre est fixée perpendiculairement à l'axe de mon moteur pas à pas Nema 17 et mon poids tourne très bien, avec de belles accelerations et à grande vitesse.
 
Le mien est le septième en partant du haut.
 
Couple de maintien (N.cm Min)

40

Couple de détente (N.cm Max)

2.2

J'aimerais rajouter un réducteur pour faire tourner une masse de 80 g ou, 120 g si possible, grâce à un réducteur, sans que mon NEMA17 décroche et en gardant son accélération (2.5 tours-2) et sa vitesse (2.5 tours.) Les deux derniers les paramètres étant gérés par un Teensy (Arduino avec une horloge beaucoup plus rapide), il ne devrait pas y avoir de problème pour multiplier par 5, si j'ai une réduction de 5:1.

Mon nema 17 fait 200 pas/tour, je gère mon moteur en 6400 pas/tour (soit 32*200 pour avoir moins de vibrations et plus de couplage). Mais peu importe.

Pensez-vous que ces réducteurs (voir en bas) sont facilement montables et feront l'affaire ? Quelle réduction choisir, pour passer d'une masse de 15g à 80 ou 120 grammes  ?

L'axe moteur de mon nema 17 est de 5 mm, j'aimerais pouvoir coupler un réducteur qui a aussi son axe moteur de 5 mm. Ou alors il faut que je trouve un moyen de réduire l'axe moteur du réducteur si besoin, mais je sais pas ce qui existe.

Merci pour votre attention et vos réponses !

 

https://fr.aliexpress.com/item/1005001652781953.html?src=google&src=google&memo1=freelisting&albch=apprmkt&albagn=182499396&albcp=1735154771&albag=73623194291&albad=338294380753&aff_short_key=irey5Th&isdl=y&aff_platform=true&albslr=%7B%7D&gclid=Cj0KCQiA-qGNBhD3ARIsAO_o7yn_kb7rFM47y_VJf1u-7r71EBpTwIctdKPNa6MzDJEeAkfFy8atkZAaAl4FEALw_wcB

 

https://fr.aliexpres...cB&gclsrc=aw.ds

 

J'ai vu sur ce site quelqu'un qui a fabriqué un réducteur avec une imprimante 3D. Vend il son systeme?

 

https://www.thingive...m/thing:1743732