Messages récents

Pages: 1 ... 7 8 [9] 10
81
Vos projets / Re : Identification des trains par infrarouge
« Dernier message par bobyAndCo le mai 02, 2025, 05:13:45 pm »
Bonjour JPM06,

L'hypothèse du 4/8 ne se justifie sans doute pas. Peut-être même n'y a t'il pas besoin de contrôle. Mais ça, c'est ça vérifier selon le taux d'erreurs aux essais.

J'ai malheureusement pas beaucoup de temps et peut-être pas les composants, mais j'ai commencé à écrire un code simple mais complet pour un émetteur sur ATTiny. J'ai même ajouté un checksum très sommaire mais certainement suffisant.

bit de start + data + checksum + bit de stop.

/*

  idTrainIr38kHzATTiny_emetteur
 
  Identification de trains avec led IR à 38Khz

  Programme pour ATTiny 25/45/85

           _______
  (Reset) -|1   8|- Vcc
     PB3  -|2   7|- PB2
     PB4  -|3   6|- PB1 ← LED IR (OC0B)
     GND  -|4   5|- PB0
           -------

*/

// Définition de la broche utilisée pour la LED IR (PB1 = pin 6)
#define LED_BIT PB1
#define LED_DDR DDRB
#define LED_PORT PORTB

// Octet d'identification du convoi
const byte identifiant = 0x5A; // Exemple

void setup() {
  // Configurer la broche PB1 comme sortie (celle connectée à la LED IR)
  LED_DDR |= (1 << LED_BIT);
  // Initialiser le Timer0 en PWM à 38 kHz sur OC0B (PB1)
  setup38kHzPWM();
}

void loop() {
  byte checksum = identifiant ^ 0xA5;  // XOR avec une constante arbitraire 0xA5
  // Émission d'une trame IR : Start + ID + Checksum + Stop
  sendStartBit();
  sendByte(identifiant);
  sendByte(checksum);
  sendStopBit();
  delay(500);
}

// Configuration du Timer0 pour produire du PWM à 38 kHz sur OC0B (PB1)
void setup38kHzPWM() {
  // Mode Fast PWM avec TOP = OCR0A (Mode 7 : WGM02 + WGM01 + WGM00)
  // OCR0A définit la période → fréquence = 16MHz / (2 × (OCR0A + 1))
  TCCR0A = _BV(WGM01) | _BV(WGM00) | _BV(COM0B1); // Sortie sur OC0B activée
  TCCR0B = _BV(WGM02) | _BV(CS00); // Pas de préscaler (division par 1)
  // Pour 38 kHz : OCR0A = 210 → période ≈ 26.3 µs
  OCR0A = 210;
  // Rapport cyclique 50 % → OCR0B = moitié de OCR0A
  OCR0B = 105;
}

// Active ou désactive le signal PWM sur OC0B (PB1)
void enablePWM(bool on) {
  if (on) {
    // Active le lien entre le Timer0 et la broche PB1
    TCCR0A |= _BV(COM0B1);
  } else {
    // Déconnecte le Timer0 de la broche
    TCCR0A &= ~_BV(COM0B1);
    // Force la broche PB1 à l'état LOW (éteint la LED IR)
    LED_PORT &= ~(1 << LED_BIT);
  }
}

// Envoie un octet (8 bits) bit par bit, MSB en premier
void sendByte(byte data) {
  for (int i = 7; i >= 0; i--) {
    if (data & (1 << i))
      sendBit1();
    else
      sendBit0();
  }
}

// Envoie un bit logique '1' : 600 µs burst + 600 µs silence
void sendBit1() {
  enablePWM(true);             // Allume la LED IR (signal 38 kHz)
  delayMicroseconds(600);      // Durée du burst
  enablePWM(false);            // Éteint la LED
  delayMicroseconds(600);      // Rien
}

// Envoie un bit logique '0' : 600 µs burst + 1600 µs silence
void sendBit0() {
  enablePWM(true);             // Allume la LED IR
  delayMicroseconds(600);      // Durée du burst
  enablePWM(false);            // Éteint la LED
  delayMicroseconds(1600);     // Espace long
}

// Envoie un bit de start (synchronisation) : burst de 2400 µs
void sendStartBit() {
  enablePWM(true);             // Allume la LED IR
  delayMicroseconds(2400);     // Long burst = signal de synchronisation
  enablePWM(false);            // Éteint la LED
  delayMicroseconds(600);      // Pause après start
}

// Envoie un bit de stop
void sendStopBit() {
  enablePWM(false);            // LED éteinte
  delayMicroseconds(2000);     // fin
}

Si quelqu'un veut tester avec un UNO je peux fournir le code, il y a juste les ports à changer (à priori)

#define LED_BIT PB1
#define LED_DDR DDRB
#define LED_PORT PORTB

