Forums LR PRESSE

Où il est question de trains, petits et grands

  • Advertisement

LR 855 Commandez vos servos avec Arduino

Toutes les discussions sur l'Arduino !

Modérateur: MOD

LR 855 Commandez vos servos avec Arduino

Publié: Sam 27 Oct 2018, 15:02 
À la suite de la parution de mon article « Commandez vos servos avec Arduino » dans LR855 d’octobre 2018, certains lecteurs m’ont écrit pour me poser quelques questions.

Voici donc quelques informations complémentaires qui devraient vous aider à mettre en pratique cet article pour animer votre réseau. Vous y trouverez également les programmes que je m’étais engagé à mettre sur le forum.

L’article
L’article avait un double but :
- Rappeler comment commander un servomoteur avec Arduino
- Montrer que l’utilisation d’une bibliothèque n’est pas compliquée

C’est donc un article très général qui a été écrit, montrant comment faire tourner le palonnier d’un servomoteur. Cette rotation peut être utile pour commander des barrières de passage à niveau, des portes de remises ou de hangar, ou encore pour manœuvrer des aiguilles lentement comme dans la réalité.

L’article ne traite pas de l’élément déclencheur qui permettra cette rotation du servo et qui peut être un capteur réagissant à l’approche d’un train : ILS, capteur infra-rouge ou à ultrason, détecteur de présence par consommation de courant, etc. Nous avons déjà traité cela soit dans la revue, soit sur ce forum.

Le mouvement d’une aiguille peut aussi être commandé par un clic de souris sur un TCO dessiné sur un écran d’ordinateur. Pour ceux que cela intéresse, j’ai publié sur le site de LOCODUINO l’exemple d’un réseau minimaliste (une voie de garage avec une boucle de retournement en analogique) avec TCO et commande de l’aiguille par clic de souris. Le voici à cette adresse :
http://locoduino.org/spip.php?article226

D’autres exemples sur le site de LOCODUINO complèteront utilement mon article.

Les bibliothèques
L’article décrit comment utiliser une bibliothèque en se basant sur celle appelée Servo qui est justement écrite pour commander des servomoteurs. Ce n’est donc qu’un rappel des techniques de bases pour la mise en œuvre d’Arduino. Depuis que l’article a été écrit, LOCODUINO a publié une bibliothèque permettant d’obtenir des mouvements très lents pour les servomoteurs : elle s’appelle SlowMotionServo et est décrite ici :
http://locoduino.org/spip.php?article159

Une fois de plus, l’utilisation de cette bibliothèque se fait comme pour la bibliothèque Servo et permet d’ajouter d’autres fonctionnalités aux servos présents sur votre réseau.

Les programmes
Voici les programmes que vous pouvez télécharger facilement ici :
Programme de la figure 5
Code: Tout sélectionner
#include <Servo.h>

Servo monservo_N1;

void setup() {
  // put your setup code here, to run once:
monservo_N1.attach(4); // attache le servo N°1 à la broche 4
monservo_N1.write(0); // positionne la barrière en ouverture
}

void loop() {
  // put your main code here, to run repeatedly:
delay(3000); // attente pour observer
monservo_N1.write(90); // positionne la barrière en fermeture
delay(3000); // attente pour observer
monservo_N1.write(0); // positionne la barrière en ouverture
}


Programme de la figure 6
Code: Tout sélectionner
#include <Servo.h>

Servo monservo_N1;

int pos_ouverture = 0;
int pos_fermeture = 90;
int pos_intermediaire = 0;
int pas = 1;
int attente = 20;

void setup() {
  // put your setup code here, to run once:
monservo_N1.attach(4); // attache le servo N°1 à la broche 4
monservo_N1.write(0); // positionne la barrière en ouverture
}

void loop() {
  // put your main code here, to run repeatedly:
delay(3000); // attente pour observer
while(pos_intermediaire <= pos_fermeture) {
  monservo_N1.write(pos_intermediaire);
  pos_intermediaire = pos_intermediaire + pas;
  delay(attente);
}
delay(3000); // attente pour observer
while(pos_intermediaire >= pos_ouverture) {
  monservo_N1.write(pos_intermediaire);
  pos_intermediaire = pos_intermediaire - pas;
  delay(attente);
}
}


Programme de la figure 7
Code: Tout sélectionner
#include <Servo.h>

Servo monservo_N1;

int pos_ouverture = 1000; // correspond à 0° en µs
int pos_fermeture = 2000; // correspond à 90° en µs
int pos_intermediaire = 1000;
int pas = 5; // 100 pas entre 0 et 90°
int attente = 20;

void setup() {
  // put your setup code here, to run once:
monservo_N1.attach(4); // attache le servo N°1 à la broche 4
monservo_N1.write(0); // positionne la barrière en ouverture
}

void loop() {
  // put your main code here, to run repeatedly:
delay(3000); // attente pour observer
while(pos_intermediaire <= pos_fermeture) {
  monservo_N1.writeMicroseconds(pos_intermediaire);
  pos_intermediaire = pos_intermediaire + pas;
  delay(attente);
}
delay(3000); // attente pour observer
while(pos_intermediaire >= pos_ouverture) {
  monservo_N1.writeMicroseconds(pos_intermediaire);
  pos_intermediaire = pos_intermediaire - pas;
  delay(attente);
}
}


Passage à la pratique
On manque toujours de place dans un article pour développer un sujet. En conséquence, je me tiens à votre disposition pour répondre aux questions que vous vous posez. Les servomoteurs sont aujourd’hui bon marché et faciles à mettre en œuvre grâce à Arduino, alors n’hésitez pas à les utiliser. Sur le site de LOCODUINO, vous trouverez de nombreux exemples pour commander votre réseau avec des cartes Arduino, que vous soyez en analogique ou en numérique. Je vous rappelle l’adresse :
http://www.locoduino.org

C’est gratuit et sans publicité, de quoi vous occuper pour les soirées d’hiver qui s’annoncent suite au changement d’heure de ce soir. :wink:
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1698
Inscrit le: Mer 25 Sep 2013, 16:14

Retour vers Arduino

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité