LOCODUINO
Parlons Arduino => Vos projets => Discussion démarrée par: simonp19 le octobre 02, 2017, 10:34:44 am
-
Bonjour,
Je suis novice en Arduino. j'ai fait quelques essais de leds clignotantes et servomoteurs. je possède un réseau de train échelle N. Actuellement tout est en numérique avec pilotage su PC via Windigipet 2015. Je souhaite faire fonctionner mon passage a niveau avec un servomoteur pour donner un mouvement plus réaliste. Le mouvement actuel est trop rapide. L'ordre au PAN est donné via un décodeur Littfinski SDEC4. Les interfaces utilisées sont des Can Digital Bahn.Le pan est un Viessmann 5900 avec
Actuellement, mes essais avec servomoteurs consistent à avoir un mouvement continu de rotation dans un sens puis dans l'autre sens.
Si vous pouvez me donner des conseils pour avancer, j'en serai très heureux.
Bien à vous
-
La maitrise de la vitesse de positionnement des servos a été évoquée sur le web : en faisant la recherche avec "arduino ralentir servomoteur"
on tombe entre autres sur :
http://www.robot-maker.com/forum/topic/10815-defis-comment-commander-la-vitesse-dun-servomoteur-avec-arduino/
Pour la mise en œuvre d'un servo pour un passage à niveau voir l'article et connexes :
http://www.locoduino.org/spip.php?article194
Le programme pour ATTiny fonctionne sans modification sur arduino.
Et cet article d'un montage pas assez documenté (il semble utiliser un ATTiny45) qui s'intercale avant le servo sans aucune autre modification :
http://www.pobot.org/servomoteur-ralenti-AVR.html
-
La maitrise de la vitesse de positionnement des servos a été évoquée sur le web : en faisant la recherche avec "arduino ralentir servomoteur"
on tombe entre autres sur :
http://www.robot-maker.com/forum/topic/10815-defis-comment-commander-la-vitesse-dun-servomoteur-avec-arduino/
Ou utiliser simplement la bibliothèque SlowMotionServo que j'ai faite :
https://git.framasoft.org/locoduino.org/SlowMotionServo
-
La bibliothèque de Jean-Luc marche très bien, je l'ai essayée.
Par contre je serais très intéressé par le couplage mécanique entre le servo et chaque bras du passage à niveau en N : c'est tellement petit et fragile que je cherche toujours les solutions possibles.
Cordialement
Dominique
-
Ou utiliser simplement la bibliothèque SlowMotionServo que j'ai faite :
https://git.framasoft.org/locoduino.org/SlowMotionServo
Effectivement on a ce qu'il faut sur Locoduino, que je découvre peu à peu ! Merci Jean-Luc.
-
Merci pour votre aide.
J'ai une carte mega 2560 et je recois ce message
exit status 1
Erreur de compilation pour la carte Arduino/Genuino Mega or Mega 2560
Dans mon premier message j'ai précisé que j'étais un novice avec arduino
-
Il doit y avoir quelque chose au dessus avec le numéro de ligne ou se situe l’erreur
-
En bas de l'IDE Arduino, il y a un bouton 'Recopier les messages d'erreur' qui permet de copier le rapport de compilation, et de le coller dans un message de forum...
'exit status 1', c'est juste pour lui une manière de dire 'Ton truc va pas, je sors !' Mais dire que ça va pas, ça ne suffit pas !
-
Arduino : 1.8.2 (Windows 7), Carte : "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
C:\Users\PATRICE\Documents\Arduino\sketch_oct02c\sketch_oct02c.ino:2:29: fatal error: SlowMotionServo.h: No such file or directory
#include <SlowMotionServo.h>
Est ce la bonne procedure avec le message? ^
compilation terminated.
exit status 1
Erreur de compilation pour la carte Arduino/Genuino Mega or Mega 2560
Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.
-
SlowMotionServo.h: No such file or directory
Il ne trouve pas la bibliothèque.
Est elle correctement installée ? Le répertoire porte-t-il le nom de SlowMotionServo ?
-
Voila ce que j'obtiens :
#include <Servo.h>
#include <SlowMotionServo.h>
SMSSmooth myServo; /* Servo with linear trajectory */
float target = 0.0;
void setup() {
myServo.setInitialPosition(target);
myServo.setMinMax(700, 2000);
myServo.setPin(9); /* the servo is connected to pin 3 */
}
void loop() {
if (myServo.isStopped()) {
target = 1.0 - target;
myServo.goTo(target);
}
SlowMotionServo::update();
}
-
Voila ce que j'obtiens ...
Il faut recopier la partie en bas en orange avec les diagnostics pour qu'on sache de quoi il est question.
Mais peut-être, n'avez vous pas installé la library-bibliothèque ? Dans l'IDE par croquis / inclure une bibliothèque ou, ce que je préfère car elles ne sont pas effacées par les mises à jour :
en créant un répertoire "libraries"dans votre répertoire de sketches et en y décompressant : SlowMotionServo-master-b053badfb1f734567955217b488b9914bece7680, puis en le renommant SlowMotionServo .
Une fois l'IDE redémarré, vous aurez accès à l'exemple.
-
C:\Users\PATRICE\Documents\Arduino\sketch_oct02c\sketch_oct02c.ino:2:29: fatal error: SlowMotionServo.h: No such file or directory
#include <SlowMotionServo.h>
^
compilation terminated.
exit status 1
Erreur de compilation pour la carte Arduino/Genuino Mega or Mega 2560
Que dois je fournir de plus? Mes competences sont tres limitées
-
Voir l'article
http://www.locoduino.org/spip.php?article71 (http://www.locoduino.org/spip.php?article71)
Et faire ce qu'écrit msport ci-dessus.
-
Bonjour et merci à vous. cela fonctionne. Il me reste à gérer la commande avec windigipet.
-
Suite,
Je n'arrive pas à fier le lien entre mon décodeur sdec4 et la carte arduino. Lorsqu'un canton est occupé le pan se ferme et s'ouvre dès qu'un autre canton est libéré.Il faut donc que le servo fasse dans un premier temps un aller et dans un deuxième un retour.
Et la je bloque
-
J'ai rien compris :)
Ce que j'avais compris : le S-DEC-4 est un décodeur. Quelles sont ses sorties de commandes ? que produisent-elle comme signal ?
-
https://www.locgeek.com/fr/2014/08/decodeurs-accessoires-ldt-sa-dec-4-dc-s-dec-4-dc/
si il s'agit bien de cela, la sortie est à impulsion, sur relais.
pour simplifier le câblage, il faut utiliser le contact NO entre entrée arduino et Ground en la déclarant en pullup :
pinMode (2, INPUT_PULLUP);
puis faire un
if (digitalRead (2) == LOW)
{
// Actions à faire lorsque le bouton est pressé.
...
}
http://www.locoduino.org/spip.php?article122
-
Il s'agit bien de ce décodeur. par contre après, je n'ai pas tout saisi
-
Pas d'autre solution que d'acquérir les bases : voir le site éditorial :
http://www.locoduino.org/spip.php?article217
et bien sur https://www.arduino.cc/en/Guide/HomePage
et/ou en testant les exemples : dans l'IDE : fichiers /exemples
-
https://www.locgeek.com/fr/2014/08/decodeurs-accessoires-ldt-sa-dec-4-dc-s-dec-4-dc/
si il s'agit bien de cela, la sortie est à impulsion, sur relais.
pour simplifier le câblage, il faut utiliser le contact NO entre entrée arduino et Ground en la déclarant en pullup :
pinMode (2, INPUT_PULLUP);
puis faire un
if (digitalRead (2) == LOW)
{
// Actions à faire lorsque le bouton est pressé.
...
}
Que signifient ...
-
Ils doivent être remplacés par ce qui doit être fait si la commande connectée à la broche 2 arrive. Dans ton cas, assigner une position destination au servo (goTo(), goToMin ou goToMax dans SlowMotionServo)
-
Je suis vraiment nul. Voici ce que j'ai ecrit. Lorsque j'actionne le relais, Le servo fonctionne normalement en allers retours sans discontinuer. Il n'y a pas d'arret lorsque j'actionne le contact du relais
#include <Servo.h>
#include <SlowMotionServo.h>
SMSSmooth myServo; /* Servo with linear trajectory */
float target = 0.0;
void setup() {
myServo.setInitialPosition(target);
myServo.setMinMax(700, 2000);
myServo.setPin(3); /* the servo is connected to pin 3 */
pinMode (2, INPUT_PULLUP);
}
void loop() {
if (myServo.isStopped()) {
target = 1.0 - target;
myServo.goTo(target);
}
if (digitalRead (2) == LOW)
{
// Actions à faire lorsque le bouton est pressé.
digitalWrite(pinMode, HIGH);
}
SlowMotionServo::update();
}
-
À vrai dire, dans ton programme, il n'y a rien qui positionne le servo en fonction de ce qui est reçu du décodeur. C'est donc normal que tu aies le même comportement que dans l'exemple de SlowMotionServo.
1 - comment le décodeur est-il connecté à l'Arduino, sur quelles broches ? : schéma, photos
2 - si j'ai bien compris ce qu'a expliqué sport, il faut deux entrées, une qui fera que le servo ira à sa position max et une qui fera que le servo ira à sa position min.
-
J'ai connecté un relais au décodeur qui fait office de bouton poussoir. Ensuite le relais sur les fiches GND et 2.
Photo jointe
-
OK
Donc ce que tu veux : quand le relai est collé, le servo va à une des deux positions, quand il ne l'est pas pas les servo va à l'autre ?
-
oui tout a fait
-
C'est pas compliqué
Le code suivant devrait fonctionner :
#include <Servo.h>
#include <SlowMotionServo.h>
const byte brocheDeCommande = 2; /* la broche où le relai est connecté */
SMSSmooth servoPAN; /* Servo with SMOOTH trajectory */
void setup() {
servoPAN.setInitialPosition(0.0);
servoPAN.setMinMax(700, 2000);
servoPAN.setPin(3); /* the servo is connected to pin 3 */
pinMode (brocheDeCommande, INPUT_PULLUP);
}
void loop() {
if (servoPAN.isStopped()) {
float destination;
if (digitalRead(brocheDeCommande) == LOW) {
/* le relai est collé, on va à la position 1.0 */
destination = 1.0;
}
else {
/* le relai n'est pas collé, on va à la position 0.0 */
destination = 0.0;
}
servoPAN.goTo(destination);
}
SlowMotionServo::update();
}
-
Note qu'il y a moyen de se passer du relai :)
-
Par quel myen?
-
j'ai un message d'erreur
Arduino : 1.8.2 (Windows 7), Carte : "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
C:\Users\PATRICE\Documents\Arduino\pan_locoduino\pan_locoduino.ino: In function 'void loop()':
pan_locoduino:16: error: expected primary-expression before '}' token
{if (servoPAN.isStopped()) }
^
pan_locoduino:16: error: expected '}' at end of input
exit status 1
expected primary-expression before '}' token
Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.
-
As-tu copié collé correctement le programme ? J'ai compilé avec succès avant de posté le message
Notamment, il n'est pas normal qu'il y ait une accolade fermante juste après le if (servoPAN.isStopped())
-
J'ai recopié et toujours un message d'erreur
Arduino : 1.8.2 (Windows 7), Carte : "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
C:\Users\PATRICE\Documents\Arduino\pan_locoduino\pan_locoduino.ino: In function 'void loop()':
pan_locoduino:16: error: expected '}' at end of input
if (servoPAN.isStopped()) {
^
pan_locoduino:16: error: expected '}' at end of input
exit status 1
expected '}' at end of input
Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.
-
On va faire autrement,
Voici le sketch
-
OK ca marche
Merci beaucoup, maintenant je vais connecté le servo au pan
Bien à vous
-
Bonjour,
Le pan fonctionne très bien.
Jean Luc a écrit :
Note qu'il y a moyen de se passer du relai :)
Par quel moyen puis je me passer du relais?
Note de Dominique : merci d'utiliser les boutons de présentation au dessus de la fenêtre de saisie du message !
-
Bonjour,
Le pan fonctionne très bien.
Jean Luc a écrit :
Note qu'il y a moyen de se passer du relai :)
Par quel moyen puis je me passer du relais?
Note de Dominique : merci d'utiliser les boutons de présentation au dessus de la fenêtre de saisie du message !
-
Bravo !
-
Bonsoir,
Je rebondis sur une remarque de Dominique :
Par contre je serais très intéressé par le couplage mécanique entre le servo et chaque bras du passage à niveau en N : c'est tellement petit et fragile que je cherche toujours les solutions possibles.
Si on est en N, la barrière du passage à niveau est toute petite.
Ne pourrait-on pas utiliser un électro-aimant qui attirerait/repousserait le contrepoids (qu'on aurait muni d'une pièce ferromagnétique. Une vis ?).
Pas de mécanique, pas de tiges, pas de trous, pas de servo...
Il faudrait peut-être gérer la force d'attraction via un Arduino ? ::)
Denis
-
Oui peut-être mais je pense que ça serait brutal et pas du tout progressif comme une vraie barrière.
Chaque coté de la barrière ne pèse que quelques grammes !
Le plus difficile est d'accrocher un fil métallique discret sous chaque contre-poids. Un peu de colle epoxy peut être faconnée pour faire une attache.
Ensuite le fil doit descendre sous le plan de voie par un petit trou en biais.
Ensuite je le verrais relié à un servo en passant dans un tube en laiton courbé.
Dès que j'ai du temps j'essaye (patience...)
Dominique
-
Bonjour
Par quel moyen puis je me passer du relais?
C'est ce que disait msport.
Je dirais qu'il faut déjà que l'alimentation externe soit utilisée et que ça soit du 5V. Ensuite ça dépend de ce qui sort sur le point central du connecteur, 5V ou la masse ?
-
Si on est en N, la barrière du passage à niveau est toute petite.
Ne pourrait-on pas utiliser un électro-aimant qui attirerait/repousserait le contrepoids (qu'on aurait muni d'une pièce ferromagnétique. Une vis ?).
Attirer seulement, quelque soit l'orientation du champ. Pour repousser, il faut également un aimant sur le contrepoids.
Je ne pense pas que ça marche à la lueur de mes essais sur un dételeur.
Tout d'abord si tu veux mettre ton électroaimant sous le réseau, il va en falloir un sacrément costaud, plusieurs ampères. Ensuite, en attirant ça ne fonctionnera pas car la force augmentera avec la réduction de distance. Donc le movement sera brusque. En repoussant, le monde point légèrement plus dur ruinera le mouvement et puis l'orientation de l'aimant sur le contrepoids au fur et à mesure de la rotation ce qui changera la force.
-
Jean Luc a écrit :
Note qu'il y a moyen de se passer du relai :)
Par quel moyen puis je me passer du relais?
Un petit schéma ... (on a un contact sec et il n'y a pas besoin de résistance grâce au PULLUP)
-
relié à un servo ...
Soyons fous, pourquoi pas un moteur pas à pas ? (25 mm hors tout). Dès que j'ai du temps ...
-
Où as-tu trouvé ce moteur pap ?
Il est mignon :-X
-
Comme d’habitude :
http://www.ebay.fr/itm/10-Pcs-New-2-Phase-4-Wire-Stepper-Motor-With-Screw-Slider-DIY-EC-/182792917458?hash=item2a8f4e91d2:g:XGQAAOSwcBhWYVQS
Fais une recherche monde entier avec : stepper motor pcs slider
Sinon, il y en a trop !
J'en ai déjà fait tourner avec les Drivers Pololu A4988 (ça chauffe).
-
Ah Oui mais non
Ces drivers fonctionnent à courant constant. Il y a une vis de réglage pour fixer ce courant. Pour ces petits moteurs, il faut mettre au minimum :)
-
Oui, oui, bonne remarque, mais ça chauffe comme tous les moteurs pas à pas.
-
Bonjour,
Le 5 oct je précisais à Jean Luc que son programme fonctionnait parfaitement sur mon PC avec windows7.
Ce matin je l'ai installé sur un PC équipé de windows10 et cela ne fonctionne pas. Compilation impossible avec une méga2560.
Or rien ne change entre l'essai sur le portable avec windows7 et le fixe avec windows10
Bien Cordialement
-
Rien à part Windows... (quelques Go de code)
Je ne travaille pas avec Windows donc je vais laisser quelqu'un d'autre répondre mais j'ai cru comprendre qu'il y avait des soucis d'installation de l'IDE Arduino sur Windows 10.
-
Je n'ai pour ma part jamais eu de problème avec Windows 10 pour l'IDE, que ce soit sur mon fixe (version familiale de Windows) ou sur mon portable (version entreprise)... Le mieux serait sans doute de désinstaller puis de réinstaller l'IDE. Encore mieux, il faudrait juste décompresser le zip officiel quelque part et mettre un raccourci sur l'exécutable sur le fond d'écran. C'est un peu plus contraignant, mais la version de Windows n'a alors plus d'importance.
-
Je n'ai pas trouvé la solution.
Voila le reésultat
Merci pour votre aide sans faille
Arduino : 1.8.5 (Windows 10), Carte : "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
G:\testPAN_definitif\testPAN_definitif.ino:2:29: fatal error: SlowMotionServo.h: No such file or directory
#include <SlowMotionServo.h>
^
compilation terminated.
exit status 1
Erreur de compilation pour la carte Arduino/Genuino Mega or Mega 2560
-
Là l'IDE est juste en train de dire qu'il ne trouve pas la bibliothèque SlowMotionServo. Est ce qu'elle apparaît bien dans le menu des exemples ? Si non, c'est qu'elle est effectivement mal installée.
-
Merci. J'avais oublié cette étape. Tout est rentré dans l'ordre
Amicalement
-
Bonjour,
J'ai installé mon passage à niveau sur le réseau et cela fonctionne plutot bien.
Pour l'instant, il n'y a qu'une vitesse possible pour le servo.
Est il possible de modifier la vitesse?
Bien Cordialement
-
Bonsoir,
Dans setup ajoutez un myServo.setSpeed() avec comme argument un nombre flottant. Avec une valeur de 1.0, la totalité du movement prend 10s. 2.0, 5s etc
Cordialement
-
merci pour le renseignement.
Maintenant tout est Ok et très réaliste, à mon avis
Cordialement