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 - bobyAndCo

Pages: 1 ... 55 56 [57] 58
841
Le logiciel DCC++ / Re : JRMI avec un booster BaseStation DCC++
« le: janvier 03, 2017, 09:38:45 am »
Bonjour msport,

Effectivement, <w 03 1 08> est le bon code pour passer l'adresse de 3 en 8.

Pour ceux que ça intéresse, vous trouverez sur le lien  (Github de DCC++) https://github.com/DccPlusPlus/BaseStation/wiki/Commands-for-DCCpp-BaseStation tous les codes pour la programmation. Le code de la page SerialCommand.cpp de DCC++ est aussi intéressant à consulter car il est bien documenté (même si on maitrise peu l'anglais ou le C).

J'ai moi même un problème avec certains décodeurs et toutes les fonctions sur la voie de programmation sont indisponibles pour ces décodeurs alors que tout fonctionne parfaitement avec d'autres décodeurs. J'ai le message que tu reportes <R1 123 123> qui renvoie <r 123 123 1 -1> avec le -1 qui indique une erreur. Et cela est vrai également bien sûr pour <R2 123 123>,  <R3 123 123>, <Rn 123 123>...

Dominique a eu aussi un moment le problème mais je ne sais pas s'il a trouvé la solution.
Il serait intéressant si nous sommes plusieurs dans ce cas de faire des recoupements (marque du décodeur, modèle etc...) pour essayer de cerner le problème.

Dans tous les cas, avant de tout bousculer, il est vraisemblable que tu n'ais pas fait d'erreur et que le problème soit dans DCC++. Il faudrait aussi se reporter aux posts sur http://www.trainboard.com/ pour ceux qui n'ont pas trop de problèmes avec l'anglais !


A suivre donc...


842
Présentez vous ! / Re : Bonjour à tous
« 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

843
Présentez vous ! / Re : Bonjour à tous
« 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;
    //    }
  }
}


844
Présentez vous ! / Re : Bonjour à tous
« 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

845
Présentez vous ! / Re : bonjour de samuel
« le: décembre 01, 2016, 08:49:46 pm »
Bienvenue Samuel,

C’est un projet qui semble bien construit. Ici bien sûr, l’Arduino est au cœur de tout notre intérêt et je n’ai pas de doute sur le fait que vous trouverez vous aussi beaucoup de plaisir. Je vous invite à vous intéresser entre autre à DCC++. Associé à VB ça peut donner des choses intéressantes. J’ai un peu cherché à associer PHP aux développements sur Arduino, mais à chaque fois, j’ai trouvé de meilleures réponses avec par exemple JavaScript (et AngularJS. Mais on est ici aussi pour confronter nos expériences. ) Par contre, j’utilise des outils proches de VB.

Au plaisir d’échanger !

Christophe
   

846
Le logiciel DCC++ / Re : DCC++ BaseStation
« le: novembre 30, 2016, 09:54:45 pm »
ponponmvo,

Je ne vois ni les photos dont vous parlez, ni votre sketch ???

847
Ce sujet est celui qui m’intéresse le plus à l’heure actuelle. Comme je le disais sur le fil de DCC++, aujourd’hui, on peut savoir facilement que tel canton ou telle section du réseau est occupée.

Par ailleurs, avec un bon gestionnaire de réseau surtout s'il est fait « maison » il est aussi très facile de savoir l’état des locos (Arrêt, marche, sens, vitesse). Mais ce qui nous manque c’est les deux à la fois ! Telle loco est à tel endroit du circuit avec tels paramètres (vitesse, sens...).

J’ai passé beaucoup de temps avec des résultats assez satisfaisants à tester des lecteurs de code barre (douchettes qui me restaient et que j’avais dû payer de l’ordre de 30 € pièce). J’ai tout démonté et placé la seule mécanique sous la planche.

Avec HardwareSerial j’ai pu connecter 4 lecteurs par MEGA (je ne crois pas pas que l’on puisse autant sur UNO) et le tout relié par Ethernet (vous commencez à me connaître). Et des codes barres collés sous la loco. Ca ce fait, faut chercher un peu le meilleur emplacement mais j’y suis toujours parvenu même avec des contraintes d’espace. On peut aussi envisager en plus sous le dernier wagon pour détecter tout le convoi.

