erreur dans mon programme.

hello les codeurs.
je fait appel à vous, car j'ai un projet 18 tourelles d'un destroyer de la seconde guerre mondiale à animer.
faire bouger les moteurs pas à pas n'est pas un problème. mais là, ça dépasse mes modestes compétences.
chaque tourelle à sa propre direction au repos et sa propre grandeur d'angle.
et certains moteurs pourront avoir une ou plusieurs tourelles.
ça c'est la partie invariable.
ce que je compte faire c'est de me servir d'un arduino pour envoyer des ordres aux autre cartes qui auront un ou plusieurs moteurs pas à pas à gérer suivant l'angle de rotation initial.
chaque moteur aurait une buté en début et fin de course, qui va servir lors de la phase d'initialisation.
dans l’idéal, à partir de cette initialisation, les données de sa position seraient enregistrés, pour qu'en suite soient programmé plusieurs ordres de rotation (simulation d'un combat). je comptais programmer au moins 4 programmes pour le contrôle des moteurs, et la carte principale, ou centrale, elle donne l'ordre à toutes les autres de faire le programme 1, 2, 3 ou etc...
je ne sais pas si c'est suffisamment clair comme explication, mais c'est une maquette de 1.23m qui restera statique et sera présentée lors de salons et conventions. dont la première est fin février.
les tourelles doivent se déplacer lentement. avec les servo ça saccade et c'est vraiment moche. c'est pour ça que je me suis procuré les ULN2003.
pour le reste et avec l'aide que vous pourrez m'apporter, tout n'est que hypothèse et reste à redéfinir.

à la fin du projet, il y aura aussi des fibres optiques dans les canon avec des leds à leur base pour simuler des tirs, un système de fumé pour la cheminé qui existe deja et que je perfectionne, rotation des hélices et des gouvernails.

voici quelques essaies que j'ai pratiqué il y a pas mal de temps.

Salut megawatt1982;

Combien de moteurs au total veut tu actionner ?

me servir d'un arduino pour envoyer des ordres aux autre cartes qui auront un ou plusieurs moteurs pas à pas à gérer suivant l'angle de rotation initial.

De quelle genre de carte parle tu?

Pour positionner des moteurs pas a pas la seul solution que je connaisse et de réaliser un comptage des pas moteurs. il sont donner pour un pas X par tour. Donc pour 360° = X pas tour. il n'y a plus qu'a faire la division du nombre de pas nominale par tour.

Pour la rotation depuis un point initial avec cette méthode il vas te falloir enregistrer leurs positions actuelle a chaque fin de mouvements.

Fait des recherche sur le positionnement des moteurs pas a pas.

J'ai regarder ta vidéo. Je trouve qu'avec les servo-moteurs ça le faisait. De plus les saccades ne se perçoivent pas!! Avec des moteurs pas a pas le risque de venir en dépasser les butées sont possible alors qu'avec les servo moteurs non.

bonsoir
je n’ai pas déterminé ça concernant ta maquette :
tu veux pouvoir gerer 18 motorisations indépendantes (site) ou 36 (site et azimut)

Tu en es où dans ce projet ? Et qu'est ce que tu attends comme réponse ? (ou comme soutien ?)

Tu en es à la phase de faisabilité ?
Dégrossissage des moyens a mettre en place ?
Recherche des technologies existantes (cartes, moteurs, reducteurs, alim, ..) ?

Ou as-tu déjà fait ce travail de recherche

18 moteurs pas à pas c'est gérable, mais avec une seule carte arduino qui servira de conrtôlleur global, ce serait mieux d'envisager le pilotage des moteurs via un bus I2C

Si il s'agit d'une maquette non navigante, tu n'as pas trop a te soucier des problemes d'équilibrage et d'inertie, par contre l'encombrement et la transmission des mouvements va surement devenir critique.

En ce qui concerne chaque mouvement, n'oublie pas le facteur "soft" (logiciel).
Il te faut penser dans la globalité autant que dans l'individuaité.

Je m'explique:
L'algorythme de traitement des mouvements doit être le même pour tous les mouvements.
Par contre pour répondre au problème d'individualité, cet algorythme doit être conçu au départ pour être hyper souple à utiliser.
En gros il te faut définir une boucle principale loop() par exemple, qui servira à envoyer des paramètres à une fonction qui se chargera de façon automone de gérer les mouvements.

Tout est envisageable (angle -aplha, angle 0, angle +alpha et vitesse de rotation)

beaucoup de question waou :slight_smile: j’ai tardé à poster de nouveau car très occupé ces derniers temps.

comme je disais, rien est définitif. c’est par ce sujet que je compte discuter des meilleurs options.
la partie moteur de propulsion ne prendra pas tant de place que ça. il n’y aura qu’un seul moteur cc classique pour entraîner les trois hélices. il me reste en suite pas loin de 50 cm de long sur 10 de haut et 15 de large.

