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.


Sujets - Jean-Luc

Pages: [1] 2 3
1
Discussions ouvertes / Il était temps !
« le: mai 21, 2020, 12:15:39 pm »
Bonjour,

Depuis C++14, et par conséquent c'est disponible dans le système Arduino, on peut spécifier des constantes litérales en binaire. Après 50 ans de C, c'est quand même sympa que ça arrive alors que l'octal dont tout le monde se contre-fout, est présent depuis le début :)

Donc on préfixe par 0B ou 0b et derrière on met les chiffres binaires. Pour la taille, il faut, comme d'habitude, suffixer par u ou U (non signé), l ou L (32 bits) , ul ou UL/uL/Ul (non signé, 32 bits)

On peut également placer des ' aux endroits stratégiques d'une constante numérique entière pour faciliter la lecture en séparant les champs (milliers/centaine, ... ou les champs de bits) mais là c'est pas présent par défaut. Il faut éditer le fichier platform.txt pour remplacer le -std=gnu++11 par -std=gnu++14

2
Vos projets / Pont tournant avec moteur pas-à-pas en microstepping
« le: mai 10, 2020, 02:59:52 pm »
Bonjour,

Je me suis remis sur mon pont tournant qui sera en 3 exemplaires sur mon réseau : 2 ponts tournant PECO (échelle N) et un pont secteur. Voir http://modelleisenbahn.triskell.org/spip.php?rubrique23.

Dans mes essais, je pilotais le moteur PAP via des attentes (delay). J'ai remplacé ça par une classe C++ qui utilise une des PWM associées au TIMER1 en mode 16 bits avec une interruption sur l'overflow pour compter les pas et une sur le compare match pour arrêter le mouvement. Je gère également une accélération et une décélération mais je ne suis pas très satisfait du résultat. J'ai opté pour une accélération/décélération connstante et ça ne rend pas bien. À la réflexion, l'énergie étant en V2, il vaudrait mieux avoir une accélération variable qui suit une courbe telle que l'énergie apportée est constante. Donc quelque chose qui est une parabole couchée. Mais il faut que je précalcule des valeurs, je ne vais pas demander à l'Arduino d'extraire des racines carrées sous interruption :)

J'ai codé aussi la partie CAN avec 8 messages de commande et 2 messages d'états. Les 8 messages de commandes sont en deux catégories : 2 messages pour mouvoir le pont en exploitation, 6 messages pour régler les positions de pont correspondant aux voies. On peut enregistrer des positions en EEPROM sous un identifiant (128 possibles au maximum) et ensuite envoyer une commande de positionnement sur une des positions enregistrées (code 0)  ou sur la position mirroir, à 180° (code 1). Le premier message d'état diffuse toutes les secondes la position du pont. Le second, à la demande, les positions mémorisées en EEPROM.

Enfin j'ai codé une interface graphique pour régler le pont. Elle tourne sur une tablette DYO à base de Teensy 3.6 et d'écran tactile 7".

3
Vos projets / Roue codeuse pour mon pont tournant
« le: avril 25, 2020, 12:04:30 pm »
Bonjour,

Les infos de départ sont ici : http://modelleisenbahn.triskell.org/spip.php?article79

Il m'est venu l'idée de faire la roue codeuse en utilisant la technologie des PCB. Les zones blanches sont remplacées par des facettes métallisées, les zone noires sont noires car on peut choisir un PCB noir (même noir mat chez Seeed mais ils demandent un peu cher). Ça permet aussi d'avoir des perçage précis pour monter le moyeu.

Ça n'a pas de rapport direct avec l'Arduino mais comme ça touche la fabrication de PCB, j'ai pensé que ça pouvait intéresser du monde.

Dessiner la roue à la main dans un éditeur de PCB est une opération permettant d'aller pointer assez rapidement à l'asile le plus proche. J'ai donc écrit un programme en C/C++ qui engendre directement des fichiers au format Gerber et un fichier au format Excellon pour les perçages. Le programme a été écrit rapidement mais comprendre pourquoi les fichiers n'étaient pas visualisés chez JLCPCB a été une autre paire de manche. Bref après deux soirées passées dessus, ça fonctionne. Du moins autant qu'on peut en juger sans commander les cartes.

