1/160 - Echelle N

Le Forum consacré à l'Echelle N
 
AccueilAccueil  PortailPortail  ÉvènementsÉvènements  S'enregistrerS'enregistrer  Connexion  
N'hésitez pas à consulter le calendrier du forum pour voir les manifestations près de chez vous !
-41%
Le deal à ne pas rater :
-181€ sur le volant de course LOGITECH G29 Driving Force – ...
259 € 441 €
Voir le deal

 

 Gestion de trajet Arduino et servo sur Aiguillage

Aller en bas 
+8
SavignyExpress
Jeanmi67
jlb
sierramike
Dodesir
CleoN
Fantasio
mistigris
12 participants
Aller à la page : 1, 2, 3  Suivant
AuteurMessage
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMar 23 Mar 2021 - 20:10

Il existe pleins de solutions dont celle de Locoduino que je conseille et dont je me suis inspiré… mais l'envie de mettre les mains dans le cambouis était plus forte !
Mon projet se compose comme suit :
- un arduino nano
- une carte d'extension Nano V3 (très pratique pour la connectique env 1 euro)
- quelques boutons poussoirs pour TCO
- quelques relais pour la gestion des voies (Uln 2803)
- des mini servos (les bleus S90)
- une carte PCA9685 16-channel PWM pour la gestion des servos
- une à deux cartes PCF8574 (pour la gestion des boutons poussoirs)
- des capteurs IR ou ILS, et ou laser
- et une connection sur la BAL de Dmarrion pour detection de voies…

L'idée c'est :
avec un "tableur" géré les aiguillages et les chemins par bouton pression (départ, passage, arrivée)…
Le "processeur" analyse les voies (occupation / chemin) et fourni le chemin sécurisé…
Un cout inférieur à 50 euros tout compris (gestion de 16 aiguillages… voir plus, servos inclus, relais inclus, cartes inclus… )
Dans un premier temps cela sera en C++… mais peut être qu'en rajoutant un lecteur SD capable de lire un fichier excel cela ne demandera pour un "novice" que de créer ses itinéraires sur un quelconque tableur et de le rentrer dans la carte SD…
1) Analyse de la demande et des capteurs
   - Demande itinéraire par pression départ/arrivée (Arrêt gare 3 mn ?)…
   - Occupation des voies
   - Barrière IR ou Laser, ILS… ou même RSID…

2 ) Choix d'un itinéraire parmi ceux proposés correspondant
    - Sous forme de tableur Aiguillage (tableau colonne et ligne, Aiguillage/ état)
    - Sous forme de tableur relais (tableau colonne et ligne, Aiguillage/ état)

3) Mise en place des choix, transmission de l'information et validation sécurité…

