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

Pages: 1 ... 34 35 [36] 37 38 ... 45
526
Composants / Re : moteur stepper
« le: septembre 15, 2016, 09:52:14 am »
S'il ne tourne pas, c'est peut être pas un problème de puissance, mais de sens de branchement. Ou de l'ordre d'activation des différentes broches.

Petit rappel, un moteur pas à pas (stepper) bipolaire (le cas le plus fréquent) est connecté via quatre fils à l'Arduino. Chaque fil est relié aux extrémités des deux bobines du moteur. Il faut activer ces bobines dans un sens et un ordre bien précis pour obtenir un mouvement, et donc activer les quatre broches dans un ordre spécifique, dépendant de la façon dont est conçu le moteur.
Si je prend mon cas, la bibliothèque 'stepper' livrée avec l'IDE Arduino a obstinément refusé de déplacer correctement mon moteur (économique il est vrai), un 28BYJ-48 trouvé pas cher à l'autre bout du monde. Après moult recherches, il s'est avéré que la séquence d'activation des broches de 'stepper' n'est pas compatible avec mon moteur !
J'ai du recoder autre chose pour y arriver (voir ma bibliothèque ici).

Plusieurs solutions s'offrent à toi : coder toi même ce déplacement (on trouve beaucoup d'exemples assez simples pour ça), modifier stepper pour coller à ton moteur, ou utiliser Accessories pour le piloter, sachant que lui peut s'adapter à n'importe quelle configuration (il y a un exemple pour stepper livré).

527
Débuter / Re : Faire de la fumée avec ses alims
« le: septembre 09, 2016, 04:02:59 pm »
Attention aussi à la polarité de la prise d'alimentation qui doit avoir le pole positif au centre du connecteur http://www.locoduino.org/spip.php?article16

528
Débuter / Re : Faire de la fumée avec ses alims
« le: septembre 09, 2016, 03:59:42 pm »
Normalement, cela ne pose pas de problème. Par contre, brancher en inversant les fils sur l'entrée 12V, ou avec une alim qui délivre plus que les 12 volts maxi... Dans un cas comme dans l'autre, le convertisseur de tension des modèles Arduino chinois est généralement très peu tolérant. Les Arduino originaux venu de la botte sont normalement mieux construits.
Si tu as juste un petit trou sur le 7805 présent à côté de la prise d'alim, on peut le remplacer par un autre. Je l'ai fait, et mon Méga est reparti. Ce n'est pas le cas d'un autre qui n'a rien voulu savoir !


529
Présentez vous ! / Re : Bonjour de Patrick75
« le: septembre 07, 2016, 03:38:47 pm »
Bienvenue à toi. Le Due n'est pas très pratiqué ici, mais c'est intéressant de voir ce qu'il a à apporter... Le bus CAN par contre est développé dans nos articles. Nul doute que tu trouveras à qui causer ici !

530
Débuter / Re : Avr-gcc, avr libc, avrdude ?
« le: septembre 05, 2016, 04:23:01 pm »
Ces outils sont ceux utilisés en interne par l'IDE Arduino, donc ça ne devrait pas poser de problèmes. Mais je n'ai pas essayé de me passer de l'IDE...

531
Non, ce n'est pas compliqué, mais il faut définir les besoins dès le départ, et c'est cette définition qui va permettre d'avancer.

D'après ce que j'ai lu, les liens possibles sont :

connecteAVoie
connecteSortantAVoie
connecteSortantDroitAVoie
connecteSortantDevieAVoie
connecteSortantBisAVoie
connecteEntrantAVoie
connecteEntrantBisAVoie

avec deux chances en plus. Un, il faut deux arguments, quelle que soit le lien, et deux, des identifiants sont utilisés pour la création de tous les objets. Il 'suffit' donc de définir la bonne syntaxe. Pour changer, j'ai utilisé le '/' comme séparateur, mais c'est un choix personnel !

objet/type de connection/objet lié/type de lien

'objet' et 'objet lié' sont les identifiants donnés dans les constructeurs et correspondent à l'objet concerné, et à celui passé en argument. bien sûr on parle là de leur valeur numérique, pas de AIGUILLE_12 ici !

'type de connexion' va être une version abrégée de la liste citée plus haut :

V : connecteAVoie
SV : connecteSortantAVoie (!)
SRV : connecteSortantDroitAVoie
SVV : connecteSortantDevieAVoie
SBV : connecteSortantBisAVoie
EV : connecteEntrantAVoie
EBV : connecteEntrantBisAVoie


et le type de lien sera :

E : ENTRANT
S : SORTANT
EB : ENTRANT_BIS
SR : SORTANT_DROIT
SV : SORTANT_DEVIE


