Aller au contenu


Photo
- - - - -

course du soleil


  • Veuillez vous connecter pour répondre
224 réponses à ce sujet

#121 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 06 février 2020 - 04:52

Bonjour,

tu dis "j'avais testé" : est-ce que tu veux dire que tu n'as pas re-testé au moment de poster ton message?

Si c'est bien le cas, alors teste à nouveau le code du message ci-dessus (comme ça, si c'est un problème de matériel, par exemple un faux contact, alors on le saura).

 

Si ça marche, alors dans la fonction moteur_avance_2_pas, tu ajoutes un Serial.prinln("moteur_avance_2_pas est exécuté");    : cela permettra de vérifié si la fonction moteur_avance_2_pas est appellée ou pas.

 

Bonne journée

Sandro


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#122 michel

michel

    Membre occasionnel

  • Membres
  • Pip
  • 179 messages
  • Gender:Male
  • Location:nice

Posté 06 février 2020 - 06:21

Bonsoir Sandro ,

ce que je veux dire c'est avec  ce code que j'ai tester le moteur et qu'il fonctionne .

mais pas moteur_avance_deux pas cela ne fonctionne pas .

bonne soirée



#123 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 06 février 2020 - 06:58

Bonsoir,

Si tu as testé avec le petit code et que le moteur tourne, alors ce n'est pas un problème de hardware.

 

Du coup, tu as testé en ajoutant un Serial.print dans moteur_avance_deux_pas? Si oui, est-ce que tu obtiens un message ou pas?

 

Bonne soirée

Sandro


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#124 michel

michel

    Membre occasionnel

  • Membres
  • Pip
  • 179 messages
  • Gender:Male
  • Location:nice

Posté 06 février 2020 - 08:52

re ,  je pense que je me suis encore mal exprimé .

la fonction moteur_avance_2_pas,

ne fait pas avancer le moteur .

je testerai demain ce que tu m'as dit de faire (un Serial.print dans moteur_avance_deux_pas?)

bonne soirée.

}
 void moteur_avance_2_pas() {
      monmoteur.step(2);
            
}


#125 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 165 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 06 février 2020 - 09:25


#include <Stepper.h>                                // Permettra d'utilser des fonctions de la librairie externe Stepper.h,
                                                   // librairie spécifique pour contrôler les MOTEURS PAP.
const int nbrepas360 = 2048;                        // Fixe le nombre de pas pour faire un tour complet, c'est-à-dire 360°.
Stepper monmoteur (nbrepas360, 8, 9, 10, 11);    // Initialise la librairie Stepper.h
           .

void setup()
{

}

void loop()
{

  moteur_avance_2_pas();           // avance 2 pas
  delay(500);                      // Pause d'une demi seconde entre chaque paire de pas.

}

void moteur_avance_2_pas() {
      monmoteur.step(2);      
}

Ce code si tu le mets ton moteur pas à pas tourne ? 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#126 michel

michel

    Membre occasionnel

  • Membres
  • Pip
  • 179 messages
  • Gender:Male
  • Location:nice

Posté 07 février 2020 - 03:27

Bonjour Sandro,

j'ai testé le code de Mike118.

et rien ne bouge alors j'ai testé le code d'un professeur Pascal Masson de Polytech Nice qui avait posté un code sur le moteur que j’utilise.

Je te mets le code :

du coup j’attends tes instructions ,d'avance merci j’espère que tes vacances se sont bien passées

const int nbrepas360 = 32*64;  // 2048 pas                   
Stepper monmoteur (nbrepas360, 8, 10, 9, 11); // Bon branchement ,
//Stepper monmoteur (nbrepas360, 8, 9, 10, 11);// il y avais une erreur  dans mon branchement  du coup le moteur ne tourner que dans un sens
void setup(void) {
    monmoteur.setSpeed (1); // 1tour par minute,
}
void loop()
{

moteur_avance_2_pas(); 
} 

