Problème fonctionnement Laser-Moteur Pap

Bonjour,

malgré tous mes autres topics toujours différents, j'ai réussi à trouver une solution presque toujours à mes soucis. Sauf que là je suis devant un souci qui me dépasse :

Je souhaite faire tourner mon moteur pap avec un miroir sur son axe et réfléchir un laser clignotant sur ce miroir (principe de la harpe laser). Cependant je me rend compte que dans deux programmes différents tout fonctionne, non seulement j'arrive à faire clignoter correctement mon laser a une vitesse acceptable pour mon projet, et j'arrive à faire tourner mon moteur à la vitesse et aux nombres de pas souhaités. Cependant quand j'associe les deux dans un programme seul le moteur tourne.

J'ai donc pensé que cela pouvait etre du a une manque d'energie de la part du Laser (qui est relativement gourmand) lorsque celui ci tourne en meme temps que le moteur. J'ai donc ajouté un condensateur. Mais rien n'y change : le moteur tourne et le laser est éteint.

J'ai récupéré un moteur d'imprimante, pas de données précises mais nb de pas estimés a 85.
le laser

Merci de votre aide,
si je n'ai pas été très clair, je reste à votre dispo pour plus d'info

Pas de code et pas de hard ...

Cependant quand j'associe les deux dans un programme seul le moteur tourne.

En fait les deux ne devraient pas être actifs au même moment.
Tu devrais avoir
mouvement du moteur
allumage du laser
mouvement du moteur
allumage du laser
.....

Si le laser est allumé pendant le déplacement tu vas créer une nappe lumineuse au lieu d'afficher les "cordes" de ta harpe.

Pour ce qui est de la consommation, si l'alimentation est mal dimensionnée ce n'est pas un condensateur qui va te sauver.

Mais on est d'accord que pour avoir une largeur de faisceau le laser doit etre allumé pendant la rotation du moteur ?

J'ai réussi à regler mon problème, vraiment bete désolé.

Mais autre question :
Comment parfaitement synchroniser le clignotement et la rotation du moteur ?

Le laser appartient à mon lycée, je doute qu'ils en disposent illégalement et j'ai totalement confiance dans le fait qu'ils disposent des autorisations requises pour la manipulation et la mise à disposition de leur laser à leurs élèves.

Lucasppe:
Comment parfaitement synchroniser le clignotement et la rotation du moteur ?

C'est vraisemblablement un moteur pas à pas (récup imprimante), donc tu connais sa position angulaire à chaque position, il faut allumer ou éteindre le laser selon certains pas du moteur.
Regarde combien il faut de pas pour faire 1 tour complet.

48 pas par tour, donc 7,5° par pas

c'est bizarre, tout est programmé correctement, le moteur fait 7 pas dans un sens puis 7 pas dans l'autre, le faisceau est (vraisemblablement) synchro et pourtant au plafond je n'ai pas mes 7 faisceaux mais plutot une dizaine de point vert espacé aléatoirement.

Lucasppe:
c'est bizarre, tout est programmé correctement, le moteur fait 7 pas dans un sens puis 7 pas dans l'autre, le faisceau est (vraisemblablement) synchro et pourtant au plafond je n'ai pas mes 7 faisceaux mais plutot une dizaine de point vert espacé aléatoirement.

bonjour
comment et avec quoi synchronise tu l'allumage extinction du laser ?
comment est tu certain que les 7 positions angulaire à l'allumage du laser sont stables/reproductibles ?
tu fais 7 fois un pas + temps de, stop ou tu fais en continu 7 pas sans arret entre pas ?
là je vois bien un probleme de fixation du pas (et donc angle du miroir) qui n'est pas le meme selon si tu est dans un sens ou l'autre.

Lucasppe:
Comment parfaitement synchroniser le clignotement et la rotation du moteur ?

C'est ton code qui fait la synchronisation.
Comme je te l'ai expliqué plus haut, le laser ne doit être allumé que lorsque le miroir est statique (ou quasi statique).
Le laser doit être allumé après avoir commandé l'avance jusqu'au prochain pas et il doit être éteint avant d'avoir commandé l'avance jusqu'au pas suivant.

D'accord donc enfait on peut faire clignoter le laser sans s'occuper de la rotation du moteur ? Ce sont deux taches bien distinctes ?

Non, il faut un synchronisme précis entre les deux actions.

Tu part de l'angle de moteur 0, laser éteint.

Le moteur fait N pas dans un sens, puis s'arrête, on allume le laser, puis on l'éteint.
Le spot laser est situé à l'angle Nx7.5°

Le moteur fait ensuite N autres pas, puis on rallume le laser on-off, le second spot laser est visé à 2xNx7.5°, etc.

Lucasppe:
D'accord donc enfait on peut faire clignoter le laser sans s'occuper de la rotation du moteur ? Ce sont deux taches bien distinctes ?

perso , je continue de penser que la solution PAP n'est pas la meilleure,
De plus il semble que ne soit pas pris en compte les inevitables dispersions de positionnement mecanique (jeux) entre l'aller et le retour, intuitivement avec un PAP de 48 pas je testerais une solution avec un seul sens utile pour l'illumination laser : je ferais/testerais un deplacement de 8 fois un pas (7 ça me plait pas :grin: ) avec un temps de stop pour laser ON
et retour arriere de 8 pas apres la phase de balayage, ça devrait au moins mecaniquement etre plus simple pour maintenir les faisceaux.
Pour un rendu correct à l'oeil, il faut pour rester dans le domaine de la persistance rétinienne que chacune des 7 positions ait une recurrence mini de maintien de 25Hz.

D'accord mais à quoi va nous servir de savoir à quel angle est situé le laser ?

Si tu veux que les "cordes" apparaissent toujours au même endroit il vaut mieux connaitre l'angle tu ne crois pas!!!

En plus simple, tu utilises 7 petites diodes laser de quelques mW, fixes.

Mais dans mon programme je ne programme pas l'angle !

Lucasppe:
Mais dans mon programme je ne programme pas l'angle !

inevitablement tu l'impose , un 48 pas pour faire 360° , expose que 1 pas =7,5° :grin:
mets donc ton ici ton programme (entre balises code)
parce que sauf erreur de ma part , on ne l'a pas vu :grin:

Le programme est "barbare" et la syntaxe n'est pas propre :

#include <Stepper.h>

int laser=13;

Stepper moteur(85, 2, 3, 4, 5);
int A = 2;
int B = 3;
int C = 4;
int D = 5;

void pos1() {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
}

void pos2() {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
}

void pos3() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);

}

void pos4() {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
}

void pos5() {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
}

void pos6() {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
}

void pos7() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
}

void pos8() {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
}

void setup ()

{

moteur.setSpeed (20);

}
void loop ()

{

digitalWrite (laser, HIGH);
pos1();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos2 ();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos3();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos4 ();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos5();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos6 ();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos7();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos8 ();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos7();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos6 ();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos5();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos4 ();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos3();
delay (5);
digitalWrite (laser, LOW);
delay (5);
digitalWrite (laser, HIGH);
pos2 ();
delay (5);
digitalWrite (laser, LOW);
delay (5);

}