Animation pilote maquette - code servos simultanés

VincentB:
"Artouste" finalement ton code est impec, en mettant des tous petits mouvements de 1° tout le long de l'anim, ça lui donne un air plus vivant, ça me va bien comme ça
"Bernarduino" j'essayerais par curiosité, mais je ne pense pas tout refaire, par contre je suppose qu'il faut télécharger cette librairie?

Des photos... ou mieux, une petit vidéo ? XD

Ha oui, là c'est encore mieux, je l'ai mis sur toute mon anim, c'est nickel

Jean-François, photos, video il y a les liens dans mon 1er message du sujet
mais demain je ferais une nouvelle vidéo du pilote avec ce petit mouvement de tête
je vous remercie beaucoup de votre aide, c'est passionnant ces cartes, quand on maitrise ça doit être génial

Voilà j'ai refait une petite vidéo de l'animation, même url que la précédente
http://www.retroplane.net/mira3/animation_pilote2.wmv
les mouvements de tête sont petits, mais suffisants pour lui donner un air moins figé qu'auparavant
Encore merci Artouste et à ceux qui m'ont aidé

VincentB:
Ha oui, là c'est encore mieux, je l'ai mis sur toute mon anim, c'est nickel

Alors tant mieux, ce n'est pas vraiment beau ni optimisé comme code, mais ça à au moins le mérite d’être efficace et facilement integrable.

Jean-François, photos, video il y a les liens dans mon 1er message du sujet
mais demain je ferais une nouvelle vidéo du pilote avec ce petit mouvement de tête
je vous remercie beaucoup de votre aide, c'est passionnant ces cartes, quand on maitrise ça doit être génial

effectivement c'est bien sympathique comme cartes, avec un peu de pratique la maitrise du "général" vient assez vite.
En tout cas même sans la tête qui bouge ! :grin: votre réalisation est bien sympa, vous faites des présentations dans le cadre des rencontres de modélisme ?

Artouste:
votre réalisation est bien sympa, vous faites des présentations dans le cadre des rencontres de modélisme ?

Oui chaque été on organise la rencontre Retroplane dédiée uniquement aux maquettes de planeurs anciens, c'est l'aboutissement du travail qu'on a effectué toute l'année et détaillé sur notre forum, l'an dernier près de Cherbourg RETROPLANE 2011 aux Pierres Pouquelées et cet été ce sera en Autriche RETROPLANE 2012 au Spitzerberg - Autriche

Très beau travail en tout cas. :astonished:

Et en plus... Ça vole???? :astonished:

Oui bien sûr, c'est fait pour voler. Entre autre curiosité, mon dernier, un triplan en tubes acier et dural comme son ancêtre, planeur Français de 1922
http://www.retroplane.net/triplan-clement/page4.htm
En tout cas je suis content d'avoir découvert les cartes Arduino, ça m'ouvre des perspectives pour des animations

C'est magnifique!

...Arduino, ça m'ouvre des perspectives pour des animations

Oui, et un peu d'aide au pilotage, ça fait rêver, non?

Non là pas vraiment pour ce type de machines, mais sinon ça se fait

VincentB:
Oui bien sûr, c'est fait pour voler. Entre autre curiosité, mon dernier, un triplan en tubes acier et dural comme son ancêtre, planeur Français de 1922
Triplan Louis Clément
En tout cas je suis content d'avoir découvert les cartes Arduino, ça m'ouvre des perspectives pour des animations

ça doit faire mal quand ça se crash!

Oui, c'est relativement fréquent, mais on arrive toujours à réparer facilement.

Pour en revenir à Arduino, maintenant que le code est au point
-est-ce que je peux récupérer mon shield et brancher mes 3 servos, batterie 12v et 5v directement sur ma carte nano?
-ou même racheter une nano mini? sur les nano mini pour y brancher l'adaptateur usb il y a des broches? ou bien il faut souder des fils?
-le code fait 12160 bytes, je suppose que ça passe sur une nano mini 168?

VincentB:
Oui, c'est relativement fréquent, mais on arrive toujours à réparer facilement.

Pour en revenir à Arduino, maintenant que le code est au point
-est-ce que je peux récupérer mon shield et brancher mes 3 servos, batterie 12v et 5v directement sur ma carte nano?
-ou même racheter une nano mini? sur les nano mini pour y brancher l'adaptateur usb il y a des broches? ou bien il faut souder des fils?
-le code fait 12160 bytes, je suppose que ça passe sur une nano mini 168?

bonsoir
pour la nano
c'est ce modele ?
http://www.selectronic.fr/carte-arduino-nano.html

il peut etre alimenté en 12V , les servos en 5V (ne pas oublier la masse commune servos/arduino)
pour la nano mini, je ne connais pas , c'est quel modele ?, mais le code doit passer .
Il y a surement des specialsites de ces petites cartes qui repondront !