Bon faut pas passer trop vite dessus (jusqu’à mi vitesse disons) ce pourquoi je pensais placer ça dans des gares ou à l’entrée ou à la sortie d’un pont tournant. Ou des zones où l'on peut ralentir sans problème quelques secondes (tunnels). Mais bien sûr, ça a ses limites. Difficile d’en placer autant que de cantons.

J’ai aussi fait l’acquisition de QRE1113 de chez Sparkfun. C’est très discret sous la voie (15 mm sur 7) et je suis à peu près certain que ça pourrait lire un code barre maison. Pour 10 à 20 locos, je pense que c’est jouable, ça revient à un codage sur 24 bits on va dire d’alternance de barres noire et blanches. Pas compliqué et pas cher. 1 ou 2 € le QRE1113.

Tout ça reste un peu bricole quand même je reconnais. Et c’est sans doute RailCom la meilleure solution (si on a le budget et les décodeurs compatibles). RailCom donne en prime d'autres informations si je ne me trompe pas comme la température du moteur. Je suivrai donc avec grand intérêt ce fil.

Christophe



848
Bus DCC / Re : booster LMD18200 + manette
« le: novembre 18, 2016, 10:31:17 pm »

si j'ai bien compris il faut passer en 16 ou 18V pour l'alim
mais combien d'A ?

Pour l'instant je pense faire rouler 2 ou 3 machines  dons ça doit passer
en modèle de base sans utilisé le Pololu

surtout j'ai pas tout compris sur le branchement (je suis débutant)

Bonsoir,

Tu réponds en même temps que tu [re]poses la question. Oui effectivement pour 2 ou 3 machines 2A vont suffire. Oui tu as bien compris en HO il vaut mieux tourner à 16 V mini au rail donc calibrer en entrée 18 V c'est bien. Il est de toutes façons plus facile de baisser un courant de 18 à 16 que l'inverse  ;D Toute les alims un peu dignes de ce nom ont un potar de réglages de +/- 5% voir +/- 10%.

Tu parles aussi de branchement mais on parle bien de DCC ? Sous quelle bibliothèque ? Tu dis être débutant, je pense que tu n'a pas pour projet de te passer d'une bibliothèque, comme par exemple DCC++. Cela va être différent aussi selon le booster que tu vas choisir ? LMD18200 ? Je pense que oui, c'est le titre de ce fil ! (pas Pololu si j'ai bien compris). Le LMD18200 serait un bon choix qui fait l'unanimité sur LOCODUINO et raisonnable en prix (10 € environ sur eBay). Il te faudra aussi un MAX471 pour les courts-circuits. Est-ce que tu prévoies de tourner sur UNO, MEGA ou autres, là encore les câblages sont différents.

