Portique de dépot

Bonjour a tous. je fais du modélisme ferroviaire échelle H0 et je souhaiterais, pour animer mon réseau faire se déplacer un portique porte container, quelque chose de simple.

  1. Un train arrive au dépôt, excite un I.L.S qui active la monté du pont qui lève une charge a l'aide d'un servomoteur SG90 a rotation continu.
  2. la charge est en haut (temps de fonctionnement du servo), le pont se déplace pendant un certain temps et donc une certaine longueur.
  3. Le pont redescend la charge au sol, temps de fonctionnement.
  4. le train repart et repasse devant l'I.L.S, ce qui fait faire les manœuvres inverse au pont.
    Je débute avec l'Arduino, je n'arrive pas a faire que le servo 2 démarre a la fin du travail du moteur 1.
    Je ne trouve pas comment réduire la vitesse des deux servo.
    Avez vous quelques piste.
    Merci.

Jean marc

Pour bien débuter avec l’arduino, un bon point de départ c’est de lire les tutos d’eskimon et de lire le tuto de base sur le C++ de Zeste de savoir

c’est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

Bonjour Jean-Marc

Utilises la bibliothèque VarSpeedServo.h, qui permet, entre autres, de régler la vitesse du servo.

Cordialement
jpbbricole

Attends tu la fin du travail du moteur 1 avant de déclencher le moteur 2?

Le plus simple pour avoir une réponse réellement adapté à ton cas, c'est de nous fournir ton code.

Aux conseils de J-M-L, j'ajoute, pour tout ce qui touche aux réseaux miniatures, le site de locoduino.

Bonjour. Oui j'attend que le 1 est fini de travailler avant d'engager le 2.
Merci.
Jean Marc

Donc ca ne peut que marcher :slight_smile:
Et surtout comment tu peux alors avoir le servo 2 qui ne démarre par après le travail du moteur 1?

Si tu veux vraiment de l'aide, il va je pense qu'a un moment tu nous aides à t'aider.
Car pour l'instant je ne vois pas trop l'aide que tu veux que l'on t'apporte ?

Bonjour.
Je ne sais pas comment diminuer la vitesse de mes servos 360°.
Quelqu'un ma dis de prendre la bibliothèque VarSpeedServo.h.
Elle ne fait pas partie de celles inclues.
merci

Bonjour marco58

Montre nous ton programme ou du moins la partie qui commande tes servo 360°.

A+
Cordialement
jpbbricole

La commande est inspirée de celle des vrais servomoteur.
Il faut utiliser la fonction qui commande en temps, en millis secondes et surtout pas ”l’approximation en degrés ”. Elle n’aurait aucun sens ici.
Tu as la valeur centrée qui corespond a l’arret du moteur.
Si tu indiques un temps supérieur à cette valeur le moteur tourne dans un sens.
Si tu indiques un temps inférieur à cette valeur le moteur tourne dans l’autre sens.
Plus tu forces une valeur éloignée de la valeur corespondant à l’arret, plus le moteur tourne vite.

Je ne suis pas sûr qu’elle gère les servo 360°. Ce ne sont pas des moteurs dont on définit un angle cible, des qu’on les active ils se mettent à tourner dans un sens ou l’autre.

Bonjour marco58

Pour régler la vitesse d'un servo 360°, il est plus pratique de travailler avec des micro secondes plutôt qu'avec un angle.
Ainsi, de base, un servo est au minimum avec 1000 uSec. et au maximum avec 2000 uSec.
De par là, ton servo tournera au maximum de sa vitesse en sens antihoraire avec 1000 uSec. et au maximum dans le sens horaire avec 2000 uSec. et sera donc arrêté avec 1500 uSec. En jouant avec ces uSec. tu peux faire varier sa vitesse.

Un exemple où le servo tourne au maximum en arrière, à mi vitesse en avant, pleine en vitesse avant puis est arrêté et ainsi de suite:

#include <Servo.h>

Servo myservo;
const int servoPin = 10; // Branchement du servo

void setup()
{
	myservo.attach(servoPin); // Démarrer le servo
}

void loop()
{
	myservo.write(1000); // Sens antihoraire maximum
	delay(2000);
	myservo.write(1750); // Sens horaire mi vitesse
	delay(2000);
	myservo.write(2000); // Sens horaire pleine vitesse
	delay(2000);
	myservo.write(1500); // Arrêt
	delay(2000);
}

A+
jpbbricole

C'est une norme, les normes ont de variantes....surtout avec les petits servos de modélisme.

Cela reste néanmoins un bon point de départ :grinning_face:

@marco58
Les servos360 ne sont que des moteurs à courant continu avec une commande pour le sens de rotation et la vitesse copiée sur celle des vrais servomoteurs.

Le coté embrouilleur est que le signal de commande est le même, mais que la commande ne fait pas la même chose.

La bibliothèque Servo livrée avec l'IDE est parfaitement fonctionnelle, inutile de chercher ailleurs.

Le signal de commande est de la PWM de fréquence de récurrence 50 Hz, soit de période 20 ms.

La norme dit que temps du "1" varie entre 1ms et 2 ms.
Mais pour les servo de modélisme, comme ceux que tu as, la bibliothèque Servo de l'IDE fait varier le temps de 0,544 ms à 2,4 ms le point milieu étant toujours "théoriquement" à 1,5 ms.

Mes petits conseils :
Faire un montage pour tester les servos360 que tu as entre les mains.
En premier, je chercherai la valeur du point milieu qui stoppe le moteur.
Elle peut varier avec les composants qui entrent dans la fabrication du servo
En second je vérifierai les valeurs min et max.

Cela ne te prendra pas longtemps, et je pense que tu gagneras du temps pour la suite.

NOTE IMPORTANTE :
Tu n'as pas donné les informations exigées dans le message d'acueil.
Quelle est la carte que tu utilises ?

C'est hyper important parce que le code de la bibliothèque servo ne sera pas le même si le micro est celui de la UNO/nano, des cartes arduino MKR ou des cartes ESP32.

Dans un cas la bibliothèque sera sous la responsabilité de la société Arduino SA, dans l'autre cas elle sera sous la responsabilité de la société Espressif.
Il peut y avoir des petites différences

Bonjour 68tjs.
Merci pour les infos.
Ma carte est une Arduino UNO R3 originale.

Merci.

Jean Marc