je vais commencer par le matériel dont je dispose:

je pensais disposer de plus d’arduino nano. je ne sais pas ou sont passé les 7 autres.
sinon ça ne ce soit pas mais j’ai aussi 10 moteur pap uln2003 avec un driver pour chacun.
je repasserais commande sans problème si il manque quelque chose

pour la partie mécanique, pas de souci de ce coté la. c’est la partie code qui me fait défaut.
comme je le disais, faire bouger un pap n’est pas difficile. pour le reste de ce que je souhaite faire, je nage en terre inconnue. je ne demande pas non plus qu’on me mâche tout le travail, mais de m’apprendre ce que je ne sais pas.

je sais que, utiliser que des NANO est possible mais je dispose aussi d’une mega.

j’ai recherché sur différents sites dont les plus connus sans obtenir satisfaction. certaine explications me paraissaient abstraite.

il y a 18 tourelles mais certain moteur en contrôleront un, deux voir trois tourelles.

je vous bricolerais un schéma général pour vous donner une idée de ce dont il est question.

je vous montre une capture de ce que j’ai fait sur sketshup.

et la un fragment de code sur lequel je m’entraîne.

#include <Stepper.h>

const int nombredepas = 300;

Stepper myStepper(nombredepas, 9, 11, 10, 8);


void setup()
{
 pinMode(13, OUTPUT);
  myStepper.setSpeed(9);
 
}

void loop() {

  myStepper.step(500);



  myStepper.step(-500);
  
delay(1000);

digitalWrite(13, HIGH);  
delay(100);              // wait for a second
digitalWrite(13, LOW);

delay(1000);
}

voila pour le moment j’espere avoir repondu à toutes vos question.
et merci de votre coup de main :wink:

Hello,

Je n’ai pas tout parcouru, mais ma première idée est que, mécaniquement, tu te compliques un peu la tâche avec une crémaillère. Une courroie crantée reste beaucoup plus facile à mettre en œuvre, et aura en plus l’avantage de ne pas introduire de saccades supplémentaires.

mécaniquement, ça sera imprimé en 3D, l'avantage que j'ai trouvé sur ces roues dentés, c'est qu'elles ont un arrondi pour justement éviter cette saccade. la courroie est plus difficile à mettre en place par rapport à la structure du pont.

Bonjour,
c'est n'est qu'une réponse d'électronicien à une question de mécanicien, mais mettre un moteur par tourelle sera plus aisé et sans doute moins cher
ne souhaites-tu pas également faire bouger les canons en tilt ?

voici un fragment de code que j’ai bricolé. biensur il y a une erreur.

#include <Stepper.h>
#include <Servo.h>

int nombreDePas = 48*64;
int pos = 0;
const int L1 = 52;


Servo monServo;
Stepper monMoteur (nombreDePas,9,11,10,8);

void setup()
{
monServo.attach(6);
monMoteur.setSpeed(2);
pinMode(L1, OUTPUT);
}
void loop()
{
monMoteur.step(500);


for (pos = 0; pos <= 35; pos += 1) {
monServo.write(pos);
delay(120); 
}

delay(5000);
digitalWrite(L1, HIGH);

delay(50);

digitalWrite(L1, LOW);

delay(5000);

for (pos = 35; pos >= 0; pos -= 1) { 
monServo.write(pos); 
delay(120); 
}
delay(5000);

for (pos = 0; pos <= 35; pos += 1) {
monServo.write(pos);
delay(120); 
}

delay(5000);
digitalWrite(L1, HIGH);

delay(50);

digitalWrite(L1, LOW);

delay(5000);

for (pos = 35; pos >= 0; pos -= 1) { 
monServo.write(pos); 
delay(120); 
}
monMoteur.step(-500);
delay(10000);
}

et voici ce que l’exemple donne après le contact avec le poussoir.
https://www.facebook.com/megawatt05100/media_set?set=vb.100000097871752&type=2

Le lien ne fonctionne pas

ha mince, pourtant le lien est en public

pense à mettre ton code dans les balises appropriées "code"

voila qui devrait etre mieux! :slight_smile:

Encore un petit effort, faites un ctrl-T dans l'IDE avant de coller le code ici de façon ce qu'il soit indenté correctement - là c'est dur de voir quel bloc se ferme à quel endroit

Vous êtes sur la MEGA? Pouvez vous décrire le bug car votre page Facebook nécessite un compte Facebook pour y accéder...

je travaille sur une mega pour les essaies et une fois au point, ça sera sur des nanos.

j'essaie de mettre une initialisation des PAP avant la bloucle, et donc dans la partie setup. et c'est dedans que ce trouve l'erreur.

Ok - avez vous lu les restrictions de la librairie servo? sur le PWM de certaines pins (que vous utilisez pour le stepper) et le nombre Max de servos suivant les cartes?