Bonjour,
J'ai déjà réalisé un réseau complet en numérique et je souhaite passer à une autre forme de réalisation, des petits plateaux de 45x45 cm de côté avec des décors différents sur chaque plateau. Ces plateaux pourront être reliés et interconnectés ensuite. Je souhaite surtout réaliser des décors avec animations différentes, toutes à base d'Arduino que j'ai découvert, il n'y a pas très longtemps et que j'ai apprécié immédiatement.
Mes plateaux auront comme thèmes : un paysage de village avec zone industrielle (les portes et mouvement de certains véhicules seront mus automatiquement), un petit paysage de montagne avec de l'éclairage et surtout un téléphérique fait maison), un circuit automobile où les voitures seront mobiles et suivront un tracé déterminé, un paysage de fleuve avec un pont levant (type pont de Londres), et d'autres idées à venir. Les deux premiers sont terminés et "presque" fonctionnels. Une voie unique fera le lien entre tous ces plateaux et parcourra la longueur selon les raccordements de mes plateaux.
C'est cette voie qui me pose un problème actuellement et pour laquelle j'ai besoin de votre aide.
J'ai choisi de présenter cette voie en analogique, car je n'ai pas besoin de toute la sophistication du numérique et que j'ai déjà mon premier réseau totalement numérique. Je souhaite que tout soit géré par Arduino et en particulier la locomotive qui fera le trajet aller-retour sur cette voie.
J'utilise des nanos (ici en phase de test j'utilise une Uno) et pont en H (un mini L293D).
Voici le schéma de mon montage. (en bas de page)
Voici le programme simplifié au maximum (le programme final est bien plus complet) mais contient le nécessaire pour faire rouler (théoriquement) ma locomotive.
/*
L'objectif est de faire faire des aller-retours à une locomotive analogique entre les deux extremites de la voie
Utilisatioin de mini L293D pour gérer l'alimentation de la voie.
La vitesse de la locomotive utilise une PIN PWM
*/
//************************************************************************************//
// Association des entrées du Mini L293D, aux sorties utilisées sur notre Arduino Uno //
//************************************************************************************//
//*************************//
// Constantes du programme //
//*************************//
#define borneIN1 4 // 4 On associe la borne "IN1" du L293D à la pin D4 de l'Arduino
#define borneIN2 5 // 5 On associe la borne "IN2" du L293D à la pin D6 de l'Arduino
#define borneENA 7 // 7 On associe la borne "ENA" du L293D à la pin D7 de l'Arduino (PWM possible sur cette broche)
#define delaiChangementVitesse 10 // Défini un petit délai, exprimé en millisecondes, avant tout autre changement de vitesse
#define vitessealler 254 // signal PWM, pour definir la vitesse du moteur Pas besoin d'une précedure d'acceleration/deceleration
//*******//
// SETUP //
//*******//
void setup() {
Serial.begin(9600);
pinMode(borneIN1, OUTPUT);
pinMode(borneIN2, OUTPUT);
pinMode(borneENA, OUTPUT);
}
//**************************//
// Boucle principale : LOOP //
//**************************//
void loop() {
digitalWrite(borneIN1, HIGH); // L'entrée IN1 doit être au niveau haut
digitalWrite(borneIN2, LOW); // L'entrée IN2 doit être au niveau bas
delay(10000);
configurerSensDeRotationPontA(false);
VitesseMoteur(vitessealler); // Met à jour la vitesse du moteur, en modifiant le rapport cyclique du signal PWM envoyé
delay(delaiChangementVitesse); // ... et on rajoute un petit délai pour que tout n'aille pas trop vite !
delay(1000);
configurerSensDeRotationPontA(true);
VitesseMoteur(vitessealler); // Met à jour la vitesse du moteur, en modifiant le rapport cyclique du signal PWM envoyé
delay(delaiChangementVitesse); // ... et on rajoute un petit délai pour que tout n'aille pas trop vite !
delay(1000);
}
//************************************************************************************//
// Fonction : configurerSensDeRotationPontA() //
// But : Permet de définir le sens de rotation du moteur branche sur le pont A //
//************************************************************************************//
void configurerSensDeRotationPontA(boolean sensDeRotation) {
if(sensDeRotation == true) {
// Configuration du L293D en "marche avant", pour le moteur connecté au pont A. Selon sa table de vérité, il faut que :
digitalWrite(borneIN1, HIGH); // L'entrée IN1 doit être au niveau haut
digitalWrite(borneIN2, LOW); // L'entrée IN2 doit être au niveau bas
}
if(sensDeRotation == false) {
// Configuration du L293D en "marche arrière", pour le moteur câblé sur le pont A. Selon sa table de vérité, il faut que :
digitalWrite(borneIN1, LOW); // L'entrée IN1 doit être au niveau bas
digitalWrite(borneIN2, HIGH); // L'entrée IN2 doit être au niveau haut
}
}
//************************************************************************************//
// Fonction : VitesseMoteur() //
// But : donne la vitesse de rotation du moteur branché sur le pont A //
//************************************************************************************//
void VitesseMoteur(int nouvelleVitesse) {
// Génère un signal PWM permanent, de rapport cyclique égal à "nouvelleVitesse" (valeur comprise entre 0 et 255)
analogWrite(borneENA, nouvelleVitesse);
}
Mon problème est que ce montage et ce programme fonctionnaient parfaitement, mais que je n'arrive plus, maintenant, à faire rouler ma loco. Elle nécessite 12V pour rouler, mais la sortie du L293D ne produit pas suffisamment (autour de 5 V seulement). Je ne comprends pas que ça ait marché et plus maintenant.
Comment faire en sorte que le L293D produise ce qu'il faut ?
L'alimentation produit bien du 12 V (vérifié).
Merci de votre aide. SI cela vous intéresse je pourrai compléter ce sujet avec les différentes réalisations.
Cordialement