Train Miniature Magazine 234 – Avril 2023: Sketch Arduino de la plaque tournante

#include <Stepper.h>
#include <SpeedyStepper.h>
#define STEP_PIN   A4 // to STEP pin of driver
#define DIR_PIN   A3 // to DIR pin of driver
#define POS_1_PIN   2 // LOW = go to pos 1
#define POS_2_PIN   3 // LOW = go to pos 2
#define POS_3_PIN   4 // LOW = go to pos 3
#define POS_4_PIN   5 // LOW = go to pos 4
#define POS_5_PIN   6 // LOW = go to pos 5
#define POS_6_PIN   7 // LOW = go to pos 6
#define MS1    A1
#define MS2    A2
#define PULSES_PER_REV 600
int new_pos = 0;
int current_pos = 0;
int numsteps = 0;
//define in steps the track positions from homing point.
int a = 800;
int b = 1208;
int c = 2150;
int d = 2650;
int e = 3200;
int f = 3608;
// create the stepper motor object
SpeedyStepper stepper;
void setup() {
 pinMode(8,OUTPUT); // relay 1
 pinMode(9,OUTPUT); // relay 2
 pinMode(POS_1_PIN,  INPUT_PULLUP);
 pinMode(POS_2_PIN,  INPUT_PULLUP);
 pinMode(POS_3_PIN,  INPUT_PULLUP);
 pinMode(POS_4_PIN,  INPUT_PULLUP);
 pinMode(POS_5_PIN,  INPUT_PULLUP); 
 pinMode(POS_6_PIN,  INPUT_PULLUP);
 pinMode(MS1,   OUTPUT);
 pinMode(MS2,   OUTPUT);
 digitalWrite(MS1, HIGH);
 digitalWrite(MS2, HIGH);
 // connect and configure the stepper motor to its IO pins
 stepper.connectToPins(STEP_PIN, DIR_PIN);
 }
 void rotate() 
{ 
 stepper.setSpeedInStepsPerSecond(100);
 stepper.setAccelerationInStepsPerSecondPerSecond(30);
 stepper.moveRelativeInSteps(numsteps);
}
void loop() 
{ 
 if(digitalRead(POS_1_PIN) == LOW) {new_pos = a; digitalWrite (8, LOW); digitalWrite (9, LOW);}
 if(digitalRead(POS_2_PIN) == LOW) {new_pos = b; digitalWrite (8, LOW); digitalWrite (9, LOW);}
 if(digitalRead(POS_3_PIN) == LOW) {new_pos = c; digitalWrite (8, LOW); digitalWrite (9, LOW);}
 if(digitalRead(POS_4_PIN) == LOW) {new_pos = d; digitalWrite (8, LOW); digitalWrite (9, LOW);}
 if(digitalRead(POS_5_PIN) == LOW) {new_pos = e; digitalWrite (8, HIGH); digitalWrite (9, HIGH);}
 if(digitalRead(POS_6_PIN) == LOW) {new_pos = f; digitalWrite (8, HIGH); digitalWrite (9, HIGH);}
 numsteps = (new_pos – current_pos);
 rotate();
 current_pos = new_pos;
}


 

Train Miniature Magazine 199 – Février 2020: La commande de signaux lumineux avec un Arduino

Pas 1:
Arduino IDE versie 1.8.9
https://www.arduino.cc/en/Main/Software 

 

 

 

 

Cliquez sur:  ‘just download’.
Dans downloads vous trouverez le program d’Arduino.

 

Arduino 1Après ce pas 1, vous continuez vers pas 2.

 

 

Après le téléchargement et l’installation d’Arduino IDE, on peut se lancer. Le petit programme lui-même peut être téléchargé sur le site de Train Miniature Magazine. Vous y trouverez également les explications au sujet du programme. Celui-ci est écrit en néerlandais et doit être repris ainsi. Mais nous avons prévu une traduction des explications pour nos lecteurs francophones.

Le programme qui commande ce microcontrôleur a été écrit par Jan De Nil, uniquement en néerlandais. Mais à l’aide des explications ci-dessous, nos lecteurs en comprendront le fonctionnement.

Arduino 2AArduino 2

