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.


Messages - Benoit92

Pages: [1] 2 3 ... 13
1
Présentez vous ! / Re : Hello world...
« le: juillet 29, 2018, 12:42:50 pm »
Pour l'installation physique de ton réseau, tu penses tout centraliser (par paquet de 8 optocoupleurs - ULN 2803A)
ou bien répartir (1 ou 2 Optocoupleurs - 6N136 ou 6N137) l'électronique (+ arduino)  à coté du canton lui-même?

2
Présentez vous ! / Re : Hello world...
« le: juillet 28, 2018, 04:06:45 pm »
1) Je pense que tu n'es pas obligé de couper le canton de commutation en deux parties pour ce qui concerne l'alimentation par les Booster.

2) N'oublies pas la Diode de Roue Libre (DRL) aux bornes du relais de commutation pour éviter les surtensions sur l'Arduino :
http://www.locoduino.org/spip.php?article29

3) Pour la mise au point de ton système, je te suggère de prendre une Breadboard et d'installer dessus :
  - Arduino (Nano ?)
  - 4 Boutons poussoir
  - 2 Leds (rouge + verte + résistance de 330 Ohm) pour simuler la commande du relais (Booster 1 ou 2)

4) Pour vérifier que ton code est robuste, tu pourras également essayer toutes les configurations possibles en :
  - appuyant sur plusieurs boutons à la fois,
  - appuyant successivement au hasard sur n’importe quel bouton,
Tu peux également réaliser la table de Carnaugh (4 entrées, 1 sortie) de ton automatisme pour y voir plus clair.

3
Infos et bonnes affaires / Re : ALIBABA
« le: juillet 27, 2018, 10:19:01 pm »
Je commande tous mes composants (sauf le Teensy) ainsi que les outillages de fraiseuse, de tour et d'imprimante 3D sans aucun problèmes et avec de délais qui peuvent descendre à 14-17 jours.

4
Présentez vous ! / Re : Re : Hello Everybody
« le: juillet 27, 2018, 10:09:24 pm »
Sinon, juste une information, à l'échelle 1 (1/32) , tu peux bénéficier d'occasions pas trop cher sur le marché allemand.
Pour le décodeur, il y a ESU par exemple.
Personnellement, j'ai pris un arduino nano avec la bibliothèque "NmraDcc" pour piloter le moteur et les éclairages.
Pour le son, j'ai choisi un Teensy 3.2, mais là, j'ai vraiment galéré pour la mise au point.

5
Présentez vous ! / Re : Hello world...
« le: juillet 27, 2018, 09:57:07 pm »
1) Il ne faut pas oublier que les reeds peuvent rebondir donc il faut peut être intégrer une fonction "Bounce".

2) Il faut installer des aimants sous les locomotives

3) Dans mon schéma, je pensais à la répartition suivante pour les capteurs :
  - reed 1 sur le canton booster 1
  - reed 4 sur le canton booster 2
  - Reed 2 et 3 sur le canton de commutation
  - Reed 2 à une distance de reed 1 inférieure à la longueur de la locomotive la plus petite
  - Reed 3 à une distance de reed 4 inférieure à la longueur de la locomotive la plus petite

Logique :
Si reed 1 = 1 et les autres =0, on peut définir le sens de marche
On rentre dans la boucle de sens reed 1 (le canton de commutation passe sur booster1) et on oublie le reed 2
Quand la locomotive arrive à la reed 3, on commute et le canton de commutation passe sur booster 2

De même dans l'autre sens :
Si reed 4 = 1 et les autres =0, on peut définir le sens de marche
On rentre dans la boucle de sens reed 4 (le canton de commutation passe sur booster2) et on oublie le reed 3
Quand la locomotive arrive à la reed 2, on commute et le canton de commutation passe sur booster 1

On doit pouvoir utiliser le même principe pour les boucles de retournement

4) Je pense qu'au démarrage du réseau, il vaut mieux éviter que tous les relais commutent ensemble (risque de bruit) sauf à vérifier par l'oreille qu'ils fonctionnent.

5) Penses-tu utiliser ces cantons pour faire de la signalisation ?

6) Je ne t'écris pas le code car je ne suis pas informaticien et j'utilise encore la truelle.

6
Présentez vous ! / Re : Hello world...
« le: juillet 26, 2018, 07:29:16 pm »

As-tu un plan de ton réseau pour placer les cantons avec leurs longueurs ?
Je pense qu'il faudra pouvoir détecter le sens du train.
Les 4 capteurs peuvent être également des pédales reed ou des barrières infra-rouge.


7
Composants / Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« le: juillet 25, 2018, 10:37:45 pm »
Bon, maintenant, cela marche (petite inversion de fil).
Vu avec un oscilloscope USB que je sors quand j'ai un "gros" problème.
La liaison série entre l'Arduino Nano et le Teensy 3.2 est maintenant debuggé.

J'ai ajouté également "Serial1.clear();" car sinon, le Teensy ne voit pas les changements de commande de lecture de fichier (il reste toujours sur le même fichier).

Donc, ci-joint, le code du Teensy qui fonctionne :

// Diesel Henschel DHG 500
// Teensy 3.2 + SPI Flash + Serial1(-> Arduino Nano)
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
#include <SoftwareSerial.h>

    //'*' Type on Serial Monitor
    //DHG_STA.TRW = 'a' Engine start
    //DHG_STO.TRW = 'z' Stop Engine
    //DHG_HOR.TRW = 'e' Horn
    //DHG_SPE.TRW = 'r' Driving
    //DHG_BRA.TRW = 't' Brake
    //DHG_IDL.TRW = 'y' Idle
    //DHG_UNC.TRW = 'u' Uncoupling
    //DHG_ACC.TRW = 'i' Acceleration

//SoftwareSerial mySerial(0, 1); // RX, TX

const int FLASH_CHIP_SELECT = 10; 
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// GUItool: begin automatically generated code
AudioPlaySerialflashRaw  playFlashRaw1;  //xy=228,273
AudioOutputAnalog        dac1;           //xy=751,337
AudioConnection          patchCord1(playFlashRaw1, 0, dac1, 0);
// GUItool: end automatically generated code

char Data;     // Read serial data
char PrevData;  // Read previous serial data
int i = 0;
int Led13 = 13;

void setup() {
    digitalWrite(Led13, HIGH);
    pinMode(Led13, OUTPUT);
    Serial.begin(9600); // Serial setup
    while (!Serial && millis()<500 );
    Serial.println("Diesel Henschel DHG 500");
   
    Serial1.begin(9600); // Serial1 setup
    while (!Serial1 && millis()<500 );
    AudioMemory(50);//
//    analogReference(EXTERNAL);// 3,3V Amplitude DAC

//************************************
//  Set up SPI Teensy without audio Card
  SPI.setMOSI(11); //7
  SPI.setMISO(12);
  SPI.setSCK(14);
//************************************
    delay(2000);
    if (!SerialFlash.begin(FLASH_CHIP_SELECT)) {
        while (1){
            Serial.println ("Cannot access SPI Flash chip");
            delay (10000);
        }
    }
}
    void playFile1(const char *filename)// Play audio file function
    {
      SerialFlashFile ff = SerialFlash.open(filename);
      Serial.print("Playing file1: ");
      Serial.println(ff);
      playFlashRaw1.play(filename);
     // Simply wait for the file to finish playing.
     while (playFlashRaw1.isPlaying()) {
     }
    }
   
void loop() {

  if ( Serial1.available() ) {
    Data = Serial1.read();
    Serial1.clear();
    Serial.println(Data);
  }
  else {
    Serial.println("Nothing");
  }

  switch (Data) {
       case 'a':{  // Play Soundfile in loop : Start
            playFile1("DHG_STA.TRW");
                              Serial.println("DHG_STA.TRW");
            Data = 'y';
            playFile1("DHG_IDL.TRW");
                              Serial.println("DHG_IDL.TRW");
        break;
       }
      case 'z':{  // Play Soundfile in loop : Stop

           playFile1("DHG_STO.TRW");
                              Serial.println("DHG_STO.TRW");
           Data = 'o';
      break;
      }   
      case 'e':{   // Play Soundfile only once : Horn 
           playFile1("DHG_HOR.TRW");
                              Serial.println("DHG_HOR.TRW");
           Data=PrevData; // Continue with previous soundfile
           Serial.println(Data);
      break;
           }
     case 'r':{  // Play Soundfile in loop : Full Speed
           PrevData = 'r';
           playFile1("DHG_SPE.TRW");
                              Serial.println("DHG_SPE.TRW");
     break;
    }   
     case 't':{  // Play Soundfile in loop : Brake 
           PrevData = 't';
           playFile1("DHG_BRA.TRW");
           Data = 'y';
           playFile1("DHG_IDL.TRW");
     break;
    } 
     case 'y':{  // Play Soundfile in loop : Idle
         PrevData = 'y';
         playFile1("DHG_IDL.TRW");
                             Serial.println("DHG_IDL.TRW");
     break;
    }
     case 'u':{  // Play Soundfile in loop : Uncoupling
         PrevData = 'u';
         playFile1("DHG_UNC.TRW");
                             Serial.println("DHG_UNC.TRW");
         Data = 'y';
         playFile1("DHG_IDL.TRW");
                              Serial.println("DHG_IDL.TRW");
     break;
    }
     case 'i':{  // Play Soundfile in loop : Uncoupling
         PrevData = 'i';
         playFile1("DHG_ACC.TRW");
                             Serial.println("DHG_UNC.TRW");
         Data = 'r';
         playFile1("DHG_IDL.TRW");
                              Serial.println("DHG_IDL.TRW");
     break;
    }
 }
}

8
Composants / Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« le: juillet 25, 2018, 06:36:20 pm »
1) J'ai essayé d'enlever le while, mais le son est catastrophique (cela donne un grésillement).

2) J'ai généré des sons globalement d'une durée de 1 à 2 s et donc je peux choisir l'option :
"Une nouvelle commande doit-elle être mise en attente en attendant que le son termine"

3) je vois sur certains exemples (pas tous) , que l'instruction "pinMode" est utilisée (je ne l'ai pas mise dans mon code) :
Ci-joint un exemple avec "pinMode"
// include the SoftwareSerial library so you can use its functions:
#include <SoftwareSerial.h>

#define rxPin 00
#define txPin 1

// set up a new serial port
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);

void setup()  {
  // define pin modes for tx, rx:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
  Serial.begin(9600);
}

void loop() {
  if (mySerial.available()>0){
  Serial.print(mySerial.read());
}
  if (Serial.available()>0){
  mySerial.print(Serial.read());
}
}

9
Composants / Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« le: juillet 25, 2018, 11:16:35 am »
Merci Jean-Luc,
Par contre, je ne sais pas trop comment faire sur le Teensy  pour "et en même temps":
 - Jouer le son : playFlashRaw1
 - Recevoir les commandes de son (provenant de l'arduino) via SoftwareSerial mySerial(7, 8 ); // RX, T (sur le teensy)

Nota :
Quand je branche directement le Teensy sur le PC (liaison USB) et que je tape les commande 'a', 'z', ....... cela marche très bien.

10
Composants / Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« le: juillet 25, 2018, 12:13:07 am »
J'essaye de faire dialoguer l'Arduino Nano avec le Teensy 3.2 avec une liaison série.
Mais, je ne récupère rien sur le moniteur série monté sur le Teensy via la liaison USB -PC.
De plus, je récupère le message suivant :
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space

Code coté Arduino Nano (pin 7 et 8 )
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8); // RX, TX
void setup()
{
  Serial.begin(9600); // USB moniteur série
  mySerial.begin (9600);// liaison série vers Teensy
}
void loop()
{
mySerial.write('a');// son démarrage moteur
}

Code coté Teensy (pin Rx1, Tx1)
#include <SoftwareSerial.h>
int Data
void setup() {
    Serial.begin(9600); // USB-PC
    while (!Serial && millis()<500 );
   Serial1.begin(9600); // liaison série vers Arduino
    while (!Serial1 && millis()<500 );
}

void loop() {
  if ( Serial1.available() ) {
    Data = Serial1.read();
    Serial.println(Data);
}

Nota : Je branche sur le PC soit la prise USB vers Arduino, soit USB vesr Teensy

11
Présentez vous ! / Re : Hello Everybody
« le: juillet 23, 2018, 06:56:42 pm »
Bienvenue,
Quel est ton projet à l'échelle O ?

12
Présentez vous ! / Re : Re : Hello world...
« le: juillet 22, 2018, 08:49:35 pm »
Mais si tu mets 10 booster de 2,5 A, ça fait quand même 25 A à sortir !

Je me demande si, en appliquant le même signal PWM + DIR fourni par l’Arduino, à travers des amplis rapides, à tous les ponts en H en même temps, ne suffit pas en fin de compte.

Les différences de tension au passage des jonctions doivent être minimes et très courtes et supportées par les ponts.
Chaque locomotive semble consommer 1 A (sans les éventuels éclairages de wagons et les aiguillages + signaux).
2,5 A : cela fait donc une marge "normale" de 2 qui permet de ne pas trop échauffer les composants (fiabilité).
25 A ou 10x2,5 A, il te faudra toujours 25x18V = environ 500W.
Si tu fais des modules de 2,5 A, cela permet en cas de panne de pouvoir continuer à jouer en mode dégradé.
Tu peux aussi prévoir des "spare" vu le prix d'un ponts en H L298N.

13
Présentez vous ! / Re : Hello world...
« le: juillet 22, 2018, 06:34:13 pm »
Les 43A, tu peux les avoir que si ton alimentation 220V / 0-18V tient le coup. Si elle fait 18V /10A, tu ne pourras sortir que 10 A.
Sinon, tu peux utiliser plusieurs ponts en H moins puissants (à partir de L298N):
https://fr.aliexpress.com/item/L298N-DC-and-stepper-Motor-dual-drive-module-for-Arduino/2036890763.html?spm=a2g0w.10010108.1000013.1.7acb14f0a1DJgq&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.90158.0&scm_id=1007.13339.90158.0&scm-url=1007.13339.90158.0&pvid=9e30f5b3-79e7-4b28-afca-809e292c89bc
Pour le problème de court-circuit entre deux boosters, tu peux créer un canton neutre qui est alimenté par l'un ou l'autre des boosters suivant le sens de marche.
Le canton doit faire une "certaine" longueur.
La commutation entre les deux boosters est réalisée alors que le train est sur le canton "neutre".

14
Composants / Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« le: juillet 20, 2018, 06:58:27 pm »
En fait, j'ai commencé le modélisme ferroviaire il y a près de 50 ans avec un train Märklin  en HO.
Depuis, j'ai acheté de nombreuses locomotives, wagons, rails, caténaires ... pour réaliser des réseaux fixes.
Maintenant, je n'ai plus la place de faire un réseau fixe en HO.
Donc j'ai décidé de me mettre à l'échelle 1 et d'essayer de fabriquer le maximum de chose moi-même (partie électronique, informatique et mécanique).
L'intégration de l'électronique (Arduino, L238, Teensy, Ampli, haut parleur, alimentation, éclairages et feux) dans du HO est en effet plus compliquée (sans parler du N et du Z) par manque de place dans la locomotive.
Pour la partie mécanique, on se rapproche de l'horlogerie même en HO.

Donc je joue "à l'ancienne" : montage et démontage des rails dans le salon.
On peut aussi l'installer dans un jardin : Mon rêve si j'avais un jardin !
Si on veut laisser les rails en place, il vaut mieux utiliser les rails LGB qui sont plus résistants que les Märklin (qui sont plus réalistes).
Sinon, je pourrais également faire circuler ma 2D2 sur un réseau de club bien qu'en France contrairement de l’Allemagne et à la Suisse, l'échelle 1 soit peu développée (au profit de l'échelle O).
Le marché allemand (Ebay.de) à l'échelle 1 est assez développé et pas trop cher si on attend les bonnes opportunités.

Pour l'instant, j'ai avancé sur la partie électronique et logicielle, mais pas trop sur la partie mécanique de mon projet de 2D2.
Il faut dire que pour réaliser les roues (diamètre 60 mm), il faut que j'usine de l'inox (304L pour les connaisseurs : le 303 est plus usinable, mais introuvable) et les fraises cassent comme à Gravelotte.



15
Composants / Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« le: juillet 19, 2018, 11:32:36 pm »
J'ai trouvé sur Ebay Allemagne une petite locomotive diesel de triage rouge (Echelle 1) pour une trentaine d'€.
J'ai changé le stator bobiné d'origine pour un rotor aimant permanent de chez ESU (+ charbons + Bandages adhérants +nettoyage complet du moteur).
J'ai récupéré certains sons sur "ESU Project".
Afin d'obtenir une grande réactivité pour la génération des sons (16 bits - 44kHz), certains fichiers son ne durent qu'environ 1 s.
Il existe certes,  des petits claquements à reprise de lecture. Je pense régler cela avec un condensateur, à moins qu'il existe une solution logicielle ?
La commande du moteur et des leds sera effectuée à partir d'un Arduino Nano.
Celui-ci enverra les ordres de lecture de son ('a', 'z', 'e', 'r', 't', 'y', 'u', 'i') avec la ligne Serial (Tx Rx).
Le Teensy 3.2 recevra les ordres de lecture de son sur la ligne Serial (Tx1 Rx1) (qui est indépendante de sa ligne Serial Tx Rx de la liaison USB - PC : avantage du Teensy).
Ci-joint, le code de génération du son du Teensy :
// Diesel Henschel DHG 500
// Teensy 3.2 + SPI Flash + Serial1(Arduino Nano)
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

    //'*' Type on Serial Monitor
    //DHG_STA.TRW = 'a' Engine start
    //DHG_STO.TRW = 'z' Stop Engine
    //DHG_HOR.TRW = 'e' Horn
    //DHG_SPE.TRW = 'r' Driving
    //DHG_BRA.TRW = 't' Brake
    //DHG_IDL.TRW = 'y' Idle
    //DHG_UNC.TRW = 'u' Uncoupling
    //DHG_ACC.TRW = 'i' Acceleration

const int FLASH_CHIP_SELECT = 10; 
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// GUItool: begin automatically generated code
AudioPlaySerialflashRaw  playFlashRaw1;  //xy=228,273
AudioOutputAnalog        dac1;           //xy=751,337
AudioConnection          patchCord1(playFlashRaw1, 0, dac1, 0);
// GUItool: end automatically generated code

int Data;     // Read serial data
int PrevData;  // Read previous serial data
int i = 0;

void setup() {
    Serial.begin(9600); // Serial setup
    while (!Serial && millis()<500 );
    AudioMemory(50);//
//    analogReference(EXTERNAL);// 3,3V Amplitude DAC

//************************************
//  Set up SPI Teensy without audio Card
  SPI.setMOSI(11); //7
  SPI.setMISO(12);
  SPI.setSCK(14);
//************************************
    delay(2000);
    if (!SerialFlash.begin(FLASH_CHIP_SELECT)) {
        while (1){
            Serial.println ("Cannot access SPI Flash chip");
            delay (10000);
        }
    }
}
    void playFile1(const char *filename)// Play audio file function
    {
      SerialFlashFile ff = SerialFlash.open(filename);
      Serial.print("Playing file1: ");
      Serial.println(ff);
      playFlashRaw1.play(filename);
     // Simply wait for the file to finish playing.
     while (playFlashRaw1.isPlaying()) {
     }
    }
   
void loop() {
  if ( Serial.available() ) {
    Data = Serial.read();
    Serial.println(Data);
  }
  else {
    Serial.println("Nothing");
  }

  switch (Data) {
       case 'a':{  // Play Soundfile in loop : Start
            playFile1("DHG_STA.TRW");
                              Serial.println("DHG_STA.TRW");
            Data = 'y';
            playFile1("DHG_IDL.TRW");
                              Serial.println("DHG_IDL.TRW");
        break;
       }
      case 'z':{  // Play Soundfile in loop : Stop

           playFile1("DHG_STO.TRW");
                              Serial.println("DHG_STO.TRW");
           Data = 'o';
      break;
      }   
      case 'e':{   // Play Soundfile only once : Horn 
           playFile1("DHG_HOR.TRW");
                              Serial.println("DHG_HOR.TRW");
           Data=PrevData; // Continue with previous soundfile
           Serial.println(Data);
      break;
           }
     case 'r':{  // Play Soundfile in loop : Full Speed
           PrevData = 'r';
           playFile1("DHG_SPE.TRW");
                              Serial.println("DHG_SPE.TRW");
     break;
    }   
     case 't':{  // Play Soundfile in loop : Brake 
           PrevData = 't';
           playFile1("DHG_BRA.TRW");
           Data = 'y';
           playFile1("DHG_IDL.TRW");
     break;
    } 
     case 'y':{  // Play Soundfile in loop : Idle
         PrevData = 'y';
         playFile1("DHG_IDL.TRW");
                             Serial.println("DHG_IDL.TRW");
     break;
    }
     case 'u':{  // Play Soundfile in loop : Uncoupling
         PrevData = 'u';
         playFile1("DHG_UNC.TRW");
                             Serial.println("DHG_UNC.TRW");
         Data = 'y';
         playFile1("DHG_IDL.TRW");
                              Serial.println("DHG_IDL.TRW");
     break;
    }
     case 'i':{  // Play Soundfile in loop : Uncoupling
         PrevData = 'i';
         playFile1("DHG_ACC.TRW");
                             Serial.println("DHG_UNC.TRW");
         Data = 'r';
         playFile1("DHG_IDL.TRW");
                              Serial.println("DHG_IDL.TRW");
     break;
    }
 }
}

Pages: [1] 2 3 ... 13