Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - maxou9914

Pages: [1]
1
Vos projets / loco LGB sans fil
« le: janvier 30, 2017, 07:57:48 pm »
Bonjour,

Après des mois de recherche et de test, je vous présente mon projet de contrôle de train sans fil !

A la suite de différent essai dans la gestion de 2/3 train sur un circuit LGB extérieur, contrôle de puissance pour chaque canton (une commande par canton :o) sur un TCO. Le nombre incommensurable de câbles que cela génère (2 fils par canton) rend la gestion en extérieur difficile et l'évolution du réseau complexe, ajout de nouveaux cantons ou modifications. Je me retrouve rapidement avec une cinquantaine de fils sans compter les moteurs d’aiguilles (en cours d'achat).
Cela oblige à avoir un TCO fixe et démontable (je suis en extérieur).


Donc face à ces contraintes je pense avoir trouvé MA solution.

Je suis parti du principe que les rails m'apporte juste le courant (18V) et que la locomotive possède un "décodeur" qui dialogue avec ma commande sans fil.

Donc nous avons au final:

Une locomotive avec:
1- un pont redresseur (4 diodes) ( je suis en continu mais si je retourne la loco....)
2- L298n (pour la puissance motrice) -> je pense le remplacer par la suite ? car sifflement du moteur ?!? :o à bas régime
3- un régulateur de tension LM2596 (pour arduino et le L298n)
4- un arduino mini
5- un Émetteur-récepteur sans fil 2,4 GHz Module NRF24L01

Une commande sans fil:

1- un arduino mini
2- un Émetteur-récepteur sans fil 2,4 GHz Module NRF24L01
3- un écran 4 lignes
3- Potentiomètre
4- boutons


Je joins le code pour la manette et la loco, il est fonctionnel dans l'état pour une seul loco. Des options en cours de développement ne sont pas encore fonctionnelles:

-détection RFID :
   -> arrêt en gare automatique (fonctionne mais problème)
   -> "retro signalisation" pour une gestion des feux ?
   -> ???


- Muti loco ( en cour)
- Feux Av/Ar
- Gestion sonore en fonction de la vitesse ;D
- Fumigène en fonction de la vitesse 8)
- Gestion des aiguilles sans fil :o
- Trajet automatique (je commence a rêvé là ..... ;D)
- ..... ???? ::)

Mon problème mis en stand-by :
 Impossible de connecter un détecteur RFID et le module NRF24L01  sinon plus de communication avec le NRF24L01 ?!  :-\ tous deux communiquent en SPI.
J'ai trouvé un autre détecteur RFID qui communique via le RX/TX mais pas encore tester.


Je planche sur la gestion de plusieurs loco afin de faire fonctionner tout ça aux beaux jours.



2
Bonjour,

Mon projet consiste à :

Objectif :

1- le PRINCIPAL - Remplacement des moteurs marklin par des servos (marre de les changer tous les mois !!)

2 - le secondaire  - Gestion des éclairages (candélabres et maison) et des moteurs de grue ou d'attraction

Contrainte :

Pilotable par la CS2

Avec la bibliothèque UAD j'ai réussi  modifier le programme pour contrôler 5 servo et 3 commandes de lumières à partir de commande DCC.

#include "UniversalAccessoryDecoder.h"
#define kDCC_INTERRUPT            3

#define AccessoryServoNumber      2

#define SERVO1 0
#define SERVO2 1

#define AccessoryMotorLightNumber      3

#define LIGHT1 2
#define LIGHT2 3
#define LIGHT3 4

#define LIGHT1_PORT 0
#define LIGHT2_PORT 1
#define LIGHT3_PORT 2

// Accessories

Accessories accessories;
DccCommander dccCommander;
AccessoryGroup groupServos;
AccessoryGroup groupLights;

// Drivers

DriverArduino *arduino;

//////////////////////////////////
//
// Setup
//
void setup()
{
  UAD_StartSetup();

  // Setup of Dcc commander
  dccCommander.Setup(0x00, 0x00, kDCC_INTERRUPT);
  dccCommander.SetStatusLedPin(13);


  // Drivers setups

  arduino = new DriverArduino(AccessoryMotorLightNumber, AccessoryServoNumber);
  arduino->Setup();
  arduino->SetupPortServo(SERVO1, 2); //sortie arduino
  arduino->SetupPortServo(SERVO2, 3); //sortie arduino

  arduino->SetupPortMotor(LIGHT1_PORT, 9, ANALOG); //sortie arduino
  arduino->SetupPortMotor(LIGHT2_PORT, 10, ANALOG); //sortie arduino
  arduino->SetupPortMotor(LIGHT3_PORT, 11, ANALOG); //sortie arduino

  // Accessories setups

  accessories.Setup(
    AccessoryMotorLightNumber + AccessoryServoNumber,

    new AccessoryServo(999, 0, 0), // (address DCC, sous address, durée activation )
    new AccessoryServo(999, 0, 0), // (address DCC, sous address, durée activation )
    new AccessoryLight(1, 0), //(address DCC, sous address, durée activation )
    new AccessoryLight(1, 1), //(address DCC, sous address, durée activation )
    new AccessoryLight(2, 0) //(address DCC, sous address, durée activation )
  );


  SERVO(accessories, SERVO1)->Setup(arduino, SERVO1, 10, 150); // Définition du servo: ( drivers, port de sortie, angle1 , angle 2)
  SERVO(accessories, SERVO2)->Setup(arduino, SERVO2, 10, 150); // Définition du servo: ( drivers, port de sortie, angle1 , angle 2)
  LIGHT(accessories, LIGHT1)->Setup(arduino, LIGHT1_PORT);
  LIGHT(accessories, LIGHT2)->Setup(arduino, LIGHT2_PORT);
  LIGHT(accessories, LIGHT3)->Setup(arduino, LIGHT3_PORT);



  //Servo1
  GroupState *pServo1_1 = new GroupState(320, 0, true); //(Addresse DCC, sous addresse, activation simultané)
  pServo1_1->Setup(1, new GroupStateItem(accessories[SERVO1], MINIMUM)); //(port arduino, choix angle mini ou maxi, délai entre 2 action))

  GroupState *pServo1_2 = new GroupState(320, 1, true);
  pServo1_2->Setup(1, new GroupStateItem(accessories[SERVO1], MAXIMUM));


  //Servo2
  GroupState *pServo2_1 = new GroupState(319, 0, true); //(Addresse DCC, sous addresse, activation simultané)
  pServo2_1->Setup(1, new GroupStateItem(accessories[SERVO2], MINIMUM)); //(port arduino, choix angle mini ou maxi, délai entre 2 action))

  GroupState *pServo2_2 = new GroupState(319, 1, true);
  pServo2_2->Setup(1, new GroupStateItem(accessories[SERVO2], MAXIMUM));

  //Liste des actions servo
  groupServos.Setup(4, pServo2_1, pServo2_2, pServo1_1, pServo1_2); // fusion des 2 actions

 

    // LIGHT 1
GroupState *pLight1_1 = new GroupState(318, 0, true);
pLight1_1->Setup(1,new GroupStateItem(accessories[LIGHT1], LIGHTON));
GroupState *pLight1_2 = new GroupState(318, 1, true);
pLight1_2->Setup(1,new GroupStateItem(accessories[LIGHT1], LIGHTOFF));

    // LIGHT 2
GroupState *pLight2_1 = new GroupState(317, 0, true);
pLight2_1->Setup(1,new GroupStateItem(accessories[LIGHT2], LIGHTON));
GroupState *pLight2_2 = new GroupState(317, 1, true);
pLight2_2->Setup(1,new GroupStateItem(accessories[LIGHT2], LIGHTOFF));

    // LIGHT 3
GroupState *pLight3_1 = new GroupState(316, 0, true);
pLight3_1->Setup(1,new GroupStateItem(accessories[LIGHT3], LIGHTON));
GroupState *pLight3_2 = new GroupState(316, 1, true);
pLight3_2->Setup(1,new GroupStateItem(accessories[LIGHT3], LIGHTOFF));


    // One group state with lights on/off/on, for Dcc code 319/0.
groupLights.Setup(6, pLight1_1, pLight1_2, pLight2_1, pLight2_2, pLight3_1, pLight3_2);




  UAD_EndSetup();
}

void loop()
{
  if (dccCommander.Loop())
  {

    accessories.Loop();
    groupServos.Loop();
    groupLights.Loop();
  }
}

Le problème étant que l'arduino (dans mon cas un mega) ne permet pas d'utiliser plusieurs servo en même temps, pour cela il existe :

soit des Shield de control de moteur + servo  exemple mais limité à 2 servos par shield

ou

Adafruit Controleur PWM Servo 16 canaux 12 bits - I2C interface - PCA9685 exemple avec 16 sorties PWM ( servo ou leds) et montage en série possible par le bus I2C (limite 900).


Mais (bas oui :) ) le problème est que la bibliothèque ne permet pas (encore) de contrôler les ports par l'interface I2C.

De même pour le contrôle de lumière voulant repartir de l'autre bibliothèque light permettant de créer différents effet lumineux je me suis rendu compte que la bibliothèque ne permet pas de "commuter" une instruction

il m'est donc venu l'idée de rendre la bibliothèque plus modulable en y ajoutant( si possible) une commande DCC pointant vers une instruction que le peut écrire dans la partie Setup.

Exemple :

Aujourd’hui :
la CS2 envoie le code DCC 320:1 -> arduino reçoit le code DCC  -> commute le port de l'arduino associé au code dcc
la CS2 envoie le code DCC 320:0 -> arduino reçoit le code DCC  -> commute le port de l'arduino associé au code dcc

Mon idée :
la CS2 envoie le code DCC 320:1 -> arduino reçoit le code DCC  -> active l'instruction associé au code dcc -> envoie les données sur un bus (I2C - CAN - autre ) ou active un sous-programme de gestion de lumière ou moteur)
la CS2 envoie le code DCC 320:0 -> arduino reçoit le code DCC  -> désactive l'instruction associé au code dcc -> envoie les données sur un bus (I2C - CAN - autre ) ou désactive un sous-programme de gestion de lumière ou moteur)

On peut aussi remplacer une instruction par une variable ( vrai ou faux).

En conclusion la programmation peut se révéler plus complexe du fait de la personnalisation, mais laisse une liberté supplémentaire et des possibilités presque infini du fait de l'utilisation du bus I2C et non limité au nombre de sorties de l'arduino.


J’espère avoir été clair  ;D et savoir si il est possible d'améliorer la bibliothèque dans ce sens.


Et je remercie les personnes ayant déjà réalisé tous ce travail !!!!!!!

Bonne soirée.





3
Présentez vous ! / Salut à Tous
« le: septembre 25, 2015, 07:42:20 pm »
Bonjour,
Je m'appelle Maximilien, j'ai un réseau en HO avec une central Marklin et voulant toujours améliorer mon réseaux à moindre cout pour un maximum de plaisir je me suis rendu compte suite à un autre projet basé sur l'arduino ( mise au point d'un appareil photo avec un moteur pas à pas contrôlé par ordinateur et manuellement) que le monde de l'arduino me rendrais la tache plus facile (moins d’électronique ou pas :o).

J'ai 2 projets:

Objectif :

1- le PRINCIPAL - Remplacement des moteurs marklin par des servos ( marre de les changer tous les mois !!)

2 - le secondaire  - Gestion des éclairages (candélabres et maison) et des moteur de grue ou d'attraction

Contrainte :

Pilotable par la CS2

j'ai déjà bien avance grâce au divers tuto et à l'UAD  :D

Pages: [1]