DIY - Machine à pince de fête foraine

Votez pour l'image du mois
  • Oui c'est sur qu'avant de choisir un HW, il faut déterminer tous les besoins, et choisir la carte et/ou shield qui convient. à vu de nez je pense que ça devrait le faire, mais tu aura peut être besoin de souder des fils directement sur certaines pin du shield pour accéder aux pins de l'arduino.

    C'est sur que tu n'as pas choisi le plus facile pour commencer, mais tu vas apprendre plein de choses utiles.

  • il faut que tu initialises les stepperX, Y et Z en mode "AccelStepper:Driver" et que tu appelles setEnablePin() ensuite pour configurer la pin Enable. Par ex :

    AccelStepper stepperX(AccelStepper::DRIVER,X_STEP_PIN,X_DIR_PIN);

    Et dans le setup() :

    StepperX.setEnablePin(X_ENABLE_PIN);

    ok, je travaille dessus !

    mais je trouve que des exemples avec un seul moteur

    quand j'ai plusieurs moteurs, comment je détermine que je nome le moteur X et pas le moteur Y et comment je fait le lien entre le moteur x et ses sortie par ex step et dir ?

    j'ai fais ça:

    j'ai déterminé les pattes des branchements Arduino via le Ramp1.4

    Stepper Xstepper(stepsPerRevolution, 38,54,55);

    Stepper Ystepper(stepsPerRevolution, 56,60,61);

    Stepper Zstepper(stepsPerRevolution, 62,46,48);

    #define EnablePinX 38 // Driver X Activation du driver/pilote

    #define StepPinX 54 // Driver X Signal de PAS (avancement)

    #define DirPinX 55 // Driver X Direction

    #define EnablePinY 56 // Driver Y Activation du driver/pilote

    #define StepPinY 60 // Driver Y Signal de PAS (avancement)

    #define DirPinY 61 // Driver Y Direction

    #define EnablePinZ 62 // Driver Z Activation du driver/pilote

    #define StepPinZ 46 // Driver Z Signal de PAS (avancement)

    #define DirPinZ 48 // Driver Z Direction


    //----------------Acceleration library definitions-------------------

    AccelStepper stepperX(AccelStepper::DRIVER,motorInterfaceType, StepPinX, dirPinX); //modif Richard

    AccelStepper stepperY(AccelStepper::DRIVER);

    AccelStepper stepperZ(AccelStepper::DRIVER);

    AccelStepper stepperX(AccelStepper::DRIVER,X_STEP_PIN,X_DIR_PIN); //info Etienne _ =numéro de pin ou #define StepPinX ?

    je sais pas comment dire que le driver pour le moteur X est le bon, comme ça?

    AccelStepper stepperX(AccelStepper::DRIVER,motorInterfaceType, StepPinX, dirPinX); //modif Richard

    merci d'avance

  • je pense que j'ai trouvé un exemple en cherchant dans les librairies:

    #include <AccelStepper.h>

    // The X Stepper pins
    #define STEPPER1_DIR_PIN 3
    #define STEPPER1_STEP_PIN 2
    // The Y stepper pins
    #define STEPPER2_DIR_PIN 7
    #define STEPPER2_STEP_PIN 6

    // Define some steppers and the pins the will use
    AccelStepper stepper1(AccelStepper::DRIVER, STEPPER1_STEP_PIN, STEPPER1_DIR_PIN);
    AccelStepper stepper2(AccelStepper::DRIVER, STEPPER2_STEP_PIN, STEPPER2_DIR_PIN);

    on remet pas le numéro des pins à la fin ?

    AccelStepper stepper2(AccelStepper::DRIVER, STEPPER2_STEP_PIN2, STEPPER2_DIR_PIN3);

  • ça fonctionne pas , quand je compile j'ai une erreur :

    no matching function for call to 'AccelStepper::AccelStepper(AccelStepper::MotorInterfaceType, AccelStepper&, int, int)'

    et bas pas simple !

    j'ai avancé j'ai remplacé DRIVER par MotorInterfaceType ca avance plus loin mais j'ai un nouveau problème :euh:

    AccelStepper Xstepper (AccelStepper::MotorInterfaceType, Xstepper, StepPinX, DirPinX );

    'Xstepper' has not been declared, j'ai mal déclaré le Xstepper...

    il me faudrait un prof particulier, c'est galère .

  • j'ai solutionné mes erreurs des posts précédent:

    //définition Moteur X

    #define EnablePinX 38 // Driver X Activation du driver/pilote

    #define StepPinX 54 // Driver X Signal de PAS (avancement)

    #define DirPinX 55 // Driver X Direction

    //définition Moteur Y

    #define EnablePinY 56 // Driver Y Activation du driver/pilote

    #define StepPinY 60 // Driver Y Signal de PAS (avancement)

    #define DirPinY 61 // Driver Y Direction

    //définition Moteur Z

    #define EnablePinZ 62 // Driver Z Activation du driver/pilote

    #define StepPinZ 46 // Driver Z Signal de PAS (avancement)

    #define DirPinZ 48 // Driver Z Direction

    AccelStepper Xstepper (AccelStepper::DRIVER,StepPinX,DirPinX);

    AccelStepper Ystepper (AccelStepper::DRIVER,StepPinY,DirPinY);

    AccelStepper Zstepper (AccelStepper::DRIVER,StepPinZ,DirPinZ);


    et une nouvelle apparait:

    'virtual void AccelStepper::step(long int)' is protected within this context

    et en rouge

    {Zstepper.step(-10);} //drop claw in Z axis

    c'est pas très clair les erreurs et l'explication...

    sur la version d'origine, ça compile bien , mais sur la version ou j'ai modifié non .

    on dirait que c'est lié au mode AccelStepper

  • Tu as défini ça comme il faut.

    Mais tu ne peux pas utiliser de fonction qui sont "protected". Elles sont réservées pour le fonctionnement interne de la lib.

    Tu peux utiliser les autres qui sont publiques, comme par exemple :

    Zstepper.setSpeed(10);

    Zstepper.runSpeed();

    Si tu veux utiliser cette lib, il y a doc de référence ici : https://www.airspayce.com/mikem/arduino/AccelStepper/

    Et dans AccelStepper.h tu as au dessus de chaque fonction les explications de comme ça s'utilise.

  • Ah ok , je pensais que c’était lié au nouveau mode de pilotage des moteurs.

    Le programme est fait sur les anciennes fonctions c’est ça ?

    De la librairie qu’il utilisait avec les moteur unipolaires ?

    En gros je recherche les fonctions d’avant et je modifie avec la nouvelle lib que j’utilise.

    J’aurais pu faire autrement en utilisant son code sans modifier le programme ?

    Ou du fait d’avoir pris des moteurs bipolaires en pilotage step/dir je suis bien la bonne méthode ?

    Merci du coup de pouce ! Je me noyais dans la matrice là ! ;)

  • Non le programme utilise 2 types de contrôles : avec et sans contrôle de l'accélération. Le contrôle sans accélération se fait avec les classes Xstepper, etc.. et avec accélération c'est avec stepperX,...

    C'est un peu bizarre, mais il faudrait passer pas mal de temps à comprendre pourquoi il a fait ça. Moi si j'étais à ta place je repartirait de zéro.

    Commence par essayer de faire bouger simplement chaque axe, en implémentant les fins de course. Une fois que tu as validé les 3 axes, tu pourra commencer à attaquer la logique du gameplay.

  • Merci, c’est pas facile, mais oui rien n’empêche que j’essaie de partir de 0 au moins pour piloter les axes au bouton, c’est un bon entraînement.

    En parallèle je vais essayer de comprendre le programme existant et d’essayer de le modifier.

    Je dois câbler les moteurs, la carte …pour tester ça

  • j'ai suivi les conseils, pour apprendre , j'ai travaillé sur un prog neuf, en mettant petit à petit mes pins repéré pour la RAMP1.4, j'ai câblé un moteur, un écran , pour le moment c'est modeste, mais j'ai réussi a afficher des trucs sur l'écran, repérer les pinoches...

    je suis super content! ça parait pas grand chose , mais moi je suis sur une autre planète !

    prochaine étape piloter mes axes avec la manette !

    j'ai finalement commandé une platine écran Ramp1.4, bien pratique pour l'alim de l'écran, le contraste et le retro éclairage

    Module d'affichage d'unité LCD pour imprimante 3D, rampes d'écran LCD 2004 originales, panneau 1.4 LCD2004, bonne compatibilité, durabilité et stabilité | AliExpress

  • encore une question, je me rend compte qu'en fait il utilisais dans son programme un écran non pas 16x2 mais un écran qui a 4 lignes horizontale.

    est ce que 16X2 pour 2 lignes ? et le modèle à 4 lignes c'est un 16X4 ?

    du coup mon affichage semble incomplet , c'est ce qui m'a mis la puce à l'oreille !

    ça semble correspondre à ça:

    https://fr.aliexpress.com/item/100500156…611646911%22%7D

    lcd 12864 c'est 4 lignes ?

    ça semble être la même chose en connectique ou presque ?

    sinon ma question est comment faire la correspondance?

    le 2 ligne est trop petit , donc je vais utiliser celui du lien.

    autre question sur les librairie, je comprend pas trop quelle librairies j'ai ou pas .

    quand je sélectionne installé, c'est les bibliothèques installées sur le prog actuel ou en général ?

    merci d'avance

  • Pour le lien que tu donnes, c'est écrit dans la description: 20x4 lignes.

    Je ne connais pas cette référence d'écran. Pour la connectique il faut tout vérifier, je ne peux pas te dire comme ça.

    Les libraires sont stockées à plusieurs endroits avec l'ide Arduino :

    - ide\libraries : elles sont accessibles à toutes les cartes

    - ide\hardware\arduino\avr\libraries : ces librairies seront prises en priorité pour les cartes Arduino 8 bits AVR, dans Hardware tu as tous les noyaux et libs des cartes que tu installes par le board manager.

    - sketchbook location/libraries : comme le dossier ide/libraries

    Certaines libraires sont souvent spécifiques à certains micro-contrôleurs (quand ça accède au hardware, par ex SPI et I2C), d'autres vont marcher sur plusieurs cartes différentes et dans ce cas il faut les mettre dans ide\libraries ou user\sketchbook location.

    Le dossier "sketchbook location" est celui que tu configures dans les préférences de l'ide arduino, là où sont stockés les projets perso par défaut

  • Ok, je vais essayer d'approfondir ça, c'est pas encore clair pour moi.

    j'attend la réception de l'écran pour voir.

    merci.

    Pour l'avancement du prog:

    du coup j'ai réussi à modifier et faire correspondre toute les pins du prog a la Ramps1.4.

    j'ai câblé un écran 2 lignes et j'ai réussi a tester le fonctionnement via un petit prog

    j'attend un nouvel écran 4lignes pour tester le fonctionnement de ma modif de pinoches et voir si le prog fonctionne bien .

    Etienne, sans abuser de ta gentillesse

    j'ai une question par rapport au fonctionnement en accélération et en non accélération

    pour la définition en accélération on utilise 3 pins enable, step et dir

    mais comment on fait pour l'autre en non accélération ?

    il utilise 4 pins :

    Stepper Ystepper(stepsPerRevolution, 34,36,38,40);

    Stepper Xstepper(stepsPerRevolution, 27,29,31,33);

    Stepper Zstepper(stepsPerRevolution, 35,37,39,41);

    dans la doc ils indiquent:

    Functions

    • Stepper(steps, pin1, pin2) pin 1 pin 2 , ça correspond à quoi ? enable et DIR ? ou Dir et enable ?
    • Stepper(steps, pin1, pin2, pin3, pin4) idem là
    • setSpeed(rpm)
    • step(steps)

    Parameters

    steps: the number of steps in one revolution of your motor. If your motor gives the number of degrees per step, divide that number into 360 to get the number of steps (e.g. 360 / 3.6 gives 100 steps). (int)

    pin1, pin2: two pins that are attached to the motor (int)

    pin3, pin4: optional the last two pins attached to the motor, if it's connected to four pins (int)


    alors qu'en accélération 3pins


    //définition Moteur X

    #define EnablePinX 38 // Driver X Activation du driver/pilote

    #define StepPinX 54 // Driver X Signal de PAS (avancement)

    #define DirPinX 55 // Driver X Direction

    //définition Moteur Y

    #define EnablePinY 56 // Driver Y Activation du driver/pilote

    #define StepPinY 60 // Driver Y Signal de PAS (avancement)

    #define DirPinY 61 // Driver Y Direction

    //définition Moteur Z

    #define EnablePinZ 62 // Driver Z Activation du driver/pilote

    #define StepPinZ 46 // Driver Z Signal de PAS (avancement)

    #define DirPinZ 48 // Driver Z Direction

    //----------------Acceleration library definitions-------------------

    AccelStepper stepperX (AccelStepper::DRIVER,StepPinX,DirPinX);

    AccelStepper stepperY (AccelStepper::DRIVER,StepPinY,DirPinY);

    AccelStepper stepperZ (AccelStepper::DRIVER,StepPinZ,DirPinZ);

  • La lib stepper, il me semble, n'est pas prévue pour utiliser un driver mais pour piloter directement des ponts en H pour piloter les moteurs, alors que la lib AccelStepper peut faire les 2.

    Je me répète, je ne sais pas pourquoi dans le projet que t'as récupéré il utilise les 2, mais je n'aurai pas fait comme ça.

    A mon avis la lib AccelStepper peut tout faire.

    Je pense qu'il vaut mieux que tu essaies de comprendre comment faire ça comme il faut plutôt que de bricoler un code plutôt mal écrit qui n'est pas forcément adapté à ta version.

    Sauf si tu ne cherches pas à comprendre comment ça marche, mais ça m'étonnerai de toi :B

  • si si j'essaie de comprendre, justement je déchiffre ce qu'il a fait pour comprendre, ça m'aide de faire ça comme ça.

    du coup je vais corriger ou pas et faire mon truc.

    mais c'est bien plus facile dans ce sens là pour moi .

    je décode le pourquoi du comment.

    je me demande si c'est pas pour utiliser 2 types de moteur unipolaire et bipolaire et / ou pour utiliser aussi des driver, mais je suis pas sur.

    je suis vraiment novice, alors ça fait une base de travailler sur un prog qui marche et de le décortiquer entièrement .

  • Oui bien sur tu ne peux pas partir de zéro, mais parfois essayer de comprendre du mauvais code est une perte de temps.

    Je n'ai pas analysé en détail le code, mais il utilise les 2 libs sur les mêmes pins de moteurs à 4 fils, pas en mode driver.
    A partir du moment où tu sais lire une entrée numérique pour les fins de courses ou le joystick et piloter un moteur pap, tu a tout ce qu'il faut.

    Enfin tout dépends si tu veux juste faire marcher ce projet en essayant de bricoler un code bancal, ou si tu veux maitriser tout le code pour l'adapter comme il faut et le faire évoluer. Je ne juge pas, j'ai commencé comme tout le monde par un print "hello world".

    Mais il m'est arrivé très souvent d'utiliser des libs sans trop chercher les détails au début, pour finir par les réécrire entièrement tellement c'était inefficace et horrible à maintenir.

    Idem pour mon propre code d'ailleurs :B

  • oui je comprend, je n'ai effectivement aucune certitude sur la personne qui a fait le code, est il un novice comme moi, un pro ...

    je peux partir sur un truc pas terrible et effectivement 2 librairies sur les même pins c'est étrange, d'où ma remarque, peut être c'est prévu pour 2 modes de fonctionnement .

    j'attend les écrans pour voir ce que ça donne .

    je travail sur 2 prog, le miens et le siens et je test en vrai, pour aller plus loin il me faut l'écran.

  • je sais bien, mais comme je sais rien faire de vraiment concret je n'y arrive pas sans exemple

    j'ai lu une tonne d'exemple et rien ne correspond, en fait ça m'aide pas à comprendre.

    j'ai essayé pour avoir une base de prendre juste des morceaux pour piloter un moteur et ça marche pas.

    j'ai aussi pris un morceau de prog censé faire tourné le moteur, et rien ne se passe.

    du coup j'ai vraiment aucune base pour comprendre .

    je vais vérifier mon câblage moteur, si mon code est bon c'est le câblage peut être.