void moteur_avance_2_pas() {
      monmoteur.step(nbrepas360);//Sens horaire
      delay(500);
      monmoteur.step (-nbrepas360);//Sens anti-horaire
      delay(500);
          
}


#127 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 07 février 2020 - 03:43

Bonjour,

 

est-ce que tu pourrais s'il te plait être un peu plus précis dans tes messages, bien souvent il manque des informations pour être sur de ce que tu as fait exactement et de quel est le résultat exact (c'est déjà assez dur de trouver une erreur sans pouvoir tester en direct, si en plus il manque des informations, alors ça devient vraiment difficile).

 

Du coup, est-ce que le code du proffesseur de Polytech Nice fonctionne?

 

Est-ce que tu pourrais s'il te plait mettre un petit récapitulatif des codes que tu as testé (par exemple en précisant le numéro de message (en haut à droite de chaque message) du message où le code a été proposé. De préférence, re-teste chacun de ces codes, comme ça on est sur que ta réponse reflète bien l'état actuel des choses.

 

Bonne journée

Sandro

 

PS : sinon, ma proposition de faire un skype ou autre type de video conférence est toujours valable, ça permettrait probablement d'avance plus vite (car je peux allors avoir des retours de tests casi en direct)


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#128 michel

michel

    Membre occasionnel

  • Membres
  • Pip
  • 179 messages
  • Gender:Male
  • Location:nice

Posté 07 février 2020 - 04:28

Sandro, message  #126 fonctionne ,

je ne peux pas être plus clair .

bonne journée.



#129 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 07 février 2020 - 04:40

