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

Des nouvelles de Bleuette

Point presse

Tout d'abord, un point people, l'information du développement de Bleuette à plutôt bien circulée et Bleuette s'est retrouvée sur plusieurs sites importants :

La vidéo sur Vimeo à été vue plus de 6000 fois.

Plutôt plaisant de voir que ça intéresse du monde mais j'attends avec grande impatience le moment ou un autre Bleuette pointera le bout de son nez en PLA... ;)

Évolutions

Nouvelle carte fille

La shield Bleuette permet le pilotage des servos et le contrôle de la tension / courant consommé par les servos, pour pouvoir ajouter des capteurs multiples, il est tout à fait possible d'utiliser les broches libres des ports de l'Arduino mais il n'y en a pas assez pour tous les capteurs voulus sur Bleuette, du coup, le besoin d'une nouvelle carte d'extension s'est fait sentir et voici ce qu'elle permet :

  • 8 entrées supplémentaires multiplexées utilisant que 4 entrées / sorties (3 d'adressage et une sortie)
  • Connection pour une carte GY-27 contenant un accéléromètre et un compas
  • Un module Bluetooth JY-MCU
  • Une connection pour une guirlande de led RGB à base de LPD8806
  • Un mosfet pour pouvoir piloter un élément de puissance (je ne sais pas vraiment quoi pour le moment...)

Voici le schéma de principe et le PCB associé (cliquez dessus pour agrandir) :
Schéma de principe de la carte d'extension de Bleuette PCB de la carte d'extension de Bleuette

Le schéma de principe au format est Eagle se trouve par ici : sensor.sch et le PCB : sensor.brd

Comme vous pouvez le voir, le PCB n'est pas dense du tout, du coup, il est simple à réaliser avec des moyens modestes.

Mécanique

Pas de grande nouveauté pour la partie mécanique sauf pour les pieds, ces derniers ont été imprimés en PLA Flex permettant d'avoir un peu de souplesse et trempé dans du PlastiDip afin d'avoir un meilleur grip en plus d'un super rendu !

Avant trempage dans le PlastiDip et après :
Les pieds de Bleuette

Tous les éléments d'un pied de Bleuette, on aperçoit l'interrupteur poussoir, le piston et le cylindre et le pied recouvert de PlastiDip :
L'ensemble des pièces constituant un pied de Bleuette

Le tout assemblé :
Vue d'un pied

Le fichier source au format OpenSCAD des pieds de Bleuette est disponible, comme tout le reste de Bleuette sur GitHub / Bleuette.

Le cerveau

J'ai subi beaucoup de soucis avec la carte Arduino, notamment des problèmes de programmation, m'obligeant à recommencer la phase 3-4 fois de suite des fois...
Tous ces ennuis m'ont conduit à radicalement changer ma manière de développer avec Arduino, notamment en utilisant Ino, un outils en ligne de commande pour compiler, programmer, etc, bref, un remplaçant du mal aimé environnement par défaut d'Arduino.

Les problèmes de liaison avec la carte Leonardo m'ont également conduit à une solution radicale, j'ai embarqué un Raspberry Pi dans Bleuette auquel est relié la carte Leonardo, ainsi, c'est le Raspberry Pi qui programme la carte Arduino, ça complique un peu mais au moins, je suis moins gêné...

À force d'utiliser ce système, ce qui devait arriver arriva et j'ai donc décidé de créer une carte fille pour le Raspberry Pi qui permettra de piloter Bleuette directement avec cette dernière.
Bien entendu, je ne laisse pas tomber pour autant le dèveloppement sur Arduino, disons que celui ci sera la version simplifiée.

Bleuette embarquant un Raspberry Pi :
Bleuette embarquant un Raspberry Pi

D'ici peu, je publierai un article expliquant toutes les caractéristiques de la carte d'extension pour Raspberry Pi.

Ouvrir l'article

Nouvelles avancées de Bleuette !

Bleuette marche

Pour commencer, voici une vidéo de Bleuette effectuant ses premiers mouvements :

Bleuette first step from hugo on Vimeo.

L'électronique

Le contrôle des servos de Bleuette (12 pour les pattes + 2 optionnels) se fait au travers d'une carte fille (shield) pour Arduino conçue pour ne pas être totalement dépendante de Bleuette, ainsi, vous pouvez parfaitement l'utiliser pour un tout autre projet.

Ses caractéristiques sont les suivantes :

  • Gestion parfaitement synchrones (voir en dessous) de 14 servos
  • Contrôle de la tension des servos
  • Contrôle du courant consommé par les servos
  • Port d'extension intégré (avec disponibilité de l'alimentation +5V et 4 entrées / sorties RA2 à RA5)

Parfaitement synchrone signifie que les impulsions à destination des servos commencent toutes au même moment avec un décalage très très faible, vous pouvez lire la documentation originale sur la carte.

Le pilotage des servos se fait en envoyant des trames de 17 octets contenant une entête, une commande et la position des servos + un checksum.

J'ai fait faire les PCB par Seeedstudio, qui fait de la très bonne qualité pour un prix très intéressant. La carte est simple à réaliser, la soudure du PIC18F452 nécessite tout de même un peu de doigté et un minium de matériel mais ça reste jouable avec du matériel amateur.

Voici une vue de la carte :
La carte électronique de Bleuette

Si vous souhaitez faire vous même la carte, rendez-vous sur cette page pour avoir la dernière version des fichiers Eagle : Pcb de Bleuette

Pour ceux qui souhaiteraient se procurer une carte (version 1.0.2), frais de port inclu pour la France métropolitaine :

  • La carte seul (sans composant) pour 6€, livraison en France
  • Le PIC18F452 programmé : 10€
  • Pour le kit complet, carte + composants soudé ou non, me contacter

Notez également que j'ai effectué des modifications récentes sur le schéma de principe et le PCB, elle est dorénavant en 1.2.1 (ajout d'un condensateur de découplage C9, des diodes zener D2 et D3 de protection sur les entrées analogiques, modification de l'interrupteur, ajout d'un pont SJ1 pour le reset).

Logiciel

La méca et l'électronique étant finies, j'ai pu attaquer le logiciel embarqué qui est de 2 sortes :

L'assembleur PIC

Rien de spécial à dire, il se trouve ici et comporte tout ce dont on a besoin pour piloter Bleuette et donc ne devrait plus vraiment évoluer...

Le code pour Arduino

Voici la structure :

Et nous avons 4 librairies :

  • Bleuette : C'est par ici que tout passe
  • Sequencer : C'est lui qui gère les sequences définies dans le fichiers sequences
  • ServoController : Pilote de la carte de contrôle de servos
  • SerialCommand : Librairie externe très pratique pour la gestion de commande via la liaison série.

Déplacer Bleuette

Pour faire bouger les pattes de Bleuette, c'est assez simple, commençons par un exemple :

bleuette.servo.set(0, 128);

Cela aura pour effet de positionner le servo 0 à sa position intermédiaire 128.

Si maintenant, on souhaite faire faire des pompes à Bleuette, on ne va pas répéter 24 fois la commande précédente pour positionner chaque patte, sinon, on ne va jamais s'en sortir ! Utilisons plutôt, une séquence :

Tout d'abord, déclarons une structure de type motion_t nommée motion_pushup :

// Push up
motion_t motion_pushup[] = {
    {
        DELAY_MIN, // Durée du déplacement courant
        {
            __, __, __, __, __, __, // Position des pattes horizontales
            UP, UP, UP, UP, UP, UP // Position des pattes verticales
        },
        NULL // Une callback qui sera appelée à chaque fin d'exéction de la position
    },
    {
        DELAY_MIN,
        {
            __, __, __, __, __, __,
            DOWN, DOWN, DOWN, DOWN, DOWN, DOWN
        },
        NULL
    }
};

Puis créons la séquence en elle même :

sequence_t seq_pushup = {
    "Push up",  // Le nom de la séquence
    2, // Le nombre de mouvement dans la séquence
    motion_pushup // La structure de déplacement que nous avons créé plus haut
};

Maintenant, nous n'avons plus qu'à appelé la séquence ainsi :

// Pour la jouer en avant
bleuette.sequencer.forward(sequences[seq]);

// Pour la jouer à l'envers
bleuette.sequencer.backward(sequences[seq]);

Voilà pour cette introduction rapide, je vous invite à regarder le code, il est vraiment simple...

Évolution en cours

La prochaine évolution de Bleuette lui donnera de vrais pieds qui lui permettront de moins glisser mais surtout, lui donnera le toucher au travers d'un petit interrupteur, ainsi, en posant une patte, il pourra s'assurer que le sol est bien en dessous...

Voici une vue de ses bouts de pattes :
Le bout de patte faisant office de capteur

La partie inférieure (la demi sphere et le cylindre extérieur) est mobile et glisse dans le cylindre plus petit dans lequel se trouve un interrupteur poussoir, c'est ce dernier qui fait office de rappel mécanique.

La partie en contact avec le sol (la demi-sphere sur l'image) sera en PLA Flex afin d'obtenir un maximum d'adhérence.

Ses 6 pattes devraient en être équipées, pour cela, un circuit intégré (4512) branché sur le port OPTION permettra de sélectionner la patte à lire via une adresse sur 3 bits, on occupera ainsi seulement 3 bits de sorties pour l'adressage + 1 bit de sortie pour connaitre l'état (patte posée ou non).

Évolutions futures

Bleuette devrait être équipé d'une liaison Bluetooth, d'un capteur magnétique afin de garder un cap lorsqu'il marche et enfin, d'une tourelle mobile avec un capteur ultrason pour détecter les obstacles devant lui et tout cela intégré dans une seconde carte fille.
Bleuette se sentant un peu à l'étroit avec Arduino, il n'est pas totalement exclu que je porte le code pour tourner sur un Raspberry Pi...

Et bien entendu, Bleuette attend impatiemment des frères et soeurs : toute contribution est la bienvenue !

Ouvrir l'article

La carte électronique de Bleuette : Shield Bleuette

Pour ceux qui aurait raté les épisodes précédents, Bleuette est un robot hexapode (3 paires de pattes) entièrement libre (logiciel, plan, etc...) réalisable avec une imprimante 3D ou dans une moindre mesure et de la patience en découpant les pièces dans du Plexiglas.

Concernant la carte fille, je viens d'arriver au bout de son routage et je vais lancer sa fabrication d'ici peu, les caractéristiques de cette carte sont les suivantes :

  • Génération de la tension de fonctionnement pour l'Arduino
  • Pilotage des 12 servos de pattes + 2 supplémentaires
  • Contrôle de la tension de la batterie
  • Surveillance du courant consommé par les servos

Voici le schéma de principe (cliquez pour agrandir) :
Schéma de principe de Bleuette

Et le PCB (cliquez pour agrandir) :
PCB de Bleuette

Tous les documents nécessaires à sa fabrication sont sur GitHub par ici https://github.com/hugokernel/Bleuette.

Concernant la mécanique, c'est presque prêt, encore quelques pièces à imprimer et je pourrai passer à l'assemblage final !

Ouvrir l'article

Le retour de l'hexapode Bleuette

...et cette fois ci, il n'est pas content !

Ce projet à pour but de fabriquer une bestiole à 6 pattes et de la faire marcher sans l'aide de quiconque. Pour certain d'entres vous, le nom “Bleuette” vous est peut être familier, en fait, c'est une féminisation de Bleuet, le robot de la série FX, Effet spéciaux, nous n'avons aucun rapport avec cette série mais on s'est dit que le pauvre Bleuet devait se sentir seul et qu'il faudrait lui fabriquer un congénère et puis tant qu'à faire femelle… :) extrait de la page du wiki sur Bleuette

Le projet s'est arrêté il y a quelques années faute d'avoir trouvé une solution robuste pour le pivot de chaque patte, sur notre prototype, il était réalisé en bois mais nous voulions une autre matière plus robuste. Le projet est bien sûr OpenSource / OpenHardware.

Une des première version de Bleuette

Plus d'informations sur la première version :

Le logiciel

De grosses modifications vont être faite sur la partie logiciel par rapport au plan initial, sur la première version de Bleuette, c'est une carte à base de PIC qui devait être développé from scratch et exécuter le noyau temps réel PICOS18 mais afin de simplifier la prise en main, une carte Arduino sera le cerveau de l'engin et une carte fille développée par mes soins en 2006 pour Bleuette sera utilisée pour piloter les 12 servos de manière parfaitement synchrone.

La nouvelle structure

Dans ses premières versions, Bleuette était réalisé en Plexiglas, découpé à la scie sauteuse et à la scie à chantourner, un vrai boulot, long et pénible avant de nous rendre compte des limites de cette matière : elle est cassante et se raye facilement.

Puis, nous avons pu faire découper gracieusement toutes les pièces (patte et corp) en Lexan par http://jegrave.fr/, merci Jean-Louis pour le boulot, cette matière est beaucoup plus solide, ne se casse pas et résiste incroyablement bien à la torsion mais nous n'avions toujours pas de réelle solution pour les supports de pattes autre que le bois...

Et depuis, plus rien, quelques années se sont écoulées et, depuis, l'impression 3D s'est considérablement développée, au point d'être devenue attractive pour les particuliers et intéressante pour un projet comme Bleuette, l'achat d'une l'Ultimaker à été guidé par l'arrière pensée de pouvoir enfin finir ce projet et là, plus aucun souci concernant le pivot : il sera comme toute le reste : en PLA.

Tous les plans de Bleuette ont été refait à l'aide de OpenSCAD, un dépôt GitHub à été créé à l'occasion pour partager tous les documents inérant à la fabrication du robot.

Le corps de Bleuette modélisé avec OpenSCAD
Le corps de Bleuette

Son corps étant trop grand pour être imprimé en une seule fois sur la surface de mon imprimante 3D, j'ai développé une librairie OpenSCAD qui permet de découper des pièces avec un motif en queue d'arronde (dovetail), ainsi, le corps sera réalisé en 3 tronçons qui seront emboités les uns aux autres et enfin définitivement bloqués à l'aide de tiges filetées.

Découpe en queue d'arronde du corps de Bleuette

La suite

Pour le moment, la dernière section (partie haute et basse) est imprimé, ça à pris environ 13h d'impression, j'imprime à 50mm/s pour avoir la meilleure qualité possible, 1 patte est fonctionnelle pour le moment, le design n'est pas figé encore, j'y apporte quelques corrections...

Avancement du moment avec le test de la cinématique du mouvement de la patte :
Test de la cinématique de la patte

Todo liste mécanique :

  • Correction des entretoises des pattes
  • Ajout d'un support pour une tête
  • Bout des pattes avec capteurs d'appuis

Restez connecté à Bleuette !

Il est possible de suivre l'avancée de Bleuette via différent moyen :

Ouvrir l'article

Assemblage de l'Ultimaker

5 semaines après la commande, un transporteur m’amène un lourd carton (10kg) venu des Pays Bas : ça y est, j’ai reçu mon UltiMaker.

Légèrement en avance d’ailleurs car ils m’avaient annoncé 6 semaines de délai, je crois avoir été chanceux car je n’avais pas commandé de bobine de plastique supplémentaire et une semaine auparavant, un courriel de Ultimaker annonçait qu’il était en rupture de certain coloris de PLA et proposait, pour ceux en ayant commandé en plus, de remplir un formulaire, afin de choisir des couleurs de remplacement pour éviter d’attendre trop longtemps, du coup, j'ai dû être traiter légèrement en avance...

Carton ouvert, découverte du contenu :
20120303_104821.jpg

Tout est bien rangés, chaque sachet possède un autocollant avec sa référence et son nom, tout est dans du papier bulle...
Tout, hmmm, presque tout, jusqu’à ce que j’arrive au fond du carton, là, sont posés les plaques de bois (du bouleau, très solide et rigide) découpés au laser, ces dernières sont enfoncées toute au même niveau, conséquences d’un impact extérieur que je n’avais pas vu au premier abord sur le carton mais qui est bien visible... Les plaques étant emballées elles aussi dans du papier bulle mais directement en contact avec le carton trop petit, une chute, un envoi de livreur un peu brutal et paf le bouleau, comme vous le voyez sur les photos, c’est assez localisé, ça n’empêchera pas beaucoup le montage...

CIMG4864.JPG CIMG4865.JPG CIMG4867.JPG

La blessure la plus importante est celle-ci oû le choc à explosé le bois et bouché les trous permettant la fixation des planches entre elle...
CIMG4866.JPG

Je réquisitionne une grande table, étale le contenu du carton sur celle-ci et c’est parti...
CIMG4863.JPG

Aucun plan papier fourni, c’est pas plus mal, tout est disponible en ligne, en anglais, illustré de photos, ils indiquent 6 à 20h de travail...

Première étape, le caisson avec ces foutus passe cable qui m'ont fait tourné en bourrique...
CIMG4886.JPG

Tout se monte sans encombre jusqu’au drame :
CIMG4885.JPG

Il se sont trompés en me livrant une poulie avec le mauvais diamètre interne (les 2 de droites devraient être identiques avec un diamètre inférieur), arggg, la casse durant le transport, une poulie inutilisable, je me voyais mal attendre...
Par chance, j’avais une entretoise dont le diamère externe correspond au diamètre interne de la poulie, un petit usinage pour que son diamètre interne s’adapte à l’axe du moteur et voilà... ouf !!

CIMG4888.JPG CIMG4889.JPG CIMG4890.JPG

L’assemblage de la tête d’extrusion est plutôt délicat mais se fait sans trop de problème.

Le montage s’est poursuivi jusqu’à la plateforme de l’axe Z, il faut faire rentrer en force des roulements linéaires dans des planches de bois pour former un sandwich, les jeux sont plus que limite et j’ai dû m’y prendre à plusieurs fois afin d’avoir quelque chose d’à peu près correct, comprenez : quelque chose de droit.
Heureusement, ils ont prévus le coup et le jeu est rattrapable par un système de réglage à vis / ressort...

Enfin, vient le moment de relier électriquement tous les éléments, fin de course, moteur, élément de chauffe, puis l'allumage :
20120304_222945.jpg

Tout à fonctionné du premier coup sauf une erreur sur la carte qui indique la connection pour le capteur de fin de course droit alors que c’est le gauche, une inversion et tout roule...

Maintenant, le branchement à un ordinateur, est-ce plug and play ?
Oui, Ultimaker reconnu immédiatement (c’est une carte Arduino pour l’intelligence de la bête, j'avais déjà installer les pilote FTDI), j’ai pu envoyer des ordres pour piloter les moteur X, Y, Z, c’est très réactif et la vitesse impressionnante...

Au moment au j'écris ces lignes, je n'ai pas encore pu tester à fond l'animal donc, je n'aurai pas de retour à faire sur son utilisation, hormis le souci dans le transport (prévoir un carton plus grand) et l'erreur de poulie (la personne du contrôle ne devait pas être réveillée), le kit est de bonne qualité et je comprends mieux le prix, c'est vraiment bien étudié au niveau de l'assemblage, on retrouve des pièces en métal de très grande précision, la carte électronique est très bien réalisé, la partie puissance est totalement ventilé, bref, c'est du sérieux...

Ouvrir l'article

Un exemple d'utilisation de la bibliothèque Oled4d pour Arduino

Voici un exemple très simple expliquant l'utilisation de la bibliothèque libre Oled4D dont j'ai parlé dans un précédent billet.

Ce programme va afficher l'image ci-dessous :

Oled 4D démo pour Arduino

Le code source commenté est affiché en seconde partie de ce billet.

Plus d'informations :

Voici les étapes à suivre pour tester cette bibliothèque :

  1. Décompresser l'archive dans le dossier libraries
  2. Ouvrez l'environnement de développement Arduino
  3. Dans le menu Fichier > Exemples, il doit y avoir un menu Oled4D > Example > Demo, cliquez dessus pour l'ouvrir
  4. Compilez et chargez la cible

Voici une partie du code source (la déclaration de data_image à été tronquée volontairement), l'exemple va afficher un écran bleu, affiche un cercle jaune, 1 tux, réalise 4 copier / coller de l'image du tux, affiche du texte « Hello world ! » puis créé un polygone.

/*  Oled4d
    Programme d'exemple pour interface Arduino / Écran Oled de 4DSystems
 */
 
#define RED     RGB(255, 0, 0)
#define GREEN   RGB(0, 255, 0)
#define BLUE    RGB(0, 0, 255)
#define YELLOW  RGB(255, 255, 0)
#define WHITE   RGB(255, 255, 255)
#define BLACK   RGB(0, 0, 0)
 
#define SMALL   FONT_5X7
#define MEDIUM  FONT_8X8
#define BIG     FONT_8X12
 
#include <NewSoftSerial.h>
#include <HardwareSerial.h>
extern HardwareSerial Serial;
#include <Oled4d.h>
 
NewSoftSerial serial(2, 3);
 
// count : 1152
#define  DATA_IMG_WIDTH   24
#define  DATA_IMG_HEIGHT  24
char data_image[] = {
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
    0xc6, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xbe, 
    [...]
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
};
 
void setup()
{  
    Serial.begin(9600);
 
    // Mode série
    pinMode(2, INPUT);
    pinMode(3, OUTPUT);
 
    // Configuration de l'interface série logicielle
    serial.begin(9600);
}
 
void loop()                     
{
    // Créer l'objet en interface série logiciel
    Oled4dSoft oled = Oled4dSoft(serial, 8);
 
    // Pour utiliser l'uart « hardware », procéder ainsi :
    //Oled4dHard oled = Oled4dHard(Serial, OLED_RESET_PIN);
 
    // Initialise l'écran
    oled.init();
 
    // Efface l'écran
    oled.clear();
 
    // Fond d'écran bleu
    oled.setBG(RGB(0, 0, 128));
 
    // Dessine un cercle
    oled.drawCircle(64, 64, 20, RGB(255, 255, 0));
 
    // Affiche l'image
    oled.displayImage(0, 0, DATA_IMG_WIDTH, DATA_IMG_HEIGHT, COLORMODE_65K, data_image);
 
    // Copier / coller de l'image 5 fois
    for (int i = 1; i < 5; i++) {
        oled.screenCopyPaste(0, 0, i * DATA_IMG_WIDTH, 0, DATA_IMG_WIDTH, DATA_IMG_HEIGHT);
    }
 
    // Affiche du texte
    oled.drawText(1, 3, SMALL, GREEN, "Hello world !");
 
    // Dessine un polygone
    char array[] = { 10, 32, 20, 64, 76, 120, 127, 64 };
    oled.drawPolygon(sizeof(array) / 2, array, RGB(255, 128, 0));
 
    while (1);
}

Voilà, je pense que le code est assez explicite, en cas de souci, n'oubliez pas le forum d'aide.

Ouvrir l'article

Librairie Arduino pour afficheur Oled : Oled4d

Voici une librairie libre de gestion d'afficheur OLED de la société 4D Systems pour Arduino.

Comme leur nom l'indique très bien, ils utilisent la technologie OLED avec tous les avantages de cette technologie : pas besoin d'un rétroéclairage, ils ont un angle de vue de 180°, bonne consommation, très bon contraste, vous pouvez les trouver entre autres chez Lextronic ou encore chez Sparkfun.

Le jeu d'instructions n'est pas toujours très logique mais est assez complet, le principal défaut de ces afficheurs est le prix, à 65€ l'unité, j'imagine mal comment espérer faire de la petite série...

Ces afficheurs sont pilotables directement par le biais d'une connection série dans lequel on envoie directement des commandes d'assez hauts niveaux :

  • Set Background Color
  • Put Pixel
  • Erase Screen
  • Draw Rectangle
  • Place String of ASCII Text
  • ...

Ils disposent également d'un port microSD permettant ainsi de charger des images ou encore des bouts de programmes, attention cependant, car n'espérez pas mettre des images jpg dans la microSD ou autre et les afficher comme ça, d'un coup, ça ne fonctionnera pas, tout d'abord, car le chip de 4D ne gère pas les images compressées mais uniquement des champs de bits et surtout car il n'y a aucune gestion de FAT gérée par le controleur, ainsi, il est possible d'accéder au contenu de la microSD depuis votre programme mais uniquement en brut : à nous de gérer la couche du système de fichiers...

Tester la libraire

Voici la marche à suivre pour tester cette librairie avec Arduino (la librairie peut parfaitement fonctionner hors du projet Arduino...) :

  1. Créer un dossier Oled4d dans le dossier Libraries de votre installation Arduino et copiez dedans le fichier Oled4d.h.
  2. Créez un nouveau projet Arduino et copiez le contenu du fichier oled4d.pde dedans.
  3. Compilez le source, envoyez dans la cible et voilà, vous devriez avoir quelque chose de ce genre s'afficher :

Oui, il s'agit bien de Tux ! ;)

Comment ça fonctionne ?

Voici un petit bout de code :

// Créer l'objet en interface série logiciel
Oled4dSoft oled = Oled4dSoft(serial, 8);

// Pour utiliser l'uart « hardware », procéder ainsi :
//Oled4dHard oled = Oled4dHard(Serial, OLED_RESET_PIN);

// Initialise l'écran
oled.init();

// Efface l'écran
oled.clear();

// Dessine un cercle
oled.drawCircle(64, 64, 20, RGB(255, 255, 0));

// Affiche du texte
oled.drawText(1, 3, SMALL, GREEN, "Hello world !");

Voilà, je pense que l'exemple est assez explicite et logique...

Vour remarquerez qu'il est possible de passer par l'uart intégré à l'Atmel ou de passer par l'uart logiciel avec la libraire NewSoftSerial (cette librairie dispose de fonctions avancées et est bien supérieure à la librairie d'uart fourni par défaut dans le projet Arduino).

Démo

Voici une petite démo affichant en vrac des lignes, des triangles, des cercles, des polygones, des rectangles...
La vidéo reflète assez mal les couleurs de l'écran qui sont bien vives en réel.

Écran Oled de 4D System piloté par Arduino

Futures évolutions

Actuellement, cette librairie supporte uniquement les instructions standards (General Command Set), les autres (Extended Command Set), qui permettent entre autre un accès au contenu de la microsd, ne sont pas encore gérées mais le plus gros du travail est fait...

Téléchargement

Cette librairie est mise à disposition sous license GPL.
Vous pouvez télécharger la toute dernière version de cette librairie depuis mon compte GitHub à l'adresse suivante : http://github.com/hugokernel/Oled4D

Je mettrai à jour également la page sur le wiki : /wiki/projets/oled4d.

Ouvrir l'article