Oui c'est celle ci exactement

donc actuellement je l'ai sur un shield, ce qui m'a facilité la tâche pour la mise au point et la découverte, donc je suppose qu'on met les signals des servos sur les pins correspondantes marqués D et tous les + et - en commun. Pour l'alimentation ce sont les grandes broches qu'on voit dépasser sur le dessus? que je ne fasse pas de bétise. C'était surtout pour être sûr que la carte nano supporte l'intensité des 3 servos?
Nano mini finalement je laisse tomber, ça coute pratiquement le même prix que la nano avec l'usb, et moins pratique pour moi si j'ai besoin de renvoyer vite fait une modif de code dessus

VincentB:
Oui c'est celle ci exactement

donc actuellement je l'ai sur un shield, ce qui m'a facilité la tâche pour la mise au point et la découverte, donc je suppose qu'on met les signals des servos sur les pins correspondantes marqués D et tous les + et - en commun. Pour l'alimentation ce sont les grandes broches qu'on voit dépasser sur le dessus? que je ne fasse pas de bétise. C'était surtout pour être sûr que la carte nano supporte l'intensité des 3 servos?
Nano mini finalement je laisse tomber, ça coute pratiquement le même prix que la nano avec l'usb, et moins pratique pour moi si j'ai besoin de renvoyer vite fait une modif de code dessus

stop pour l'instant ! :grin:
le 12V c'est pour alimenter la nano avant le regulateur
les servos eux doivent etre alimentés directement en 5 V sans passer par le 5V de la nano
les masses (servos,nano,alim) doivent être communes !
pour faire simple seules les sorties de la nano doivent etre reliées directement aux servos .

je regarde le schema de la nano et je reposte plus tard le schema de connection.

c'est pas beau
mais je suis allé au plus simple

Super, là c'est clair, je te remercie :wink:

Bonjour tout le monde
Je reviens vers vous car j'aurais besoin d'aide, j'ai essayé par moi même la modif mais pas réussi a intégrer le code
Je vous explique:
actuellement lorsque j'appui sur un bouton poussoir, je lance mon animation du pilote, j'aimerais avoir un 2eme bouton poussoir, afin de choisir de lancer une autre animation, basée sur le même principe, mais dont les synchro et delai seront differents puisque synchro avec une autre bande son
je met juste une partie de mon code actuel

#include <Servo.h>  


Servo bras;   
Servo tete; 
Servo machoire;  
int bra = 0; 
int tet = 0; 
int tets = 0;
int mache = 0;
int bouton = 2;
int bouton2 = 7; //2eme bouton poussoir pour jouer scene 2
long randNumber;
int fm = 20; // facteur modulo tete/machoire

void setup() 
{ 
  bras.attach(3); 
  tete.attach(5); 
  machoire.attach(6); 

  Serial.begin(9600); 
  pinMode(bouton, INPUT);
  pinMode(bouton2, INPUT);

} 

void loop() { 

  if (digitalRead(bouton) == HIGH) //scene 1 déclenchée par bouton poussoir 1

  { 
    delay(1800); //pause avant commencer animation


    for(tet = 90; tet>=80; tet-=1) //bouge la tête à droite    
    {                                 
      tete.write(tet);                
      delay(15);
    }        

    for(bra = 90; bra>=50; bra-=1) //leve le bras    
    {                                   
      bras.write(bra);  //petits mouvements de tête pendant qu'il leve le bras
      if (bra % fm ==0) {
        randNumber = random(-5,5);
        tets=tet;
        tet=tet+randNumber;
        tete.write(tet);  
        tet=tets;   
      }        
      delay(30); 

    }   
    delay(300);
    int compteur = 0; 
    while (compteur < 14) //bras va et vient de 7° sur la trompette
    { 

      for(bra = 50; bra < 57; bra += 1)  
      {                                   
        bras.write(bra);  //petits mouvements de tête
        if (bra % fm ==0) {
          randNumber = random(-5,5);
          tets=tet;
          tet=tet+randNumber;
          tete.write(tet); 
          tet=tets;   
        }        
        delay(15); 

      } 

      for(bra = 57; bra>=50; bra-=1)   
      {                                   
        bras.write(bra);  //petits mouvements de tête
        if (bra % fm ==0) {
          randNumber = random(-5,5);
          tets=tet;
          tet=tet+randNumber;
          tete.write(tet); 
          tet=tets;    
        }       
        delay(15); 

      } 

      compteur++;
    } 
    { 
      delay(300);

      for(bra = 50; bra < 90; bra += 1)  //baisse le bras

      {                                   
        bras.write(bra);  //petits mouvements de tête pendant qu'il baisse le bras
        if (bra % fm ==0) {
          randNumber = random(-5,5);
          tets=tet;
          tet=tet+randNumber;
          tete.write(tet); 
          tet=tets;    
        }       
        delay(20); 

      } 

      delay(100); 

      for(tet = 80; tet < 130; tet += 1)  //bouge la tete à gauche
      {                                
        tete.write(tet);              
        delay(15);                        

      }

      for(tet = 130; tet>=50; tet-=1) //bouge la tête à droite    
      {                                 
        tete.write(tet);                
        delay(15);

      }  

      delay(100);  

      for(tet = 50; tet < 110; tet += 1)  //bouge la tête à gauche
      {                                
        tete.write(tet);              
        delay(20);                        

      }

      delay(500);    //commence à parler

      int compteur = 0; 
      while (compteur < 3) //dis son nom
      { 

        for(mache = 90; mache < 120; mache += 1)
        {                                   
          machoire.write(mache);  //petits mouvements de tête pendant qu'il parle
          if (mache % fm ==0) {
            randNumber = random(-1,1);
            tets=tet;
            tet=tet+randNumber;
            tete.write(tet); 
            tet=tets;   
          }        
          delay(4); 

        } 
        for(mache = 120; mache>=90; mache-=1) 

        {                                   
          machoire.write(mache);  //petits mouvements de tête pendant qu'il parle
          if (mache % fm ==0) {
            randNumber = random(-1,1);
            tets=tet;
            tet=tet+randNumber;
            tete.write(tet); 
            tet=tets;    
          }       
          delay(4); 

        } 
        compteur++;

      }

      } 
    } 
  }

