LOCODUINO

Discussions Générales => Présentez vous ! => Discussion démarrée par: deneb2119 le décembre 02, 2016, 05:13:34 pm

Titre: Bonjour à tous
Posté par: deneb2119 le décembre 02, 2016, 05:13:34 pm
Bonjour à tous

Je m'appelle Guy, j'habite en lorraine, j'ai un réseau d'environ 30m² en digital avec une Multimaus Roco....j'ai divisé le réseau en 19 cantons et la gestion des cantons se fait avec un Arduino Uno , je vous soumets un schema tres sommaire ....

En bref, un train arrive au canton n°3, coupe une barriere IR qui envoie une masse sur un Pcf 8574 qui, avec I²C, envoie une donnée à l'Arduino qui envoie une donnée au module d'extension I²C qui va déclencher un relais pour couper le canton n°2 et également mettre le feu au rouge et ouvrir le canton n°1 avec le feu au vert ..
J'utilise un relai pour les cantons et un relai pour les feux....

Le programme fonctionne parfaitement bien. Je coupe les IR avec la main, pas de soucis ... mais à partir du moment ou je démarre les trains, l'Arduino reçoit des parasites (dû au courant alternatif de l'alimentation) me passe des cantons au rouge et au bout de quelques secondes se bloque. Il me faut lui faire un reset pour redémarrer...

Donc , si vous pouviez m'aider à résoudre ce probleme . Je vous en remercie d'avance.
Demandez moi s'il vous faut plus de precision.

