Auteur Sujet: TCO bp + ordi  (Lu 926 fois)

frederic

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
TCO bp + ordi
« le: février 10, 2024, 06:00:21 pm »
bonjour,
Je suis en train de construire un TCO physique (écran, bouton poussoir, horloge)qui viendra en complément de la gestion complète par ordinateur et Arduino
actuellement le programme joint fonctionne,  mais quand j' active la communication (en gris ou /**/), entre ordi et Arduino (USB) plus aucun bouton fonctionne mais les ordres donné depuis l' ordi fonctionne, je voudrais les 2 lol
 pouvez vous m' aider SVP.

#include <PCA9685.h> //platine servomoteur
PCA9685 pwmController;
PCA9685_ServoEval pwmAngleValue;



#include <LiquidCrystal_I2C.h> // ecran LCD 20x4
LiquidCrystal_I2C lcd(0x27, 20, 4);

#include <virtuabotixRTC.h> //module horloge
virtuabotixRTC myRTC(6, 7, 8);



// vitesse servomoteur
int Attente = 25; // vitesse servomoteur

// position aiguillage
int AIG1 = 0;     // position aiguillage
int AIG2M1 = 0;
int AIG2M2 = 0;
int AIG3 = 0;
int AIG4 = 0;
int AIG5 = 0;
int AIG6 = 0;
int AIG7 = 0;

// variable anti retour
int etat0 = 0;   // variable anti retour
int etat1 = 0;
int etat2 = 0;
int etat3 = 0;
int etat4 = 0;
int etat5 = 0;
int etat6 = 0;
int etat7 = 0;

// Déclaration des entrées pour les boutons poussoir
const int BvoieA = 27;
const int BvoieB = 26;
const int BvoieC = 25;
const int BvoieD = 24;
const int BvoieE = 28;
const int Bentrernord = 22;
const int Bsortienord = 23;
const int Bentrersud = 30;
const int Bsortiesud = 29;

// Variable de stockage de l'instruction reçu
String reception = "";

void setup()  {
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();

// Etat des entrées pour les boutons poussoir

pinMode(BvoieA, INPUT);
pinMode(BvoieB, INPUT);
pinMode(BvoieC, INPUT);
pinMode(BvoieD, INPUT);
pinMode(BvoieE, INPUT);
pinMode(Bentrernord, INPUT);
pinMode(Bsortienord, INPUT);
pinMode(Bentrersud, INPUT);
pinMode(Bsortiesud,INPUT);
 
  //myRTC.setDS1302Time(18, 39, 15, 7, 25, 12, 2023);// activé pour régler l' horloge
     Wire.begin(); // Initialisation de l'interface I2C
    // Ré-initialisation des PCA9685 sur la ligne I2C
    pwmController.resetDevices();   
    pwmController.init(); // Initilisation du module
    // Définit une fréquence f=5OHz soit T=20ms
    // pour les Servomoteurs standard             
    pwmController.setPWMFreqServo();
   
}
void loop()  {
  // identificatition des éléments
  myRTC.updateTime();
 
  Serial.print("Current Date / Time: ");
  Serial.print(myRTC.dayofmonth);
  Serial.print("/");
  Serial.print(myRTC.month);
  Serial.print("/");
  Serial.print(myRTC.year);
  Serial.print("  ");
  Serial.print(myRTC.hours);
  Serial.print(":");
  Serial.print(myRTC.minutes);
  Serial.print(":");
  Serial.println(myRTC.seconds);
 
// organisation écran LCD

  lcd.setCursor(0, 0);
  lcd.print("**BLAUSEE--MITHOLZ**");
  lcd.setCursor(0, 1);
  lcd.print(myRTC.hours);
  lcd.print(":");
  lcd.print(myRTC.minutes);
  lcd.print("     ");
  lcd.print(myRTC.dayofmonth);
  lcd.print("/");
  lcd.print(myRTC.month);
  lcd.print("/");
  lcd.print(myRTC.year);

  // Attente des instructions du uno
 
  /*while(true){
    if (Serial.available()){
      //reception = Serial.readStringUntil('\n');
      //break;// Sortie de la boucle
    }
  }
 
*/
// "1"  aiguillage en position droite
// "2"  aiguillage en position dévier

//ordre donnée par bouton poussoir

 if(digitalRead(Bentrernord) == HIGH)  {if(digitalRead(BvoieB) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("Nord sur voie B");
    AIG2M1 = 1;
    AIG2M2 = 2;
    }
 }

  if(digitalRead(Bentrernord) == HIGH)  {if(digitalRead(BvoieC) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("Nord sur voie C");
    AIG2M1 = 1;
    AIG2M2 = 1;
    AIG3 = 1;
    }
 }

  if(digitalRead(Bentrernord) == HIGH)  {if(digitalRead(BvoieD) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("Nord sur voie D");
    AIG2M1 = 1;
    AIG2M2 = 1;
    AIG3 = 2;
    }
 }
 
  if(digitalRead(Bsortienord) == HIGH)  {if(digitalRead(BvoieB) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("Voie B sur Nord");
    AIG2M1 = 1;
    AIG2M2 = 2;
    AIG1 = 2;
    }
 }

 if(digitalRead(Bsortienord) == HIGH)  {if(digitalRead(BvoieC) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("Voie C sur Nord");
    AIG2M1 = 1;
    AIG2M2 = 2;
    AIG1 = 2;
    }
 }

 if(digitalRead(Bsortienord) == HIGH)  {if(digitalRead(BvoieD) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("Voie D sur Nord");
    AIG2M1 = 1;
    AIG2M2 = 2;
    AIG1 = 2;
    }
 }

 if(digitalRead(Bsortienord) == HIGH)  {if(digitalRead(BvoieA) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("Voie A sur Nord");
    AIG1 = 1;
    }
 }
 
  if(digitalRead(BvoieD) == HIGH)  {if(digitalRead(BvoieE) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("Voie D sur Voie E");
    AIG4 = 2;
    AIG5 = 2;
    }
 }

 if(digitalRead(BvoieC) == HIGH)  {if(digitalRead(BvoieE) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("Voie C sur Voie E");
    AIG4 = 1;
    AIG5 = 2;
    }
 }

 if(digitalRead(BvoieB) == HIGH)  {if(digitalRead(BvoieE) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("Voie B sur Voie E");
    AIG5 = 1;
    }
 }

if(digitalRead(BvoieE) == HIGH)  {if(digitalRead(Bentrersud) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("sud sur Voie E     ");
    AIG6 = 2;
    AIG7 = 2;
    }
 }

if(digitalRead(BvoieE) == HIGH)  {if(digitalRead(Bsortiesud) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("Voie E sortie Sud");
    AIG6 = 1;
   
    }
 }

if(digitalRead(BvoieA) == HIGH)  {if(digitalRead(Bentrersud) == HIGH)
   {
    lcd.setCursor(0, 2);
    lcd.print("Voie A sortie Sud");
    AIG7 = 1;
   
    }
 }

 // ordre donné de l' ordi
/*if (Serial.available()){
    AIG1-1 = Serial.read();
    AIG1 = 1;
     lcd.setCursor(0, 2);
    lcd.print("!!PILOTE PAR ORDI!!");
     lcd.setCursor(0, 3);
    lcd.print("!!PILOTE PAR ORDI!!");
     }

 if (reception == "AIG1-2"){
    AIG1 = 2;
     lcd.setCursor(0, 2);
    lcd.print("!!PILOTE PAR ORDI!!");
     lcd.setCursor(0, 3);
    lcd.print("!!PILOTE PAR ORDI!!");
     }

  if (reception == "AIG2M1-1"){
    AIG2M1 = 1;
     } 

 if (reception == "AIG2M1-2"){
    AIG2M1 = 2;
     }

 if (reception == "AIG2M2-1"){
    AIG2M2 = 1;
     }

  if (reception == "AIG2M2-2"){
    AIG2M2 = 2;
     }

 if (reception == "AIG3-1"){
    AIG3 = 1;
     }

 if (reception == "AIG3-2"){
    AIG3 = 2;
     }

   if (reception == "AIG4-1"){
    AIG4 = 1;
     }

 if (reception == "AIG4-2"){
    AIG4 = 2;
     }

 if (reception == "AIG5-1"){
    AIG5 = 1;
     }

 if (reception == "AIG5-2"){
    AIG5 = 2;
     }

if (reception == "AIG6-1"){
    AIG6 = 1;
     }

if (reception == "AIG6-2"){
    AIG6 = 2;
     } 

if (reception == "AIG7-1"){
    AIG7 = 1;
     }

if (reception == "AIG7-2"){
    AIG7 = 2;
     } 
     */                                           
//commande des moteur d' aiguillage

if (AIG1 == 1){ if (etat0 == 0){
 
  for (int angle1 = +20; angle1 >= -20 ; --angle1){
    pwmController.setChannelPWM(0, pwmAngleValue.pwmForAngle(angle1));// aig 1 Droite
    delay(Attente);
}
}
 etat0 = 1;
}

if (AIG1 == 2){ if (etat0 == 1){
  for (int angle1 = -20; angle1 <= +20 ; ++angle1){
    pwmController.setChannelPWM(0, pwmAngleValue.pwmForAngle(angle1));// aig 1 Dévier
    delay(Attente);
}
}
etat0 = 0;
}
 
if (AIG2M1 == 1){if (etat1 == 0){
  for (int angle1 = +20; angle1 >= -20 ; --angle1){
    pwmController.setChannelPWM(1, pwmAngleValue.pwmForAngle(angle1));// aig 2 moteur 1 Droite
    delay(Attente);
}
}
etat1 = 1;
}
if (AIG2M1 == 2){if (etat1 == 1){
  for (int angle1 = -20; angle1 <= +20 ; ++angle1){
    pwmController.setChannelPWM(1, pwmAngleValue.pwmForAngle(angle1));// aig 2 moteur 1 Dévier
    delay(Attente);
}
}
etat1 = 0;
}

if (AIG2M2 == 1){ if(etat2 == 0){
  for (int angle1 = +20; angle1 >= -20 ; --angle1){
    pwmController.setChannelPWM(2, pwmAngleValue.pwmForAngle(angle1));// aig 2 moteur 2 Droite
    delay(Attente);
}
}
etat2 = 1;
}
if (AIG2M2 == 2){if(etat2 == 1){
  for (int angle1 = -20; angle1 <= +20 ; ++angle1){
    pwmController.setChannelPWM(2, pwmAngleValue.pwmForAngle(angle1));// aig 2 moteur 2 Dévier
    delay(Attente);
}
}
etat2 = 0;
}
if (AIG3 == 1){if (etat3 == 0){
  for (int angle1 = +20; angle1 >= -20 ; --angle1){
    pwmController.setChannelPWM(3, pwmAngleValue.pwmForAngle(angle1));// aig 1 Droite
    delay(Attente);
}
}
etat3 = 1;
}
if (AIG3 == 2){if (etat3 == 1){
  for (int angle1 = -20; angle1 <= +20 ; ++angle1){
    pwmController.setChannelPWM(3, pwmAngleValue.pwmForAngle(angle1));// aig 1 Dévier
    delay(Attente);
}
}
etat3 = 0;
}
if (AIG4 == 1){if (etat4 == 0){
  for (int angle1 = +20; angle1 >= -20 ; --angle1){
    pwmController.setChannelPWM(4, pwmAngleValue.pwmForAngle(angle1));// aig 1 Droite
    delay(Attente);
}
}
etat4 = 1;
}
if (AIG4 == 2){if(etat4 == 1){
  for (int angle1 = -20; angle1 <= +20 ; ++angle1){
    pwmController.setChannelPWM(4, pwmAngleValue.pwmForAngle(angle1));// aig 1 Dévier
    delay(Attente);
}
}
etat4 = 0;
}
if (AIG5 == 1){if(etat5 == 0){
  for (int angle1 = +20; angle1 >= -20 ; --angle1){
    pwmController.setChannelPWM(5, pwmAngleValue.pwmForAngle(angle1));// aig 1 Droite
    delay(Attente);
}

}etat5 = 1;
}
if (AIG5 == 2){if(etat5 == 1){
  for (int angle1 = -20; angle1 <= +20 ; ++angle1){
    pwmController.setChannelPWM(5, pwmAngleValue.pwmForAngle(angle1));// aig 1 Dévier
    delay(Attente);
}

etat5 = 0;
}
}
if (AIG6 == 1){ if(etat6 == 1){
  for (int angle1 = +20; angle1 >= -20 ; --angle1){
    pwmController.setChannelPWM(6, pwmAngleValue.pwmForAngle(angle1));// aig 1 Droite
    delay(Attente);
}
etat6 = 0;
}
}
if (AIG6 == 2){ if(etat6 == 0){
  for (int angle1 = -20; angle1 <= +20 ; ++angle1){
    pwmController.setChannelPWM(6, pwmAngleValue.pwmForAngle(angle1));// aig 1 Dévier
    delay(Attente);
}
}
etat6 = 1;
}
if (AIG7 == 1){if (etat7 == 0){
  for (int angle1 = +20; angle1 >= -20 ; --angle1){
    pwmController.setChannelPWM(7, pwmAngleValue.pwmForAngle(angle1));// aig 1 Droite
    delay(Attente);
}
}
etat7 = 1;
}
if (AIG7 == 2){if (etat7 == 1){
  for (int angle1 = -20; angle1 <= +20 ; ++angle1){
    pwmController.setChannelPWM(7, pwmAngleValue.pwmForAngle(angle1));// aig 1 Dévier
    delay(Attente);
}
}
etat7 = 0;
}

}
   
