Contrôle Automatique de Train Miniature Arduino – Simple, Fiable et Personnalisable
Composants et Fournitures
| Composant | Quantité | Notes |
|---|---|---|
| Arduino UNO (ou Nano, Mega, etc.) | 1 | Tout modèle Arduino compatible |
| Pilote Moteur Double Pont en H L298N (module) | 1 | Module standard recommandé |
| Fils de Liaison | 1 jeu | Pour connexions |
Applications et Services en Ligne
- Arduino IDE
À Propos du Projet
Ce montage ultra-simple permet de faire circuler votre train miniature selon un horaire programmé. Vous définissez les temps de roulement, d'arrêt, d'accélération et de freinage. En modifiant les paramètres dans le croquis, vous créez n'importe quel scénario de mouvement automatique. Il suffit d'alimenter le système : le train démarre tout seul selon votre programme.
Programmation de l'Horaire (Exemple)
L'horaire est défini par des plages temporelles basées sur un compteur de secondes (counterScheduler) :
// 1 | 0 à 5 sec : Démarrage et accélération
if (counterScheduler <= 5) { ... }
// 2 | 10 à 15 sec : Freinage et arrêt
if ((counterScheduler >= 10) && (counterScheduler <= 15)) { ... }
// 3 | 16 sec : Inversion de marche
if (counterScheduler == 16) { ... }
// 4 | 20 à 30 sec : Nouveau départ sens inverse
if ((counterScheduler >= 20) && (counterScheduler <= 30)) { ... }
// 5 | 31 à 40 sec : Nouvel arrêt
if ((counterScheduler >= 31) && (counterScheduler <= 40)) { ... }
// 6 | > 40 sec : Boucle (retour au début)
if (counterScheduler > 40) { counterScheduler = 0; ... }
Paramètres de Mouvement
int brakingDelta = 5; // Décrément vitesse / 100ms (freinage)
int accelerateDelta = 6; // Incrément vitesse / 100ms (accélération)
Ces valeurs définissent la progressivité de l'accélération et du freinage (valeurs PWM 0-255).
Contrôle de Direction
La direction est gérée par les broches D6 (IN1) et D7 (IN2) du L298N :
// Marche avant par défaut
digitalWrite(L298_IN1, HIGH);
digitalWrite(L298_IN2, LOW);
// Marche arrière (inversion)
digitalWrite(L298_IN1, LOW);
digitalWrite(L298_IN2, HIGH);
Vous pouvez étendre ce croquis à l'infini : arrêts en gare multiples, variations de vitesse, détection de présence, commande par Bluetooth, etc.
Code Arduino Complet
// Configuration L298N
#define L298_ENA 5 // PWM vitesse
#define L298_IN1 6 // Direction 1
#define L298_IN2 7 // Direction 2
// Variables de séquence
int counterScheduler = 0;
unsigned long timerScheduler = 0;
unsigned long timerLocal = 0;
byte speedAuto = 0;
void setup() {
pinMode(L298_ENA, OUTPUT);
pinMode(L298_IN1, OUTPUT);
pinMode(L298_IN2, OUTPUT);
// Direction par défaut : AVANT
digitalWrite(L298_IN1, HIGH);
digitalWrite(L298_IN2, LOW);
}
void loop() {
// Ordonnanceur : incrémente counterScheduler chaque seconde
if (millis() > (timerScheduler + 1000)) {
counterScheduler++;
timerScheduler = millis();
}
// Paramètres mouvement
int brakingDelta = 5;
int accelerateDelta = 6;
// --- SCÉNARIO "ALLER-RETOUR" ---
// 1 | 0-5 sec : Accélération et croisière
if (counterScheduler <= 5) {
if (millis() > (timerLocal + 100)) {
if (speedAuto < 240) speedAuto += accelerateDelta;
else speedAuto = 255;
analogWrite(L298_ENA, speedAuto);
timerLocal = millis();
}
}
// 2 | 10-15 sec : Freinage jusqu'à l'arrêt
if ((counterScheduler >= 10) && (counterScheduler <= 15)) {
if (millis() > (timerLocal + 100)) {
if (speedAuto > 30) speedAuto -= brakingDelta;
else speedAuto = 0;
analogWrite(L298_ENA, speedAuto);
timerLocal = millis();
}
}
// 3 | 16 sec : Inversion de direction
if (counterScheduler == 16) {
digitalWrite(L298_IN1, LOW);
digitalWrite(L298_IN2, HIGH);
}
// 4 | 20-30 sec : Accélération sens inverse
if ((counterScheduler >= 20) && (counterScheduler <= 30)) {
if (millis() > (timerLocal + 100)) {
if (speedAuto < 240) speedAuto += accelerateDelta;
else speedAuto = 255;
analogWrite(L298_ENA, speedAuto);
timerLocal = millis();
}
}
// 5 | 31-40 sec : Freinage final
if ((counterScheduler >= 31) && (counterScheduler <= 40)) {
if (millis() > (timerLocal + 100)) {
if (speedAuto > 30) speedAuto -= brakingDelta;
else speedAuto = 0;
analogWrite(L298_ENA, speedAuto);
timerLocal = millis();
}
}
// 6 | > 40 sec : Réinitialisation boucle
if (counterScheduler > 40) {
counterScheduler = 0;
digitalWrite(L298_IN1, HIGH);
digitalWrite(L298_IN2, LOW);
}
}
Schéma de Câblage
Deux schémas sont fournis dans les fichiers du projet :
- Schéma de principe (fritzing/style breadboard)
- Photo du montage réel
Connexions Principales :
- L298N ENA → Arduino Pin 5 (PWM)
- L298N IN1 → Arduino Pin 6
- L298N IN2 → Arduino Pin 7
- L298N +12V → Alimentation voie (selon votre réseau, ex: 12-18V)
- L298N GND → Masse commune (Arduino + Alimentation)
- L298N OUT1/OUT2 → Rails du circuit (via fils de raccordement)
- L298N 5V/ENB → Non utilisé (ou jumper 5V activé pour logique interne)
Idées d'Évolution
- Ajout de capteurs de position (ILS, infrarouge) pour arrêts précis en gare
- Gestion de plusieurs cantons/voies
- Interface série/Bluetooth pour modifier l'horaire sans reprogrammer
- Simulation d'inertie plus réaliste (courbes d'accélération exponentielles)
- Intégration signaux lumineux, barrières, annonces sonores
- Alimentation par batterie + panneau solaire pour installation autonome en extérieur
Bon voyage sur votre réseau ! 🚂
Processus de fabrication
- Système automatisé de remplissage et de surveillance de piscine
- Comprendre le travail d'établi : définition, applications et avantages
- Comprendre le contrôle qualité : garantir une excellence constante
- Comprendre les presses automatiques : fonctionnement, avantages et applications
- Comprendre les presses à puissance automatiques : caractéristiques, avantages et applications
- Comprendre les cintreuses automatiques : fonctions, avantages et applications
- Comprendre les tables rotatives automatiques : précision et efficacité en métallurgie
- Guide complet des systèmes de transmission automatique
- Systèmes de lubrification centralisée automatique : types, composants et bénéfices