J'ai un 2eme Arduino Uno pour la gestion des gares (une de 3 voies et une de 4 voies) qui me fait arrêter un train et redémarrer le suivant, et qui fonctionne parfaitement bien, sans qu'aucun parasite ne vienne le perturber....(j'ai sur Youtube une video pour ceux que cela intéresseraient) : https://www.youtube.com/watch?v=NQ7UNetd8n4...

S'il y a des personnes intéressées par les programmes, je vous les donnerai volontiers.

Cordialement  Guy

Titre: Re : Bonjour à tous
Posté par: msport le décembre 02, 2016, 11:57:34 pm
Bonjour et bienvenue parmi nous,
je pense que vous avez identifié au moins une partie du problème : les parasites par les alimentations.
Donc la solution : séparer les alimentations par des filtres secteurs si c'est bien par l'alimentation que ça passe : les filtres peuvent être réalisés empiriquement avec des ferrites et des condensateurs sur base de schémas  trouvés via Google.
Mais peut-être faut-il regarder la longueur du bus I2C qui est limitée. Voir également les résistances de pull-up en extrémité et tenter de les diminuer.
Voir également les boucles de masse (à éviter bien sur, ramener les masses en un point pour un système donné)
Et enfin ajouter des condensateurs (exemple 47µF 10V pour dire quelque chose entre +5V et GND sur les modules et/ou les Arduino. Au tantale, c'est le luxe.
Se méfier des alimentations bloc-secteur chinoises qui sont outrageusement vendues pour 2 ou 3 fois leur réelle capacité quand elles n'oscillent pas autour de leur tension nominale avec parasitage capable de griller n'importe quel module. (un petit oscilloscope à moins de 30€ pourra dénoncer le coupable)
Quelques remèdes de grand-mère qui ne peuvent pas faire de mal.
Intéressante et économique l'idée des modules à base de PCF8574, j'en ai testé pour piloter des ULN2803 dont les sorties peuvent être mises en parallèle pour atteindre 1 A, elles sont munies de diodes anti-retour et peuvent commander des moteurs d'aiguillage Fleischmann de 1ere génération.
Titre: Re : Bonjour à tous
Posté par: Dominique le décembre 03, 2016, 12:08:20 am
Bonjour Guy,

Ton réseau est extraordinaire, 30 m2 et il reste encore de la place pour la voiture ! Chapeau.

Ton problème de parasites peut venir aussi du fait de la proximité des signaux faibles (capteurs IR, I2C) avec des signaux forts (traction). Avec peut-être en plus une masse (GND) à peaufiner.

Pour éviter ces perturbations, il faut raccourcir au minumum les fils pour les signaux faibles et les éloigner des fils de traction.

Peux-tu détailler un peu ton câblage ? Les causes peuvent être multiples.

Ca se passe mieux dans la gare peut être parce que c'est sur une plus petite surface donc avec des liaisons courtes.

Sinon, les arrêts et redémarrages sont un peu brutaux car tu coupes le courant avec des relais (qui génèrent de gros parasites).

Tu trouveras sur Locoduino des avocats du bus CAN (dont je suis) car il est bien moins sensibles aux parasites. Mais ça nécessiterait de grosses modifs pour toi.

En tout cas c'est une belle réalisation !
Bon courage.
Dominique
Titre: Re : Bonjour à tous
Posté par: Dominique le décembre 03, 2016, 09:15:27 am
Bonjour Guy,

En regardant ton schéma, je ne vois pas les résistances du bus I2C : je pense que c'est pour simplifier le schéma car, sans ces résistances l'I2C ne marche pas.

Dans mon réseau je n'utilise que des Arduino Mega qui permettent de se passer de circuits d'extension avec ses 70 ports, et qui dispose de beaucoup plus de mémoire surtout la Ram. Pour 5-6 € de plus c'est un gain énorme.

J'ai 40 zones, 20 aiguilles : un Mega pour gérer le TCO avec 20 inverseurs et 80 leds (avec des 74hc595), et un Mega pour commander 40 relais comme les tiens (pour les aiguilles Fleishmann alimentées en alternatif), un Mega pour la traction (avec CmdrArduino qui ve être remplacé par DCC++) et un Due pour le gestionnaire (de Pierre59). Le tout relié en bus CAN. Je n'ai aucun problème (pour le moment).

Il y a quelques images sur mon site perso www.bultez.fr (http://www.bultez.fr) que je dois refaire !

Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 03, 2016, 10:30:32 am
Merci à vous pour ces réponses.. je vois tout cela en détail et je vous réponds après.
Titre: Re : Re : Bonjour à tous
Posté par: Tanguy le décembre 03, 2016, 02:36:00 pm
[...]
un petit oscilloscope à moins de 30€ pourra dénoncer le coupable
[...]

Bonjour msport,

où trouve-t-on de tel oscilloscope ?
très intéressé d'investir dans une solution légère et suffisante pour résoudre quelques problèmes autour d'arduino et dcc
Titre: Re : Bonjour à tous
Posté par: msport le décembre 03, 2016, 11:15:16 pm
30€, je sais, j'exagère toujours :
http://www.banggood.com/DSO138-DIY-Digital-Oscilloscope-Kit-SMD-Soldered-13803K-Version-With-Transparent-Acrylic-Housing-p-1051616.html?rmmds=search
affiché à 21,92€.
Il marche pas mal, je l'ai fait et je l'utilise.
Il faut trouver une alimentation 9V à peu près propre. (celles à découpage ne le sont pas toujours)
Si on aime le sport, on peut choisir une autre version, celle avec les CMS à souder ...
Chez le même banggood, pour un peu plus cher, 23,64€, il y en a un autre, un peu plus habillé et qq perfs en plus ...
http://www.banggood.com/Orignal-JYE-Tech-DS0150-15001K-DSO-SHELL-DIY-Digital-Oscilloscope-Kit-With-Housing-p-1093865.html?rmmds=search
Pas essayé, mais sympa, non ?
Titre: Re : Bonjour à tous
Posté par: Dominique le décembre 04, 2016, 09:58:57 am
Intéressant, merci  ;D

Je regarde ce genre de DSO depuis un certain temps et je ne me suis pas encore décidé.

Il y en a un bien plus costaud mais à 130€, le DSO203
http://www.ebay.fr/ulk/itm/291536335714  (http://www.ebay.fr/ulk/itm/291536335714)
Titre: Re : Bonjour à tous
Posté par: msport le décembre 04, 2016, 10:59:40 am
A 23,64€, on a le droit de se tromper ... Mais bien voir qu'on reste en basse fréquence (200KHz) et qu'une certaine expérience des montages électroniques est nécessaire.
Pour le DSO 138, les sélecteurs sont un peu raides, mais pas trop.
Et à la demande générale, je joins une photo non retouchée de l'appareil sur un signal DCC.
Titre: Re : Bonjour à tous
Posté par: Tanguy le décembre 05, 2016, 11:50:17 am
merci beaucoup
Titre: Re : Re : Bonjour à tous
Posté par: PhB22 le décembre 06, 2016, 12:17:26 pm
A 23,64€, on a le droit de se tromper ... Mais bien voir qu'on reste en basse fréquence (200KHz) et qu'une certaine expérience des montages électroniques est nécessaire.
Pour le DSO 138, les sélecteurs sont un peu raides, mais pas trop.
Et à la demande générale, je joins une photo non retouchée de l'appareil sur un signal DCC.
Cela me convient, et me semble suffisant pour voir la forme d'un signal, sans pour cela obtenir une haute précision.
Je viens d'en acheté un pour 31,99 euros sur "ah, ma zone"
https://www.amazon.fr/gp/product/B01HQ1XJHQ/ref=oh_aui_detailpage_o08_s00?ie=UTF8&psc=1
Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 06, 2016, 05:54:28 pm
Bonsoir,,

Alors.....
J'ai mis un condos sur l'alim de l'arduino....
j'ai séparer les masses....
j'ai brancher un filtre secteur ....mais malheureusement aucun changement ...

pour ce qui de l'oscillo... j'ai un Hameg 203 et on voit bien les parasites ....


Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 06, 2016, 05:56:48 pm
j oubliais ...les longueurs de cable I2c sont tres courtes 20 à30 cm ...
j'ai un voltmetre en permanence sur les 3 tensions ( 5v 12v et 16v ) ...
Titre: Re : Re : Bonjour à tous
Posté par: Dominique le décembre 06, 2016, 06:27:10 pm
pour ce qui est de l'oscillo... j'ai un Hameg 203 et on voit bien les parasites ....

Bonsoir,

C'est déjà bien de voir les parasites !

Peux-tu préciser si tu peux trouver la cause des parasites (moteurs des locos ou autre cause telle que les relais, est-ce qu'ils disparaissent quand les trains s'arrêtent), la proximité des fils où tu vois ces parasites, des sources de parasites, essayer de déplacer, éloigner les câbles, voire blinder, etc..

La solution ne doit pas être très loin.
Sinon, il faudra abandonner l'I2C (voir l'exemple de JP Claudé : http://www.locoduino.org/spip.php?article180 (http://www.locoduino.org/spip.php?article180))

Bon courage

Titre: Re : Bonjour à tous
Posté par: patrick le décembre 06, 2016, 10:33:30 pm
Salut,

Sur ton schéma, tu as dessiné uniquement le fil "signal" qui va du capteur IR à l'Arduino ou à...? Comment as-tu branché l'alimentation du senseur IR? Est-ce une alimentation indépendante ou tu prends le 5V sur l'Arduino?

Tu peux essayer de mettre une capa au plus près du senseur, par exemple entre 10 et 100uF.

Patrick
Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 07, 2016, 08:49:17 am
Salut,

j'ai refait le shémas avec un peu plus de précision
Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 07, 2016, 08:50:33 am
avec des photos jointes
Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 07, 2016, 08:54:58 am
les modules se trouvent en desous de la plaque et les leds IR de part et d'autres de la voie ( les amoires fabriquées avec une imprimante 3D) à la sortie du module, une masse permanente qui est coupée part le pâssage du train .....
Titre: Re : Bonjour à tous
Posté par: patrick le décembre 07, 2016, 06:10:05 pm
As-tu essayé de mesurer les valeurs qui sortent du détecteur en branchant la sortie sur un input analogique de l'Arduino? Juste par curiosité...

Peut-être qu'une pullup pourrait aider à supprimer les fluctuations?

En général, lorsque j'ai des problèmes de ce genre, c'est à cause d'une masse non reliée aux autres... Mais là, on dirait un problème généralisé d'alimentation...
Titre: Re : Bonjour à tous
Posté par: bobyAndCo le décembre 07, 2016, 11:04:47 pm
Bonsoir Guy,

Je ne comprends pas bien ton montage puisque sur la photo de l'IR que tu présentes l'émetteur et le récepteur sont sur la même carte alors que ta photo des voies semble indiquer qu'émetteur et récepteur sont face à face. Quoi qu'il en soit et dans la mesure où la solution semble bien difficile à trouver, je t'invite, si émetteur et récepteurs sont séparées bien sûr, à alimenter l'émetteur en 1,1 ou 1,2 Volt (pas plus). Le récepteur restant lui en 5 Volts.

D'après les symptômes que tu décris, je ne suis pas certain que ça t'apporte la solution mais cela peut être une astuce pour ceux qui veulent mettre de l'IR sur leur réseau et qui rencontrent des problèmes de détection. Sur mon réseau, avec des capteurs éloignées de 13 à 15 cm, ça fonctionne au poil avec utilisation de la bibliothèque "IRremote".

Bien à toi
Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 07, 2016, 11:25:24 pm
Bonsoir Boby..

oui effectivement je dessoude les leds IR du module pour les utilisées en barriere de part et d'autre de la voie
Titre: Re : Bonjour à tous
Posté par: Dominique le décembre 08, 2016, 12:06:13 am
En tout cas je suis désolé de constater qu'il y a des parasites dans l'orthographe  :'(

J'aimerais que les fautes soient corrigées svp. Je viens de corriger ta présentation initiale, et si le bouton "corriger" est toujours visible, je te laisse faire le reste. Ensuite j'enlèverai ce commentaire.

J'avoue surtout que je ne comprends plus où est le problème. Qu'est-ce qui ne marche pas ? Est-ce le programme qui se plante, les capteurs qui ne sont pas captés, ... ?
Faire un schéma après coup, c'est peu courant. À quel endroit du montage les parasites ont été observés ?
Comment réagit le programme aux parasites: as-tu mis des serial.Print(..) partout où un test serait utile ?
Il faut prendre le temps d'expliquer en se mettant à la place du lecteur, autant que possible.

On reset cette discussion et on repart du bon pied  ::)

Merci.
Titre: Re : Bonjour à tous
Posté par: bobyAndCo le décembre 08, 2016, 10:13:29 am
Merci Dominique.

Bretons et alsaciens pratiquants peu la langue française, il nous arrive parfois de faire des écarts. Plus sérieusement, je pense également qu’il faudrait sans doute reprendre tout cela depuis le départ.

Tout d’abord, sur un banc test, hors le plus possible de toute interférence. Puis se rapprocher petit à petit des conditions réelles d’utilisation pour  identifier la cause des problèmes.

Je ne suis pas persuadé que de dessouder émetteur et/ou récepteur soit très judicieux. Pourquoi ne pas utiliser les produits qui correspondent exactement à l’utilisation que tu souhaites en faire ? Encore une fois, je ne peux parler que de ce que je connais et ce que je te suggère est une solution que j’ai adoptée et qui fonctionne.

En image ci-dessous les capteurs que j'utilise.

L’ensemble fonctionne à une fréquence de 38KHz qui est généré sur l’Arduino par la bibliothèque IRremote. Je précise une nouvelle fois que je n’ai obtenu des résultats satisfaisants qu’une fois que j’ai alimenté la LED émettrice en 1,1 – 1,2 Volts. Sinon, sur des distances aussi faibles, la réception manquait de sensibilité.

A toutes fins utiles, je te donne également mon code pour l’Arduino qui tourne sur Mega mais l'adaptation à un autre Arduino est simple. Les lectures sont envoyées par Ethernet. Il y a bien sûr un debonce entre chaque lecture mais aussi un délai entre chaque envoi de message (10 secondes). On peut en effet considérer que deux lectures valides à moins de 10 secondes d’intervalle concernent le même train.

Ce n’est pas la seule solution possible. Dominique à déjà présenté ici un montage qui fonctionne bien également http://www.locoduino.org/spip.php?article40

Voilà, y a plus qu’à !!!


// barriere_IR_5

#include <IRremote.h>
#include <SPI.h>
#include <Ethernet.h>

#define PIN_IR            9 // l'émetteur IR sur la pin 9 pour Mega (3 pour Uno)
#define NB_CAPTEURS       4 // 4 capteurs sont utilisés ici
#define START_PIN         22 // La première pin pour les récepteurs
#define ADDRESS_MAC       0x90, 0xA2, 0xDA, 0x0D, 0xAA, 0xF2
#define IP_CLIENT         10, 0, 1, 219
#define IP_SERVER         10, 0, 1, 15


int tab_inPin[NB_CAPTEURS];
int tab_capteurState[NB_CAPTEURS];
int tab_lastCapteurState[NB_CAPTEURS];
int tab_reading[NB_CAPTEURS];
unsigned long tab_lastDebounceTime[NB_CAPTEURS];
unsigned long tab_lastSendMsgTime[NB_CAPTEURS];
const long debounceDelay = 5; // Laps de temps entre deux mesures
const long sendMsgDelay = 10000; // Delai entre l'envoi de message pour un même capteur

///////////////////////// IMPORTANT /////////////////////////////////////////

//  Distance émetteur/récepteur testée à 10 et à 15 cm.
//  1,1 V  pour alimenter les diodes émettrices, Si plus, le dispositif manque de sensibilité.
//  5 V pour alimenter les diodes réceptrices.

///////////////////// CREATION DE L'OBJET irsend ////////////////////////////

IRsend irsend;

/////// ETHERNET ////////////////

byte mac[] = { ADDRESS_MAC };
IPAddress ip(IP_CLIENT);
EthernetClient client;
IPAddress serveur(IP_SERVER);

String methode = "IR_capteurs"; // Méthode appelée sur le serveur


//////////////////////////// SETUP ////////////////////////////////////////////

void setup() {

  pinMode(PIN_IR, OUTPUT);

  ////// CAPTEURS IR  //////////////
  for (int numCapteur = 0; numCapteur < NB_CAPTEURS; numCapteur++) {
    tab_inPin[numCapteur] = START_PIN + numCapteur;
    pinMode(tab_inPin[numCapteur], INPUT);
    tab_capteurState[numCapteur] = HIGH;
    tab_lastCapteurState[numCapteur] = LOW;
    tab_lastDebounceTime[numCapteur] = 0;
    tab_lastSendMsgTime[numCapteur] = 0;
  }
  irsend.enableIROut(38); // créer une sortie modulée à 38 Khz


  /////// SERIAL ////////////////
  Serial.begin(19200);
  Serial.println("Init...");
  delay(1000);
  Serial.println("Pret !");

  /////// ETHERNET ////////////////
  Ethernet.begin(mac, ip);
  Serial.print("server IP : ");
  Serial.println(Ethernet.localIP());

}

//////////////////////////// LOOP ////////////////////////////////////////////

void loop() {
  for (int numCapteur = 0; numCapteur < NB_CAPTEURS; numCapteur++) {
    irsend.mark(0); // envoi signal modulé de façon continue
    delay(1);
    lireCapteur(numCapteur);
    irsend.space(0); // arret signal modulé
  }
}

//////////////////////////// FONCTION lireCapteur ////////////////////////////////////////////

void lireCapteur (int numCapteur) {
  tab_reading[numCapteur] = digitalRead(tab_inPin[numCapteur]);
  if (tab_reading[numCapteur] != tab_lastCapteurState[numCapteur]) {
    tab_lastDebounceTime[numCapteur] = millis();
  }

  if ((millis() - tab_lastDebounceTime[numCapteur]) > debounceDelay) {
    if (tab_reading[numCapteur] != tab_capteurState[numCapteur]) {
      tab_capteurState[numCapteur] = tab_reading[numCapteur];
      if (tab_capteurState[numCapteur] == LOW) {
        if ((millis() - tab_lastSendMsgTime[numCapteur]) > sendMsgDelay) {
          tab_lastSendMsgTime[numCapteur] = millis();
          requete(numCapteur);
        }
      }
    }
  }
  tab_lastCapteurState[numCapteur] = tab_reading[numCapteur];
}

//////// REQUETE /////////////////////////////////////////////////////

void requete(int numCapteur) {
  char erreur = client.connect(serveur, 80);
  if (erreur == 1) {
    String data = "";
    data += "IR="; data += numCapteur + 1;
    Serial.println(data);
    client.print("GET /4DACTION/");
    client.print(methode);
    client.print("/?");
    client.print(data);
    client.print(" HTTP/1.1\r\n");
    client.print("Accept: text/html\r\n");
    client.print("Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n");
    client.print("Host: ");
    client.print(ip);
    client.print("\r\n");
    client.print("Content-Length: ");
    client.println(data.length());
    client.print("User-Agent: arduino-ethernet\r\n");
    client.print("Connection: close\r\n");
    client.println();
    client.stop();
    Serial.println(data);
  }

  else {
    client.stop();
    Serial.println("Echec de la connexion");
    //    switch (erreur) {
    //      case (-1):
    //        Serial.println("Time out");
    //        break;
    //      case (-2):
    //        Serial.println("Serveur invalide");
    //        break;
    //      case (-3):
    //        Serial.println("Tronque");
    //        break;
    //      case (-4):
    //        Serial.println("Reponse invalide");
    //        break;
    //    }
  }
}

Titre: Re : Re : Bonjour à tous
Posté par: msport le décembre 11, 2016, 09:49:23 pm
oui effectivement je dessoude les leds IR du module pour les utilisées en barriere de part et d'autre de la voie
sauf erreur, ces modules fonctionnent par réflexion infra rouge, leur utilisation en barrière peut expliquer les problèmes.
voir le descriptif :
http://www.ebay.fr/itm/IR-Infrared-Obstacle-Vermeidung-Sensor-Module-3-wire-fur-Arduino-Smart-Car-/231387396461?hash=item35dfc3796d:g:BQgAAOSwRLZUGAA0
Noter aussi que les fluo compactes génèrent pas mal d'infra rouges.
Titre: Re : Bonjour à tous
Posté par: PhB22 le décembre 12, 2016, 12:31:32 am
Bonsoir,
J'utilise le principe de détection par IR pour un va et vient sur voie unique.
Il faut absolument placer les phototransistors IR hors de toute source lumineuse de quelque nature que se soit.
Deux photos pour montrer comment je les ai protégés
Titre: Re : Bonjour à tous
Posté par: bobyAndCo le décembre 12, 2016, 10:35:51 am
Bonjour,
Je trouve plutôt sympathique la façon dont tu as résolu le problème. J’aimerais que tu me dises si tu utilises ou non une modulation de fréquence (comme je l’ai fait par exemple avec IRremote) ?

Je te pose cette question pour car j’ai moi aussi prévu de placer ces composants peu esthétiques dans des tunnels par exemple. Mais les tunnels ne sont toujours pas construits, les capteurs reçoivent un max de lumière et ne sont absolument pas perturbés. Bien évidemment, je pense que la modulation de fréquence y est pour quelque chose mais j’aimerais avoir des retours d’autres utilisateurs.

Merci pour ta réponse.
Christophe
Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 12, 2016, 12:49:55 pm
bonjour.

Pour répondre à Msport... au départ j'avais installé les IR en réflexion et par la suite j'ai changé pour les mettre en barriere, ce qui n'a rien changé aux problemes ... d'ailleurs avant les IR, j'avais des ILS et bien sûr idem.......

Titre: Re : Bonjour à tous
Posté par: Dominique le décembre 12, 2016, 02:14:49 pm
Dans mon réseau précédant, j'avais des barrières IR gérées par un Mega, lequel était relié au gestionnaire par une liaison I2C.

Les barrières IR sont décrites sur Locoduino, sans modulation. Les récepteurs étaient reliés à des entrées analogiques de l'Arduino pour faciliter les réglages d'alignement (c'est très sensible).

Je n'ai jamais eu de problème de parasites, ni de lumière parasite même en expo avec des projecteurs lumineux.

Quel est donc le problème ?

Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 12, 2016, 02:35:54 pm
eh bien toujours le meme......  au bout de quelques secondes un ou deux cantons passent au rouge  ( alors qu'il n'y a eu aucun train )
et un peu plus tard (30s environ) l'ardiuno se bloque ......je doit lui faire un reset pour redemarrer
Titre: Re : Bonjour à tous
Posté par: Dominique le décembre 12, 2016, 06:54:39 pm
Bon,
 
On a passé en revue les alimentations et les capteurs infra-rouges. Un petit oscillo est même en commande. Et toujours aucun résultat  :-[

On ne sait pas quels remèdes tu as éventuellement appliqués, quels tests tu as faits pour y voir plus clair.

Donc maintenant il faut rechercher autrement qu'en déclarant qu'il y a un problème.

Je te suggère d'ajouter dans ton programme des lignes supplémentaires contenant Serial.println("1"); avec "1" puis "2", "3", .. etc qui correspondent à des cas particuliers que tu pourras tracer de cette façon sur le terminal de l'IDE Arduino. Les messages "1", "2", etc.. peuvent être plus explicites comme "IR1", "IR2", ..

Par exemple Serial.println("1"); à chaque détection IR dans la gare qui pose problème. Serial.println("2"); pour la détection IR dans la gare qui ne pose pas de problème. Serial.println("3"); juste avant ou après une commande d'aiguille ou de relai de traction.

Comme le programme se plante d'après ce que tu nous écris, tu verras le programme se dérouler sur l'écran du terminal au fur et à mesure des affichages, jusqu'au moment où ça s'arrête. Cela te donnera un piste pour explorer ce qui se passe juste avant.

Tu verras aussi probablement les effets des parasites (électriques cette fois !), par exemple plusieurs fois de suite le même messages "1" signifierait des rebonds à éliminer.

Si les Serial.println() que tu auras ajouté ne t'éclairent pas suffisamment, il faudra en ajouter d'autres.

C'est laborieux, mais ça marche très souvent.

Un plantage du programme me fait penser aussi à un manque de mémoire : quelle est la taille de mémoire disponible, affichée dans la fenêtre de l'IDE après une vérification ? En cas de doute la mémoire disponible pendant que le programme tourne peut être affichée à l'aide d'une routine comme :
int freeRam () { int v; // calcul de la memoire libre
  extern int __heap_start, *__brkval;   
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}


Maintenant tu connais le principe et nous espérons te lire prochainement avec une belle explication des causes et des remèdes (que j'espère au singulier) qui pourraient servir la communauté Locoduino, bien entendu.

Bonne chance
Titre: Re : Bonjour à tous
Posté par: msport le décembre 12, 2016, 11:14:39 pm
Et de mon coté, le plantage (avec un délai) d'un Arduino me fait penser à son alimentation : à son tour qu'alimente-il en 5v (et/ou 3.3V).
Une petite mesure ou une petite addition ?
L'AMS1117 est capable de 800mA, mais avec une résistance thermique de l'ordre de 100°/W, il ne faut pas beaucoup de chute de tension pour atteindre les 125° de la protection thermique.
Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 13, 2016, 06:40:24 pm
Bonjour,
Voila je viens d'effectuer de nouveau test pour bien cerner le problème.

tester avec 1 seul PCF8574 pour éviter les parasites des 2 autres.

Alimentation du train OFF, on n'a aucune perturbation au bout de 5min, j'ai bien tous les IR qui fonctionnent sans problème avec une monté de 5.26v,

mais dès que j'allume l’alimentation des locos (pour info c'est du courant alternatif) j'ai des parasites de donnée qui arrivent à l'arduino du type (01010101 ou 01000100 vraiment aléatoire)

 ce qui fait qu'il n'arrive pas à comprendre le code  ......et plante automatiquement au bout de quelques erreurs..


au niveau du code arduino :

- je fais une première lecture de l'I2C pour récupérer les informations sur le PCF_1
- je compare avec les données enregistrées (var_pcf_1_save)
- si les données ont changées, je fait un delays(2) pour éviter les parasites.

- je refais une lecture du PCF_1
- si les données ont changées.... alors je lance ma fonction d'analyse du canton....
- et j'enregistre les nouvelles données dans une variable de comparaison (var_pcf_1_save)

j'espère être assez claire.... sinon je ferai un diagramme...
donc pour moi l'erreur ne vient pas du niveau arduino mais du courant alternatif qui une fois en fonction me génère des parasites aléatoires sur l'I2C

j'ai effectué un test sur des capteurs IR pour voir si un parasite pouvait faire baisser l’alimentation des IR et donc envoyer de fausses informations, mais je n'ai pas trouvé de bug de ce coté là!
j'ai ensuite essayé de changer les résistances Pull-up de 10k à  460......pareil aucun changement...

Si quelqu'un à une nouvelle piste je suis preneur.....merci d'avance
Titre: Re : Bonjour à tous
Posté par: msport le décembre 14, 2016, 10:30:12 am
Si le câblage a été vérifié, je pense qu'il faut soupçonner les alimentations à découpage 12V/5V. En test on peut utiliser les braves piles 4,5V des années 50. Sinon, voir à les remplacer par des alimentations à régulateur 7805 : exemple, 12V à connecter en aval du pont de diode (ou mettre un strap de chaque coté du pont, pour assurer la continuité de la masse - 0V ) :
http://www.ebay.fr/itm/Three-Terminal-For-Arduino-L7805-Lm7805-Voltage-Regulator-Module-5V-Ic-Develop-K-/252408324047?hash=item3ac4b55fcf:g:jXYAAOSwA3dYHYAU
Titre: Re : Re : Bonjour à tous
Posté par: msport le décembre 14, 2016, 05:41:17 pm
pour ce qui de l'oscillo... j'ai un Hameg 203 et on voit bien les parasites ....

Parfait, ils existent donc. Reste à en identifier l'origine : en arrêtant (et/ou remplaçant) les sources d'alimentation, on devrait arriver à identifier le coupable.

PS : comment l'alternatif (locos) est-il produit ?
Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 14, 2016, 06:54:57 pm
un transfo 24v..... une boitier " booster digital 10765" et la multimaus pour commander les locos
Titre: Re : Bonjour à tous
Posté par: msport le décembre 14, 2016, 11:35:01 pm
Le "transfo" 10725 ou 10851 de Roco prévu pour le booster 10765 est dit 20V 2,6A (j'ai aussi lu 18V), pas de problème de ce coté là avec 24V (qui à vide peut faire encore plus, à mesurer en valeur réelle) ?

Mais pour vérifier (ou démonter l'inverse) si la tension DCC  peut être à l'origine des parasites, il faudrait faire circuler une loco analogique ...

Ces parasites sont-ils là même quand  la loco est à l'arrêt mais tension DCC présente ?

Et parallèlement, quel est le résultat du remplacement du 5V des "step-down" 12V/5V à découpage par des sources propres ?
Titre: Re : Re : Bonjour à tous
Posté par: Dominique le décembre 15, 2016, 12:28:45 am
Alimentation du train OFF, on n'a aucune perturbation au bout de 5min, j'ai bien tous les IR qui fonctionnent sans problème avec une monté de 5.26v,

mais dès que j'allume l’alimentation des locos (pour info c'est du courant alternatif) j'ai des parasites de donnée qui arrivent à l'arduino du type (01010101 ou 01000100 vraiment aléatoire)

 ce qui fait qu'il n'arrive pas à comprendre le code  ......et plante automatiquement au bout de quelques erreurs..

Une chose est certaine, un programme ne doit pas se planter s'il reçoit des données non souhaitées, voire aléatoires.

S'il se plante ça veut dire que le programme n'a pas prévu et ne teste pas bien tous les cas possibles.
Tous les cas anormaux doivent être rapportés sur la console par des Serial.print pour les identifier, les compter et finalement en trouver la cause.

Il me semble que je l'ai déjà demandé précédemment !

Il peut être normal, dans un programme que les traitements d'erreurs soient plus gros que les traitements normaux.
Titre: Re : Bonjour à tous
Posté par: PhB22 le décembre 15, 2016, 09:11:21 am
Bonjour à tous,
J'ai le même phénomène de parasites. Lorsque j'écoute les "grosses têtes" et que les trains tournent.  8) 8)
Cependant rien n'influence les arduino (ou leurs clones  :) ).
Est-ce parce que les câbles qui vont vers les photo-transistors sont blindés? C'est peut être là aussi une solution.
Ce sont des câbles utilisés en HIFI dont les masses (un seul point) sont reliés à la masse.
Idem pour les liaisons entre les fiches DIN 5 broches pour les commandes (mulltimaus et/ou Lenz) et la centrale.
Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 15, 2016, 10:27:32 am
Merci pour vos réponses.

Oui j'ai effectué des essais avec le Serial print depuis le début,

il plante systématiquement au moment de la lecture de l' I2C...

l'exemple que j'utilise :
http://playground.arduino.cc/Main/PCF8574Class

je reçois des données aléatoires (du au parasite)  ( il ne reconnait pas les données après) mais continue sans problème.

mais le souci reste quand même.. d'ou viennent les parasites??... sachant qu'il ni à aucun raccord entre l’alimentation loco (alternatif) et l'arduino...

j'avais pensé aussi au câble loco qui passe trop prés du câble I2C mais non plus.

je vais tester l'id msport.
Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 15, 2016, 10:31:17 am
j'ai également utilisé un transfo de 12v ( redresseur - condos - ) et une dizaine de 7805 et j'ai alimenté les modules séparément ......aucune difference ; le problème reste le mème ....
Titre: Re : Bonjour à tous
Posté par: Marc-Henri le décembre 15, 2016, 02:28:32 pm
Bonjour à tous,

J'ai été confronté à un problème de parasite sur un projet de commande d'itinéraires pour la gare d'un réseau en N. Afin de multiplier les sorties disponibles, j'ai utilisé des registres à décalage qui se sont avérés très sensibles aux perturbations produites par les électro-aimants des aiguilles.

Le système se compose d'une carte microcontrôleur avec un Atmega 8 (pas une carte Arduino mais c'est sans importance ici) et 3 cartes comportant chacune 16 relais et 2 registres à décalage. La situation s'est fortement améliorée en reliant les signaux de contrôle des registres à décalages entre les 3 cartes à l'aide d'un câble blindé. J'ai utilisé du câble réseau informatique de récupération à cet effet.

Meilleures salutations.
Titre: Re : Bonjour à tous
Posté par: Dominique le décembre 15, 2016, 04:35:38 pm
Bonjour à tous,

Si cela peut-être utile : dans mon réseau j'ai un Mega qui pilote 40 relais pour commander 18 aiguilles et 2 dételeurs.
Les images ci-dessous décrivent comment cela est construit, autour de 5 barrettes de 8 relais commandés par le Mega via des optocoupleurs faisant partie des barrettes de relais.
Chaque barrette de 8 relais reçoit son 5 V propre
Chaque relai reçoit le 15V alternatif pour les aiguilles

(http://forum.locoduino.org/index.php?action=dlattach;topic=251.0;attach=610)
(http://forum.locoduino.org/index.php?action=dlattach;topic=251.0;attach=612)
(http://forum.locoduino.org/index.php?action=dlattach;topic=251.0;attach=614)


Le Mega communique avec les autres Arduino par un bus CAN.

Je dois dire que je n'ai jamais eu de problème de parasites.

Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 18, 2016, 05:13:04 pm
bonjour,
apres une après midi de test ....on n'a peut ètre trouvé une solution...

sur les entrées du PCF8574 N°1, on n'a ajouté des condensateurs de 47microF sur chaques entrées et bizarement plus aucun parasite détecté par l'arduino...  serait ce la solution???

on va  voir pour acheter d'autres condos demain.. à fin de faire un test avec les 3PCF.

Part contre l'arduino à planté 2fois, j'ai rajouté l'exemple de code pour connaitre la RAM utilisé, 778.

et il plante au moment de faire la lecture des données PCF ( variable.read8() ) donc j'ai rajouter des Serial.print dans les classes PCF8574.h pour voir d'où ca vient.

si quelqu'un à une idée avec les nouvelles infomations je suis preneur
Titre: Re : Bonjour à tous
Posté par: Dominique le décembre 19, 2016, 08:03:32 am
Ça me paraît beaucoup : 47 micro farad !
Comment sont branchés les condensateurs ?
Cela doit sérieusement retarder les détections.

778 octets de SRAM, c'est peu mais suffisant. Mais tout dépend de l'endroit où la fonction est appellée.

Si ça se plante dans la bibliothèque du PCF8574, cela m'étonne ou alors la bibliothèque est mal utilisée ou alors il faut changer de technologie (un Mega par exemple supprimera les PCF et il y aura beaucoup plus de SRAM).

Ça progresse !
Titre: Re : Re : Bonjour à tous
Posté par: PhB22 le décembre 19, 2016, 01:21:53 pm
sur les entrées du PCF8574 N°1, on n'a ajouté des condensateurs de 47microF sur chaque entrées et bizarrement plus aucun parasite détecté par l'arduino...  serait ce la solution???
Les condensateurs "miracles"  :)
Quelquefois on se demande pourquoi, mais il vaut mieux se dire "tant mieux" et pas chercher à comprendre puisque ça fonctionne.
Il y a certainement une explication physique mais, pffff, on joue au train ;) ;)
Titre: Re : Bonjour à tous
Posté par: Dominique le décembre 19, 2016, 02:12:15 pm
C'est juste un peu dommage de ne pas savoir car cela aurait pu éviter des ennuis similaires chez d'autres modélistes.

Bon, c'est Noel, donc le temps de jouer.

Mais j'espère qu'après les fêtes, le problème sera ré-étudié complètement pour partager votre expérience.

Après tout pas mal de modélistes très sérieux se sont penchés sur votre problème, ont suggéré des solutions et puis Pffff, plus rien en échange.

Passez de bonne fêtes et à bientôt pour un meilleur partage.

Amicalement
Dominique
Titre: Re : Re : Bonjour à tous
Posté par: PhB22 le décembre 19, 2016, 09:18:58 pm
C'est juste un peu dommage de ne pas savoir car cela aurait pu éviter des ennuis similaires chez d'autres modélistes.
Mais on sait où les condensateurs ont été placés. Donc si un soucis similaire, on a en mémoire une solution.
Philippe
Titre: Re : Bonjour à tous
Posté par: msport le décembre 20, 2016, 12:07:14 am
C'est quand même instructif d'apprendre ce qu'il ne faut pas faire :
par exemple utiliser des dispositifs de détection par réflexion en transmission sans savoir comment et pourquoi ...
Si ils génèrent des parasites, c'est probablement qu'ils n'aiment pas fonctionner comme ça. (sur-amplification, boucles, antennes, etc.)
Et il faudrait vérifier comment des ILS ont pu générer des parasites ...
Titre: Re : Bonjour à tous
Posté par: deneb2119 le décembre 29, 2016, 07:11:51 pm
Bonjour à tous ....

Alors.... c'est bien les condensateurs la solution aux problemes .....j'ai donc rajouté les condos. et plus de parasites...j'avais d'abord reçu des 0.47 par erreur et cela ne changeait rien au probleme et apres avec les 47 Mf ..cela fonctionne .....

Merci encore pour toutes les reflections et idées reçus....

Par contre j'aurai  autre chose à vous soumettre......quand on coupe l'alimentation de la Multimaus..la programmation des locos ( vitesse, allumage des options )est automatiquement remise à zéro .. ce qui veut dire qu 'il faut redémarrer toutes les locos ( à des vitesses differentes bien sur ) ..

n'y aurait il pas un moyen de garder tout ceci en mémoire ..y a t'il quelqu'un qui aurait déja étudier la question .....

En attendant Bonnes fëtes de fins d'années à tous
Titre: Re : Bonjour à tous
Posté par: PhB22 le décembre 31, 2016, 08:09:33 pm
Que veux tu dire par "couper l'alimentation de la Multimaus"?
Si c'est débrancher la prise le la poignée, normalement rien ne change.
Si c'est couper l'alimentation générale alors oui, c'est normal.
En revanche, couper l'alimentation de la voie sous les pattes d'une loco, puis la remettre ne modifie rien ; c'est équivalent aux micro-coupures que nous pouvons avoir de temps en temps ou le principe que j'utilise dans le va et vient de trois autorails.

Bonne année également à toi  :)
Philippe
Titre: Re : Bonjour à tous
Posté par: deneb2119 le janvier 01, 2017, 06:40:47 pm
oui oui ... c'est bien de l'alimentation générale que je parle ... je ne peux pas laisser tout le réseau allumé en permanence.....

Bonne année à tous
Titre: Re : Bonjour à tous
Posté par: PhB22 le janvier 02, 2017, 12:44:51 pm
Alors effectivement on pourrait, avec un UNO par exemple, lorsque l'on "allume" le réseau, lancer une boucle de l'adresse 004 à l'adresse ??? (chacun choisira) et à chaque adresse donner les ordres marche avant, vitesse max et éventuellement allumer les feux.
Si les locos sont arrêtées par un BM1 elles prennent l'ordre mais ne démarrent pas (essai fait sur ma gare cachée et sur les cantons).

C'est exactement ce qui me gonf.. lorsque l'allume l'alimentation générale du réseau : obligé, à chaque fois, d'aller chercher les adresses des locos et leur donner l'ordre de marche avant et vitesse max
Nota : vitesse maxi qui est tout de même limitée par la valeur entrée dans le CV5