Forums LR PRESSE

Où il est question de trains, petits et grands

  • Advertisement

Choix carte Arduino en analogique

Toutes les discussions sur l'Arduino !

Modérateur: MOD

Choix carte Arduino en analogique

Publié: Lun 22 Oct 2018, 15:32 
Bonjour,

Je souhaite contrôler mon réseau en analogique uniquement avec Arduino. Cela comprends le contrôle de la tension des voies via plusieurs modules L298N et des aiguillages via plusieurs servomoteurs. Il y a au total beaucoup d'entrées (interrupteurs, potentiomètre, bouton poussoir sur le TCO et ILS sur le réseau), de sortie digitales (leds sur le TCO et sens des voies sur les modules L298N) et de PWM (module L298N et servo). Il y en a une cinquantaine de chaque environ.

Savez-vous quelle(s) carte(s) Arduino dois-je utiliser pour contrôler tout ça?
Dois-je prendre des grosses cartes Mega ou plusieurs petites Nano répartie sur tout le réseau.
Je pense relier les cartes via le bus I2C.

Si je prends les cartes Mega (environ 3 pour avoir assez de sortie PWM), j'ai peur de dépasser le courant maximal de consommation qui est de 200mA si je branche toutes les entrées/sorties.

Voilà, si vous pouvez m'aider, je vous en remercie d'avance.
Cordialement
UrsaBlack
 
Messages: 12
Inscrit le: Lun 18 Sep 2017, 09:21
Echelle pratiquée: HO
Prénom: Fabien
Club: Personnel

Re: Choix carte Arduino en analogique

Publié: Mer 24 Oct 2018, 18:21 
Bonsoir,

Je ne te conseille pas le bus I2C qui est limité en longueur à 2 m a moins d'utiliser des répéteurs.
L’intérêt du Mega ou du Uno c'est d'avoir des shields tout fait, contrairement au Nano qui lui a des connecteurs au pas de 2.54 (si tu souhaites faire toi même tes montages).
Si tu souhaites vraiment repartir ton système, pas besoin d'avoir beaucoup d'IO (Input/Output) : un Uno ou un Nano.
Si tu as besoin de beaucoup de calcul (pont tournant) tu auras besoin d'un Méga.

Cordialement,
Ech N, DCC LokMaus 2, CDM-Rail
Avatar de l’utilisateur
Barbadidoua
Bavard
 
Messages: 61
Inscrit le: Lun 31 Juil 2006, 18:11
Localisation: Chambery
Club: AMFBC73

Re: Choix carte Arduino en analogique

Publié: Jeu 25 Oct 2018, 10:37 
Bonjour,

Merci de votre réponse.

Peut-on mettre plusieurs shield moteur les uns sur les autres sur une seule carte arduino? Et si oui, comment les contrôle-t-on?

Au final, est-ce que je peux contrôler mon réseau avec un seul arduino et d'autres cartes additionnelles (shield,...) qui me permettrait d'avoir plus d'IO?

Ou suis-je obligé d'avoir plusieurs arduino? Dans ce cas, comment les relier si l'I2C est limité en longueur ? Ou dois-je utiliser l'I2C en mettant toutes mes cartes très proches les unes des autres?

J'ai un pont tournant mais il ne sera pas commandé par arduino. L'arduino me servira surtout pour commander la tension des voies et les servomoteurs des aiguillages.

Cordialement
UrsaBlack
 
Messages: 12
Inscrit le: Lun 18 Sep 2017, 09:21
Echelle pratiquée: HO
Prénom: Fabien
Club: Personnel

Re: Choix carte Arduino en analogique

Publié: Jeu 25 Oct 2018, 18:33 
Bonjour,

J'ai un réseau modulaire qui sort souvent en expo, et commandé aussi avec Arduino.
J'ai choisi de mettre un arduino nano par module (environ 1m de longueur)
et il me commande vaillamment l'éclairage du réseau, l'éclairage des bâtiments,
mes aiguillages...
Tous mes nanos sont reliés entre eux par un bus, ce qui permet de pouvoir parler entre eux.
Pour le choix du bus, je vous déconseille le bus I2c (c'est un bus de communication entre différents composants sur un même circuit imprimé), vous allez avoir des problèmes.
Chez LOCODUINO, ils utilisent le bus CAN (des tutos à lire sur le site).
Vous pouvez aussi créer une arborescence avec des modules radio (nrf24L01+)
Mais dans toutes ces solutions, il faut rajouter des petits modules additionnels...
Pour ma part, j'ai préféré choisir un bus domotique (le bus PJON) il ne nécessite qu'une bibliothèque et un fil pour relier les arduinos entre eux. Il est très simple à mettre en oeuvre. Je n'ai pas eu de problème et, pourtant, j'ai le bus DCC tout près.
Ne craignez pas de multiplier les arduinos, ils ne sont pas très chers et ça permet de diviser le travail (plus facile à dépanner) .
De plus, pour commander les servos des aiguilles, j'ai eu des problèmes avec des distances de plus de 1m.
Pour la commande des trains, le problème est un peu différent: En effet, la PWM sortant de l'Arduino est amplifié par le shield de sortie (il existe plein de solutions autre que le L298N)souvent 12v et 3A, ce qui permet d'alimenter les voies sans trop de problème.
Voilà, si j'ai pu un peu vous éclairer, le travail du choix des composants demande de bien cerner ses besoins et, de ce choix, dépendra le code à venir.n'hésitez pas à poser des questions...
Choisir, c'est déjà renoncer!
Petitrain
Bavard
 
Messages: 57
Inscrit le: Ven 04 Juil 2014, 11:09
Localisation: Haut-Var
Âge: 67
Echelle pratiquée: HO
Prénom: Gérard
Club: CMMF Mouans-Sartout

Re: Choix carte Arduino en analogique

Publié: Sam 27 Oct 2018, 11:33 
Bonjour,

Merci pour votre réponse.

Avez-vous de la documentation sur ce bus PJON pour pouvoir le coder?
Faut-il d'autres modules additionnels pour pouvoir utiliser ce bus ou suffit-il juste de relier les arduino par un câble?

Les informations que je dois envoyer d'un arduino à l'autre sont des booléens: par exemple, l'état d'une voie (occupée ou libre), l'état d'un feu (vert ou rouge), ou celui d'un ILS (enclenché ou pas).

De plus, pour commander les servos des aiguilles, j'ai eu des problèmes avec des distances de plus de 1m.

A quoi était dû ces problèmes?

La solution L298N est-elle si mauvaise que ça pour contrôler les trains?
Qu'utilisez-vous sur votre réseau pour les contrôler?

Cordialement
UrsaBlack
 
Messages: 12
Inscrit le: Lun 18 Sep 2017, 09:21
Echelle pratiquée: HO
Prénom: Fabien
Club: Personnel

Re: Choix carte Arduino en analogique

Publié: Sam 27 Oct 2018, 12:51 
Bonjour,

La documentation du bus PJON:https://www.pjon.org/documentation.php
Le gros avantage pour nous, c'est que ce bus ne nécessite qu'un fil pour relier les arduinos. Essayez le pour voir s'il vous convient...
Il faut déclarer un tableau de valeur a transmettre:
les variables sont des "char"
on les récupère sur un autre arduino avec la fonction receiver.
la doc est bien faite et explique bien le process.
Je pense que pour les servos, l'information véhiculée par des fils longs est perturbée par les parasites du milieu, j'ai eu le même problème avec des commutateurs mis en entrée sur une broche analogique. ( une résistance de 10khoms entre le fil de donnée et le + améliore les choses.)
Prévoyez des liaisons courtes (choix de plusieurs arduinos)c'est la meilleure solution.
Non, le L298N n'est pas un mauvais choix, tout dépend de la consommation de courant que vous prévoyez (consommation des machines sur le réseau) et regardez bien si le L298N a une détection de court circuit.
Allez faire un tour sur le site LOCODUINO:http://www.locoduino.org/ c'est une mine de renseignement.
Pour ma part, j'utilise des LMD18200 et un max471 pour la detection .
N’hésitez pas à poser des questions, si je peux y répondre...
Choisir, c'est déjà renoncer!
Petitrain
Bavard
 
Messages: 57
Inscrit le: Ven 04 Juil 2014, 11:09
Localisation: Haut-Var
Âge: 67
Echelle pratiquée: HO
Prénom: Gérard
Club: CMMF Mouans-Sartout

Re: Choix carte Arduino en analogique

Publié: Lun 12 Nov 2018, 15:42 
Bonjour,

Je viens de faire des tests de liaisons entre 2 nano avec le bus PJON. Cela marche plutôt bien. J'ai réussi à transmettre une variable char de l'arduino 1 au 2 et inversement. Voici les codes :

Arduino 1 :

Code: Tout sélectionner
#include <PJON.h>
PJON<SoftwareBitBang> bus(1);

const char* nom="A";

void setup() {
  bus.begin();
  bus.strategy.set_pin(12);
  bus.set_receiver(receiver_function);
  Serial.begin(9600);
}

void receiver_function(uint8_t *payload, uint16_t length, const PJON_Packet_Info &packet_info) {
  if(payload[0] == 'A') {
    Serial.println("Bien reçu de 2!");
  }
}

void loop() {
  bus.receive(10); 
  bus.send_packet(2,nom,1);
}


Arduino 2 :

Code: Tout sélectionner
#include <PJON.h>
PJON<SoftwareBitBang> bus(2);

const char* nom="A";

void setup() {
  bus.begin();
  bus.strategy.set_pin(12);
  bus.set_receiver(receiver_function);
  Serial.begin(9600);
}

void receiver_function(uint8_t *payload, uint16_t length, const PJON_Packet_Info &packet_info) {
  if(payload[0] == 'A') {
    Serial.println("Bien reçu de 1!");
  }
}

void loop() {
  bus.receive(10);
  bus.send_packet(1,nom,1);
}


Voyez-vous des erreurs dans ces codes?
Je souhaitais mettre un delay dans le loop des 2 codes mais je ne recevais plus rien. Je n'arrive pas bien à voir quand l'arduino 1 envoie au 2 / reçoit du 2 et inversement.

Savez-vous quelle est la taille maximale de variable char que l'on peut envoyer?

Encore merci pour vos réponses !

Cordialement
UrsaBlack
 
Messages: 12
Inscrit le: Lun 18 Sep 2017, 09:21
Echelle pratiquée: HO
Prénom: Fabien
Club: Personnel

Re: Choix carte Arduino en analogique

Publié: Lun 12 Nov 2018, 18:57 
La taille des données est codée sur 2 octets. On peut donc en déduire qu'un paquet peut transmettre jusqu’à 65535 octets de données.
Pour n'envoyer des données que toutes les secondes par exemple tu peux utiliser un timer (attention à ne pas interférer avec ceux utilisés par PJON).
Voir ici
notix
 
Messages: 31
Inscrit le: Lun 09 Mars 2015, 21:52
Echelle pratiquée: N

Re: Choix carte Arduino en analogique

Publié: Mar 13 Nov 2018, 14:41 
Bonjour,
Le code me parait tout à fait correct, et si ça marche!!!!
Essayer aussi l'exemple de la bibliothèque : BlinkWithReponse. c'est un exemple de discussion entre 2 arduinos, un envoie, le deuxieme reçoit et renvoie un accusé de reception. Grace à ce shémas,par exemple, un T.C.O. distant peut demander à tel ou tel noeud d'actionner des aiguillages, d'allumer des lumières, etc , et quand c'est fait, il renvoie au T.C.O. son accusé de reception ,ce qui permet au T.C.O. de mettre à jour son interface: leds de direction, etc... (tout un univers de dialogue.)
Effectivement, vous pouvez transmetre largement assez de "byte" pour gérer tout un réseau.
Pour ma part, je vous conseille d'organiser vos données à envoyer dans un tableau:
byte paquet [3] = {pointeurMenu,servo,pwm};
ou paquet est le nom du tableau, pointeur menu, servo et pwm sont des varaibles byte déclarés .
Votre fonction pour envoyer le paquet sera:
bus.send(PJON_BROADCAST,paquet,3);
ou bus est le nom du réseau, PJON_BROADCAST permet d'envoyer à tous les noeuds, paquet c'est vos données et 3 le nombres de variables.
dans loop() la fonction bus.update(); suffit.
Pour les recevoir : votre fonction devient
void receiver_function(uint8_t *payload, uint16_t length, const PJON_Packet_Info &packet_info) {

pointeurMenu = payload[0];
servo = payload[1];
pwm = payload[2];
}
N'oubliez pas de déclarer vos variables.
Et proscrivez la fonction delay() cette fonction bloque le micro-controleur pendant le temps spécifié, c'est normal que vous n'envoyez ni ne recevez plus de données.
Bon courage pour la suite.
Choisir, c'est déjà renoncer!
Petitrain
Bavard
 
Messages: 57
Inscrit le: Ven 04 Juil 2014, 11:09
Localisation: Haut-Var
Âge: 67
Echelle pratiquée: HO
Prénom: Gérard
Club: CMMF Mouans-Sartout


Retour vers Arduino

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 3 invité(s)