void setup38kHzPWM() {
  // Timer2 en mode Phase Correct PWM à 38 kHz sur OC2B (D3)
  TCCR2A = _BV(WGM21) | _BV(COM2B1);  // COM2B1 = PWM activé
  TCCR2B = _BV(WGM22) | _BV(CS20);    // CS20 = pas de prescaler
  OCR2A = 210;                        // Fréquence = 16MHz / (2 * (OCR2A + 1)) ≈ 38 kHz ≈ 26.3 µs
  OCR2B = 105;                        // 50 % de duty cycle
}

// Active ou désactive le PWM sur D3
void enablePWM(bool on) {
  if (on)
    TCCR2A |= _BV(COM2B1);        // Activer sortie OC2B
  else {
    TCCR2A &= ~_BV(COM2B1);       // Désactiver OC2B
    LED_PORT &= ~(1 << LED_BIT);  // Mettre D3 à LOW
  }
}

Sans garantie cependant pour le UNO

Christophe
82
Vos projets / Re : Identification des trains par infrarouge
« Dernier message par JPM06 le mai 02, 2025, 03:19:48 pm »
Bonjour,

Il serait intéressant de voir (= tester) si ce codage 4/8 permet de simplifier le filtrage des octets à la réception: actuellement j'attends d'avoir reçu trois octets successifs identiques pour les considérer comme valides. En passant à deux, par exemple, on pourrait soit augmenter la sensibilité du système (plus grande vitesse des convois, quoi qu'elle soit déjà importante), soit réduire la vitesse de signalisation de 19,2 à 9,6kbps, ce qui est toujours bon à prendre.
Mais il ne faudrait pas que le temps de traitement du filtrage réduise ces avantages à zéro.

JPM06
83
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« Dernier message par DDEFF le mai 02, 2025, 10:14:18 am »
Bonjour,

Some news : je suis en train de modifier l'éditeur de façon à ce que le JSON soit cohérent avec ce qu'on a dit précédemment.
On a maintenant 30 moteurs, mais seulement 14 appareils pour ce que j'appellerai maintenant le Locoduinodrome 3 (en PJ).
Je vous en dirai plus bientôt.

Denis :P

PS : la bretelle et les bretelles doubles sont là pour un réseau d'essai. La SNCF n'aurait jamais mis ces bretelles à ces endroits. Mais il fallait bien les mettre quelque part...
84
Vos projets / Re : Identification des trains par infrarouge
« Dernier message par bobyAndCo le mai 01, 2025, 06:49:45 pm »

JPM06 utilise un TSAL4400 alors que Dave Bodnar utilise un TSAL6400

Référence | Angle (°) | Intensité (mW/sr) | Faisceau
TSAL4400 |    ±22     | 45                       | Moyen
TSAL6400 |    ±25     | 30                       | Large (tolérant)

Une rapide recherche semble donner un certains avantage au TSAL6400 hormis pour l'intensité. Quelqu'un à t'il un avis sur ce point.

Par ailleurs, je me pose la question de savoir s'il faut utiliser le port série (UART) ou alors fabriquer son propre protocole et utiliser un timer pour générer le signal et une interruption pour le lire.

Le protocole série ne peut pas fonctionner à 38 Khz et il faudra de toute façon passer par une biblio qui elle même utilisera des timers. Et la structure des trames est plus "lourde". Je pense même que l'on pourrait reprendre le principe de codage adopté par Railcom (4/8). Voir l'article sur les décodeurs Railcom : https://www.locoduino.org/spip.php?article334



On limite à 127 le nombre de locos identifiables (mais c'est déjà pas mal) et on a un fonctionnement très léger et beaucoup plus rapide. Des avis sur le sujet?

J'ai très envie de réaliser ce projet car je le trouve amusant, assez simple et économique. Les ATTiny que je trouve on utilise pas suffisamment sont taillés sur mesure pour ce type de job. Pour l'émission tout au moins.

Christophe
85
Aide / Re : Comment rendre un moteur d'aiguillage moins bruyant avec le digital ?
« Dernier message par loulout le mai 01, 2025, 12:56:08 pm »
Les progrès dans le domaine du modélisme ferroviaire sont parfois étranges. Après avoir testé des moteurs Peco Twistlock sous table et latéraux sur table, aussi bruyants l'un que l'autre à peu de choses près, j'ai testé un vieil aiguillage Jouef des années 60. Avec la même méthode, Arduino (digitalWrite...)+ un bloc relais, et une alimentation en 12V continu alors que le 14V alternatif devrait être utilisé. Miracle, on entend maintenant un peu le relais (qui était masqué par le moteur Peco) mais quasiment pas le moteur Jouef. De plus, le moteur Jouef est totalement intégré, aucun montage à faire, et relativement discret. Ou pourquoi faire simple quand...

La suite : essayer des servos Decapod ou DLY.
86
Vos projets / Re : Identification des trains par infrarouge
« Dernier message par JPM06 le mai 01, 2025, 11:31:13 am »
Bonjour à tous,

Ce projet est en "stand-by" parce que je n'ai trouvé personne d'intéressé pour aller plus loin avec moi, c'est à dire vraiment équiper un réseau.
Et je n'ai pas non plus trouvé le temps de construire un réseau de démonstration.
Mon réseau personnel est opérationnel sans ça.

Mon but était essentiellement de valider des solutions techniques, et pour moi c'est fait.

Il semble que l'électronique, la programmation, le WiFi... font un peu peur, et surtout à des gens qui ont construit leur réseau sans ça.
Il est vrai qu'embarquer de l'électronique dans un train, surtout en HO, est problématique. Au final il semble qu'on préfère couper les rails pour y mettre des détecteurs classiques, comme dans les solutions du commerce. ("Solution du commerce" est le mot clé).

Ceci dit, plusieurs membres de mon association ont des réseaux en projet ou en construction. Je les garde à l'oeil!  ;)

Quelques réponses aux derniers posts:

• oui, il s'agit bien d'identifier, et pas seulement de détecter. Pour une simple détection, voirhttp://amfn.nice.free.fr/det3.htm#Photo-%C3%A9lectriques

• certes, les LEDs qui dépassent font moche, mais ce n'est que pour les tests. Je n'ai pas voulu charcuter un wagon ou des maquettes de bâtiment.

• la vitesse maximum du convoi est indiquée: 1,25m/s, soit 390km/h en HO.

• pour mes tests j'ai alimenté l'électronique embarquée par batteries, mais dans une réalisation réelle, il faudrait l'alimenter depuis la voie... avec les problèmes que ça pose.
Notez qu'un de mes amis qui construit ses décodeurs lui-même m'en a fait un avec génération du code directement par le décodeur. L'électronique embarquée se réduit alors à la seule LED. Pourquoi les fabricants de décodeur ne font-ils pas ça aussi? :(

• merci pour les liens vers différents produits ou réalisations qui sont de la même famille.
Il existe un produit commercial (je l'ai découvert tardivement) qui offre les mêmes fonctionnalités, mais avec deux LEDS pour détecter le sens de passage. Désolé, je n'ai plus le lien.

• dernière remarque: à l'époque je n'ai pas choisi entre les deux solutions (LOTIR et RASCAR). Avec le recul je m'orienterais aujourd'hui vers une électronique embarquée minimum (LOTIR) et des détecteurs le long de la voie, mais connectés à un bus filaire. Le WiFi pourrait être introduit en bout de chaine pour agir sur la centrale.

Je suis avec intérêt vos commentaires.
 

87
Vos projets / Re : Identification des trains par infrarouge
« Dernier message par Dominique le mai 01, 2025, 10:29:45 am »
L’idée de percer un plancher de wagon pour émettre un signal lumineux,… est lumineuse !
Ça doit entrer dans un wagon en N.

Deux questions me viennent à l’esprit :
- détecter l’approche d’un lecteur (phototransistors entre les traverses), avec une led émettrice IR quelques centimètre avant pour démarrer l’émission du signal d’identification.
- allonger la zone de lecture pour lire des messages aux passages à grande vitesse
88
Vos projets / Re : Identification des trains par infrarouge
« Dernier message par bobyAndCo le mai 01, 2025, 09:42:44 am »
Merci Marcel,

J'ai lu en diagonale, mais il me semble que ce système ne permet pas l'identification (juste la détection). Contrairement au lien que tu avais partagé le 2 juin 2022 (qui concerne également un montage de Dave Bodnar) :

http://www.trainelectronics.com/IR_Train_Identification/index.htm

Christophe

90
Vos projets / Re : Identification des trains par infrarouge
« Dernier message par bobyAndCo le avril 30, 2025, 09:50:16 pm »
C’est à l’occasion du « up » que vient de faire Brunotoutsimple sur ce sujet que je le découvre.

J’aime bien le principe et il peut s’agir en effet d’un montage simple, économique et pas trop encombrant.

Je suis prêt à apporter ma contribution, en particulier sur le développement du code.

Mais je suis assez réservé sur plusieurs points et pour lesquels j’aimerais vos éclairages si vous en avez :

- Quand je regarde les photos avec ces leds qui dépassent des wagons et des bâtiments, je me dis que c’est inacceptable hormis sur un réseau de test
Je comprends la remarque qui est avancée pour l’installation sur un réseau déjà décoré, quoique ! Je verrais plutôt une led sous le réseau et une autre embarquée et traversant le fond du wagon. Ce serait beaucoup plus discret.

- L’idée de ne coder que sur un octet est bien vue. C’est suffisant car ça permet de reconnaitre jusqu’à 255 locomotives ou convois différents.

- La principale question avant de se lancer est de savoir jusqu’à quelle vitesse de convoi le système est encore capable de fonctionner ? A 38Khz, il faut environ 210µs pour lire 8 bits. 26,32µS par bit, tous les µC savent faire. Mais en fonction de l’angle de la led quelle est la vitesse du convoi possible ? Le plus simple est bien sûr de faire les tests pour mesurer en pratique cette vitesse sur un banc de test.

Dans l’attente de retours que j’espère nombreux.

Christophe
Pages: 1 ... 7 8 [9] 10