Ok (pour le code du #126, tu avais juste mis que tu avais testé dans ton message, mais pas le résultat (après coup, en re-lisant ton code, j'aurais peut-être pu le deviner avec les commentaires que tu avais mis dans le code).

 

Du coup, maintenant que tu t'es rendu compte de ton erreur de branchement, soit tu le corrige, soit tu fais la même correction que celle que tu as faite dans le code du professeur de Polytech Nice.

Ensuite, tu teste le programme complet, et tu me dis si ça marche, ou dans le cas contraire quel est le problème.

 

Bonne journée

Sandro


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#130 michel

michel

    Membre occasionnel

  • Membres
  • Pip
  • 179 messages
  • Gender:Male
  • Location:nice

Posté 07 février 2020 - 06:12

Sandro,

comment jeux faire pour tester mon code sans attendre Lle lendemain .

pour voir si mon moteur avance bien du nbre_pas . code #116

merci désolé si je ne te donne pas tout ce que tu as besoin pour m'aider .

http://users.polytech.unice.fr/~pmasson/Enseignement/Elements%20de%20robotique%20avec%20arduino%20-%20Moteurs%20-%20Projection%20-%20MASSON.pdf

 

#131 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 165 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 07 février 2020 - 06:22

En fait pour bien faire michel il faut tester ton code morceau par morceau et faire des fonctions. 


Une fonction qui avance du nombre de pas que tu veux. Que tu pourras vérifier facilement en l'appelant dans un autre code... 

Une fonction qui te dit de combien tu dois avancer en fonction de la journée etc ... 

Ainsi en tester les différents morceaux un a un , et en corrigeant en cas de problème rencontré, normalement tu dois arriver à un code qui marche... 

 

 

Pour en revenir au code : 


Peux tu confirmer que ce code marche : 


 

const int nbrepas360 = 32*64;  // 2048 pas                   
Stepper monmoteur (nbrepas360, 8, 10, 9, 11); // Bon branchement ,

void setup(void) {
    monmoteur.setSpeed (1); // 1tour par minute, // c'est ce qu'il manquait dans la fonction que je t'ai fais tester.
}
void loop()
{

 moteur_avance_2_pas(); 
} 

void moteur_avance_2_pas() {
      monmoteur.step(2);//Sens horaire
      delay(500);
          
}

 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#132 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 07 février 2020 - 07:32

Bonsoir,

tester le code que vient de donner Mike pour commencer est une bonne idée.

 

Ensuite, deux options :

- la version "sale" : remplacer le calcul de alfa_1 par quelque chose qui change plus vite (par exemple 360*heure/24 ou 360*minute/60)

- la version propre, comme le suggère Mike, est de faire des fonctions indépendantes que tu peux donc tester indépendamment.

 

Dans le seconds cas, je te conseille de commencer par reprendre la fonction moteur_go_to_angle du message #116, et de lui faire prendre une variable "angle_cible" en argument, au lieu d'utiliser la variable globale alfa_1 (du coup, dans le code, il faut remplacer alfa_1 par angle_cible. Une fois que c'est fait, tu peux commenter le code de la fonction loop, et à la place donner une suite d'angles à éxécuter (par exemple moteur_go_to_angle(0); delay(2000); moteur_go_to_angle(45); delay(2000); moteur_go_to_angle(90); delay(2000); moteur_go_to_angle(180); delay(2000); moteur_go_to_angle(90); delay(2000); moteur_go_to_angle(180); delay(2000); moteur_go_to_angle(270); delay(2000); ) et vérifier que le moteur vas bien aux positions demandée.

Si ça marche, éteins l'arduino en cours d’exécution (à un moment où le moteur bouge pas), et vérifie si le moteur vas bien aux mêmes positions qu'avant (ce qui veut dire qu'il sauvegarde bien la position).

 

Une fois que c'est fait, tu peux écrire une fonction angle_du_jour :

int angle_du_jour(int jour)
{
    ...
    return ...
}

Nb : dans cette fonction, tu devra utiliser max_day(), du coup elle dépend implicitement du mois : tu ne pourra donc la tester que pour le mois en cours
 


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#133 michel

michel

    Membre occasionnel

  • Membres
  • Pip
  • 179 messages
  • Gender:Male
  • Location:nice

Posté 08 février 2020 - 10:19

Bonjour Mike118,

#151 le code fonctionne ,



#134 michel

michel

    Membre occasionnel

  • Membres
  • Pip
  • 179 messages
  • Gender:Male
  • Location:nice

Posté 11 février 2020 - 04:55

bonjour Sandro,

j'ai tester un code avec driver DRV8825 et moteur nema17.

je te joint le code pour que tu puisse le regarder .

j'aimerai le tester en faisant changer l'angle j'ai rajouter un for (angle=0;angle<360;angle+=2){

mais cela va trop vite tu pourrais s'il te plait me dire quesque je pourrais mettre pour tester mon angle moins vite .

merci beaucoup .

vers la  fin du programme j'ai ajoutée

Serial.println("Deblocage axe");
   digitalWrite( enPin, HIGH ); // logique inversée

parce que le moteur chauffé puisqu'il est toujours alimenter et j'ai aussi réglé l'intensité sur le minimum (drv8825 petit potentiomètre sur le circuit )

merci pour ton aide .

// defines pins numbers

const int stepPin = 5;

const int dirPin  = 2;

const int enPin  = 8;

int currentAngle = 0;

int angle = 0;

float stepPerAngle = 1.8; // full step = 1.8

int   numstep;



void setup() {

  Serial.begin(9600);

  // Sets the two pins as Outputs

  pinMode(stepPin,OUTPUT);

  pinMode(dirPin,OUTPUT);



  pinMode(enPin,OUTPUT);

  digitalWrite(enPin,LOW);

  digitalWrite(dirPin,HIGH);

}

void loop() {
    int n;

      for (angle=0;angle<360;angle+=2){
        delayMicroseconds(1000);

      }
    if( currentAngle != angle ){
        


        if( currentAngle < angle){

            digitalWrite(dirPin,HIGH);

             n = angle - currentAngle;

            numstep = n / stepPerAngle;

        }

        else if( currentAngle > angle){

            digitalWrite(dirPin,LOW);

            n = currentAngle - angle;

            if( angle == 0){

               n =currentAngle;

            }

            numstep = n / stepPerAngle;

        }



        for(int x = 0; x < numstep; x++) {

           digitalWrite(stepPin,HIGH);

           delayMicroseconds(1000);

           digitalWrite(stepPin,LOW);

           delayMicroseconds(1000);
           

        }



        currentAngle = angle;

    }



   delay(500);
   Serial.println("Deblocage axe");
   digitalWrite( enPin, HIGH ); // logique inversée
 
      }


#135 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 11 février 2020 - 05:58

Bonsoir,

plusieurs points :

1) pourquoi est-ce que tu n'utilises plus la bibliothèque Stepper.h ?

2) pour le problème des angles que tu n'as pas le temps de voir, le problème est que tu fermes la boucle for qui modifie l'angle en ne mettant dedans que un petit delais, mais pas le code pour faire bouger le moteur : du coup, il faudrait que cette boucle for englobe presque tout le code de la boucle fort (ie tout sauf le "int n;" et peut-être la partie déblocage si tu ne veux l'exécuter qu'une seule fois par tour)

3) tu désactive le moteur à la fin du code, mais je ne vois pas où tu le re-active : c'est volontaire?

 

Bonne soirée

Sandro


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#136 michel

michel

    Membre occasionnel

  • Membres
  • Pip
  • 179 messages
  • Gender:Male
  • Location:nice

Posté 12 février 2020 - 08:09

Bonjour Sandro,

tu m'as dis tout ce qui n'allez pas dans mon code ,mais aucune solution .

que dois je faire pour tester le moteur .

pour désactiver le moteur j'ai trouver que cela car il chauffer .

pourrais tu m'aider a résoudre mes problèmes d'avance merci .

bonne journée.



#137 michel

michel

    Membre occasionnel

  • Membres
  • Pip
  • 179 messages
  • Gender:Male
  • Location:nice

Posté 12 février 2020 - 05:35

bonjour Sandro,

j'ai travailler cette après-midi sur le code .

pourrais tu me dire ce que tu en pense et que me suggère d'y changer ou de modifier .

j'ai ajouter un EEPROM pour sauvegarder la position du moteur car sinon à chaque reset de la carte arduino il avance de alfa_1 .

tout fonctionner correctement jusqu’à l'angle 255 maximum de l'EEPROM;

j'ai bricoler un truc currentAngle =  (EEPROM.read(22)*2);  // EEPROM maxi 255,

et ensuite currentAngle_1=(currentAngle)/2 ; EEPROM maxi 255,
 EEPROM.update(22,currentAngle_1);

je suis sur qu'il y a une autre façon de faire plus propre d'avance merci .

j'active le moteur après la direction et le desactive aprés pour eviter l'echauffement  .

bonne soirée et merci pour ton aide sans toi je n'arriverais  à rien de correct .

je te met le code :

  void moteur(){
  DateTime now = RTC.now();
  int n;
  alfa_1 = 360*now.day()/max_day();
    
  angle = alfa_1;
 
  currentAngle =  (EEPROM.read(22)*2);  // EEPROM maxi 255,currentAngle *2;
  if( currentAngle != angle ){
        
  if( currentAngle < angle){

  digitalWrite(dirPin,HIGH);
  digitalWrite(enPin,LOW);
  n = angle - currentAngle;
  numstep = n / stepPerAngle;
 }
  else if( currentAngle > angle){

  digitalWrite(dirPin,LOW);
  digitalWrite(enPin,LOW);
  n = currentAngle - angle;
  if( angle == 0){
  n =currentAngle;
 }
  numstep = n / stepPerAngle;

 }

 for(int x = 0; x < numstep; x++) {
 digitalWrite(stepPin,HIGH);
 delayMicroseconds(1000);
 digitalWrite(stepPin,LOW);
 delayMicroseconds(1000);
         
 }
 currentAngle = angle;
 currentAngle_1=(currentAngle)/2 ; EEPROM maxi 255,cuurentAngle /2;
 EEPROM.update(22,currentAngle_1);

  }
   delay(500);
   Serial.println("Deblocage axe");
   digitalWrite( enPin, HIGH ); // logique inversée
 
  }
 
 
 


