Electronique

XBee et XCTU sous Linux

Cela doit bien faire 2 ans que deux modules XBee (des Pro S1 de chez Digi) traînent dans mes tiroirs et je n’en avais rien fait. Ayant pour projet de faire des capteurs de température et d’humidité sans fil, je me suis dit que c’était le bon moment de les utiliser. L’idée est d’envoyer les données à un Raspberry Pi pour traitement. J’ai donc pris mon XBee Explrer Dongle, j’y ai connecté un module Xbee et je l’ai branché à mon PC. Digi fournit un logiciel pour gérer les modules XBee connectés à un PC, les configurer, envoyer et recevoir des données : il s’agit de XCTU. De nombreux tutoriels sur Internet disent que XCTU n’est disponible que sous Windows mais cette époque est révolue ! Vous pouvez télécharger les différentes versions pour Windows, Linux et Mac ici.

Installation et lancement

Si vous êtes sous Linux et que vous ne savez pas si vous devez opter pour la version 32 ou la version 64 bits, il vous suffit de taper la commande uname -a pour savoir si vous avez un processeur 32 ou 64 bits. Exemple dans mon cas :

~$ uname -a
Linux pgradot-xubuntu 4.4.0-53-generic #74-Ubuntu SMP 
Fri Dec 2 15:58:04 UTC 2016 i686 i686 i686 GNU/Linux

Le i686 m’indique que mon processeur est 32 bits.

Une fois le téléchargement terminé, rendez le fichier exécutable et lancez-le avec les droits administrateurs :

$ chmod u+x 40002880_G.run
$ sudo ./40002880_G.run

Un wizard vous guide dans l’installation de XCTU. Par défaut, le logiciel s’installe dans /opt/Digi où un sous-dossier XCTU-NG est créé. On y trouve launcher et app (le premier lançant le second). Si vous lancez l’un des deux sans les droits administrateurs, cela ne fera qu’ouvrir une petite fenêtre qui ne contient rien et que vous ne pourrez pas fermer… Ayez le réflexe sudo, ça marchera beaucoup mieux ! Vous verrez alors ceci :

xbee 1 startup

Ajout de modules

Vous pouvez ajouter des modules radios ou les découvrir en cliquant que les icônes en haut à gauche. L’ info-bulle vous avait sans doute déjà fait deviner le mode opératoire. Le mien étant branché via un dongle USB, il apparaît comme étant /dev/ttyUSB0 :

xbee 2 add device

XCTU récupère et affiche tout la configuration du nouveau module :

xbee 3 device added

Onglets configuration, console et réseau

XCTU est intuitif et l’info-bulle de droite nous dit qu’il existe 3 onglets, chacun correspondant à un mode :

  1. Le mode configuration, ouvert par défaut, permet de voir la configuration des modules comme montré précédemment mais aussi de la modifier et d’envoyer la nouvelle configuration au module.
  2. Le monde console permet soit d’interagir via des commandes AT avec un module, soit d’envoyer des paquets sur le réseau. Vous pouvez enregistrer des paquets et jouer des séquences d’envoi. Certainement très pratique pour des tests.
  3. Le mode réseau, pour avoir un aperçu de la topologie du réseau sans fil à portée.

Commandes AT

Si vous souhaitez envoyez des commandes AT à votre module, il suffit d’aller dans l’onglet console et d’appuyer sur le bouton Open (qui se transforme en bouton Close, visible en vert dans l’image ci-dessous). Vous tapez alors +++ dans à gauche, vous attendez une seconde et le module répond OK pour indiquer qu’il est bien passé en mode commande. Tapez alors vos commandes en les terminant par entrée et le module vous répondra. Sans activité de votre part pendant 3 secondes, le module sort automatiquement et silencieusement du mode commande et l’envoi d’une nouvelle commande sera alors sans réponse. Sparkun a écrit un très bon aide-mémoire pour les commandes AT disponibles.

xbee 4 at

Pour aller plus loin

Exploring XBees and XCTU par Sparkun

Publicités

Transformer un front montant en impulsion

Pour la réalisation de mon horloge Nixie, j’ai eu besoin de transformer un créneau en impulsion. En effet, pour incrémenter les minutes ou les heures, il y a deux solutions :

  1. On appuie sur le bouton poussoir correspondant, ce qui génère un bref signal à 1, et cela incrémente le bloc des minutes (ou des heures).
  2. Le bloc précédent (les secondes dans le cas des minutes, les minutes dans le cas des heures) arrive en fin de cycle (il va « bientôt » repasser à 00) et génère un signal à un pour réaliser l’incrément du bloc suivant.

Le problème est que tout est dans le « bientôt » et le signal venant du bloc précédent peut rester longtemps à 1. Problème : il y a une porte logique OU entre ces deux signaux et c’est un front montant en sortie de cette porte qui incrémente un bloc. Si le signal du bloc précédent est à 1, la sortie du OU est donc à 1 et l’appui le bouton n’a pas d’effet ! Je me retrouvais donc avec des instants assez longs où les boutons ne servaient à rien…

La première idée est de faire une logique compliquée pour faire en sorte qu’un appui sur le bouton alors que l’autre signal est déjà à 1 génère une transition vers 0 puis une nouvelle transition vers 1 mais c’est vraiment pas une bonne idée. La bonne idée est de transformer le créneau sortant d’un bloc précédent en impulsion et de faire rentrer cette impulsion dans la porte OU. Ainsi, le temps où le bouton est sans effet est négligeable et on devrait donc avoir l’impression que ça marche tout le temps.

Quand j’avais rencontré ce problème, j’avais demandé à un collègue s’il connaissait une solution pour réaliser cette opération, et du fond de sa mémoire bien remplie mais n’ayant pas fait d’électronique analogique depuis un moment, il m’a sorti ce schéma :

impulsion-idee

L’idée était là, il fallait maintenant trouver le schéma exact et les bonnes valeurs de composants. Quelques recherches m’ont amené sur ce Cours de mécanique et électromagnétisme écrit par Jean-Louis Cayrel de l’IUT de Saint-Étienne. Dans la section 1.11.6  Utilisation des condensateurs, il y a un point appelé Transformation Front → Impulsion qui explique très bien le principe du montage. Il s’agit d’un filtre passe-haut : la capacité laisse d’abord passer le front montant, cette transition brutale étant une haute fréquence, puis se charge à travers la résistance jusqu’à bloquer le passage du courant quand il n’y a plus de variation du signal, coupant ainsi les basses fréquences. On obtient une impulsion ! Lorsque le signal repasse à 0, un phénomène similaire se produit mais l’impulsion est cette fois négative. La diode sert à presque supprimer les impulsions négatives puisqu’elle va limiter les tensions négatives à sa tension de seuil.

La charge de la capacité doit être rapide pour obtenir une impulsion qui ressemble vraiment à une impulsion et pas à une sorte de gros triangle. La durée de charge est dépend du très classique τ = R * C, la constante de temps d’un circuit RC. En effet, la fréquence de coupure du filtre est fc = 1 / τ = 1 / (R * C). Ainsi, plus τ sera petit, plus la fréquence de coupure sera grande et plus le filtre « coupera rapidement » le créneau.

Pour vérifier tout ça, j’ai bien sûr commencé par simuler mon schéma avec LTSPiceIV ! Voici le schéma :

impulsion-schema

J’ai fait le montage « en double », avec d’un côté des valeurs fixes et de l’autres côté une valeur fixe pour R mais variable pour C. Le seul intérêt de la partie de gauche est de pouvoir tracer Vout1 d’une couleur distincte de Vout2 et ainsi marquer clairement la courbe de référence, celle avec la valeur la plus faible de  τ, c’est-à-dire le filtre le plus « agressif ».

Le résultat de la simulation est le suivant :

impulsion-simulation

Je n’ai plus eu qu’à choisir les valeurs pour mon montage et tester ça sur plaquette d’essai. Pas de surprise : ça fonctionnait parfaitement ! J’ai donc mis un tel filtre entre mes blocs secondes et minutes entre mes blocs minutes et heures de mon horloge Nixie et mes boutons fonctionnaient nickel !

 


Horloge Nixie !

En fait, mon horloge Nixie, sujet de tant d’articles sur ce blog depuis un plus d’un an, est terminée depuis un moment ! C’est juste que je n’ai pas posté de l’été alors je n’ai pas eu l’occasion de vous la montrer. Enfin…. seule la partie électronique est terminée : il faut encore lui faire une boite. Voici quelques photos !

Étape 1 : réalisation des PCB

J’ai déjà expliqué comment faire sa carte maison, mais contrairement à la fois précédente, la gravure a été faite au perchlorure de fer. En effet, la carte principale était trop grande et on n’avait pas de bain-marie assez grand pour le faire avec le joli acide bleu. La petite carte a en profité pour faire trempette dans le même bain. Un grand bravo à mon ami Brice pour la mise en place super précise des calques double-face : du beau travail !

nixie_1nixie_2nixie_3

Étape 2 : réunir tous les composants

Je vous passe l’étape fastidieuse du perçage des dizaines de petits trous… Un travail hypnotique largement réalisé au falab de Nantes, le Platforme C.

La plupart des composants sont très simples à trouver et, comme d’habitude, je suis allé chez e44 à Nantes. Les tubes Nixie avaient été achetés il y a très longtemps sur E-Bay et vous pouvez encore en trouver.

nixie_4nixie_5nixie_6nixie_7

Étape 3 : soudage

Ah ! Les douces vapeurs d’étain 🙂 Heureusement, c’était en juin, c’était l’été, on pouvait ouvrir la fenêtre pour ventiler.

Comme les étapes précédente, c’était long, la carte est grande. Ah oui : j’ai fait la carte générant le signal 1 Hz en même temps mais elle a été rapidement expédié et j’ai oublié de la photographier.

La seule vraie difficulté était les tubes… Déjà parce qu’ils sont compliqués à insérer, les pattes sont nombreuses, c’est galère de toutes les faire rentrer en même temps dans le bon ordre. Heureusement, j’avais retenu une technique de fouine lue il y a très longtemps sur le net : couper les pattes pour faire une sorte d’escalier. Très efficace mais attention à ne pas couper trop court ! Il faut prévoir l’épaisseurs de la carte et du porte-tube ! Ensuite, il a fallu ruser fallu ruser pour stabiliser le tout lors de la soudure. Dernier point, il y a une piste sur la face composant qui arrive sous chaque tube… Sous le tube… Galère à souder. La technique est de mettre un peu d’étain, de faire chauffer et d’appuyer pour enfoncer le tube pendant que l’étain est encore liquide ! Ou sinon, faire un strap sous la carte pour « remplacer » la piste. Ça marche aussi et c’est plus simple ^^

nixie_8nixie_9nixie_10nixie_11nixie_12

Étape 4 : it’s alive!

J’avais confiance mais je suis d’un naturel pessimiste… J’ai connecté les cartes entre elles, j’ai branché au secteur… et la lumière fût ! Et avec elle une superbe horloge \o/

Tout ou presque a fonctionné directement. J’ai fait une modification sur la carte car le passage de 23:59 à 00:00 ne se faisait pas… On passait à 24:00, puis à 24:59 on revenait à 05:00. Une piste coupée, un fil et une diode soudés et c’était réparé. Il reste un défaut avec les boutons pour incrémenter les minutes et les herues. Si cela marchait très bien sur ma plaquette d’essai, ce n’est pas le cas ici. L’anti-rebond fonctionne bien mais le bouton devient inopérant pour quelques secondes. Sans doute que la capacité ne se décharge pas mais je n’ai pas encore eu la motivation de brancher l’oscilloscope et de regarder comment corriger ce défaut.

nixie_13nixie_14nixie_15

Conclusion

Ainsi s’achève ce long périple électronique ! Il est possible que je fasse encore un ou deux articles à propos de cet électronique mais je pense que c’est la fin de la série 🙂

Pour ceux que ça intéresse, les schematics et routages sont sur Github (à ouvrir avec Eagle). C’est sous licence open-hardware CERN donc faites vous plaisir !

Maintenant, la boite de l’horloge et trouver de nouveaux projets pour geeker à la maison !


Obtenir la BOM d’un circuit dans Eagle

Quand la conception du circuit est terminée, on souhaite naturellement récupérée la bill of materials (BOM). La BOM est la liste des composants utilisés avec les différentes références et les quantités associées. La BOM est indispensable pour acheter les pièces nécessaires à la fabrication. Et forcément, la BOM va nous donner une bonne partie du prix de revient du circuit.

Eagle ne semble pas fournir d’entrée dédiée dans ses menus pour afficher la BOM mais il est possible d’exécuter un User Language Program (ULP) fourni avec le logiciel pour effectuer cette tâche. Pour l’exécuter, il suffit de taper la commande suivante :

run bom.ulp

Une fenêtre va alors s’afficher :

eagle bom 1

Vous pouvez choisir le type de liste ainsi que le format de fichier et exporter votre BOM. Il ne vous reste plus qu’à aller au magasin ou à commander en ligne !


Imprimer un typon avec Eagle

Quand on a terminé le routage d’une carte et que l’on souhaite réaliser soi-même le PCB, il faut imprimer le typon de cette carte. De nombreux tutoriels sur Eagle utilisent la commande EXPORT pour générer une image et règlent un DPI très élevé pour (soi-disant) obtenir une bonne qualité. Voici un exemple de script trouvé sur Instructables et légèrement adapté :

DISPLAY ALL
RATSNEST
DISPLAY None
DISPLAY Bottom Pads Vias
EXPORT image pcb.png monochrome 600

600 est la valeur du DPI. Pour la carte de mon générateur de signal à 1 Hz, j’obtiens une image de 1117 * 1082 pixels et qui ressemble à ça :

eagle export image

Cette image est une version redimensionnée avec une largeur de 400 pixels. Si vous cliquez dessus, vous pourrez voir l’originale et bien verrez mieux que c’est un peu dégueulasse ! Les contours arrondis des pads sont flous, les bords du plan de masse sont souvent hasardeux, la pointe du plan de masse en bas au milieu part en cacahuète… Ajoutons à cela le fait que l’image n’est pas du tout à l’échelle 1:1 et nous serons d’accord que ceci n’est pas acceptable pour imprimer le typon.

Mais alors que faire ? La bonne solution est d’imprimer, au sens propre, avec File / Print. Bon, en fait, si vous faites ça sans quelques ajustements en plus, vous obtiendrez quelque chose comme ça :

eagle print default

On imprime ce qu’on voit, il nous faut donc au préalable afficher uniquement les couches utiles et remplir le plan de masse. C’est là que le script ci-dessus trouve son utilité en enlevant l’export en tant qu’image :

DISPLAY ALL
RATSNEST
DISPLAY None
DISPLAY Bottom Pads Vias

On peut ensuite imprimer en cochant la case Black :

eagle printer settings

Comme il existe une commande PRINT, on peut écrire un script pour tout faire et ouvrir la fenêtre ci-dessus avec la case Black déjà cochée :

DISPLAY ALL
RATSNEST
DISPLAY None
DISPLAY Bottom Pads Vias
PRINT black

Vous pouvez rajouter un ; à la fin de la dernière ligne pour ne pas passer par la fenêtre et imprimer directement le document. Moi, c’est l’imprimante PDF qui est sélectionné par défaut (en même temps, c’est la seule imprimante installée en ce moment). J’obtiens donc un PDF avec le même nom à côté de mon fichier *.brd. Le typon est à l’échelle 1:1 et la qualité est bien meilleure qu’avec l’export en tant qu’image :

eagle print ok