Explications du programme:

  • Couleurs du texte
  • Tout ce qui est en vert est du texte explicatif sur le code écrit. Ce texte doit toujours être précédé de deux barres obliques ‘//’ ou se trouver entres les caractères /*…..*/
  • En bleu, mauve ou noir: c’est le code (le programme lui-même).
  • Les lignes marquées ‘//***’ séparent les différents blocs du programme. Afin de faire comprendre au ‘compilateur’ qu’il s’agit de texte et non pas de code, on fait précéder celui-ci de barres obliques ‘//’.

 

 

  • 1ère partie: Variables des entrées et des sorties
  • Comme déjà expliqué, tant les boutons que les LED des signaux sont branchés aux bornes de l’Arduino. Dans le programme entier, on peut utiliser les numéros des broches, mais on peut aussi bien utiliser des appellations mnémoniques: la broche 5 peut être nommée ‘Const int DrukknopSein1_Rood’ et la 6 équivaut ‘Const int DrukknopSein1_Wit’. ‘ Const int’ est une expression en langage de programmation qui signifie ‘Constant integer’: en langue humain, une constante composée d’un nombre positif entier. Dans ce cas, les broches 5 ou 6. Les mots ‘DrukknopSein1_Rood’ et ‘DrukknopSein1_Wit’ sont des termes que l’on choisit librement, mais il va de soi que l’on les détermine en fonction du programme que l’on rédige. Remarquez que ces termes ne peuvent pas contenir d’espaces: ‘Drukknop Sein1 Wit’ ne sera pas accepté, mais ‘DrukknopSein1_Wit’ est correct.

 

 

  • 2ème partie: Void Setup
  • Le code dans ce ‘void’ (partie du programme ou routine qui configure le microcontrôleur) se trouve entièrement entre des accolades ({…….}).
  • Les broches de l’Arduino peuvent être des entrées ou des sorties. Le programme doit savoir quelles sont les fonctions attribuées aux bornes. A l’aide du code ‘PinMode(broche n°, INPUT_PULLUP)’, on indique que cette broche doit être configurée en entrée et être forcée au niveau logique ‘haut’ (+5V), tandis qu’avec ‘PinMode(broche n°, OUTPUT)’, on indique que cette broche doit être une sortie.
  • La configuration des bornes doit se faire impérativement dans le ‘void Setup’.
  • Le ‘void Setup’ n’est parcouru qu’une seule fois.

 

 

  • 3ème partie: Void Loop
  • Le code de ce ‘void’ est également placé entre des accolades ({……}).
  • Le code de ce void est parcouru en continu, donc dès que la dernière ligne est exécutée, le processeur retourne à la première ligne du ‘void Loop’. Vous aurez compris que ‘Loop’ signifie ‘boucle’. Cette boucle est parcourue ‘à la vitesse de l’éclair’, en moins d’une milliseconde.
  • On commence par la ‘lecture’ des poussoirs, en d’autres mots, le programme va scrutiner le niveau logique des entrées. Si une entrée se trouve à ‘0’, la ‘valeur intègre’ sera donc ‘0’, car si le bouton n’est pas enfoncé, elle est égale à ‘1’. La ligne de code (attention: le programme est écrit en néerlandais) pour la lecture du poussoir ‘Rouge Signal 1’ sera: Valeur variable=lecture broche entrée; en code, on écrit alors: ‘IngangSein1_Rood=digitalread(DrukknopSein1_Rood), en français ‘EntréeSignal1_Rouge = digitalread (PoussoirSignal1_Rouge).
  • Après le scrutin, on va vérifier la valeur de la variable lue, on pose donc la question: ‘Si la valeur de la variable est égale à zéro, alors… (action). En langage code: If(IngangSein1_Rood == 0) Si(EntréeSignal1_Rouge = 0) Une réponse affirmative veut dire que le bouton rouge a été poussé et qu’un signal rouge doit être affiché. On appellera alors le ‘Void Sein’ (routine Signal) qui contient le code:

Sein(Sein1_Rood, Sein1_Wit, Sein1_Geel, Sein1_Groen, 1,0,0,0); les mots ‘Sein1_Rood, Sein1_Wit, Sein1_Geel, Sein1_Groen’ représentent les bornes ‘de sortie’ de l’Arduino (voir 1ère partie) et les chiffres 1,0,0,0 sont les valeurs respectives que les sorties rouge, blanche, jaune et verte doivent prendre. Comme élucidé au chapitre des entrées, ‘1’ signifie +5 Volts et ‘0’ signifie 0 Volts. La borne de la LED rouge du signal 1 se trouve maintenant à +5V et la LED s’allume. Du fait que les autres sorties de ce signal sont forcées à 0 Volts, les autres LED seront éteintes. La commande des sorties est activée par l’instruction ‘digitalwrite(broche,valeur)’ exécutée dans le void ‘Sein’ (routine signal).

 

  • Tout code ayant trait au scrutin du bouton-poussoir rouge ‘If(IngangSein1_Rood == 0)’ se trouve entre des accolades ({..}).
  • Après la question si le bouton rouge est enfoncé suit la question au sujet du blanc, du jaune et du vert. Ce scrutin se fait pour tous les signaux.
Menu