[Les schémas de câblages ont été largement traités sur le site http://www.locoduino.org/spip.php?article19 et j'ai moi même rédigé un post pour les sorties pour DCC++ pour UNO et MEGA http://forum.locoduino.org/index.php?topic=151.msg1932#msg1932

Précise bien tout cela et on pourra te répondre très exactement.

Bien à toi.

849
Bus DCC / Re : booster LMD18200 + manette
« le: novembre 17, 2016, 09:44:30 am »
bonjour ,

si si j'ai lu

mais il y a beaucoup de site

et pour les 3A çà suffit pour le ho ?

@+

Bonjour,

J'ai un réseau en HO que j'ai alimenté avec un LMD18200 donc en 3A et aujourd'hui avec un Pololu MC33926 lu aussi en 3A (avec DCC++). Avec 3 ou 4 locos roulantes + fonctions activées (feux + bruits + fumée qui a elle seule consomme 300 à 400 mA) je dépasse rarement 1A de consommation.

On peut donc raisonnablement penser que tant que tu ne dépasses pas 10 à 12 locos + fonctions ça doit pouvoir le faire. Par contre, je n'utilise pas le DCC pour aucun autre usage (accessoires, aiguillages, signalisation).

Mais j'ai cru voir dans ce fil que l'on parlait de 12 V. Cela ne suffirait pas en HO qui demandera au moins 15 V sur les rails donc 16 ou mieux 18 V pour l'alim.

Espérant que ça réponde à ta question.

PS : Juste pour info. J'ai utilisé le LMD18200 + MAX471 avec DCC++ qui donnait d'exellents résultats. Je suis cependant passé au Pololu MC33926 car ça m'a permis de me dispenser du MAX471 et permis d'avoir en une seule carte l'alimentation de la voie principale et de la voie de programmation alors qu'autrement il m'aurait fallu 2 LMD et 2 MAX. Cependant LE POLOLU est très sensible aux pics de tensions par exemple quand on met le circuit sous tension et il se met facilement en coupe circuit. Et sur les conseils de Dominique, j'ai ajouté 2 radiateurs sur la carte.

Christophe

850
Salut Dominique,

Ca y est, tout est au point ? Arpajon ce n'est somme toute pas si loin de la Bretagne mais j'ai déjà des engagements pris pour les deux jours. Plein de plaisir à toi !

851
Le logiciel DCC++ / Re : DCC++ BaseStation
« le: septembre 04, 2016, 09:18:52 pm »
Pour le câblage entre l'ARDUINO (UNO ou MEGA) avec Arduino Motor Shield ou Pololu MC33926 voir :

https://github.com/DccPlusPlus/Documentation/blob/master/Motor%20Shield%20Pin%20Mappings.pdf

Ne pas oublier de couper 4, 10 et 12 sous la carte Pololu MC33926 pour éviter tout conflit (avec Ethernet en particulier) et Brake Disable et V-IN Connect sur Arduino Motor Shield. C'est bien illustré dans le document ci-dessus.

Pour le câblage entre l'ARDUINO (UNO ou MEGA) avec LMD18200 + MAX471, voir image jointe. Attention, si vous souhaitez que la voie Main et la voie Prog soient toutes les deux câblées, il vous faudra 2 X LMD18200 et 2 X MAX471.

852
Le logiciel DCC++ / Re : DCC++ BaseStation
« le: septembre 04, 2016, 08:11:46 pm »
Oui mais ici, ça permet de tester DCC++ facilement, le controller est tout prêt !

Dans le fil sur Ethernet, je développerai la réalisation pas à pas d'un controller plus complet  dont on peut voir ici la version démo

853
Le logiciel DCC++ / Re : DCC++ BaseStation
« le: septembre 04, 2016, 05:39:35 pm »
Bonjour à tous,

Il n’aura certainement pas échappé à ceux qui se sont intéressés à DCC++ que ce dernier permettait de communiquer par Ethernet en plus de la traditionnelle liaison série. L’un des nombreux points forts de DCC++ est qu’il fonctionne avec l’envoi de simples messages textuels structurés et ça fonctionne !

Dans ce post, je vais décrire comment paramétrer les réglages Ethernet et vous trouverez également en fin en téléchargement un petit "controller" pour piloter DCC++ avec un navigateur web ou pourquoi pas votre tablette ou votre smartphone en wifi  :)




DCC++ Base Station utilise les mêmes messages en communication série ou Ethernet. Ces messages qui sont en fait des commandes, sont envoyés au programme et doivent être placés entre ‘<’ et ‘>’. Ce que vous mettrez avant ‘<’ ou après ‘>’ sera ignoré par DCC++. Pour plus de détails sur les commandes : https://github.com/DccPlusPlus/BaseStation/wiki/Commands-for-DCCpp-BaseStation

Cette précision est importante car en communication Ethernet avec le protocole HTTP on envoie plus que cela et ce sont les ‘<’ et ‘>’  qui vont permettre d’identifier la commande à l’intérieur de tout le texte des requêtes.

Pour utiliser Ethernet vous devrez bien sûr disposer d’un Arduino MEGA (les autres ne sont pas supportés) d’un shield Ethernet. Pour le reste vous n’avez pratiquement besoin que de votre ordinateur et d’un réseau Ethernet « domestique » qui est fourni par votre box.

Dans DCC++, c’est dans le fichier Config.h que l’on sélectionne la communication par Ethernet. Ligne 34 : #define COMM_INTERFACE   à 1,2 ou 3 selon votre shield.