#138 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 12 février 2020 - 07:00

Bonjour,

 

1) tout d'abord, ce code :

 n = currentAngle - angle;
  if( angle == 0){
  n =currentAngle;
 }

seul la première ligne est utile, les trois suivantes ne servent à rien, vu qu'elles donnent la même valeur pour n.

 

2) tout à la fin, tu débloque l'axe (tu mets enPin à HIGH), mais nullepart tu le re-active : je pense qu'il faut que tu mettes digitalWrite( enPin, Low );  au début du code

 

3) ru ne m'as toujours pas dit pourquoi tu ne veux plus utiliser la bibliothèque Steppers.h?

 

4) la boucle qui fait avancer le moteur :

 for(int x = 0; x < numstep; x++) {
 digitalWrite(stepPin,HIGH);
 delayMicroseconds(1000);
 digitalWrite(stepPin,LOW);
 delayMicroseconds(1000);
         
 }

ne peut que faire avancer le moteur, pas le faire reculer (raison de plus d'utiliser la bibiliothèque steppers que tu utilisais avant

 

5) pour l'enregistrement dans l'EEPROM, le fait de diviser par 2 est risqué : si ton angle est impaire, en divisant par 2 à l'enregistrement puis en le multipliant par 2 en le réucupérant, tu vas perdre 1°. Si régulièrement tu avance d'un nombre impair de degrés, ta position finira complètement fausse. Du coup, je vois deux solutions :

a) imposer que l'angle soit toujours pair, en remplaçant "angle=alfa_1;" par "angle=(alfa_1/2)*2;" (nb : garde la formule telle quelle, d'autres écritures qui mathématiquement seraient les mêmes (par exemple alfa_1*2/2) donnent pas le même résultat quand on travaille avec des entiers. Dans cette solution, on arrondira tous les angles à l'angle pair inférieur : on n'aura donc une résolution que de 2°, mais au moins on sauvergarde la vrai position

B) enregistrer la vrai valeur de l'angle en utilisant 2 octets : dans ce cas tu peux utiliser EEPROM.put(adresse, variable) et EEPROM.get(adresse, variable) où variable est une variable du type que tu veux (par exemple int) qui sera stoqué sur le nombre d'octets nécessaires (2 pour un int). A noter qu'il ne faut alors pas utiliser l'adresse juste après pour stoqué autre chose, car elle est déjà utilisée.
 

 


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#139 michel

michel

    Membre occasionnel

  • Membres
  • Pip
  • 179 messages
  • Gender:Male
  • Location:nice

Posté 13 février 2020 - 08:02

bonjour Sandro,

ce matin mon moteur faisait un bruit surement entre deux position .

je vais remettre la library stepper.h , par contre  il faut tout changer les pins ou je dois laisser comme ça les déclarations de pins .

pour l'axe je l'active après la direction .

merci bonne journée .

je vais faire les modifications cette après-midi .



#140 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 13 février 2020 - 10:24

Bonjour, pour stepper.h, tu as le choix : soit tu laisse les branchements comme ils sont et tu prends la déclaration du post #126 :

Stepper monmoteur (nbrepas360, 8, 10, 9, 11); // Bon branchement ,

Ou alors tu inverse les fils 9 et 10 et tu garde l'ancienne déclaration:

Stepper monmoteur (nbrepas360, 8, 9, 10, 11);

C'est comme tu veux, ça revient au même.
 

 

Pour l'activation de l'axe, tu as raison, j'avais raté ça.
 


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.





1 utilisateur(s) li(sen)t ce sujet

0 members, 1 guests, 0 anonymous users