Ça m'a permis d'apprendre un peu plus en détails comment étaient fichus ces fichiers et plonger dans des langages des années 80 conçus par des mécaniciens, ça pique un peu, voire beaucoup  :-\ ::)

Donc le programme compile sous Unix (Linux je pense, Mac OS X sûr) et se lance bien évidemment en ligne de commande.

Pour le compiler :

g++ -o coding-wheel coding-wheel-pcb.cpp

Il y a une aide minimaliste que l'on obtient en le lançant sans argument :


Eridani-5721:coding-wheel jlb$ ./coding-wheel
Usage: coding-wheel <name> <inner radius> <radius step> <number of values> <gap> [r/g/gr]
  <name>:             name of the destination directory and of the files.
  <inner radius>:     the radius to the center of the inner facet.
  <radius step>:      distance between two facets centers on the same radius.
  <number of values>: number of coded values.
  <gap>:              distance between 2 adjacent facets borders.
  [r/g/gr]:           optional argument. Without any the coding wheel
                      uses a binary coding with inner low order bit.
                      r:  binary coding with outer low order bit.
                      g:  Gray coding with inner low order bit.
                      gr: Gray coding with outer low order bit.

En pièce jointe une roue capturée sur la visionneuse de JLCPCB, générée avec :

Eridani-5721:coding-wheel jlb$ ./coding-wheel roue 35.5 4.5 100 .2 gr
Center coordinates (mm): (65.75, 65.75)
Diameter: 131.50 mm
Gray coding, outer low order bit

Ça peut peut-être servir à quelqu'un :)

4
Vie du forum / Inscriptions en vue de SPAM
« le: juillet 25, 2019, 09:32:04 am »
Bonjour,

Le forum subit depuis ce matin (après un premier succès il y a quelques jours) un flot d'inscriptions bidon afin de disposer d'un compte permettant de spammer le forum (liens commerciaux dans les signatures). J'ai supprimé 7 ou 8 comptes.

La barrière de l'inscription avec la question qui tue ayant fini par être surmontée, j'ai changé la question ... jusqu'à la prochaine fois.

On va voir ce que ça donne.

6
Les réseaux / DÉPLACÉ: Réseau hivernal en N
« le: mai 29, 2019, 08:55:39 am »

7
Vos projets / Satellite V2
« le: février 04, 2019, 05:42:53 pm »
Bonjour à tous.

Un peu de teasing  :P

La série d'articles sur la carte Satellite V1 est en cours de publication. Pour l'instant 2 articles sont publiés :
Nous peaufinons celui sur la messagerie et le middleware pour le WE prochain.

Il y a déjà eu quelques éléments à propos des évolutions futures : http://forum.locoduino.org/index.php?topic=565.0
L'idée a été creusée et voici donc l'état actuel des reflexions sur la carte Satellite V2.

L'idée est de la rendre plus générale et plus adaptable que la V1 avec une banalisation plus poussée des entrées/sorties. La V1 assigne en dur une entrée ou une sortie à une fonction. La V2 partage certaines broches entre plusieurs fonctions. Une fois le logiciel configuré, une des fonctions est choisie. La V1 est munie d'une détection par consommation, la V2 n'en a pas :) La V1 est monolithique, la V2 peut recevoir des cartes d'extension pour ajouter de l'électronique comme par exemple l'électronique de détection.

La Satellite V2 est plus simple au niveau électronique car il n'y a finalement que:
  • Un Arduino Nano
  • Un contrôleur CAN MCP2517FD
  • Un transceiver CAN
  • Une alimentation plus costaude que sur la V1
  • Optionnellement un second régulateur permettant de l'alimenter avec une tension au delà de 12V
  • Des résistances
  • Des connecteurs

On peut connecter:
  • Jusqu'à 6 servomoteurs avec et sans détection de fin de course;
  • Jusqu'à 15 LED pour la signalisation;
  • Jusqu'à 8 détecteurs;
  • Jusqu'à 4 cartes d'extension.

MAIS PAS TOUT EN MÊME TEMPS

La carte est du même format que la V1 : 100x50mm



Une carte d'extension fait 50x25 ou 75x25 ou 100x25 et se place sous la carte Satellite V2.

8
Vie du forum / UP AND RUNNING !
« le: janvier 29, 2019, 10:03:05 pm »
Bonsoir,

Après quelques avatars et le temps d'avoir une BDD opérationnelle, il semblerait que ça soit bon  :)
Et au niveau vitesse, c'est le jour et la nuit :)

Toutefois, si vous constatez des soucis, réagissez à la suite de ce message.

J'ai profité de l'espace disque plus important pour passer la taille des pièces jointes à 1Mo par message et à 500ko par pièce jointe. Mais n'abusez pas  ;D

9
Discussions ouvertes / Programmation : les closures
« le: janvier 11, 2019, 05:05:40 pm »
Bonjour,

J'ai entrepris une petite mise à niveau des nouveautés apportées par C++ 11.

Je ne vais pas parler de tout car c'est quand même très technique mais je voulais vous présenter les « closures » aussi connues sous le nom de « lambda functions » pour plus simplement « fonctions en ligne » qui sont d'une utilité directe et évidente.

Pour illustrer je vais partir d'une exemple avec une Schedule Table (l'article est ici : https://www.locoduino.org/spip.php?article116)
Supposons que nous voulions reproduire le clignotement d'un feu à éclat : un flash bref, disons 50ms, sur une période de 800ms. Avec une Schedule Table, on peut faire comme ceci :

SchedTable<2> flash(800);

void led13On()
{
    digitalWrite(13, HIGH);
}

void led13Off()
{
    digitalWrite(13, LOW);
}

void setup()
{
    flash.at(200, led13On);
    flash.at(250, led13Off);
    pinMode(13, OUTPUT);
    flash.start();
}

void loop()
{
    ScheduleTable::update();
}

Les closures permettent de remplacer la déclaration séparée qui est faite de led13On et led13Off et de les mettre directement dans le programme lors de l'appel de la méthode at, comme ceci :

SchedTable<2> flash(800);

void setup()
{
    flash.at(200, []{ digitalWrite(13, HIGH); } );
    flash.at(250, []{ digitalWrite(13, LOW); } );
    pinMode(13, OUTPUT);
    flash.start();
}

void loop()
{
    ScheduleTable::update();
}

Notez la syntaxe avec les crochets suivis du code entre accolades.

Un autre usage sont les routines d'interruption que l'on attache. Souvent il s'agit juste de mettre à vrai une variable comme par exemple dans cet article : https://www.locoduino.org/spip.php?article148

volatile byte Flag_Recv = 0;   // variable d'échange avec l'interruption IRQ

/*
 *  ISR CAN (Routine de Service d'Interruption)
 *  le flag IRQ monte quand au moins un message est reçu
 *  le flag IRQ ne retombe QUE si tous les messages sont lus
 */
 
void MCP2515_ISR()
{
     Flag_Recv = 1;
}

Et dans setup() :

attachInterrupt(0, MCP2515_ISR, FALLING); // interrupt 0 (pin 2)

Avec les closures on peut écrire directement

attachInterrupt(0, []{ Flag_Recv = 1; }, FALLING); // interrupt 0 (pin 2)

10
Bibliothèques / Bibliothèque KeepMeAlive
« le: décembre 22, 2018, 11:26:26 am »
Bonjour,

Je viens de pousser une bibliothèque pour utiliser le Watchdog Timer des ATMega328 (Arduino Uno, Nano, Pro Mini). Ça marche peut être sur Mega, je n'ai pas testé. Mais l'idée est de l'étendre aux autres Arduino.

Pour savoir à quoi ça sert vous pouvez consulter l'article sur Wikipedia

C'est une fonction importante si vous devez déployer plusieurs Arduino, pas toujours très accessibles, sur votre réseau.

La bibliothèque n'est pour l'instant pas disponible dans le gestionnaire de bibliothèque, il faut la télécharger ici : https://github.com/Locoduino/KeepMeAlive/releases/tag/1.0

 

11
Vie du forum / Problème technique sur l'hébergement
« le: décembre 05, 2018, 09:50:39 am »
Bonjour,

Depuis hier je constate des problèmes d'accès au serveur MySQL chez l'hébergeur. Je n'ai aucune info pour l'instant. J'imagine que ce serveur tourne sur une autre machine et que pour une raison X ou Y, une partie des requêtes échouent.

Les conséquences sont :
  • Côté forum (SMF) des messages apparaissent vides ou incomplets et parfois l'encodage des caractères se fait mal (UTF8 pas interprété en tant que tel)
  • Côté rédactionnel (SPIP) un message explicite s'affiche

Je ne peux rien faire de mon côté pour remédier à cela. Je vais mettre un ticket à l'hébergeur.

MAJ: Le ticket a été ouvert ce matin

12
Bus CAN / Contrôleur CAN MCP2517FD
« le: novembre 19, 2018, 11:31:05 am »
Bonjour,

Actuellement le contrôleur CAN utilisé conjointement avec les Arduino est le MCP2515. Ce composant est sorti en 2003. Il possède 3 buffers d'émission et deux buffers de réception (RXB0 et RXB1). Pour sélectionner uniquement les messages qui sont pertinents, RXB0 possède 1 masque et 2 filtres et RXB1 1 masque et 4 filtres

En 2017 Microchip a sorti un nouveau contrôleur, le MCP2517FD. Ce composant possède une RAM interne de 2ko pour les buffers (hé oui autant que l'Arduino Uno) et permet de configurer 31 FIFO de messages en émission ou en réception, 32 masques ou filtres. L'interêt immédiat est :
  • de libérer la mémoire de l'Arduino qui sert au stockage des messages en réception
  • d'avoir beaucoup de place pour stocker les messages en réception
  • de bénéficier d'une FIFO en émission gratuitement en terme de mémoire pour que l'émission ne soit pas bloquante si le message précédent n'est pas parti

En mode CAN2.0B, il est évidemment compatible avec le 2515

Mon collègue Pierre a écrit un driver pour ce composant : https://github.com/pierremolinaro/acan2517
Cette bibliothèque est téléchargeable via le gestionnaire de bibliothèques de l'IDE

J'ai dessiné une petite carte que je vais bientôt faire fabriquer pour essayer, je vous tiens au courant.

13
Vie du forum / Demandes d'épinglage
« le: juin 05, 2018, 11:18:56 am »
Bonjour,

Epingler un sujet n'est pas un système qui marche utilisateur par utilisateur. C'est un attribut global d'un sujet. Ce n'est pas forcément à la modération de décider quel sujet doit être épinglé.

Ce fil sert poster vos demandes d'épinglage

Et il est lui même épinglé :)

14
Shields et Modules / Mini décodeur à base d'ATTiny 84
« le: juin 02, 2018, 08:36:35 am »
Voici les infos sur cette carte avec le BOM et le schéma

Si vous vous souvenez, cette carte est hybride. Elle peut également être utilisée sans l'ATTiny.

Avec l'ATTiny

Souder S2, S3, S4 et S5 mais pas S1

Le connecteur K2 donne accès aux broches de programmation

Deux sorties peuvent être amplifiées (transistor NPN en collecteur ouvert), la 9 et la 10. Par défaut elles le sont mais vous pouvez avoir une sortie directe en soudant dis 9 (pour la sortie 9) et dis 10 (pour la sortie 10).

Sans l'ATTiny

Souder S1 mais pas les autres. L'ATTiny ne sera pas alimenté. La broche 4 du connecteur K2 donne accès au signal DCC.

15
Bibliothèques / LightDimmer : une bibliothèque pour les feux
« le: mars 29, 2018, 09:40:14 am »
Hier j’ai programmé une bibliothèque pour faire de l’allumage et de l’extinction progressive des ampoules des feux de signalisation. On peut voir ça dans la vidéo de l’article http://www.locoduino.org/spip.php?article47. Le filament des ampoules à incandescence ayant beaucoup d’inertie, il faut 250ms pour qu’ils s’éteignent ou s’allument. Il faut bien sûr une sortie PWM.

La bibliothèque est en bêta, c’est ici :

https://github.com/Locoduino/LightDimmer/releases

Un peu de doc :

https://github.com/Locoduino/LightDimmer/blob/master/README.md

Pages: [1] 2 3