ne reste plus qu'à construire le fichier avec tous les liens, genre

127/V/12/E

et le décompresser comme expliqué plus haut. On peut même sans doute simplifier l'analyse en n'utilisant qu'un seul caractère pour ces types, ou toujours trois caractères...



532
La problématique posée par Denis est bien connue. La solution passe par une description 'texte' du résultat à obtenir, puis une analyse de ce texte par le programme pour en déduire les objets.
Reprenons ton cas de trois cantons :

precedent, courant, suivant
     3                1             2
     1                2             3
     2                3             1


Créons une syntaxe qui sera valide pour notre besoin, une ligne du fichier texte pour chaque canton :

précédent, courant, suivant

les trois valeurs sont séparées par des virgule. Eventuellement on peut imaginer une syntaxe encore plus évoluée au cas où il y aurait plusieurs précédents ou plusieurs suivants :

préc1:préc2,courant,suiv1:suiv2

le séparateur entre les différents précédents et suivants est ici un ':' .

Une fois la syntaxe décrite, on crée le fichier qui va bien pour ton exemple :

3,1,2
1,2,3
2,3,1
0


le zéro de fin, s'il n'est pas vraiment obligatoire permet de tout de suite savoir que c'est terminé !

Ce fichier serait stocké dans l'EEPROM, une carte SD ou tout autre moyen de stockage. Reste à créer les objets correspondants : dans le setup une phase de lecture du fichier, d'analyse ligne par ligne pour extraire les données utilisant une petite machine à état basique :

char ligne[80];
int prec[10];
int courant;
int suiv[10];
byte currPrec;
byte currSuiv;

enum TEXTINTERPRETER_STEP
{
TEXTINTERPRETER_STEP_PREC,
TEXTINTERPRETER_STEP_COURANT,
TEXTINTERPRETER_STEP_SUIV
};

#define SEPARATOR ','
#define PRECSUIV_SEPARATOR ':'

TEXTINTERPRETER_STEP etat = TEXTINTERPRETER_STEP_PREC;

currPrec = 0;
currSuiv = 0;
int value = 0;
for (int i = 0; i < 80; i++)
{
if (ligne[i] == 0)
{
// s'il n'y a pas de suivant...
if (etat == TEXTINTERPRETER_STEP_COURANT)
courant = value;

if (etat == TEXTINTERPRETER_STEP_SUIV)
suiv[currSuiv] = value;

break; // fin de ligne
}

if (ligne[i] == SEPARATOR)
{
switch(etat)
{
case TEXTINTERPRETER_STEP_PREC:
prec[currPrec] = value;
value = 0;
etat = TEXTINTERPRETER_STEP_COURANT;
break;

case TEXTINTERPRETER_STEP_COURANT:
courant = value;
value = 0;
etat = TEXTINTERPRETER_STEP_SUIV;
break;

// Pas de case SUIV. C'est traité par la fin de ligne.
}
continue;
}

if (ligne[i] == PRECSUIV_SEPARATOR)
{
switch(etat)
{
case TEXTINTERPRETER_STEP_PREC:
prec[currPrec] = value;
value = 0;
currPrev++;
break;

case TEXTINTERPRETER_STEP_SUIV:
suiv[currSuiv] = value;
value = 0;
currSuiv++;
break;
}
continue;
}

// Value
if (ligne[i] >= '0' && ligne[i] <= '9')
{
value = value * 10 + ligne[i] - '0';
}
}