Encore une fois, merci à Locoduino et à tous les autres de la "communauté" Arduino pour les tutos, bouts de code et intelligence… et merci aussi à Dmarrion est son BAL nouveau… (mon système fonctionnera sans le système de Dmarrion aussi… mais celui ci vaut le coup d'œil quand même ! peut être même avec BalBAL à 2 bal Smile Gestion de trajet Arduino et servo sur Aiguillage 1f60b

Je n'ai pas de prétention particulière en la matière et vos remarques seront les bienvenues… (je ne suis ni electronicien, ni programmeur…) mais j'adore bidouiller Smile Les electroniciens et informaticien C++ seront donc les bienvenus pour leur remarques et conseils…

Si j'écris sur ce forum, c'est pour offrir une solution peu chère, facile à mettre en œuvre pour un "novice" (une fois que tout cela sera fait) ou une solution "sur mesure" pour quelqu'un gérant un peu le code Arduino… le fond du problème étant de réussir à faire une "machine à penser" les chemins façon jeu d'echecs au final… On verra jusqu'où on ira Smile


Dernière édition par mistigris le Ven 26 Mar 2021 - 7:41, édité 2 fois
Revenir en haut Aller en bas
Fantasio
Membre
Membre
Fantasio


Masculin Age : 61
Localisation : Saint Médard en Jalles (33)
Nombre de messages : 1412
Date d'inscription : 15/11/2019

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMar 23 Mar 2021 - 23:13

Je vais suivre particulièrement ton sujet.
Coincidence ou pas je suis en ce moment en plein apprentissage de l'I2C, ton sujet tombe vraiment à point nommé Very Happy Very Happy
Revenir en haut Aller en bas
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMer 24 Mar 2021 - 8:31

J' oubliai ! merci Fantasio…
La communication entre carte se fait en maitre esclave en I2C, ce qui permet d'en mettre "quasiment" autant que l'on veut en changeant juste l'adresse… on peut ainsi imaginer la gestion de 64 aiguillages et avoir une trentaine de bouton pression…

Ci joint I2cScanner très pratique pour connaitre ou verifier l'adressage d'une carte… (simple mais efficace)

l'autre avantage, c'est qu'une fois l'information envoyé cela "libére" le processeur et enfin le dernier non des moindre : on peut mettre la carte PCA9685 sous une gare et sous une autre, le PCF8574 dans le TCO et l'arduino autre part… avec quelques fils

On pourrait imaginer chainer un autre arduino pour par exemple les annonces gares ou la traction… et même un deuxième TCO ou le cantonnement… (le tout en gardant bien en tête qu'il faut un Maître et un esclave)… Gestion de trajet Arduino et servo sur Aiguillage 1f601
Revenir en haut Aller en bas
CleoN
Membre
Membre
CleoN


Masculin Age : 66
Localisation : 33 Bouliac
Nombre de messages : 1554
Date d'inscription : 26/11/2010

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMer 24 Mar 2021 - 9:51

Chouette une nouvelle bidouille à suivre......

Pour tous ceux qui font de l’électronique numérique je ne peux que vous recommander l'utilisation d'un analyseur logique, pas l'analyseur logique de pro qui coûte une blinde et qui maîtrise les GHz avec des triggers complexes.

Non, je parle du petit bidule qu'on trouve partout pour 10 à 15€ et qui est compatible avec le logiciel SALEAE.

Il fonctionne jusqu'à 24MHz moyennant une connexion USB qui assure en USB 3C, personnellement je n'ai pas eu besoin d'aller au delà de 8MHz pour voir mes signaux.

Le logiciel associé connaît les principaux protocoles, série, I2C, CAN, ... et les met en évidence avec une bonne lisibilité.
C'est vrai que les possibilités de trig sont limitées, front ou état sur une entrée avec un état sur une autre entrée, mais c'est bien suffisant pour nos petits bricolages.

Par rapport à une lecture sur un moniteur de l'IDE Arduino, c'est sans commune mesure.

Mon seul regret: il ne connaît pas le protocole DCC.

Si je trouve un moment je mettrais quelques photos d'écrans.
Revenir en haut Aller en bas
Dodesir
Membre
Membre
Dodesir


Masculin Age : 78
Localisation : 78350 Jouy en Josas
Nombre de messages : 2334
Date d'inscription : 20/11/2007

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMer 24 Mar 2021 - 10:21

Fantasio a écrit:
Je vais suivre particulièrement ton sujet.

CleoN a écrit:
Chouette une nouvelle bidouille à suivre......


Je plussoie
Very Happy Very Happy Very Happy
Revenir en haut Aller en bas
http://dominique.desir.free.fr/
sierramike
Membre
Membre
sierramike


Masculin Age : 42
Localisation : 67000 STRASBOURG
Nombre de messages : 4291
Date d'inscription : 29/10/2015

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMer 24 Mar 2021 - 10:42

Ca m'intéresse ton "bidule à 10 ou 15€", si tu peux poster des références et photo(s) du bidule en question, et quelques captures d'écran, à la rigueur ouvre un nouveau sujet dédié, ça devrait passionner pas mal de monde !
Revenir en haut Aller en bas
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMer 24 Mar 2021 - 11:24

Chez les chinois… malheureusement évidemment… (Je donne des adresses mais on peut trouver cela n'importe ou Ebay, Amazon, DX…)

PCA9685
PCF8574
Arduino Nano
carte extension
Comme vous pouvez le voir la carte PCF8574 a des entrées à droite femelle et male à gauche… on peut donc les assemblés sans cables… on y voit aussi les jumpers permettant de determiner les adresses de chaque carte. (Evidement sur l'ensemble de la chaine I2C on evite de mettre une meme adresse !)
Gestion de trajet Arduino et servo sur Aiguillage Pcf10

Sur la carte PCA9685 le schema Adafruit montre comment chainer plusieurs cartes en I2C… mais bon, avec 3 cartes cela fait quand même 48 servos… pour la chaine I2C il suffit de mettre le PCF8574 à la place d'un PCA9685, avant ou après c'est pareil !!
La chaine I2C du PCA9685 se fait par petite soudure (peut être existe t il des versions avec Strap)

On n'oubliera pas de monter si une carte est pleine un condensateur pour une bonne repartition de l'enérgie sur les servos… (470 mini).
On voit sur le shema l'entrée de puissance (5 à 7 volts avec un bon amperage en fonction du nombre de servo)… On voit que l'on peut directement connecter les servos sur la carte avec les prises 3 fils… (facilite la mise en place)
Gestion de trajet Arduino et servo sur Aiguillage Adafru10

Les Servos C'est pas le top mais ça fera le job…
J'ai trouvé des boutons poussoirs à led intégrées qui peuvent etre interessants pour le chemin à faire…
Je decouvre Fritzing pour essayer de vous mettre les shemas de connection de l'ensemble…


Dernière édition par mistigris le Dim 28 Mar 2021 - 17:36, édité 1 fois
Revenir en haut Aller en bas
sierramike
Membre
Membre
sierramike


Masculin Age : 42
Localisation : 67000 STRASBOURG
Nombre de messages : 4291
Date d'inscription : 29/10/2015

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeJeu 25 Mar 2021 - 1:03

Je connais bien tout ça, en fait je parlais à CleoN, mais tu as très bien fait de mettre ces illustrations qui serviront à beaucoup de monde, j'en suis sûr !
Revenir en haut Aller en bas
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeJeu 25 Mar 2021 - 8:23

A peine commencer que mon projet varie…
On enléve le Uln 2803 servant aux relais et on le remplace par une ou plusieurs cartes PCF8574
qui permettent de gérer des entrées et sorties pour : des boutons, des relais, des capteurs…
J'ai fais un petit schéma avec Fritzing (c'est mon premier, merci pour votre indulgence) qui montre l'idée…
Je n'ai malheureusement pas trouvé le composant exact PCF8574 et l'ai remplacé par un autre "identique" sans double entrée… mais cela donne la vision globale du bidule avec sa chaîne I2C. On voit aussi que la quasi totalité des broches de l'Arduino (sur son extension) sont libres et laissent enormément de possibilités complémentaires (Wifi, bluetooth, Radiocommande,lecteur RSID ou SD etc peuvent venir compléter le projet…).
On voit bien la chaîne I2C allongée et que l'on peut multiplier par 2 ou 3 sans soucis (juste adressage)… Celle-ci se comportera comme un train avec des wagons d'information dans un sens et des wagons dans l'autre (encapsulage) avec une gare principale et de triage l'arduino et des gares secondaires : les cartes… (l'image est amusante)
Le Schéma ci-dessous montre le principe et la connectique de la chaîne I2C (SDA en A4 et SLC en A5) : (j'en ferai un plus precis ulterieurement)
Gestion de trajet Arduino et servo sur Aiguillage Shema_11

En bas les entrée des cartes PCF8574 quelques capteurs et boutons…
En haut les sorties du PCF8574 relais ou transistor de puissance IRF 520 (je l'avais utilisé sur un porte avion radiocommandé pour animer un générateur de fumée).
Ce ne sont que des exemples…
J'enléve l'ULN 2803 (que j'adore pourtant) pour libérer la quasi intégralité des pins de la carte.

Sur le "terrain" : on aura vraissemblablement sous une gare un PCA9685 et un PCF8574 pour gérer les servos et recevoir les informations capteurs et relais… et dans le TCO l'arduino et un PCF8574 pour les boutons et led…
Revenir en haut Aller en bas
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeJeu 25 Mar 2021 - 8:49

Maintenant qu'on a "branché" le fil bleu avec le fil blanc… Laughing
On va s'attaquer à l'adressage des cartes et à la structure du programme…
La structure de celui-ci sera la suivante :
void loop() { // on lit les capteurs, on selectionne l'itineraire, on compile celui-ci, on active les relais (peux le mettre après les changement d'aiguille), on envoie les données à la carte des servos
Code:
void loop() { // on lit les capteurs, on selectionne l'itineraire, on compile celui-ci, on active les relais (peux le mettre après les changement d'aiguille), on envoie les données à la carte des servos
 
lecturecapteur;
choixitineraire;
itineraires;
activerelais;
envoieposnaiguille;

}
Pour l'instant, j'en suis à la gestion des aiguillages (je commence par la fin c'est plus drole !)…

On insére les bibliothèques :
Code:
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

puis on crée un itinéraire sous forme de tableau :
Code:
void itineraires (){

char tableauAIG[ITINERAIRES][NBRE_AIGUILLAGE] = { // tableau de char à 2 dimensions [LIGNES][COLONNES] pour 16 aiguillages ajouter autant de cases que le nombre s'aiguillages et d'itinéraires
  {'AIG1','AIG2','AIG3','AIG4','AIG5','AIG6','AIG7','AIG8','AIG9','AIG10','AIG11','AIG12','AIG13','AIG14','AIG15','AIG16'},
  {  '0',  '0',  '0',  '0',  '0',  '0',  '0',  '0',  '0',    '0',    '0',    '0',    '0',    '0',    '0',    '0'},// gestion des aig en ouvert fermé 1/0
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
};

    for(y = 0; y > NBRE_AIGUILLAGE; y++) //création de l'itineraire à partir du choix
    {
    int vala = tableauAIG[choixitin][y]; //on va chercher la valeur de la ligne pour chaque aiguille correspondant à l'itineraire du choix
    itineraire[y] = vala ; //on place la valeur dans le tableau sous chaque Aiguille de l'itineraire à partir du choix
   
      Serial.begin(9600); // test affichage moniteur
      Serial.print (itineraire[y]); // test affichage moniteur remplissage itineraire


    }

}
 
Le code n'a pas été testé mais semble fonctionner… à un petit réglage près (le 0 des tableaux à verifier ! merci Locoduino pour l'avertissement ! Rolling Eyes

Donc on a un tableau avec ligne et colonne dans lequel on va chercher les infos correspondant à l'aiguillage en fonction de l'itinéraire choisi : 1 aiguillage activé pour deviation 0 tout droit (par "convention") j'ai prévu 35 itinéraires possibles…

une fois cela fait, on envoie la "routine" qui lira le tableau et l'enverra au module PCA pour gérer les servos. J'ai volontairement utiliser des positions communes à tous les servos (ils bougeront à la même vitesse avec le même débatemment compris entre SERVOMAX et SERVOMIN) partant du principe que vous aurez les même servos et aiguillages.
Code:
void envoieposnaiguille (){
 // boucle for qui remplira le tableau pour nous
    for(i = 0; i < NBRE_AIGUILLAGE; i++)
    {
      // itineraire[i] = sens; // chaque case du tableau vaudra 0 tous les aiguillagues en même posiiton

    if (itineraire[i] = 1) {
      Position = SERVOMAX; //future position MAX
   
      for (uint16_t x = Posintermed; x <Position; Posintermed += vitAuig) {
      pwm.setPWM(i, Posintermed, x );
      delay(attente);
     
      Serial.begin(9600); // test affichage moniteur
      Serial.print (i); // test affichage moniteur port servo
      Serial.print (Posintermed); // test affichage moniteur position servo
    }
 }


else {
      Position = SERVOMIN;//future position MIN
   
      for (uint16_t x = Posintermed; x >Position; Posintermed -= vitAuig) {
      pwm.setPWM(i, Posintermed, x );
      delay(attente);
     
      Serial.begin(9600); // test affichage moniteur
      Serial.print (i); // test affichage moniteur port servo
      Serial.print (Posintermed); // test affichage moniteur position servo
    }
    }


  delay(attente);
  if (i > itineraire) i = 0;

       
}
  }

Le code n'est pas testé mais c'est l'idée…
Dans le setup…
Code:

void setup() {
  Serial.begin(9600);
  Serial.println("Itineraire Aiguillage");

  pwm.begin();
  pwm.setPWMFreq(60);  // Analog servos run at ~60 Hz updates

  delay(10);
}
je pense essayer de déterminer la fréquence de la chaîne I2C par la suite, mais je n'ai pas trouvé de choses "convainquantes" à ce sujet… On pourra peut être l'accélerer…

Enfin les variables (qui restent à determiner en fonction des comportements des servos notamment)…
Code:

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(&Wire, 0x40);

#define SERVOMIN  150 // Position minimale (out of 4096)
#define SERVOMAX  600 // Position maximale (out of 4096)


uint8_t servonum = 0; // our servo # counter

#define NBRE_AIGUILLAGE 16 // nombre d'aiguillages ATTENTION au 0 !!! soit -1

byte aiguillage[NBRE_AIGUILLAGE] ; // Déclaration d’un tableau dont la taille est NBRE_AIGUILLAGE
//const byte first_pin = 22 ; // Valeur de la première pin qui va contrôler mes aiguilles.

#define ITINERAIRES 35 // nombre d'itineraires possibles (35 par default max) ATTENTION au 0 !!! soit -1
int choixitin = 1 ; // choix du numero d'itinéraires 1 par default de depart
int ffx = 33 ; // Itinéraires spéciaux relais


byte itineraire[NBRE_AIGUILLAGE] = {'0','1','1','0','0','1','1','0','1','1','0','1','1','0','1','0'}; //création d'un itineraire de départ/ puis choisi


// Statut de l'aiguillage (ouvert ou dévié)
int sens = 0 ; // 0 ou 1
// positions initiales
float Position = SERVOMIN; // position d'arrivée du servo
float Posintermed = SERVOMIN; // position intermediaire du servo pour boucle
int vitAuig = 0.05 ; // vitesse de mouvement de l'aiguillage (0.01 très lent, 1 rapide)
int attente = 50 ; // réglage du delay
int i= 0; //Variable pour boucle
int y = 0; //Variable pour boucle
int a = 0; //Variable pour boucle

Le tableau NBR_AIGUILLAGES encapsule le précédent en lisant l'itinéraire voulu pour le transmettre… il est aussi l'itinéraire de départ par default…
Voilà pour le début…
Revenir en haut Aller en bas
Fantasio
Membre
Membre
Fantasio


Masculin Age : 61
Localisation : Saint Médard en Jalles (33)
Nombre de messages : 1412
Date d'inscription : 15/11/2019

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeVen 26 Mar 2021 - 18:14

mistigris a écrit:
....puis on crée un itinéraire sous forme de tableau :
Code:
void itineraires (){

char tableauAIG[ITINERAIRES][NBRE_AIGUILLAGE] = { // tableau de char à 2 dimensions [LIGNES][COLONNES] pour 16 aiguillages ajouter autant de cases que le nombre s'aiguillages et d'itinéraires...
  {'AIG1','AIG2','AIG3','AIG4','AIG5','AIG6','AIG7','AIG8','AIG9','AIG10','AIG11','AIG12','AIG13','AIG14','AIG15','AIG16'},
 ....
   for(y = 0; y > NBRE_AIGUILLAGE; y++)//création de l'itineraire à partir du choix
    ...

Attention à la ligne de code suivante: for(y = 0; y > NBRE_AIGUILLAGE; y++),
je pense que tu voulais écrire: for(y = 0; y < NBRE_AIGUILLAGE; y++)

Bonne continuation
Revenir en haut Aller en bas
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeDim 28 Mar 2021 - 17:25

Fantasio merci évidemment…
Je n'ai pas testé le code et je ne l'ai pas relu. C'est l'idée générale et la structure de l'ensemble que je pose… doit y avoir pleins d'autres bugs Smile mais merci… de même que sur les tableaux je n'ai pas fait attention à l'appel de la ligne 0… (par exemple)
Revenir en haut Aller en bas
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeDim 28 Mar 2021 - 17:41

Suite à une remarque très juste de Jlb sur un autre sujet, j'ai changé le lien aliexpress pour le Nano :
"il vaut mieux prendre de l’Aduino Nano avec des CH340 qu’avec des FT232RL…"
Les liens ne sont donnés qu'à titre indicatif, on peut aller chez Ebay, Adafruit, Sparkfunk ou d'autre pour avoir des "originaux" si l'on le souhaite… il n'y a que la carte PCF8574 que je n'arrive pas à trouver en hors chine…
Je viens de recevoir 50 servos SG90
Revenir en haut Aller en bas
Fantasio
Membre
Membre
Fantasio


Masculin Age : 61
Localisation : Saint Médard en Jalles (33)
Nombre de messages : 1412
Date d'inscription : 15/11/2019

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeLun 29 Mar 2021 - 10:59

mistigris a écrit:
Fantasio merci évidemment…
Je n'ai pas testé le code et je ne l'ai pas relu. C'est l'idée générale et la structure de l'ensemble que je pose… doit y avoir pleins d'autres bugs Smile mais merci… de même que sur les tableaux je n'ai pas fait attention à l'appel de la ligne 0… (par exemple)

C'était juste pour t'indiquer que je suis attentivement ton projet et je ne dois pas être le seul... bounce
Revenir en haut Aller en bas
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeLun 29 Mar 2021 - 11:56

Fantasio merci pour les encouragements !… Very Happy
Il continue d'évoluer : J'aimerai qu'un novice Arduino puisse le faire fonctionner sans entré aucune ligne de code avec un lecteur de carte SD dans laquelle il entre les tableaux excel… evidemment pour les aficionados de l'Ardduino qu'ils puissent le personnaliser entiérement… J'ai vu des télécommandes Bluetooth pour Arduino railway control (un peu cher 15,99 pour Arduino Railway Layout Control), mais si c'est bien pourquoi ne pas rendre mon module compatible… Quelqu'un connait il cette solution ? et qu'en est il ? (cela pourrait eviter un TCO…).
Revenir en haut Aller en bas
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeLun 29 Mar 2021 - 22:23

Un peu de lecture pour l'I2C : I2C pdf
(Pour ceux qui veulent approfondir l'I2C sur Arduino Smile)
Revenir en haut Aller en bas
Fantasio
Membre
Membre
Fantasio


Masculin Age : 61
Localisation : Saint Médard en Jalles (33)
Nombre de messages : 1412
Date d'inscription : 15/11/2019

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeLun 29 Mar 2021 - 23:16

@mistigri
Merci pour le document  Smile

Pour ton projet, mon idée serait:
-dans un premier temps tu valides un montage simple avec un minimum de cartes et de servos ce qui permettrait au plus grand nombre de bien comprendre le concept et le reproduire et le tester avec un petit investissement .
-généraliser pour qu'il puisse s'adapter aux préférences de chacun.

Bon courage dans ton projet.
Revenir en haut Aller en bas
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMar 30 Mar 2021 - 1:02

Fantasio… merci, tu as totalement raison !
mais je suis un bidouilleur qui a pris de mauvaise habitudes:P
En fait, là, j'étais à l'inverse total de cela en train d'essayer de chaîner les cartes en "automatique" soit 5 cartes PWM et 4 cartes extension (2 entrées, 2 sorties)… Bref je fais à ma façon, je pars du principe que qui peut le plus peut le moins… Après quand je debugue l'ensemble je vire les trucs et les remets au fur et à mesure… Mais là je ne peux malheureusement faire que de la prog sans tester (j'ai même pas un arduino sous la main Smile j'ai 50 servos mais pas d'arduino ni cartes (elles sont à la campagne avec les vaches ! Smile)… j'avais fais un robot pour mon fils comme ça en I2C maitre esclave (un arduino dans la tête, un dans les pieds et un PCA9685 dans le tronc)… la partie pied était une chenille qui avait divers programmes independants (sur un seul bouton) on appelait le lecteur de ligne ou le "scanner infrarouge" pour les deplacement autonome… Bref, y a eu quelques bugs ou il a fallu virer les choses qui m'intéressaient pas… mais au final peu de problème… Après pour le coté didactique, c'est vrai que l'on peut faire mieux (ou alors je poste rien, je finis et je fais un truc bien… et je reprends tout en ligne propre)…
Par contre pour "généraliser pour qu'il puisse s'adapter aux préférences de chacun" je suis totalement la dedans : Celui qui ne voudra pas faire une ligne de code pourra aller jusqu'à 80 servos, 16 entrées, 16 sorties… (ou simplement 7 servos 8 entrées et 8 sorties)
simplement en entrant la carte SD contenant le fichier tableur. (Je me vente un peu Embarassed j'ai jamais lu de carte SD en Arduino)… Après pour version V12250, je me pencherai sur le Bluetooth une fois que ça fonctionnera… La par exemple sur le programme on va rentrer le nombre de cartes donc pour le test je vais effectivement en mettre une pour commencer avec 16 servos… après je vire les servos et je teste les PCF8574 (relais et entrée)… puis après les 2… puis 4 cartes… etc…
En fait le programme de base est quasi fini… me manque la partie "intelligence" de choix d'itineraire (c'est à dire non renseigné sur un tableur) mais là je crois que je vais pas réussir ! (j'ai vu que y a quelqu'un qui a fait un jeu d'echec sur Arduino !)… Donc se sera un tableur dans un premier temps.
Là je bloque sur un truc "con" (ça doit être dans le nommage de la variable) pour faire passer d'une carte à l'autre sur ma boucle (dans ma boucle j'arrive à 16 sur la PWM il faut qu'elle basule sur l'autre adresse et continue en fonction de la variable nombre de carte… simple mais je ne sais pas comment faire pour appeler la carte avec une variable dans la boucle… Sinon j'écris 3 pages de code Smile)… au début je me suis dit que j'allais faire un tableau… mais bon, il est tard et demain la lumière viendra.

Code:
#include <Wire.h>
#include <PCF8574.h>
PCF8574 pcf8574_1 (0x20) ;// carte Adresse PCF8574 1 entrée bouton et capteur
PCF8574 pcf8574_2 (0x23) ;// carte Adresse PCF8574 2 entrée bouton et capteur
PCF8574 pcf8574_3 (0x26) ;// carte Adresse PCF8574 3 sortie relais ou transistor de puissance, led etc…
PCF8574 pcf8574_4 (0x27) ;// carte Adresse PCF8574 3 sortie relais ou transistor de puissance, led etc…
uint8_t  valPcf = 1 ; // variable indiquant la carte pcf8574 prise en compte
unsigned long timeElapsed;

#include <Adafruit_PWMServoDriver.h>

//Board 0: Address = 0x40 Offset = binary 00000 (no jumpers required)
//Board 1: Address = 0x41 Offset = binary 00001 (bridge A0 as in the photo above)
//Board 2: Address = 0x42 Offset = binary 00010 (bridge A1)
//Board 3: Address = 0x43 Offset = binary 00011 (bridge A0 & A1)
//Board 4: Address = 0x44 Offset = binary 00100 (bridge A2)

//char AddressPWM [5] = {'40','41','42','43','44'};
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(&Wire, 0x40);
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41);
Adafruit_PWMServoDriver pwm3 = Adafruit_PWMServoDriver(0x42);
Adafruit_PWMServoDriver pwm4 = Adafruit_PWMServoDriver(0x43);
Adafruit_PWMServoDriver pwm5 = Adafruit_PWMServoDriver(0x44);
int cartePWM = 1 ; // variable indiquant la carte PCA9685 prise en compte

#define PCA9685 1 // NBR de cartes Adafruit PCA9685 par default 1 min

pour l'instant ça donne ça :
Code:
void itineraires (){

char tableauAIG[ITINERAIRES*PCA9685][NBRE_AIGUILLAGE*PCA9685] = { // tableau de char à 2 dimensions [LIGNES][COLONNES] pour 16 aiguillages ajouter autant de cases que le nombre s'aiguillages et d'itinéraires
  {'AIG1','AIG2','AIG3','AIG4','AIG5','AIG6','AIG7','AIG8','AIG9','AIG10','AIG11','AIG12','AIG13','AIG14','AIG15','AIG16'},
  {  '0',  '0',  '0',  '0',  '0',  '0',  '0',  '0',  '0',    '0',    '0',    '0',    '0',    '0',    '0',    '0'},// gestion des aig en ouvert fermé 1/0
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
  {  '1',  '0',  '1',  '1',  '0',  '1',  '1',  '0',  '1',    '1',    '0',    '1',    '1',    '0',    '1',    '1'},
};

    for(y = 0; y < (NBRE_AIGUILLAGE*PCA9685) ; y++) //création de l'itineraire à partir du choix
    {
    int vala = tableauAIG[choixitin][y]; //on va chercher la valeur de la ligne pour chaque aiguille correspondant à l'itineraire du choix
    itineraire[y] = vala ; //on place la valeur dans le tableau sous chaque Aiguille de l'itineraire à partir du choix
   
      Serial.begin(9600); // test affichage moniteur
      Serial.print (itineraire[y]); // test affichage moniteur remplissage itineraire


    }

}
 




void envoieposnaiguille (){
 // boucle for qui remplira le tableau pour nous
    for(i = 0; i < (NBRE_AIGUILLAGE*PCA9685); i++)
    {
      // itineraire[i] = sens; // chaque case du tableau vaudra 0 tous les aiguillagues en même posiiton

    if (itineraire[i] = 1) {
      Position = SERVOMAX; //future position MAX
    //AddressPWM
      for (uint16_t x = Posintermed; x <Position; Posintermed += vitAuig) {
      pwm.setPWM(i, Posintermed, x );
      delay(attente);
     
      Serial.begin(9600); // test affichage moniteur
      Serial.print (i); // test affichage moniteur port servo
      Serial.print (Posintermed); // test affichage moniteur position servo
    }
 }


else {
      Position = SERVOMIN;//future position MIN
   
      for (uint16_t x = Posintermed; x >Position; Posintermed -= vitAuig) {
      pwm.setPWM(i, Posintermed, x );
      delay(attente);
     
      Serial.begin(9600); // test affichage moniteur
      Serial.print (i); // test affichage moniteur port servo
      Serial.print (Posintermed); // test affichage moniteur position servo
    }
    if (i < 16) {pwm = pwm1 ;}
    if (i > 16 && i < 32) {pwm = pwm2 ;}
    if (i > 32 && i < 48) {pwm = pwm3 ;}
    if (i > 48 && i < 64) {pwm = pwm4 ;}
    if (i > 64 && i < 80) {pwm = pwm5 ;}

    }


  delay(attente);
  if (i > itineraire) i = 0;

       
}
  }

Mais je ne suis pas très satisfait… et je suis sur que ça marche pas !
Revenir en haut Aller en bas
jlb
Membre
Membre
jlb


Masculin Age : 57
Localisation : Ici
Nombre de messages : 1524
Date d'inscription : 31/12/2011

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMar 30 Mar 2021 - 10:30

Bonjour,

2 remarques :

1 - Copier des objets (pwm = pwm1 par exemple) n'est pas quelque chose d'anodin et je ne suis pas convaincu qu'Adafruit ait prévu ça dans sa bibliothèque. Il vaudrait mieux passer par un pointeur :

Code:

Adafruit_PWMServoDriver *pwm = NULL;

Puis :

Code:

pwm = &pwm1; /* idem pour pwm2, 3, ... */

Évidemment il faut tenir compte du fait que pwm est un pointeur dans le code :

Code:

pwm->setPWM(i, Posintermed, x );

2 - Plusieurs solutions plus ou moins élégantes à ton problème

A - Comme il y a 16 servos par PCA, tu peux décomposer la variable i en deux champs binaires. Dans les 4 bits de poids faible, tu as le numéro du servo (de 0 à 15) et dans les autres le numéro du PCA (de 0 à N) :

Code:

+------------+----+
|     pca    |  s |
+------------+----+

Pour récupérer le numéro du PCA, il suffit décrire

Code:

 i >> 4

B - Mais tu pourrais également faire deux boucle imbriquées : 1 sur les PCA et une sur les servos dans le PCA et coupler ça à un tableau de pointeurs de PCA

Code:

Adafruit_PWMServoDriver pwm1(0x40);
Adafruit_PWMServoDriver pwm2(0x41);
Adafruit_PWMServoDriver pwm3(0x42);
Adafruit_PWMServoDriver pwm4(0x43);
Adafruit_PWMServoDriver pwm5(0x44);

Adafruit_PWMServoDriver *bloc[PCA9685] = {
  &pwm1, &pwm2, &pwm3, &pwm4, &pwm5
};

Puis dans la boucle

Code:

bloc[pca]->setPWM(servo, Posintermed, x );
Revenir en haut Aller en bas
http://modelleisenbahn.triskell.org
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMar 30 Mar 2021 - 11:12

Merci ! jlb… c'est exactement cela. Je ne connais pas le pointeur (je me rencarde Smile)…
Pour le tableau evidemment j'avais commencé mais sans pointeur en me doutant qu'adafruit n'avait pas prévu ça… En tout cas merci beaucoup… je regarde à tête reposée. Smile
Revenir en haut Aller en bas
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMar 30 Mar 2021 - 12:23

J'ai regardé les "struct" (structure) et objets "class"…
évidemment Locoduino est là pour m'aider notamment Smile
ça à l'air vraiment cool… c'est une autre manière d'abordé le sujet et de même de penser et de cotecoder Smile
l'idée des 2 boucles imbriquées, oui, c'est ce que je veux faire…
mais peux tu développer la version A ? (je ne comprends pas le i >> 4) si avec un bout de programme on peux appeler aussi simplement c'est cool aussi !!!
Revenir en haut Aller en bas
jlb
Membre
Membre
jlb


Masculin Age : 57
Localisation : Ici
Nombre de messages : 1524
Date d'inscription : 31/12/2011

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMar 30 Mar 2021 - 12:31

Pour l'opérateur >>, c'est ici : https://www.locoduino.org/spip.php?article70

Mais les pistes présentées vont du moins bien au mieux Smile et le A n'éliminera pas la cascade de if pour affecter le pointeur de l'objet pwmX qui va bien à pwm
Revenir en haut Aller en bas
http://modelleisenbahn.triskell.org
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeLun 12 Avr 2021 - 19:05

… Un petit mot pendant que je continue mes test de prog… avec 2 PCA9685 et 16 servos (un condensateur de 1000 sur l'un et un de 470 sur l'autre)… ça fonctionne… mais encore un peu de boulot.
Par contre j'ai cramé une carte chinoise de redressement de tension (chiffre digitaux) j'étais en 12 v avec 1A… ben, y faut une très bonne alimentation pour les 16 servos. Je pensai pas que ça consomm
ait autant… je pense qu'il faut du 5A (pour être secu) sous 5/6 volts… ça tombe bien j'en ai trouvé une top en démontant une grosse imprimante ! donc :
ATTENTION A L'ALIMENTATION DES SERVOS
Revenir en haut Aller en bas
Jeanmi67
Membre
Membre
Jeanmi67


Masculin Age : 69
Localisation : Antibes
Nombre de messages : 216
Date d'inscription : 12/09/2010

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeLun 12 Avr 2021 - 22:52

 
Bonsoir,

mistigris a écrit:
ATTENTION A L'ALIMENTATION DES SERVOS

Dans le club où je suis, nous sommes dans le même genre de configuration : un Arduino Mega pilote par bus I2C quatre PCA9685 dont deux commandes 16 relais chacun et les deux autres 16 servos chacun.
L'ensemble du système est destiné à l'exploitation de la gare terminus d'un de nos réseaux, la partie "voyageurs" de la dite gare étant gérée sur le principe des itinéraires, (boutons origine, boutons destination et boutons de destruction).

Pour éviter des appels de courant trop importants (certains itinéraires doivent commander jusqu'à 9 servomoteurs), les commandes de servomoteurs sont échelonnées toutes les  200ms. Ainsi, le courant consommé ne dépasse pas 1,2A.
Par sécurité, un fusible de 2A protège l'alimentation 5V de l'ensemble.

Jean-Michel
Revenir en haut Aller en bas
mistigris
Membre
Membre



Masculin Age : 53
Localisation : Maisons Alfort
Nombre de messages : 433
Date d'inscription : 11/04/2012

Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitimeMar 13 Avr 2021 - 11:21

Jeanmi67… merci, je suis interessé par votre système (rigoureusement identique au mien)… je veux bien voir le code (si possible)… interessé par la gestion des servos (position et lenteur, choix de la bibliotheque) ainsi que pas les boutons destinations…

pour l'alimentation c'est ce que je pensais après ce qui a cramer c'est le regulateur chinois (peut être qu'il ne supportait pas plus d'un ampère…
Revenir en haut Aller en bas
Contenu sponsorisé





Gestion de trajet Arduino et servo sur Aiguillage Empty
MessageSujet: Re: Gestion de trajet Arduino et servo sur Aiguillage   Gestion de trajet Arduino et servo sur Aiguillage Icon_minitime

Revenir en haut Aller en bas
 
Gestion de trajet Arduino et servo sur Aiguillage
Revenir en haut 
Page 1 sur 3Aller à la page : 1, 2, 3  Suivant

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
1/160 - Echelle N :: Modèles réduits à l'echelle N :: Electricité / Electronique-
Sauter vers: