DigitalSpirit / Blog

Mise à jour des OpenAlarm Node : Version 1.5.0

OpenAlarm Node 1.5.0

Format de la carte

Comme je l'évoquais dans un article précédent, Seeedstudio qui produit les pcb, m'a demandé un surplus de 17$ à cause des demi-trous en bordure de la carte, vu le cout total de production des PCB (9$ pour 10), ça fait une belle surprise et de toute façon, je n'étais pas convaincu de l'utilité / praticité de ces demi-trous, j'ai donc résolu le problème en augmentant quelque peu la largeur de la carte qui passe de 16mm à 19mm, rien de bien méchant et surtout un gain appréciable en terme de place disponible sur le PCB.

Améliorations par rapport à la version 1.0.0 :

  • L'ouverture du port USB à été agrandie car ça coinçait un peu sur la première version.
  • Certains composants ont été déplacés pour faciliter le montage
  • Les broches de programmation ont été agrandis (voir plus bas)

Comparatif visuel et à l'échelle entre un Funky v3, un OpenAlarm Node 1.0.0 et un OpenAlarm Node 1.5.0 :
Comparatif Funky v3, OpenAlarm Node 1.0.0 et OpenAlarm Node 1.5.0

Comme vous le voyez, nous sommes un poil plus gros que la version 1.0.0 mais ça reste très petit comme le prouve cette photo :
Un OpenAlarm Node 1.5.0 dans la main

Vue de derrière :
Vue de derrière

Entrées / sorties

Avec la taille gagnée, j'en ai profité pour revoir le mappage des entrées / sorties, maintenant, elles sont placées dans l'ordre de chaque côté de la carte, toutes groupées par fonction.

On trouve dorénavant sur le côté gauche les 3 broches d'alimentations VIN (entrée de 3.3V à 7V), GND, VCC (entrée de 3V à 5V), 4 entrées / sorties génériques ayant chacune une interruption matérielle D0, D1, D2, D3.
Sur le côté droit, on trouve 2 entrées analogiques A0 et A1 et d'autres entrées / sorties génériques D6, D7, D8, D9 et D12 (D8 et D9 ayant également des interruptions matérielles).

Les entrées / sorties d'un OpenAlarm Node 1.5.0

Sur l'ancienne version des OpenAlarm Node et sur les Funky, il n'est pas possible d'utiliser le port physique I2C car la broche PD0 (SCL) est utilisé comme broche d'interruption pour dialoguer avec le module radio.
À cause d'un bug dans la librairie JeeNode de pilotage du module radio, il n'était pas possible d'utiliser une autre broche, le problème étant résolu, j'ai libéré PD0 afin de pouvoir utiliser le port I2C directement, et c'est PB7 (D11) qui est maintenant utilisé pour le dialogue avec le module radio.

Le PCB

Un des principes des OpenAlarm Node est de pouvoir utiliser des cartes filles que l'on vient superposer les unes sur les autres avec le même principe que les shields d'Arduino ou la spécification Hats pour les Raspberry.
Nous avons donc un PCB pour la carte mère et des PCB pour chaque carte fille mais comme évoqué précédemment, un critère important est le cout et faire fabriquer plusieurs PCB, c'est onéreux. La plus petite taille de PCB disponible chez Seeedstudio étant de 5cm x 5cm, il y a de la place perdue (le PCB de la carte mère fait 19mm x 21mm), j'ai donc ajouté 3 cartes filles directement sur le PCB original, il ne reste plus qu'à découper (un coup de cutter et on casse proprement l'époxy).

Pour le prix d'un PCB, on se retrouve avec 4 PCB dont 2 utilisables comme des platines d'essais et une autre intégrant un chargeur de batterie LiPo.
Le PCB de la version 1.5.0 d'OpenAlarm Node

Les cartes filles

Pour ce premier batch d'OpenAlarm Node 1.5.0, j'ai donc inclut directement 2 cartes filles d'essai et 1 autre carte fille d'essai avec un chargeur LiPo à base de Max1555 qui chargera automatiquement la batterie lorsque le Node sera branché sur USB, un voyant permettant de voir si la charge à bien lieu.

Un OpenAlarm Node avec une carte fille proto sur laquelle on aperçoit un capteur infrarouge :
Carte fille Lipo pour OpenAlarm Node

Un OpenAlarm Node avec une carte fille LiPo :
Carte fille proto pour OpenAlarm Node

Programmation

Programmation du bootloader

Comme évoqué plus haut, les contacts de programmation du bootloader étant un peu trop petit sur la première version, ils ont été agrandi afin d'en faciliter l'utilisation.

Pad de programmation d'un OpenAlarm Node 1.5.0

Sur la première version des OpenAlarm Node, je soudais directement des fils sur le port de programmation afin d'envoyer le bootloader, c'était long, source de problèmes mais surtout, franchement pas pratique, j'ai donc fabriqué un outils parfait pour cette tâche :

Que peut-on faire avec une pince à linge en Inox et des pogopins (des pointes de contacts) ?
pince-a-linge-inox.png pogopin.png

On fait une pince de programmation très pratique !
Pince de programmation DIY Pince de programmation DIY

Programmation par USB

Le bootloader n'a besoin d'être programmé qu'une seule fois, par la suite, le programme est chargé directement par USB, comme pour l'ancienne version du PCB, j'utilise un port USB un peu particulier puisque ce dernier est directement sur le PCB, je ne suis pas rentré en détail dessus dans mes derniers articles, voici quelques informations à ce sujet.

Pour commencer, pourquoi ne pas mettre un port physique microUSB ?

  • Ça prend de la place, c'est épais
  • Ce n'est pas forcément plus solide
  • C'est toujours ça de moins à souder
  • Ça coute moins cher
  • Parce qu'on peut le faire !

Pour cela, il faut que votre PCB fasse 0.8mm d'épaisseur au maximum, vous aurez également à limer chaque côté du bord d'insertion sinon, vous aurez de mauvaises surprises...
Limage du connecteur USB avant insertion OpenAlarm Node en cours de programmation usb_1.jpg

Je n'ai pas eu de souci avec ce genre de connecteur, sauf un limage un peu trop léger du PCB, qui, lors de l'insertion à plié les contacts internes du connecteurs de la prise USB et l'a donc rendu inutilisable mais le connecteur PCB n'a absolument rien eu : PCB=1 / USB=0 ;).
Je maltraite pas mal les connecteurs et aucun n'a rompu (alors que sur les Funky v3, j'ai un connecteur standard USB qui s'est arraché) et ne montre de signe de faiblesse donc je pense que c'est une solution parfaitement utilisable...

La suite

Au niveau logiciel, beaucoup énormément d'évolutions aussi bien au niveau code embarqué que Python qui seront l'occasion d'un prochain article qui devrait sortir très prochainement...

Si vous êtes intéressé par OpenAlarm, si vous avez des conseils, si vous voulez participer, venez en discuter sur IRC, canal #madeinfr sur irc.freenode.net, vous pouvez également suivre les évolutions sur Twitter @hugokernel, un forum OpenAlarm est également disponible chez Madeinfr et enfin, tout ceci est sur GitHub / hugokernel / OpenAlarm.

Ouvrir l'article

Monter une partition Linux ext2 / ext3 / ext4 sur Mac Os X

Mac Os X est un puissant système d'exploitation, malheureusement, ce système souffre de grosses lacunes pour un linuxien et notamment concernant le support des systèmes de fichiers, en effet, cet OS ne reconnaît que ses propres formats HFS, HFS+, HFSX, les formats de Microsoft FAT32 et NTFS ainsi que UFS (source Wikipédia), oubliez donc l'ext3 d'origine sous Mac Os...sauf...

2 projets m'ont sauvés la vie (oui, rien que ça) en rendant mes disques extX visibles et lisibles sous MacOs :

  • MacFuse, les linuxiens auront reconnus à son nom son utilité, pour les autres, c'est un outils qui vous permet de monter un système de fichiers en espace utilisateur
  • Et fuse-ext2 qui est un « pilote » extX générique fonctionnant entre autres sur MacOs

Rien à dire concernant l'installation de ces 2 programmes, des images disques au format dmg sont disponibles.
Une fois ces 2 programmes installés, c'est magique, vos disques extX seront montés automatiquement sans le moindre effort de votre part comme vous pouvez le voir sur la capture d'écran ci-dessous :

MacOs finder avec ext3

Concernant le montage des disques externes, le montage n'est pas automatisé et requiert donc quelques actions de votre part.

Pour commencer, il faut d'abord connaître le nom du device externe (/dev/diskXsX), s'il n'apparait pas dans le finder (entouré de rouge dans la capture ci-dessus), branchez votre disque externe formaté en extX puis ouvrez l'utilitaire de disques, vous devriez voir votre disque apparaitre sous cette forme :

Sur l'exemple ci-dessus, le nom du device est « disk2s1 », maintenant que nous savons oû se trouve le device, nous pouvons le monter tranquillement de la manière suivante, ouvrez un terminal (j'ai coloré les informations renvoyées par fuse-ext2 en jaune) :

mac:~ hugo$ cd /tmp
mac:tmp hugo$ mkdir DD
mac:tmp hugo$ fuse-ext2 /dev/disk2s1 DD
fuse-ext2: enter [do_probe (../../fuse-ext2/do_probe.c:30)]
fuse-ext2: leave [do_probe (../../fuse-ext2/do_probe.c:53)]
Mounting /dev/disk2s1 Read-Only.
Use 'force' or 'rw+' options to enable Read-Write mode
fuse-ext2: opts.device: /dev/disk2s1 [main (../../fuse-ext2/fuse-ext2.c:348)]
fuse-ext2: opts.mnt_point: DD [main (../../fuse-ext2/fuse-ext2.c:349)]
fuse-ext2: opts.volname: [main (../../fuse-ext2/fuse-ext2.c:350)]
fuse-ext2: opts.options: (null) [main (../../fuse-ext2/fuse-ext2.c:351)]
fuse-ext2: parsed_options: allow_other,local,ro,fsname=/dev/disk2s1,[...]
fuse-ext2: mounting read-only [main (../../fuse-ext2/fuse-ext2.c:368)]

mac:tmp hugo$

Inutile d'être en root pour lancer cette commande, c'est justement l'intérêt de fuse...

Et voilà le travail, un disque usb externe ext4 :

MacOs finder disque ext4 monté

J'ai écrit un petit script qui automatise un tout petit peu plus le processus de montage du périphérique, pour le montage :

mac:~ hugo$ ./mountext -d disk2s1
Mounting « /dev/disk2s1 » device in « /tmp/disk2s1 »
Device « /dev/disk2s1 » mounted in « /tmp/disk2s1 »
mac:~ hugo$

Pour le démontage :

mac:~ hugo$ ./mountext -u disk2s1
Umounting « /tmp/disk2s1 »
Ok
mac:~ hugo$

Voilà, le script se trouve en annexe de ce billet.

Ouvrir l'article

Chargez vos éléments LiPo par USB !

Voici un montage très simple réalisé autour du MAX1555 qui permet de charger les éléments LiPo très simplement.

Les détails du montage sur le wiki : ChargeurLipoUsb

Ouvrir l'article

EeePc avec bluetooth intégré

J'ai fait l'acquisition il y a quelques temps d'un EeePc, excellente machine, très réactive, très bon prix bien sûr mais malheureusement, quelques défauts viennent tout de même gâcher tout ça, oui, on ne peut pas tout avoir :

  • La résolution de l'écran est vraiment trop faible
  • L'autonomie n'est pas vraiment extraordinaire, on en attend plus d'une telle machine
  • Pas de Bluetooth

Autant, pour une réduction des coût, je veux bien comprendre le choix de l'écran et de la batterie mais pour le Bluetooth, j'ai du mal, quand on voit les quantités produites, l'ajout d'une telle puce n'aurait sûrement pas mis à mal la marge faite, le marketing doit être sur le coup...

Heureusement, il est assez simple de remédier à ce manque en le faisant nous même, l'opération à donc consister à ajouter une clef Bluetooth dans l'EeePc.

Clef bluetooth ouverte La clef Usb bien calée dans l'écran L'EeePc ouvert

Voici la page sur le wiki qui comporte toutes les explications sur l'ajout d'une clef Usb Bluetooth Belkin F8T012xx1 dans l'EeePc : Projets / EeePc / Bluetooth

Ouvrir l'article