Une fois les données extraites de la ligne, il est possible de créer les objets (je suis à peu près sûr de ne pas coder ces lignes correctement, il faut en saisir l'esprit !):

    suivant_pair[courant] = block[suiv[0]].suivant();
    suivant_impair[courant] = block[prec[0]].precedent();

c'est un point de départ, le code est là aussi fourni sans aucune forme de test, ni compilation, ni exécution !

533
Le logiciel DCC++ / Re : DCC++ BaseStation
« le: août 23, 2016, 08:58:37 pm »
Oui, c'est un gros boulot d'analyse et de compréhension qui va nous faciliter la vie à tous, en tout cas à ceux qui vont utiliser Dcc++ et dont je fais partie (ferais serait plus juste...) .

534
Le logiciel DCC++ / Re : DCC++ BaseStation
« le: août 21, 2016, 10:23:02 am »
Tout ça est très clair. Hâte de lire la suite !

535
Bus DCC / Re : DCC & CVs
« le: août 19, 2016, 10:20:32 am »
Je suis de mon côté en train de refondre UAD, et de tester la nouvelle version via un Arduino Emulator fait maison.... Mais j'ai quand même commandé quelques Max471 pour procéder à des tests aussi et améliorer ma centrale Dc/Dcc.

536
Présentez vous ! / Re : The New
« le: août 13, 2016, 05:17:39 pm »
Bienvenue CATPLUS. Les trains américains sont effectivement fascinants par leur gigantisme, autant que par la beauté des paysages traversés! Si je ne me retenais pas....
Bref, tous les auteurs et utilisateurs de projets Arduino sont les bienvenus ! D'ailleurs je me demande s'il ne faudrait pas créer un utilisateur LOCODUINO sur votre forum et y poster les nouveaux articles comme nous le faisons déjà sur le forum du N, le forum LR-Presse ou le forum-train.fr ...

537
Présentez vous ! / Re : Je me présente
« le: juillet 30, 2016, 08:15:29 pm »
Bienvenue Goupil,.
Tu constateras que nous sommes nombreux à connaître la programmation ici, mais il y a aussi des débutants que nous nous efforçons d'aider, comme eux nous aident quelquefois sur la partie électronique !
N'hésite pas à ouvrir un sujet pour décrire ton réseau et le but à atteindre !

538
Présentez vous ! / Re : Bonjour, nouveau venu à l'Arduino
« le: juillet 29, 2016, 02:29:46 pm »
Bonjour Alain, et bienvenue parmi nous.

539
Bibliothèques / Re : Library AnimationDecor
« le: juillet 20, 2016, 02:49:29 pm »
hpp et cpp pour le C++, c'est bien ça. Je le pensais aussi jusqu'à il y a peu de temps où le compilateur (Visual Studio dans ce cas précis) a rouspété disant que l'extension ne lui convenait pas...

540
Vos projets / Re : Le futur TCO de mon réseau
« le: juillet 19, 2016, 09:22:14 am »
Quand c'est possible, c'est effectivement le plus simple. Processing sait faire, et Javascript, autant que je sache (ce n'est pas un langage que j'ai pratiqué souvent) aussi.
La question suivante est celle du protocole de communication. A titre d'exemple, j'ai fortement transformé mon ancienne version de UniversalAccessoriesDecoder en la coupant en deux : d'un côté la partie 'Commanders' qui donne les ordres : ce sont des boutons, des potars, le décodeur Dcc ou les bus série, CAN et I2C. De l'autre, toute la partie accessoires avec leurs drivers : les aiguillages, les feux, les moteurs et leds en tout genre. Pour les faire communiquer, j'ai imaginé une petite structure C dotée d'un identifiant, d'un type d'ordre, et d'une valeur. Le tout peut être exprimé sous forme texte :

123456, M, 128

Un identifiant correspond (à peu près) à un accessoire à piloter. L'ordre est décrit par l'enum suivant :

enum COMMANDERS_EVENT_TYPE
{
   COMMANDERS_EVENT_NONE = 0,         // Should never appear
   COMMANDERS_EVENT_TOGGLE = 1,      // If a push button or similar is pressed, invert the state/position
   COMMANDERS_EVENT_MOVE = 2,         // If a push 'left' button or similar is pressed, data is a COMMANDERS_MOVE_TYPE
   COMMANDERS_EVENT_MOVEPOSITION = 3,   // If a potentiometer or similar is moved, data is the position to reach
   COMMANDERS_EVENT_CONFIG = 4      // Data is the configuration address and value
};

Les quatre ordres possibles sont donc 'T', 'M', 'P' (MovePosition) et 'C' . Le MovePosition utilise la valeur pour connaitre son but. Pour le Move fortement typé, la valeur est donnée par un autre enum:

enum COMMANDERS_MOVE_TYPE
{
   COMMANDERS_MOVE_MORE = +1,
   COMMANDERS_MOVE_LESS = -1,
   COMMANDERS_MOVE_STOP = 0,
   COMMANDERS_MOVE_LEFT = -2,
   COMMANDERS_MOVE_RIGHT = -3,
   COMMANDERS_MOVE_CENTER = -4,
   COMMANDERS_MOVE_TOP = -5,
   COMMANDERS_MOVE_BOTTOM = -6,
   COMMANDERS_MOVE_STRAIGHT = -7,
   COMMANDERS_MOVE_DIVERGE = -8,
   COMMANDERS_MOVE_ON = -9,
   COMMANDERS_MOVE_OFF = -10
};

Ne reste à la partie accessoires qu'à interpréter chaque ordre en demandant à l'accessoire correspondant de faire ce qu'on lui demande !
Pour tout dire, il me semble que ce partage correspond bien à un TCO : la partie Commanders dans un Arduino Mega côté TCO avec des boutons, des poussoirs et des potars, qui envoie ses ordres via une liaison série à la partie accessoires avec un ou plusieurs Arduino sous le réseau. Mais c'est une vision sans PC...

Pages: 1 ... 34 35 [36] 37 38 ... 45