Auteur Sujet: Réalisation bateau pirate forain  (Lu 1082 fois)

yann14

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Réalisation bateau pirate forain
« le: décembre 05, 2024, 01:08:03 pm »
Bonjour à tous
Je suis nouveau et débute sur la programmation.

J'ai acheté des carte Uno (clone) et des servomoteurs TowerPro Micro Servo 9g SG90

J'ai réussi à programmer la carte après bien des péripéties !!!

Je cherche à réaliser un programme afin d'avoir un mouvement fluide de balancier partant d'une position initiale 90° (axe du bras du bateau) et faisant balancer ce dernier en augmentant les angles de 10° à chaque fois pour revenir à sa position initial en faisant les angles inverses à la fin.

Egalement faire une pause de 1 minutes entre chaque tours de manège.


A l'heure actuelle, j'ai bien réussi à réaliser un mouvement balancier mais le servo se désaxe et ne retrouve jamais sa position d'origine.

Pour information c'est une maquette en playmobil qui fait 700gr

Merci beaucoup pour votre aide qui va m'ettre précieuse étant sur la reproduction d'un parc d'attractions

Bien à vous

Yann

bk4nt

  • Full Member
  • ***
  • Messages: 105
    • Voir le profil
Re : Réalisation bateau pirate forain
« Réponse #1 le: décembre 05, 2024, 01:21:54 pm »
700 grammes, c'est lourd selon la mécanique réalisée.

Le petit servo fonctionne comme souhaité, il revient à chaque fois à son origine sans le bateau raccordé?

yann14

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : Réalisation bateau pirate forain
« Réponse #2 le: décembre 05, 2024, 01:27:07 pm »
non c'est là mon problème

J'ai testé 2 programmes différents

Programme 1

#include <Servo.h>

Servo servoMotor;

void setup() {
  // put your setup code here, to run once:
servoMotor.attach(9);
servoMotor.write(0);
}

void loop()
{
 
servoMotor.write(90);
delay (1000);
servoMotor.write(95);
delay (1000);
servoMotor.write(85);
delay (1000);
servoMotor.write(100);
delay(1000);
servoMotor.write(85);
delay (1000);
servoMotor.write(100);
delay (1000);
servoMotor.write(80);
delay (1000);
servoMotor.write(105);
delay (1000);

}



Programme 2

#include <Servo.h>
 
Servo monServo;
int vitesse;
int angle;
 
const int angleMin  = 1250;
const int angleMax = 1750;
 
/*
 * La fonction setup() est exécutée 1 fois
 * au démarrage du programme
 */
void setup()
{
    monServo.attach(9);
    angle = angleMin;
    vitesse = 1;
}
 
/*
 * La fonction loop() est exécutée
 * répétitivement
 */
void loop()
{
    monServo.writeMicroseconds(angle);
    /* calcule le nouvel angle */
    angle = angle + vitesse;
 
    if (angle > angleMax) {
        /*
         * le nouvel angle dépasse le maximum
         * on le recale au maximum et on inverse la vitesse
         */
        angle = angleMax;
        vitesse = -1;
    }
    else if (angle < angleMin) {
        /*
         * le nouvel angle dépasse le minimum
         * on le recale au minimum et on inverse la vitesse
         */
        angle = angleMin;
        vitesse = 1;
    }
    delay(3);
}

Je joint des videos de ce que j'obtiens
« Modifié: décembre 05, 2024, 08:23:49 pm par bobyAndCo »

yann14

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : Réalisation bateau pirate forain
« Réponse #3 le: décembre 05, 2024, 01:40:40 pm »
je ne peux malheureusement pas joindre de videos trop volumineux

CATPLUS

  • Sr. Member
  • ****
  • Messages: 437
    • Voir le profil
Re : Réalisation bateau pirate forain
« Réponse #4 le: décembre 05, 2024, 01:53:48 pm »
Bonjour

Quel rapport avec le train?
Best Regards

bk4nt

  • Full Member
  • ***
  • Messages: 105
    • Voir le profil
Re : Réalisation bateau pirate forain
« Réponse #5 le: décembre 05, 2024, 02:17:50 pm »
Ce sont des programmes trop simples, qui font  bouger le servo sans l'initialiser à une position précise ni le repositionner à la valeur initiale quand il doit s'arrêter. Si vous l'interrompez en éteignant l'arduino, le servo sera positionné au hasard...

Faites un test en ajoutant un interrupteur (état 0 ou 1) et une initialisation du servo à 90°:
- dans setup, initialiser le servo à 90°, suivi d'un delay pour lui laisser le temps de se positionner

Dans loop, un if pour prendre en compte l'état de l'interrupteur:
- 0, ne rien faire
- 1 bouger, exécuter du code, un cycle, jusqu'à un retour à 90°

chris_bzg

  • Sr. Member
  • ****
  • Messages: 325
    • Voir le profil
Re : Réalisation bateau pirate forain
« Réponse #6 le: décembre 07, 2024, 10:45:52 am »
Bonjour à tous
Je suis nouveau et débute sur la programmation.

J'ai acheté des carte Uno (clone) et des servomoteurs TowerPro Micro Servo 9g SG90

J'ai réussi à programmer la carte après bien des péripéties !!!

Je cherche à réaliser un programme afin d'avoir un mouvement fluide de balancier partant d'une position initiale 90° (axe du bras du bateau) et faisant balancer ce dernier en augmentant les angles de 10° à chaque fois pour revenir à sa position initial en faisant les angles inverses à la fin.

Egalement faire une pause de 1 minutes entre chaque tours de manège.


A l'heure actuelle, j'ai bien réussi à réaliser un mouvement balancier mais le servo se désaxe et ne retrouve jamais sa position d'origine.

Pour information c'est une maquette en playmobil qui fait 700gr

Merci beaucoup pour votre aide qui va m'ettre précieuse étant sur la reproduction d'un parc d'attractions

Bien à vous

Yann

Votre servomoteur n'est déjà pas assez puissant pour mouvoir votre maquette ; il faudrait en acheter un un peu plus musclé et lui prévoir une alimentation à part.

La maquette playmobile pèse 700 g, mais ce qui compte, c'est de savoir si elle est bien équilibrée autour de son axe (cela m'étonnerait) et si l'effort à faire pour déplacer le bateau est important. Cela permettra de choisir le bon servo.

Mais ce choix n'a pas de rapport avec le programme. Vous passez d'une position à une autre, ce qui doit entrainer des mouvements saccadés et brutaux pour votre petit servomoteur. Il faudrait inclure le mouvement au sein d'une boucle qui va d'une position départ à une position arrivée grâce à la fonction servo.write. Et vous pouvez changer les positions départ et arrivée et même la vitesse d'exécution d'une boucle à l'autre. Cela vous donnera plus de fluidité et sera moins brutal pour le servo.

Pour la boucle, vous avez le choix for ou while. Commencez avec for, cela devrait fonctionner.

Et pour répondre à CATPLUS, les fêtes foraines sont légions sur nos réseaux, donc cela a bien un rapport avec le train, même si le réseau est en lego. J'espère que vous arriverez à exploiter ce que je vous ai dit. Au besoin, on pourra en reparler.  ;)