// DEFINE COMMUNICATIONS INTERFACE
//
//  0 = Built-in Serial Port
//  1 = Arduino.cc Ethernet/SD-Card Shield
//  2 = Arduino.org Ethernet/SD-Card Shield
//  3 = Seeed Studio Ethernet/SD-Card Shield W5200

#define COMM_INTERFACE   1

Il faudra également décommenter la ligne 41 : #define IP_ADDRESS { 192, 168, 1, 200 }

// DEFINE STATIC IP ADDRESS *OR* COMMENT OUT TO USE DHCP
//

#define IP_ADDRESS { 192, 168, 1, 200 }

Mais auparavant on va tout de même s’assurer que cette adresse IP 192.168.1.200 peut « s’insérer » dans votre réseau domestique. Sur Mac, ces informations sont disponibles dans « Préférences Système » -> Réseau.

Sur mon ordinateur, l’adresse IP est 192.168.1.31 ce qui veut dire que toutes les adresse IP de mon réseau domestique vont de 192.168.1.1 à 192.168.1.254, et que mon Arduino + Ethernet devrait pouvoir trouver sa place à l’intérieur avec l'adresse IP 192.168.1.200.

Pour ceux qui maîtrisent un peu plus ces questions, faites un PING en Mac avec « Utilitaire de réseau »



Sur PC, c'est  -> démarrer / exécuter / cmd/k ipconfig /all (je crois).

Dans le fichier confi.h, laissez le port HTTP tel qu’il est configuré à 2560. Voilà donc à quoi devrait ressembler notre code dans Config.h

Config.h
COPYRIGHT (c) 2013-2016 Gregg E. Berman

Part of DCC++ BASE STATION for the Arduino

**********************************************************************/

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE MOTOR_SHIELD_TYPE ACCORDING TO THE FOLLOWING TABLE:
//
//  0 = ARDUINO MOTOR SHIELD          (MAX 18V/2A PER CHANNEL)
//  1 = POLOLU MC33926 MOTOR SHIELD   (MAX 28V/3A PER CHANNEL)

#define MOTOR_SHIELD_TYPE   0

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE NUMBER OF MAIN TRACK REGISTER

#define MAX_MAIN_REGISTERS 12

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE COMMUNICATIONS INTERFACE
//
//  0 = Built-in Serial Port
//  1 = Arduino.cc Ethernet/SD-Card Shield
//  2 = Arduino.org Ethernet/SD-Card Shield
//  3 = Seeed Studio Ethernet/SD-Card Shield W5200

#define COMM_INTERFACE   1

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE STATIC IP ADDRESS *OR* COMMENT OUT TO USE DHCP
//

#define IP_ADDRESS { 192, 168, 1, 200 }

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE PORT TO USE FOR ETHERNET COMMUNICATIONS INTERFACE
//

#define ETHERNET_PORT 2560

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE MAC ADDRESS ARRAY FOR ETHERNET COMMUNICATIONS INTERFACE
//

#define MAC_ADDRESS {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEF }

/////////////////////////////////////////////////////////////////////////////////////

ATTENTION : Il manque quelques lignes de code dans DCC++ Base Station qui utilise la bibliothèque Ethernet de l’Arduino. Dans le fichier SerialCommand.cpp il faudra ajouter à la ligne 66 :

INTERFACE.println("HTTP/1.1 200 OK");
      INTERFACE.println("Content-Type: text/html");
      INTERFACE.println("Access-Control-Allow-Origin: *");
      INTERFACE.println("Connection: close");
      INTERFACE.println();

et entre les lignes 73 et 74 (qui seront devenues 80 et 81)

client.stop();

Code complet :

#elif COMM_TYPE == 1

    EthernetClient client=INTERFACE.available();

    if(client){

      INTERFACE.println("HTTP/1.1 200 OK");
      INTERFACE.println("Content-Type: text/html");
      INTERFACE.println("Access-Control-Allow-Origin: *");
      INTERFACE.println("Connection: close");
      INTERFACE.println();
     
      while(client.connected() && client.available()){        // while there is data on the network
      c=client.read();
      if(c=='<')                    // start of new command
        sprintf(commandString,"");
      else if(c=='>')               // end of new command
        parse(commandString);                   
      else if(strlen(commandString)<MAX_COMMAND_LENGTH)    // if comandString still has space, append character just read from network
        sprintf(commandString,"%s%c",commandString,c);     // otherwise, character is ignored (but continue to look for '<' or '>')
      } // while
     
      client.stop();
     
    }

  #endif

Le code étant le même pour COMM_TYPE == 0 (communication série) assurez vous que vous l’avez bien recopié dans #elif COMM_TYPE == 1

Voilà pour la programmation de la carte. Si vous uploadez, vous devez avoir un message de ce type dans le moniteur série de l’IDE avec l’adresse IP en fin :
<iDCC++ BASE STATION FOR ARDUINO MEGA / ARDUINO MOTOR SHIELD: V-1.2.1+ / Aug 22 2016 15:52:06><N1: 192.168.1.200>

Une précision toute bête mais assurez-vous que votre shield Ethernet est bien relié à votre box par un câble RJ 45 ! Vous pourrez faire un nouveau ping toujours sur cette adresse 192.168.1.200 qui doit maintenant s’afficher.

Voilà pour la carte. Votre Arduino c’est transformé en petit serveur web qui va répondre aux requêtes HTTP sur son adresse IP.

La partie "client", c'est le Mini Controller DCC++ que vous allez trouver en fin de ce post. Mais pour que cette application fonctionne, il nous faut disposer d'un serveur web qui soit interne à notre réseau domestique et qui va héberger nos pages HTML, pages de programmation, feuilles de style et images.

Vous pouvez tout a fait utiliser votre box par exemple si elle fait serveur web ou si vous avez déjà un serveur web interne à votre domicile. Mais nous allons ici choisir d’installer ce serveur web sur notre propre ordinateur et pour cela, nous allons télécharger puis installer un logiciel gratuit mais très puissant qui est à la fois un serveur web, un serveur SQL et capable d’exécuter des scripts PHP (nous en aurons besoin assez rapidement quand notre application prendra de l’importance).

Ce logiciel s’appelle MAMP dans sa version Mac, WAMP dans sa version PC et XAMPP sous Linux. Choisissez la version gratuite largement suffisante. Voici les liens de téléchargement :

Mac : https://www.mamp.info/en/
PC : http://www.wampserver.com/
Linux : https://www.apachefriends.org/fr/download.html

Normalement, l’installation ne doit vous poser aucun problème car elle est vraiment très simple. Au besoin, consultez le tuto sur  OpenClassrooms

Sur votre ordinateur, vous devez déterminer un répertoire bien précis qui va être l’espace disque réservé pour votre serveur web. Choisissez par exemple de le « ranger » dans « Mes documents/mon_petit_train/dossier_web ».

Lancez maintenant l’application MAMP (ou WAMP, ou XAMPP) qui ouvre normalement automatiquement le serveur web et le serveur mySql, (cases en haut à droite de couleur verte).



Clickez sur le bouton « Préférences » à gauche au milieu

Sur la première fenêtre, sélectionnez tout de suite le répertoire que vous avez créé précédemment et qui va devenir la racine de votre serveur web. Pour cela cliquez sur l’icone à droite de « Document Root » et naviguez jusqu’à trouver votre dossier :




Dossier racine qui pour l’instant ne contient rien. Concernant les autres onglets en haut de la fenêtre MAMP, ne changez rien.



L’onglet Ports vous renseigne sur les paramétrages de ports que MAMP a programmés automatiquement. Ne changez rien. Par contre, notez que MAMP a attribué au Port Apache (c’est à dire au serveur web) le port 8888. Nous en aurons besoin par la suite.

Cliquez sur "annuler" pour sortir et vous vous retrouvez sur la fenêtre principale de MAMP que vous allez maintenant laisser travailler bien tranquillement en tâche de fond. Ne quittez pas MAMP car vous désactiveriez alors le serveur web.

Téléchargez le fichier joint : maPageTest.html.zip que vous allez dézipper et placer dans votre répertoire web, normalement « Mes documents/mon_petit_train/dossier_web ».

Dans votre navigateur, entrez l’url : http://localhost:8888/maPageTest.html et vous devriez voir apparaître dans la page : « Hello Locoduino ! »

Si oui, bravo, vous avez fini les paramétrages, sinon, retournez en arrière pour trouver où vous vous êtes probablement trompé.

Ca y est vous allez pouvoir maintenant piloter votre locomotive sur votre circuit. Téléchargez le fichier joint controller_mini_dccpp.zip et placez le contenu du dossier dans votre répertoire « Mes documents/mon_petit_train/dossier_web » puis clickez sur le lien http://localhost:8888/controller_mini_dccpp/controller.html ou tout simplement http://localhost:8888/

Attention : Si vous avez donné à votre Arduino MEGA une autre adresse IP que 192.168.1.200:2560 vous devrez modifier la ligne 14 du fichier « controller.js » qui se trouve dans le dossier « scripts » avec un éditeur de texte et entrer votre propre adresse IP.

Voilà un controller assez complet que vous allez personnaliser. En cliquant sur la petite flèche à droite de la fenêtre « paramétrages », vous allez entrer l’adresse de votre locomotive et valider. Profitez pour entrer son nom ainsi que les noms des fonctions pour votre loco. L’image de la loco est dans le dossier « image », vous pouvez placer votre propre image et entrer l’url « img/ma_belle_loco.jpg ». Vous pouvez même si vous le souhaitez trouver une image sur internet et entrer son url entière : http://www.leffondre.fr/_media/img/large/dsc-3385-rec.jpg.

Tous les CV’s peuvent être modifiés dans autres réglages. Attention cependant à ne pas entrer n’importe quoi. Au besoin, le CV 8 auquel on affecte la valeur 8 permet de retrouver les réglages usine. N’oubliez pas modifier ensuite l’adresse sur votre controller puisque la valeur usine est 3 par défaut.

Avec ce Mini Controller, vous allez pouvoir tester DCC++ Base Station avec une locomotive. Par la suite, je développerai comment réaliser un controller pour tout un parc de locomotive en HTML 5 en utilisant le framework AngularJS. Vous verrez ainsi comment vous pourrez "jouer" à plusieurs en WIFI avec des tablettes ou des smartphones.

N’hésitez pas à me faire part de vos remarques et questions ou si vous avez besoin d'aide.

J'espère qu'avec DCC++ et votre controller web, vous connaitrez des expériences intéressantes.

Christophe.

854
Le logiciel DCC++ / Re : DCC++ BaseStation
« le: août 31, 2016, 02:26:46 pm »
J'attends avant de modifier le seuil de détection car je trouve les résultats tellement éloignés de ce qu'il devraient être que je cherche d'abord ailleurs.

J'ai pourtant tout re-re-re vérifié, les câbles les paramètres de DCC++ Base !!! C'est sans doute un truc tout bête mais bon...

Mais je suis preneur de toute proposition...

855
Le logiciel DCC++ / Re : DCC++ BaseStation
« le: août 31, 2016, 01:34:03 pm »
Bonjour Tanguy,

Merci pour votre aide.

En fait, j'utilise un MAX471 pour la lecture de courant. Il ne me semble pas qu'il soit nécessaire d'ajouter une résistance. Cependant, j'ai tout de même essayé puisque je me souviens que vous parliez d'une résistance dans un de vos post et j'ai donc mis 2,2 K. Mais la lecture est la même.

Comme je le disais, je fais des tests en "mélangeant" UNO et MEGA, LMD18200 et POLOLU.

Avec le LMD les résultats sont très incohérents. Avec le POLOLU plus réalistes

<r123|1|123 255>
<r123|1|123 255>
<r123|1|123 100>

Mais il n'empêche que pour la première lecture, la loco a le cv 9, pour la seconde 8 et pour la troisième 8 ???

Je n'arrive même plus à retrouver les "quelques" bons résultats que j'ai obtenus hier avec certaines configs et certaines locos.

Il y a sans doute un problème dans mon alimentation (trop fort en V ?, trop faible ?) Je suis en train d'analyser les bits pour la lecture des mesures de courant !

Amicalement

PS : Peut être pouvons nous nous tutoyer ?

Pages: 1 ... 55 56 [57] 58