Bonjour à tous!
J'ai pour projet de créer un mini chariot de travelling pour pouvoir filmer de façon continue un objet. Côté mécanique tout fonctionne parfaitement, le chariot se déplace à l'aide d'une poulie et d'un moteur pas à pas nema 17 et un A4988 piloter par un arduino uno, et j'arrive à des bons résultats.
Désormais je souhaite que la caméra puisse pivoter sur elle-même afin qu'elle suive un objet tout en se déplacent linéairement. Pour cela, j'ai ajouté un deuxième moteur pas à pas , le 28byj-48 avec son driver dédié afin de piloter la rotation. Sauf qu'en terme de code , je bute... J'utilise la librairie "accelstepper" afin de pouvoir activer les 2 moteurs simultanément , mais malgré mes heures de lectures de la doc, je n'arrive à aucun résultat.
Voici pour le moment ma fonction qui est censée calculer l'angle nécessaire pour suivre un objet (avec arctangente connaissant les coordonnées de l'objet à suivre) .
void runandtrack(){ double step_rot; variable qui converti l'angle en nombre de pas pour le 28byj48 double diff_angle; // la différence entre l'angle calculé à t-1 et celui à t double x = dist_x_obj; //x est la distance sur l'axe qui va évoluer au fur et à mesure //que le chariot avance. dist_x_obj est la distance initiale de l'objet à suivre sur x trans.setMaxSpeed(speed_x / 100 * 5000); //converti la vitesse choisie en % en pas/secondes trans.setAcceleration(100); trans.moveTo(10000); //bouger le chariot pour qu'il fasse 10000 pas while (digitalRead(limitSwitch) != 0) { diff_angle = ((atan2 (dist_y_obj, x) - angle)); step_rot = diff_angle * resolution_rot; if (diff_angle >= ( (2 * PI) / stepsPerRevolution2 )) { angle = atan2 (dist_y_obj, x); for (int i = 0; i < step_rot; i ++){ //on fait bouger le 28byj de i pas correspond à l'angle souhaité rotat.moveTo(1);} } x = dist_x_obj - (trans.currentPosition() * resolution_x); //on actualise la distance x } }
Sauf que lorsque j'appelle la fonction, rien ne se produit. Je ne suis pas du tout sur de bien utiliser la librairie. Quelqu'un verrait le problème dans la fonction ? (le reste du code fonctionne très bien mais est très long , c'est pour cela que je poste uniquement la fonction)
trans. est le moteur qui effectue la translation --> NEMA 17
rotat. est le moteur qui effectue la rotation --> 28byj
resolution.rot est la résolution en pas/rad du 28byj
resolution_x est la résolution en m/pas du NEMA 17
stepsPerRevolution2 est le nombre de pas pour faire une révolution pour le 28byj
angle est l'angle initial calculé lors de la saisie des coordonnées de l'objet
Merci à vous !