« Modifié: février 10, 2024, 06:19:11 pm par frederic »

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 868
  • HO avec DCC++
    • Voir le profil
Re : TCO bp + ordi
« Réponse #1 le: février 10, 2024, 07:24:55 pm »
Hello,

  /*while(true){
    if (Serial.available()){
      //reception = Serial.readStringUntil('\n');
      //break;// Sortie de la boucle
    }
    }

  */

While(true) est une boucle sans fin !!!

Quoiqu'il arrive, ton programme tourne en boucle ici.

Il te faut quelque chose du genre :

while(Serial.available())
{
      reception = Serial.readStringUntil('\n');
      // pas besoin de break
}

Christophe

frederic

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : TCO bp + ordi
« Réponse #2 le: février 11, 2024, 12:36:14 pm »
Salut Christophe,
merci pour ton aide,
j' ai corrigé, et effectivement sa débloque le programme, mais l' ordre donné reste effectif faut-il donné une fin à l' ordre reçu ?ou un vide mémoire ?une fois que l'ordre a terminé de s' exécuter?

frederic

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : TCO bp + ordi
« Réponse #3 le: février 12, 2024, 02:37:41 pm »
bonjour,
après mes recherches infructueuse (j' ai pas du chercher au bon endroits ou avec les bon termes)lol
Je vais revoir tout mon programme.
Au lieu de recevoir des "ordres" des boutons poussoir et du bus série,
je vais créer une interface avec un Arduino uno  qui lui recevra les "ordres" du TCO physique (bouton poussoir) et du TCO virtuel (processing/USB).
merci à tous



bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 868
  • HO avec DCC++
    • Voir le profil
Re : TCO bp + ordi
« Réponse #4 le: février 12, 2024, 02:50:51 pm »
Frederic,

Si je peux me permettre un conseil, tu cherches à aller trop vite sans maîtriser les fondamentaux. On ne le répétera jamais assez, il faut commencer par la commencement et sur Locoduino, il est ici : https://www.locoduino.org/spip.php?id_mot=26&page=theme

Compte tenu de l'erreur que je t'ai corrigée, on voit bien il s'agissait d'un bout de code que tu as copié sur internet avec d'autres bouts de code. Résultat, ça ne fonctionne pas mais tu ne sais pas pourquoi.

Le programme que tu as présenté est tout bringbalant mais pourrait fonctionner sans trop de difficultés après quelques corrections.

Mais tu parles maintenant de te lancer avec Processing qui est beaucoup plus difficile à appréhender encore que la programmation Arduino où tout a été fait pour que ce soit très simple à utiliser. Libre à toi mais tu ne trouveras pas grand monde alors pour t'aider.

Bien cordialement.

Christophe

Pierre59

  • Sr. Member
  • ****
  • Messages: 316
    • Voir le profil
Re : Re : TCO bp + ordi
« Réponse #5 le: février 12, 2024, 04:22:29 pm »
Mais tu parles maintenant de te lancer avec Processing qui est beaucoup plus difficile à appréhender encore que la programmation Arduino où tout a été fait pour que ce soit très simple à utiliser. Libre à toi mais tu ne trouveras pas grand monde alors pour t'aider.
Processing c'est comme Arduino, tout a été fait pour que ce soit simple à utiliser, mais pour un autre domaine, celui du dessin et de l'animation 2D et 3D.

Pierre

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 868
  • HO avec DCC++
    • Voir le profil
Re : Re : Re : TCO bp + ordi
« Réponse #6 le: février 12, 2024, 04:26:52 pm »
Mais tu parles maintenant de te lancer avec Processing qui est beaucoup plus difficile à appréhender encore que la programmation Arduino où tout a été fait pour que ce soit très simple à utiliser. Libre à toi mais tu ne trouveras pas grand monde alors pour t'aider.
Processing c'est comme Arduino, tout a été fait pour que ce soit simple à utiliser, mais pour un autre domaine, celui du dessin et de l'animation 2D et 3D.

Pierre

A la bonne heure Frédérique, puisque Processing est si simple tu as eu bien raison d'y penser... et j'ai bien eu tort de t'en dissuader.

Christophe

frederic

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : TCO bp + ordi
« Réponse #7 le: février 12, 2024, 05:31:33 pm »
re a tous
oui se son des bouts de codes pris un peu partout, j' essaye de faire quelque chose et de comprendre avec se que je trouve sur internet le TCO fonctionne sans la communication, certainement qu' il y a mieux (plus pro) j' essaie aussi de pas harceler avec trop de question lol,
j' ai lu de super Articles ici sur TCO avec processing, ménage a trois, mais sa sera dans l' avenir .

 Dans un premier temps je voulait avoir un TCO qui commande mes aiguillages par les boutons . (ça fonctionne avec des roues carré )lol
deuxième étape que je puisse avoir la possibilité par la suite de les piloter par l' ordi.

oui j' ai lu les articles pour débuter, je vais les relire sa fais pas de mal.

Mes connaissances son très limité.
Autour de moi, je connais personne pour m' aider.
en tout cas, je vous remercie pour toute l' aide que vous apporté.
si quelqu'un se trouve vers Castres et qui veut m' aider.

« Modifié: février 12, 2024, 05:33:58 pm par frederic »

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 868
  • HO avec DCC++
    • Voir le profil
Re : TCO bp + ordi
« Réponse #8 le: février 12, 2024, 05:47:36 pm »
Je pense que actionner les aiguilles avec des boutons poussoirs est une première étape. En programmation, si le code est bien écrit au départ, il n'est en générale pas trop compliqué d'ajouter des fonctionnalités.

Combien y a t'il d'aiguilles ? Ce sont des servomoteurs de mémoire ?

Sur quelle carte ? Uno, Mega, Nano ?

Il y a déjà eu plein de choses sur le même sujet dans le forum et en article, fais des recherches !

Je ne suis pas certain que le PCA9685 se justifie, j'avais fait un programme pour 16 aiguilles avec mouvement lent des aiguilles sur un autre forum et ça marchait nickel. Je vais rechercher dans l'après-midi.

Mais fais vraiment des recherche sur le site éditorial et sur le forum avec "aiguillage" "servomoteurs" etc... Tu ne vas pas perdre ton temps de toutes façons

Christophe

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 868
  • HO avec DCC++
    • Voir le profil
Re : TCO bp + ordi
« Réponse #9 le: février 12, 2024, 06:42:39 pm »
Bon je n'ai pas eu à chercher longtemps. Le programme joint n'est pas encore celui auquel je pensais mais il va sans doute t'intéresser encore plus (pour le moment). Je reconnais que le programme est un peu compliqué mais il fonctionne. Tu pourras faire ce que tu voulais et puis, on pourra en discuter.

Ce programme répondait à la même demande que toi de piloter et régler les servos à partir de l'interface série de l'IDE Arduino

Ce programme permet de piloter 6 servos (mais 16 serait possible sur un Mega).

Pour le faire fonctionner, il faut dézipper et placer le dossier (avec les 3 fichiers) dans ton dossier Arduino.

Dans le fichier Servo_Aiguilles.ino, il faut tout d'abord choisir combien d'aiguilles on veut piloter. Ici on a mis 6 : #define NB_SERVO 6

Ensuite il faut indiquer sur quelles pins sont reliés les servos :

// Setup de chaque instance
// id, servoPin, togPinAig, ledPinAig, minPosition, maxPosition, (dirAig)
  aiguille[0].setup(0, 2, 31, 40, position[0], position[1], 0);
  aiguille[1].setup(1, 3, 33, 42, position[2], position[3], 0);
  aiguille[2].setup(2, 4, 35, 44, position[4], position[5], 0);
  aiguille[3].setup(3, 5, 37, 46, position[6], position[7], 0);
  aiguille[4].setup(4, 6, 39, 48, position[8], position[9], 1);
  aiguille[5].setup(5, 11, 41, 50, position[10], position[11], 0);

Par exemple :

aiguille[0].setup(0, 2
2 est le numéro de broche
aiguille[1].setup(1, 3
3 est le n° de broche

Si tu peux, garde le même brochage comme cela il n'y aura rien à modifier

Et il n'y a rien d'autre à modifier.

Maintenant comment ça marche ?

Quand le programme est lancé, il faut saisir des codes dans la barre du moniteur série de l'IDE Arduino :

- On commence par entrer le n° du servo que l'on veut régler (0, 1, 2...)
- va faire reculer le servo (très peu !), il faut donc appuyer plusieurs fois pour vraiment le voir bouger
+ va faire avancer le servo (très peu !)
s enregistre en EEPROM
w affiche à l'écran les réglages de tous les servos

Bon je n'ai pas beaucoup le temps là mais ensuite je te montrerai comment on fera pour actionner les différents servos à partir des réglages appliqués.

Et bien sûr ensuite avec des Boutons Poussoirs.

Christophe

frederic

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : TCO bp + ordi
« Réponse #10 le: février 13, 2024, 12:54:46 pm »
super merci,
je l' ai téléchargé et ouvert
je regarde et essaie de comprendre le code
effectivement c'est à un autre niveau 

frederic

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : TCO bp + ordi
« Réponse #11 le: février 13, 2024, 04:52:27 pm »
salut Christophe,
D' abord merci pour ton aide c'est sympa,
quelque explication:
J' ai un ami avec très peu de moyen, je lui ai proposé de lui faire un TCO avec des servomoteurs pour sa petite gare,  dans un premier temps la gare sera inclue dans un ovale double voie, le tout pour un budget de 50euro moi je prends rien (bénévolement),
pour la réalisation de ce TCO voici le matériels utilisé:

Un Arduino Mēga.   
Un module RTC.
Un écran 4 lignes I2C.
Fils de câblages.


hors TCO,
Servomoteur MG90S 180° métal.
Rallonges 3 fils servomoteurs.
Une alimentation ATX d' ordinateur modifier 5V et 12 V (occasion),
pour limité le câblage, j' avais prévus une platine PCA9685 sur la quelle brancher les servomoteurs, se qui me permettais d' avoir comme câble entre le TCO et son réseau: 2 fils pour alim 5V,2 fils pour le BUS de la PCA9685, 2 fils pour le BUS entre Arduino, en tout 8 fils (câble informatique 1 paire doublé pour le 5V).

Par la suite (dans une galaxie lointaine), cet ovale recevra une gare caché et une gare principale ,le tout gérer par ordinateur.

Je me suis lancé dans se projet pour lui, parce que de mon coté j' ai le même projet, mais d' une voie unique beaucoup plus complexe tout se que je vais apprendre pour son projet servira au mien voilà le passé, présent et futur de se/ses projet.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2860
  • 100% Arduino et N
    • Voir le profil
Re : TCO bp + ordi
« Réponse #12 le: février 14, 2024, 10:31:41 am »
@frederic,

je me suis amusé à dessiner mon réseau sur un écran 7" tactile résistif, avec des ordres graphiques simples de la bibliothèque UTFT. J'ai ajouté la commande des aiguilles en touchant simplement les aiguilles.

Le projet est connecté sur bus CAN et j'ai fait un simulateur simple qui montre la formation des itinéraires devant le train, avec position des aiguilles, puis les occupations des aiguilles et l'affichage du numéro de train dans la zone occupée.

C'est visible ici dans cette video.

https://vimeo.com/manage/videos/909176742

C'est assez laborieux à écrire et à chercher les coordonnées de chaque objet graphique, mais une fois que c'est fait, c'est facile à mettre au point.

Si vous voulez en savoir plus, il suffit de me le demander.
« Modifié: février 14, 2024, 10:43:10 am par Dominique »
Cordialement,
Dominique

frederic

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : TCO bp + ordi
« Réponse #13 le: février 14, 2024, 12:28:58 pm »
Salut,
Quand je voie tout les super projets ici,  je suis épatée j,e prends pleinement conscience de mon manque de connaissance,,
Et quand je pense au écran tactile grand format je pleure.


Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2860
  • 100% Arduino et N
    • Voir le profil
Re : TCO bp + ordi
« Réponse #14 le: février 14, 2024, 01:15:08 pm »
Au contraire il faut se réjouir d’avoir Locoduino  ;D

Tout s’apprend à petit pas, au fur et à mesure des désirs que l’on a et en progressant étape par étape, en commençant par des exemples (ceux fournis avec les bibliothèques pour apprendre leurs instructions, puis les projets dans Locoduino qu’on déforme pour obtenir le résultat visé).

Il ne faut pas être trop ambitieux au départ mais chercher les bonnes techniques de base et travailler de façon modulaire.
Cordialement,
Dominique