Je suppose que je dois mettre pour ce 2eme bouton

int bouton2 = 7;
pinMode(bouton2, INPUT);

mais après?? comment integrer le code pour rejouer une autre animation?

ça il faut le mettre?
if (digitalRead(bouton2) == HIGH)

au début ou juste avant la 2eme anim?

j'ai essayé différente possibilité mais ça me met des erreurs, je mets surement le code au mauvais endroit
merci de votre aide

bonjour
compilé mais pas testé
essaye ça , ce n'est pas beau, mais c'est surement plus pratique pour toi à intégrer

#include <Servo.h>  


Servo bras;   
Servo tete; 
Servo machoire;  
int bra = 0; 
int tet = 0; 
int tets = 0;
int mache = 0;
int bouton = 2;
int bouton2 = 7; //2eme bouton poussoir pour jouer scene 2
long randNumber;
int fm = 20; // facteur modulo tete/machoire

void setup() 
{ 
  bras.attach(3); 
  tete.attach(5); 
  machoire.attach(6); 

  Serial.begin(9600); 
  pinMode(bouton, INPUT);
  pinMode(bouton2, INPUT);

} 

void loop() { 

  if (digitalRead(bouton) == HIGH) //scene 1 déclenchée par bouton poussoir 1

  { 
    delay(1800); //pause avant commencer animation


    for(tet = 90; tet>=80; tet-=1) //bouge la tête à droite    
    {                                 
      tete.write(tet);                
      delay(15);
    }        

    for(bra = 90; bra>=50; bra-=1) //leve le bras    
    {                                   
      bras.write(bra);  //petits mouvements de tête pendant qu'il leve le bras
      if (bra % fm ==0) {
        randNumber = random(-5,5);
        tets=tet;
        tet=tet+randNumber;
        tete.write(tet);  
        tet=tets;   
      }        
      delay(30); 

    }   
    delay(300);
    int compteur = 0; 
    while (compteur < 14) //bras va et vient de 7° sur la trompette
    { 

      for(bra = 50; bra < 57; bra += 1)  
      {                                   
        bras.write(bra);  //petits mouvements de tête
        if (bra % fm ==0) {
          randNumber = random(-5,5);
          tets=tet;
          tet=tet+randNumber;
          tete.write(tet); 
          tet=tets;   
        }        
        delay(15); 

      } 

      for(bra = 57; bra>=50; bra-=1)   
      {                                   
        bras.write(bra);  //petits mouvements de tête
        if (bra % fm ==0) {
          randNumber = random(-5,5);
          tets=tet;
          tet=tet+randNumber;
          tete.write(tet); 
          tet=tets;    
        }       
        delay(15); 

      } 

      compteur++;
    } 
    { 
      delay(300);

      for(bra = 50; bra < 90; bra += 1)  //baisse le bras

      {                                   
        bras.write(bra);  //petits mouvements de tête pendant qu'il baisse le bras
        if (bra % fm ==0) {
          randNumber = random(-5,5);
          tets=tet;
          tet=tet+randNumber;
          tete.write(tet); 
          tet=tets;    
        }       
        delay(20); 

      } 

      delay(100); 

      for(tet = 80; tet < 130; tet += 1)  //bouge la tete à gauche
      {                                
        tete.write(tet);              
        delay(15);                        

      }

      for(tet = 130; tet>=50; tet-=1) //bouge la tête à droite    
      {                                 
        tete.write(tet);                
        delay(15);

      }  

      delay(100);  

      for(tet = 50; tet < 110; tet += 1)  //bouge la tête à gauche
      {                                
        tete.write(tet);              
        delay(20);                        

      }

      delay(500);    //commence à parler

      int compteur = 0; 
      while (compteur < 3) //dis son nom
      { 

        for(mache = 90; mache < 120; mache += 1)
        {                                   
          machoire.write(mache);  //petits mouvements de tête pendant qu'il parle
          if (mache % fm ==0) {
            randNumber = random(-1,1);
            tets=tet;
            tet=tet+randNumber;
            tete.write(tet); 
            tet=tets;   
          }        
          delay(4); 

        } 
        for(mache = 120; mache>=90; mache-=1) 

        {                                   
          machoire.write(mache);  //petits mouvements de tête pendant qu'il parle
          if (mache % fm ==0) {
            randNumber = random(-1,1);
            tets=tet;
            tet=tet+randNumber;
            tete.write(tet); 
            tet=tets;    
          }       
          delay(4); 

        } 
        compteur++;

      }

      } 
    } // fin animation 1
    
    //animation 2
    
    if (digitalRead(bouton2) == HIGH) //scene 2 déclenchée par bouton poussoir 2

  { 
    delay(1800); //pause avant commencer animation


    for(tet = 90; tet>=80; tet-=1) //bouge la tête à droite    
    {                                 
      tete.write(tet);                
      delay(15);
    }        

    for(bra = 90; bra>=50; bra-=1) //leve le bras    
    {                                   
      bras.write(bra);  //petits mouvements de tête pendant qu'il leve le bras
      if (bra % fm ==0) {
        randNumber = random(-5,5);
        tets=tet;
        tet=tet+randNumber;
        tete.write(tet);  
        tet=tets;   
      }        
      delay(30); 

    }   
    delay(300);
    int compteur = 0; 
    while (compteur < 14) //bras va et vient de 7° sur la trompette
    { 

      for(bra = 50; bra < 57; bra += 1)  
      {                                   
        bras.write(bra);  //petits mouvements de tête
        if (bra % fm ==0) {
          randNumber = random(-5,5);
          tets=tet;
          tet=tet+randNumber;
          tete.write(tet); 
          tet=tets;   
        }        
        delay(15); 

      } 

      for(bra = 57; bra>=50; bra-=1)   
      {                                   
        bras.write(bra);  //petits mouvements de tête
        if (bra % fm ==0) {
          randNumber = random(-5,5);
          tets=tet;
          tet=tet+randNumber;
          tete.write(tet); 
          tet=tets;    
        }       
        delay(15); 

      } 

      compteur++;
    } 
    { 
      delay(300);

      for(bra = 50; bra < 90; bra += 1)  //baisse le bras

      {                                   
        bras.write(bra);  //petits mouvements de tête pendant qu'il baisse le bras
        if (bra % fm ==0) {
          randNumber = random(-5,5);
          tets=tet;
          tet=tet+randNumber;
          tete.write(tet); 
          tet=tets;    
        }       
        delay(20); 

      } 

      delay(100); 

      for(tet = 80; tet < 130; tet += 1)  //bouge la tete à gauche
      {                                
        tete.write(tet);              
        delay(15);                        

      }

      for(tet = 130; tet>=50; tet-=1) //bouge la tête à droite    
      {                                 
        tete.write(tet);                
        delay(15);

      }  

      delay(100);  

      for(tet = 50; tet < 110; tet += 1)  //bouge la tête à gauche
      {                                
        tete.write(tet);              
        delay(20);                        

      }

      delay(500);    //commence à parler

      int compteur = 0; 
      while (compteur < 3) //dis son nom
      { 

        for(mache = 90; mache < 120; mache += 1)
        {                                   
          machoire.write(mache);  //petits mouvements de tête pendant qu'il parle
          if (mache % fm ==0) {
            randNumber = random(-1,1);
            tets=tet;
            tet=tet+randNumber;
            tete.write(tet); 
            tet=tets;   
          }        
          delay(4); 

        } 
        for(mache = 120; mache>=90; mache-=1) 

        {                                   
          machoire.write(mache);  //petits mouvements de tête pendant qu'il parle
          if (mache % fm ==0) {
            randNumber = random(-1,1);
            tets=tet;
            tet=tet+randNumber;
            tete.write(tet); 
            tet=tets;    
          }       
          delay(4); 

        } 
        compteur++;

      }

      } 
    } // fin animation 2   
    
  }

Merci Artouste, c'est bon ça marche
c'est comme ça que j'essayais de faire, mais je ne savais pas detecter la fin de scene1, donc avant la dernière accolade, là maintenant j'ai compris