DIY - Machine à pince de fête foraine

Votez pour l'image du mois
  • salut,

    Cela fait longtemps que je pense à fabriquer une machine à pince de fête foraine, j'avais mis ce projet de côté pas faute de moyen et de solution abordable pour le réaliser.

    Aujourd'hui grâce à l'impression 3d, je vais pouvoir le réaliser, j'ai d'ailleurs bien commencé ce projet.

    je me suis mis donc à l'impression 3D, puis au dessin, progressivement je monte en compétence, ce nouveau projet me fait travailler nottament les assemblages/liaisons sous fusion, intéressant pour faire bouger un 6DOF en 3D :B

    la première étape, c'est la dessin des éléments, j'ai imaginé mon propre système, en m'inspirant de différente réalisation pro existante.

    j'ai essayé de faire simple, et de bien concevoir le projet.

    Il y aura des retouches et des corrections, déjà en cours par rapport à cette vidéo.

    Vous pouvez suivre l'avancement via des stories et des post sur Instagram

    Etape1 dessin/conception

    External Content youtu.be
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

    j'ai déjà lancé l'étape 2 de prototypage et d'impression:

    je rassemble les pièces en parallèle, j'attends encore des roulements, la visseries et d'autre éléments.

    j'aimerais fabriquer moi même l'électro aimant pour la pince, mais pas facile de trouver des infos sur le net.

    si vous avez des infos, je suis preneur ;)

    External Content youtu.be
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

    pour l'électronique, j'envisage d'utiliser une solution déjà existante et si j'y arrive, de l'adapter à mes besoins.

    l'idée serait d'utiliser un mixe des 2 solutions que j'ai trouvé sur le net:

    https://www.open-electronics.org/one-of-the-cut…o-claw-machine/

    https://create.arduino.cc/projecthub/-MM…-machine-0f26aa

    j'ai choisi les moteurs pas à pas, je vais donc adapter à ma solution mécanique, car je fabrique ma mécanique avec une motorisation pas à pas.

    j'ai une Mega 2560, une carte d'interface Ramps 1.4 , ainsi que les drivers A4988

    https://www.amazon.fr/gp/product/B07…0?ie=UTF8&psc=1

    https://www.amazon.fr/gp/product/B07…0?ie=UTF8&psc=1

    mon but est si c'est possible et que j'y arrive, de modifier le code pour tout bien piloter via cette interface et ces drivers.

    mais je suis nul en code Arduino, je vais donc essayé de m'y remettre, ça va être dur dur ....

    c'est la partie ou je suis le moins autonome, voir pas du tout.

    pas sur que j'y arrive, donc si vous avez envie de partager des petits coups de mains sur ce point ;)

    voilà vous savez tout ou presque ;)

  • Riton39 24 septembre 2021 à 15:02

    A changé le titre de la discussion du forum de “Machine à pince DIY” à “DIY - Machine à pince de fête foraine”.
  • Ah ah ! Toujours un plaisir de suivre tes posts , j'avoue que ça ne m'était jamais venue à l'idée ce genre de réalisation, ça doit pas être si évident . A quand une machine à barbe à papa Riton ?! :++:

    Membre depuis le 10/10/2012

    Volant RFR Wheel VSD, Simu 2 dof scn5 Prosimu, Pédalier home made OBP, / Valve Index / Triple 32"

    Win10, I7 8700k, Gigabyte 3080 OC

  • et bas mine de rien oui ya pas mal de pièces finalement, quand tu passe partout, entre le meuble, la mécanique.... ça fait des éléments à dessiner et à cogiter :

    ce qui me fait plus peur c'est le code Arduino.

    mais ce qui me rassure c'est que ça fonctionne déjà et que j'ai un code dispo.

    il faudra à mon avis adapter les entrée/sortie du code existant à la carte Ramps 1.4.

    j'ai d'autres projet, mais pas une machine à barbe à papa :B

  • c'est bizarre comme envies mais c'est super d'avoir la possibilité de les concrétiser et techniquement intéressant. Quand j'étais gamin je détestais ça, c'était une pompe à fric pour des pauvres peluches...et en plus tout le monde disait que c'était truqué :hihihi:

    636.png

    «L’aérodynamique, c’est pour les personnes qui ne savent pas construire de moteurs»

    Enzo FERRARI

  • Il y a un petit soucis dans la conception de ta pince. Elle se ferme trop ! Le but de ses machine c'est que tu n'attrapes pas la peluche ! :hihihi:

  • Petit point du design de mes pièces, je suis actuellement dans l'impression des pièces, je vais pas tarder de tester la mécanique.

    External Content youtu.be
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

  • La première étape se termine, du design à l’impression 3D, tout est imprimé et fonctionnel, pour aller plus loin maintenant, je vais attaquer l’électronique et la prog.

    https://www.instagram.com/reel/CU0HptrlR…edium=copy_link

    External Content www.instagram.com
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

  • j'ai fais une petite vidéo Youtube pour ceux qui n'ont pas Instagram pour suivre.

    External Content youtu.be
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

    je vais attaquer la Prog, j'ai jamais réussi à m'y mettre vraiment, quand on part de 0 c'est hyper dur ...

    bon je suis partis de 0 en 3D, j'ai finalement réussi à sortir des choses, j'espère y arriver, mais je trouve que c'est quand m^me plus dur de s'y mettre .

    du coup je part sur de l'existant, j'espère pouvoir trouver des repères et comprendre en travaillant sur une base , de l'existant, c'est moins flou .

    du coup j'ai pris le soft ici:

    http://www.retrobuiltgames.com/the-build-page…o-claw-machine/

    la V081

    si ya des volontaires pour m'aider ? je suis preneur.

    j'aimerais utiliser un shield Ramps 1.4. et les drivers pour faciliter le câblage, mais je sais pas trop si je vais arriver a modifier le code pour que ça fonctionne .

  • Sérieux , c'est génialement bien fait ! :o la conception est top !

    Membre depuis le 10/10/2012

    Volant RFR Wheel VSD, Simu 2 dof scn5 Prosimu, Pédalier home made OBP, / Valve Index / Triple 32"

    Win10, I7 8700k, Gigabyte 3080 OC

  • le code:

    j'ai déjà un soucis avec la date ! :B

    ça commence fort, quand on part de 0 , on part de 0 !

    v0.81

    Claw machine game with logic to accept coin, wait for player start and run game

    gantry can only take one input at a time. (IE no diagonal movement is possible).

    (c) 2015 Ryan Bates, RetroBuiltGames.com

    Retrobuiltgames.com

    */

    const int buttonForward = 31;

    const int buttonBackward = 33;

    const int buttonLeft = 35;

    const int buttonRight = 37; /*

    const int buttonUp = 39;

    const int buttonDown = 41;

    const int buttonStepperRPMspeed = 43;

    const int buttonCoin = 45;

    const int buttonStart = 47;

    const int servoPower = 8;

    const int ledPin = 12;

    const int ledPinCoin = 11;

    //const int x=0; //x cursor position

    //const int y=0; // y cursor position


    int StepperRPM = 60; // default speed and hold variable

    int StepperRPM_FAST = 90;

    int StepperRPM_SLOW = 60;

    #include <Stepper.h>

    #include<Time.h>

    int ledStateStart = LOW;

    int ledStateCoin = LOW;


    int buttonStateForward = HIGH;

    int buttonStateBackward = HIGH;

    int buttonStateLeft = HIGH;

    int buttonStateRight = HIGH;

    int buttonStateUp = HIGH;

    int buttonStateDown = HIGH;

    int buttonStateStepperRPMspeed = HIGH;

    int buttonStateCoin = HIGH;

    int buttonStateStart = HIGH;

    long intervalStart = 500; //rate of blink for 'insert coin' / 'game over'

    long intervalIdle = 2000; // rate of blink for 'push start to begin'

    long previousMillis = 0;

    int y=0;

    int x=0;

    const int stepsPerRevolution = 200;

    Stepper Ystepper(stepsPerRevolution, 22,24,26,28);

    Stepper Xstepper(stepsPerRevolution, 30,32,34,36);

    Stepper Zstepper(stepsPerRevolution, 38,40,42,44);

    #include <Servo.h>

    Servo myservo; // create servo object to control a servo

    int potpin = 0; // analog pin used to connect the potentiometer

    int val;

    unsigned int timelimit = 5; //amount of time player can play claw machine

    #include<LiquidCrystal.h>

    LiquidCrystal lcd (7,6,5,4,3,2);

    void setup() {

    setTime(01,01,00,9,9,1999); //(HH,MM,SS,Day, Month, Year)

    lcd.begin(20,4);


    pinMode(buttonForward, INPUT);

    pinMode(buttonBackward, INPUT);

    pinMode(buttonLeft, INPUT);

    pinMode(buttonRight, INPUT);

    pinMode(buttonUp, INPUT);

    pinMode(buttonDown, INPUT);

    pinMode(buttonStepperRPMspeed, INPUT);

    pinMode(buttonCoin, INPUT);

    pinMode(buttonStart, INPUT);

    pinMode(ledPin, OUTPUT);

    pinMode(ledPinCoin, OUTPUT);

    pinMode(servoPower, OUTPUT);


    //enable intermal pull ups. Note all functioning logic must trigger low.

    digitalWrite(buttonForward, INPUT_PULLUP);

    digitalWrite(buttonBackward, INPUT_PULLUP);

    digitalWrite(buttonLeft, INPUT_PULLUP);

    digitalWrite(buttonRight, INPUT_PULLUP);

    digitalWrite(buttonUp, INPUT_PULLUP);

    digitalWrite(buttonDown, INPUT_PULLUP);

    digitalWrite(buttonStepperRPMspeed, INPUT_PULLUP);

    digitalWrite(buttonCoin, INPUT_PULLUP);

    digitalWrite(buttonStart, INPUT_PULLUP);

    digitalWrite(servoPower, LOW); //default servo power to be OFF

    digitalWrite(ledPin, LOW);

    digitalWrite(ledPinCoin, LOW);

    myservo.attach(9); //

    }

    void loop() {


    //-----------Game Idle -------------------

    buttonStateCoin = digitalRead(buttonCoin);

    unsigned long currentMillis = millis(); // check to see if it's time to refresh screen


    if(currentMillis - previousMillis > intervalIdle) {

    previousMillis = currentMillis; // save the last time of cycle execution

    if (y == 0) {

    y= y+1; x=x+1; // add to the y cursor position

    lcd.clear();

    lcd.setCursor(5,y);

    lcd.print("GAME OVER");

    lcd.setCursor(0,y+1);

    lcd.print("Insert $0.25 to Play");

    lcd.setCursor(0,y+1); }


    else{

    lcd.clear();

    lcd.setCursor(5,y+1);

    lcd.print("GAME OVER");

    lcd.setCursor(0,y);

    lcd.print("Insert $0.25 to Play");

    lcd.setCursor(0,3);

    y = y-1; x=x-1; } }


    if ( second()== timelimit ) {

    lcd.clear();

    lcd.setCursor(2,1);

    lcd.print ("Time Expired :(");

    myservo.write(0); delay(500); //release claw

    digitalWrite(servoPower, LOW); // Turn OFF servo power

    }


    //-----------Coin Accepted-------------------


    if (buttonStateCoin == LOW) //if a quarter is inserted

    { lcd.clear(); // wipe screen

    do {unsigned long currentMillis = millis();

    lcd.setCursor(0,0);

    lcd.print("Credit: $0.25");

    lcd.setCursor(0,1);

    lcd.print("Push Start to Begin");

    lcd.setCursor(0,2);

    lcd.print("Good luck!"); //}

    if(currentMillis - previousMillis > intervalStart) {

    previousMillis = currentMillis; // save the last time you blinked the LED

    if (ledStateStart == LOW) // if the LED is off turn it on and vice-versa:

    ledStateStart = HIGH;

    else

    ledStateStart = LOW;

    digitalWrite(ledPin, ledStateStart); }


    //----wait for "START" -------------------

    buttonStateStart = digitalRead(buttonStart); //wait for player to push start

    } while (buttonStateStart == HIGH); // while start button is not pressed

    runGame(); //if start is pushed exit while loop and full game starts

    }


    }

    //-------------start of subroutine sections-------------

    void runGame(){


    digitalWrite(ledPin, LOW); //turn blinking Start button LED off

    setTime(01,01,00,9,9,1999); // reset second to valid game play

    lcd.clear(); // wipe screen

    digitalWrite(servoPower, HIGH); //enable servo Power


    //-------------------start of gameplay ------------------------------

    while (second() <timelimit && year() ==1999) {

    lcd.setCursor(3,0);

    lcd.print("Time Remaining:");

    lcd.setCursor(8,2);

    lcd.print(second());

    lcd.setCursor(10,2);

    lcd.print("/"); lcd.print(timelimit);


    buttonStateForward = digitalRead(buttonForward);

    buttonStateBackward = digitalRead(buttonBackward);

    buttonStateLeft = digitalRead(buttonLeft);

    buttonStateRight = digitalRead(buttonRight);

    buttonStateUp = digitalRead(buttonUp);

    buttonStateDown = digitalRead(buttonDown);

    buttonStateStepperRPMspeed = digitalRead(buttonStepperRPMspeed);


    //----------Stepper Speed toggle-----------------

    Ystepper.setSpeed(StepperRPM);

    Xstepper.setSpeed(StepperRPM);

    Zstepper.setSpeed(100);


    if (buttonStateStepperRPMspeed == LOW) {

    StepperRPM = StepperRPM_FAST; }

    else { StepperRPM = StepperRPM_SLOW; }


    //------------------X Axis-------------------------------

    while (digitalRead(buttonLeft) == LOW &&

    digitalRead(buttonForward)== HIGH && digitalRead(buttonBackward)== HIGH ){

    Xstepper.step(25);

    lcd.setCursor(8,2);

    lcd.print(second());

    if (second() >= timelimit)

    break; } // end the game without this player can hold directon and

    //the loop will skip over the timelimit check

    while (digitalRead(buttonRight) == LOW &&

    digitalRead(buttonForward)== HIGH && digitalRead(buttonBackward)== HIGH ) {

    Xstepper.step(-25);

    lcd.setCursor(8,2);

    lcd.print(second());

    if (second() >= timelimit)

    break; }


    digitalWrite(38,LOW); //disables hold (no current supplied to stepper when idle)

    digitalWrite(40,LOW);

    digitalWrite(42,LOW);

    digitalWrite(44,LOW);


    //-------Y Axis------------------------------------------

    while (digitalRead(buttonForward) == LOW

    && digitalRead(buttonRight) == HIGH && digitalRead(buttonLeft) == HIGH) {

    Ystepper.step(25);

    lcd.setCursor(8,2);

    lcd.print(second());

    if (second() >= timelimit)

    break; }

    while (digitalRead(buttonBackward) == LOW

    && digitalRead(buttonRight) == HIGH && digitalRead(buttonLeft) == HIGH ) {

    Ystepper.step(-25);

    lcd.setCursor(8,2);

    lcd.print(second());

    if (second() >= timelimit)

    break; }

    digitalWrite(22,LOW); //disables hold (no current supplied to stepper when idle)

    digitalWrite(24,LOW);

    digitalWrite(26,LOW);

    digitalWrite(28,LOW);


    //--------------Z axis------------------------------------

    while(digitalRead(buttonUp) == LOW) {

    Zstepper.step(50);

    lcd.setCursor(8,2);

    lcd.print(second());

    if (second() >= timelimit)

    break; }

    while (digitalRead(buttonDown) == LOW) {

    Zstepper.step(-50);

    lcd.setCursor(8,2);

    lcd.print(second());

    if (second() >= timelimit)

    break; }

    digitalWrite(30,LOW); //disables hold (no current supplied to stepper when idle)

    digitalWrite(32,LOW);

    digitalWrite(34,LOW);

    digitalWrite(36,LOW);


    //----------------Claw servo------------------------------------

    val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)

    val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)

    myservo.write(val); // sets the servo position according to the scaled value

    delay(15); // wait for the servo to get there

    //------------------Print Time Expire--------------------


    }


    } // master end

  • je viens chercher de l'aide, j'essaie de faire correspondre un programme avec un shield RMP 1.4 sur Mega2560 et j'ai bien du mal à comprendre les correspondance de pins.

    par exemple dans mon prog j'ai ça :

    //----------------NonAcceleration library definitions-------------------

    const int stepsPerRevolution = 200;

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

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

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


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

    AccelStepper stepperY(AccelStepper::FULL4WIRE, 34,36,38,40);

    AccelStepper stepperX(AccelStepper::FULL4WIRE, 27,29,31,33);

    AccelStepper stepperZ(AccelStepper::FULL4WIRE, 35,37,39,41);

    et sur le net je trouve ça pour la Ramps

    le nombre de pin correspond pas , avez vous une piste a me donner ?

  • Merci, mais je suis tellement nul et novice que j’ai bien du mal à comprendre ton aide …

    Je voulais pour cette raison adapter le programme que j’ai en modifiant "juste " les entrées /sorties pour les faire coller au shield Ramps 1.4.

    Et ça et bien c’est déjà pas si simple pour moi .

    Je comprend pas les numéros de pins dans le prog, ça semble pas correspondre aux pins de la carte.

    par exemple, dans la doc:

    https://github.com/MarlinFirmware/Marlin/issues/9055

    les case noir avec les pattes ne correspondent pas aux pattes de la Mega, si je prend D3 D2 D14 D15 D18 D19 , c'est les fins de course, et bien ça correspond pas a la carte Mega ou alors je comprends pas , pourtant les fin de courses devraient être sur les Pins digital de la Mega

    c'est juste un exemple pour les fins de course.

    pour modifier le Prog que j'ai j'aimerais donc aiguiller les pins de mon prog vers les bon éléments de la Ramps 1.4

    j'aurais voulu trouver la corespondance, mais sinon je vais tout tester au multimètre .

    Edit:

    en fait si , c'est que ils utilisent les PWM en digital pour les fin de course . D3 D2 D14 D15 D18 D19

    je vais continuer d'apprendre !

    ya plus qu'a trouver ou se branche les drivers A4988 sur l'Arduino via la Ramp 1.4 et de faire correspondre modifier le prog en fonction

    Etienne

    je viens de comprendre qu'il utilise des moteur unipolaire et que moi j'ai des moteur bipolaires.

    du coup je comprend ce que tu me disais, e,n fait ça va pas fonctionner sauf si je change le mode de pilotage avec ton exemple.

  • aprés recherche sur le net, j'ai trouvé un exemple:

    j'ai repéré mes pins sur la Ramp 1.4, je vais tester !

    // --- Commande d'un StepStick/Driver A4988 ----------------------

    // A4988_Test.ino

    //

    // Commande d'un moteur pas-à-pas à l'aide d'un pilote A4988 avec

    // Arduino

    #define pinEnable 6 // Activation du driver/pilote

    #define pinStep 9 // Signal de PAS (avancement)

    #define pinDir 8 // Direction


    void setup(){

    Serial.begin(9600);

    Serial.println("Test A4988");

    pinMode( pinEnable, OUTPUT ); // Y moteur Ramp 1.4

    pinMode( pinDir , OUTPUT ); // Y moteur Ramp1.4

    pinMode( pinStep , OUTPUT ); // Y moteur Ramp 1.4

    }

    void loop(){

    int i = 0;

    digitalWrite( pinDir , HIGH); // Direction avant

    digitalWrite( pinStep , LOW); // Initialisation de la broche step

    // Avance de 200 pas

    for( i=0; i < 200; i++){

    Serial.println( i );

    digitalWrite( pinStep, HIGH );

    delay( 10 );

    digitalWrite( pinStep, LOW );

    delay( 10 );

    }

    // Changer de direction

    digitalWrite( pinDir , LOW); // Direction avant

    // Refaire 200 pas dans l'autre sens

    for( i=0; i < 200; i++){

    Serial.println( i );

    digitalWrite( pinStep, HIGH );

    delay( 1 );

    digitalWrite( pinStep, LOW );

    delay( 1 );

    }

    // Pas de step et pas d'ordre...

    // l'axe du moteur est donc bloqué

    Serial.println("Axe bloqué + attendre 5 sec");

    delay( 5000 );

    // déblocage de l'axe moteur

    Serial.println("Deblocage axe");

    digitalWrite( pinEnable, HIGH ); // logique inversée

    // Fin et blocage du programme

    // Presser reset pour recommander

    Serial.println("Fin de programme");

    while( true );

    }

  • Oui il vaut mieux que tu partes comme ça, avec un exemple simple, surtout qu'avec ce projet tu n'as pas forcément besoin de profils d'accélération pour les steppers (tu pourra y passer ensuite avec la lib accelStepper).

    C'est l'occasion de te mettre à la programmation. ça va te prendre du temps, et c'est pas facile au début. Mais avec tout ce que tu as fait en DIY, je suis sur que tu vas y arriver, et ça va t'ouvrir énormément de possibilités. Avec la créativité que tu as, c'est dommage d'être bloqué à cause de ça.

  • Je le demande si c’est finalement un bon choix la ramp 1.4 je sais pas si je vais avoir accès facilement au autres pins pour brancher les commandes, joystick… un shield different aurait peut-être été plus lus adapté, un shield CNC …

    Un projet est toujours une bonne motivation, mais partir de 0 , c’est chaud !

    J’espère y arriver, c’est pas gagné, la mécanique est terminé, ce serait dommage de pas faire ce programme !