DigitalSpirit / Blog

Impressions multi-matériaux avec un seul extrudeur

Imprimer directement en plusieurs couleurs peut vraiment être intéressant, par exemple, pour intégrer des pictogrammes informatifs sur la face d'un objet ou simplement dans un but purement décoratif.

Ultimaker propose un kit permettant d'imprimer en 2 couleurs (ou 2 filaments de matériaux différents) mais les retours sur les forums ne m'ont pas convaincus de l'acheter, je pense au final que le ratio coût / intérêt n'est pas vraiment bon lorsque l'on s'en sert uniquement pour du multi couleurs, l'intérêt est bien plus grand pour de l'impression multi-matériaux (support en PVA par exemple).

Je vais vous expliquer 2 méthodes qui vous permettront de passer à l'impression multi couleur avec un seul extrudeur.

Notez que cet article tourne autour de l'Ultimaker et de son slicer Cura mais il est tout à fait possible d'adapter cette solution à toute RepRap.

Avec le plugin Cura : PauseAtZ

En utilisant le plugin fourni avec Cura PauseAtZ qui permet, comme son nom l'indique, de stopper l'impression à une certaine hauteur, de parker la tête afin de changer le filament et ensuite de relancer l'impression avec le nouveau filament.

Le principal problème de cette technique est qu'il ne permet pas à une couche d'avoir plusieurs couleurs, rien de vraiment nouveau avec cette méthode...

Feinter le slicer : PauseAtExtruderChange

Dans cette méthode, on va utiliser Cura exactement comme si nous avions le kit de double extrusion, et allons dire à Cura de slicer comme tel. C'est par la suite que nous allons lire le GCode et remplacer l'instruction de changement de tête (Tx) par des instructions permettant de parker la tête le temps d'effectuer le changement de filament.

Voici les étapes exactes :

  1. Parker le Z
  2. Déplacer la tête en X, Y à la position de parkage
  3. Stopper le ventilateur
  4. Attendre une action de l'utilisateur (nécessite un ulticontrolleur TODO)
  5. Restaurer la position X, Y
  6. Redémarrer le ventilateur
  7. Restaurer le Z

Nous pourrions également utiliser le G-Code M600 mais il s'agit d'une instruction en test qui n'est pas inclut par défaut dans tous les firmware et l'utilisation de nos propres instructions nous permet de faire exactement ce que l'on souhaite...

En pratique

1. Installez le plugin Cura PauseAtExtruderChange, (déposez simplement le fichier PauseAtExtruderChange.py dans le dossier ~/.cura/VERSION/plugins)

2. Créons un nouveau profil d'imprimante : File > Machine setting > Add new machine, dans le panel Extruder 2, on s'assure que Offset X et Offset Y soit égal à 0 comme dans l'image ci-dessous :
Cura - Machine settings

3. Importez vos fichiers stl, précisez à Cura que vous souhaitez les fusionner pour faire de la double extrusion (sélectionnez le premier objet d'un clique gauche, puis, bouton droit sur le second objet et cliquez sur Dual extrusion merge)

4. Ajoutez le plugin, modifiez les paramètres tel que vous le souhaitez et vous voilà avec votre fichier G-Code modifié

5. Lancez l'impression et l'imprimante vous signalera chaque changement de couleur, il vous restera alors à changer le filament, valider le changement auprès de l'imprimante, l'impression reprendra alors exactement oû elle avait été arrêtée mais avec un autre filament.

Note: Vous pouvez aussi utiliser le fichier python directement en ligne de commande : python PauseAtExtruderChange.py file.gcode > out.gcode (python PauseAtExtruderChange.py -h pour avoir de l'aide)

Voilà ce qu'il est possible de faire très simplement :

Vous voilà maintenant capable d'imprimer en multi couleur d'une manière un peu plus évoluée qu'avec PauseAtZ, néanmoins, l'utilisation de PauseAtExtruderChange ne sera intéressante que pour des impressions ou le nombre de changement de couleur par couche est faible sinon, vous risquez de passer votre temps à changer de filament...

Ouvrir l'article

RaspberryPi + Grove = RaspiO'Mix

RaspiO'Mix est une carte fille pour Raspberry Pi développée par mes soins sur une idée de Michel d'Erasme qui va vous permettre de connecter facilement et rapidement tout un tas de modules de type Grove initialement prévus pour Arduino.

Caractéristiques

  • Aux dimensions du RaspberryPi
  • 4 entrées / sorties tolérantes 5V (basée sur un TXS0108PWR)
  • 4 entrées analogiques, 0-5V, 18 bits de résolution
  • 2 entrées numériques via DIP switch
  • Horloge temps réel avec batterie de sauvegarde
  • 2 connecteurs pour I2C
  • 1 connecteur pour communication série
  • Alimentation 5V via jack

Connecteurs

Bien entendu, cette carte est entièrement libre, toutes les informations nécessaires pour la fabriquer sont disponibles sur GitHub / RaspiO'Mix.

Fonctionnement

Voici le schéma de principe :
schema.png

La conversion analogique / numérique est assurée par un MCP3424, un CAN I2C de 18 bits de résolution, une horloge temps réel DS1307 est présente sur le même bus.

Une librairie Python est disponible et vous permet d'accéder simplement aux différentes fonctions d'entrées / sorties, I2C, série et ainsi d'intéragir avec un monde 5V bien au chaud dans l'environnement 3V3 du RaspberryPi...

La carte en action

Je veux mon propre RaspiO'Mix

2 solutions s'offre alors à vous :
  1. DIY : Tout est à votre disposition pour le faire vous même, sur GitHub, vous trouverez la liste des composants, des informations techniques, les fichiers Eagle, les fichier gerber, bref, TOUT est disponible pour le faire vous même !
  2. Les cartes RaspiO'Mix sont disponibles à la vente sur le site [www.raspiomix.org|http://raspiomix.org/|fr].
Ouvrir l'article

Nouvelle mise à jour sur l'Ultimaker

Cela fait un bon bout de temps que je n'avais pas écrit d'article sur l'Ultimaker, il faut dire qu'elle fonctionne parfaitement bien et que je n'ai plus à me préoccuper des réglages et autres et je me focalise depuis quelques mois sur d'autres projets qui en dépendent complètement dont Bleuette ou LeMurmureDuSon.

Extracteur d'air

En suite direct avec l'article Extracteur de fumées fait soi-même, voici l'adaptation pour Ultimaker qui vous permettra d'absorber les mauvaises odeurs très présentes lors d'impression avec de l'ABS avec toutes les particules que vous vous apprêtiez à respirer...

scad.png 2013-11-03_19.48.03.jpg 2013-11-03_19.48.17.jpg 2013-11-03_19.48.41.jpg

Les sources OpenScad sont disponibles par ici : https://github.com/hugokernel/OpenSCAD_Things/tree/master/ActiveCarbonExtractor

Une nouvelle tête

Le remplacement du système de maintien du tube par le Bowden Clamp v2 m'a été très utile pour l'utilisation de PLA de qualité médiocre et s'est avérée assez fiable dans le temps mais ce n'était pas parfait, le bouchon fini par se déformé et quand ça force de trop, le tube fini tout de même par glisser vers le haut...

Au cours d'une discussion sur le forum d'Ultimaker, j'ai décidé de suivre le conseil de Gaël et de m'orienter vers des raccords rapides pneumatique, une petite recherche sur le net et les voilà commandés (LOT5 One Touch Hex Socket Male Connector 6mm 1/8" thread Replace SMC KQ2S06-01S).

Attention, les attaches rapides du lien Ebay ci-dessus ne permettent pas de faire traverser complètement le tube, mais pas de souci, un coup de perceuse suffisamment précis (prenez garde à ne pas abîmer la partie mobile à l'intérieur) et le tube passe sans problème, si vous connaissez une source pour des raccords pneumatiques de diamètre 6mm traversant, je suis preneur.

Agrandissement du trou en 6mm

Un petit tour par OpenSCAD et nous voilà avec la pièce qui servira de support à nos attaches rapides (oui, au pluriel, en cas de double extrusion...), et vous remarquerez les emplacements pour les écrous M3 :
Bowden Clamp v3 Le support vu du dessous

Les attaches rapides vissées sur leur support, c'est prêt à être monté...
Le support imprimé avec les 2 raccords rapides

Cela fait une dizaine de jour que je teste ce système de maintien et pas le moindre problème pour le moment...

Tous les sources OpenSCAD sont sur github : https://github.com/hugokernel/OpenSCAD_Things/tree/master/Bowden%20Clamp%20v3

Mise à jour du micrologiciel Marlin

J'utilise énormément la fonction suicide sur l'Ultimaker qui permet l'arrêt complet une fois l'impression finie (voir Carte de suicide pour RepRap).

Le principe est simple, lors de la construction du fichier G-Code, on ajoute à la fin de ce dernier le G-Code M81, il va permettre une fois lu de basculer la sortie correspondante dans un état qui coupera alors l'arrivée en énergie de l'imprimante.

Il est possible de débrayer cette fonctionnalité à l'aide d'un interrupteur qui, s'il est ouvert, empêchera toute mise en veille mais, et c'est là que le problème pointe le bout de son nez : une fois la sortie suicide basculé dans l'état de veille, il n'est plus possible d'en sortir et donc d'activer la fonction de suicide pour une nouvelle impression sans que l'imprimante ne s'éteigne immédiatement.

C'est l'objet d'un commit qui vient combler ce problème.

Support pour ventilateur

J'ai profité de la maintenance de mon Ultimaker pour changer la buse / support de ventilateur par le Tapir Shroud (Thing:107413).

La buse en PLA étant très proche du corps chauffant, pour la protéger, je l'ai recouverte de scotch aluminium.

TapirShroudv4.9_0.jpg TapirShroudv4.9_1.jpg

Très bonne buse qu'il faudra malheureusement modifier en cas de double extrusion...

Ouvrir l'article

Un extracteur de fumées fait soi-même

Si vous faites de l'électronique, vous êtes certainement amené à souvent souder, cette odeur particulièrement désagréable d'étain et autre produit vous est donc familière et avouez qu'on s'en passerait finalement assez bien...

Dans le commerce, il existe des extracteurs adaptés mais aussi assez chère :

Un extracteur monté sur un bras orientable Un extracteur monté sur pied droit

Le premier est à environ 50€ (en promo) et le second à plus de 100€, ça fait mal pour un adaptateur secteur, un ventilo, un pied, un filtre et un bati...

Pourquoi ne pas s'en fabriquer un ? Rien de difficile, encore moins avec une imprimante 3D...

C'est parti ! Nous allons avoir besoin d'une lampe d'architecte, on en trouve à moins de 10 euros en magasin, le mieux est encore de prendre celle qui traine au grenier depuis des années, un ventilateur récupéré dans une vieille alimentation d'ordinateur, un adaptateur secteur de 12V d'un appareil tombé en panne, et des filtres à charbon actif que vous pouvez trouver dans n'importe quel magasin de bricolage ou sur le net...

On récapitule, vous avez besoin de :
lampe_architecte.jpg   fan.JPGadaptateur_secteur.jpg Filtre charbon actif bolt.jpg

Maintenant, il nous faut un support pour le filtre, un petit coup de OpenScad et nous voilà avec de belles pièces à imprimer.

Voici, ci-dessous, les 4 pièces que vous devrez imprimer et assembler (bien entendu, grâce à OpenScad, tout est paramétrable et vous pouvez aisément adapter votre pièce aux dimensions du ventilateur, filtre, etc...) :

attach.pngverticalBase.png handle.png support.png

Et une fois assemblé à l'aide de vis et boulons, nous obtenons ça :

L'extracteur sous OpenScad rectoL'extracteur sous OpenScad verso

Fixons le support de filtre à charbon a actif sur la lampe d'architecte et nous obtenons un montage très pratique et peu chère : vos poumons vont diront merci !

Vue sur la liaison 2013-10-28_20.25.17.jpg 2013-10-28_20.25.42.jpg 2013-10-28_20.25.08.jpg 

J'ai également dérivé cela afin d'aspirer les odeurs désagréables en provenance d'une imprimante 3D en cours d'impression (d'ABS par exemple), ce sera l'occasion d'un prochain article...

Tous les sources OpenSCAD sont disponibles sur Github : github.com/hugokernel/OpenSCAD_Things/tree/master/ActiveCarbonExtractor

Ouvrir l'article

Dernières avancées de Bleuette

Un petit billet pour vous donner des nouvelles de Bleuette...

Alimentation

Pour fonctionner correctement, Bleuette à besoin d'une tension de 5V@1A pour alimenter son cerveau (un RaspberryPi) et d'une autre tension de 6V@3A pour alimenter les servos et la guirlande de led.

Le développement d'une seconde carte fille permettant de générer les alimentations est prévue mais pour le moment, j'ai fait au plus simple, ainsi, pour le 6V, j'ai branché en parallèle 2 modules régulateurs de tension à découpage facilement trouvable sur le net, notamment, sur DealExtreme, ce sont des modules très pratiques que j'utilise assez souvent, ils sont capables de débiter 3A en pointe, mis en parallèle, nous avons donc théoriquement 6A, c'est amplement suffisant pour Bleuette qui comme dit plus haut doit avoir besoin de 3A maximum.

Note: Concernant la mise en parallèle des régulateurs à découpage, prenez garde à parfaitement bien régler la même tension sur les 2 modules à l'aide d'un multimètre fiable.

Pour le 5V du Raspberry, j'ai fait très simple en récupérant le régulateur inclu dans une prise allume cigare, voir Régulateur à découpage à très faible coût.

La source de tension est un accu LiPo de 11.1V @ 1.3A, c'est plutôt faible mais je n'ai que ça sous la main pour le moment...

Logiciel embarqué : le Pic

Sur la carte BleuettePi se trouve un Pic 18F452 qui est là afin d'assurer les mêmes tâches que sur la version Arduino (Bleuette Shield) mais avec quelques différences :

  • Les ports utilisés pour piloter les servos ne sont pas les mêmes
  • Le RaspberryPi n'ayant pas de convertisseur Analogique / Numérique, c'est le Pic qui s'en charge et met à disposition 8 entrées analogiques
  • Il surveille la tension de la batterie et prévient le RaspberryPi (via INTD) en cas de passage sous un seuil
  • Il surveille le courant consommé par les servos et prévient le RaspberryPi (via INTD) en cas de dépassement d'un seuil

La communication avec le Pic se fait via une liaison série à l'aide de commande :

Divers :

  • Version Retourne la version du micrologiciel
  • Status Retourne des informations courantes sur le système

Spécifique au pilotage des servos :

  • Init Initilisation
  • Pause Met en pause les servos
  • Resume Sort d'une pause
  • Clear Passe à 0 toutes les consignes
  • Set Spécifie les positions des servos

Spécifique au convertisseur analogique :

  • Current Retourne la dernière valeur du courant consommé par les servos
  • Set Max Spécifie la valeur max du courant à ne pas dépasser
  • Read x Lit la valeur de l'entrée analogique (x vaut de 0 à 7)

Logiciel : le RaspberryPi

Avec l'utilisation de BleuettePi, la programmation de Bleuette se fait directement en Python, quel bonheur de développer en haut niveau sans les innombrables contraintes que j'avais sur Arduino, plus de limitation en taille, en vitesse, en programme qu'il faut compiler à chaque itération puis envoyer à la carte Arduino...

J'ai repris la même logique que sur l'Arduino pour l'enregistrement des séquences, un tableau est utilisé pour stocker les positions des pattes à chaque étapes (une structure en C sur la version Arduino) qui est contenu dans une classe Python (une autre structure pour la version en C), toutes les positions sont envoyées par la liaison série.

Bleuette est maintenant pilotable via une interface web tournant grâce à Tornado (un framework web en Python), toute la communication se fait via un websocket, et Bleuette pousse régulièrement toutes les informations issues de ses capteurs (tension, courant consommé, valeur du magnétomètre, de l'accéléromètre, etc...).

Sur l'interface, il est possible de régler finement la position des servos (trims), de régler les valeurs limites à ne pas dépasser, et même de voir une vue 3D de Bleuette et des mouvements de ses pattes (grâce à l'utilisation de Three.js) etc...

Voici les captures d'écran des différentes pages :

Page d'accueil Vue des mouvements de pattes Réglage des positions limites des pattes Mouvement des pattes Vue des capteurs Vue 3D de Bleuette et des mouvements

Un mode de test permet de tester le logiciel sans avoir de Bleuette sous la main, il vous suffit de suivre les instructions de cette page : Tester le serveur.

Problèmes rencontrés

Chevauchement des ordres

Les ordres reçus depuis l'interface utilisateur sur l'ordinateur distant arrivent dans Bleuette au travers d'un websocket, ces informations sont asynchrones, on ne peut pas savoir quand elles vont arriver et des fois, elles pouvaient se chevaucher, ainsi, si j'envoie un ordre pour modifier la position des servos (16 octets : 1 commande, 14 positions, 1 contrôle) et que pendant l'envoi d'un octet de la trame, une autre commande est exécutée, l'ordre de position va échouer (somme de contrôle erronée), des octets vont rester en attente, la communication série va expirée, remonter une exception, etc...

Exemple concret: Le programme du Pic fait des lectures régulières du courant consommé par les servos, si la valeur dépasse un seuil, le Pic déclenche une interruption à destination du Raspberry (INTD), ce dernier va alors faire une demande de lecture de Status (voir au dessus) au Pic lui permettant de savoir quel type d'interruption à été levé mais cette demande passe bien entendu par la ligne série et comme elle peut survenir n'importe quand, elle peut aussi survenir lors de l'envoi du longue trame de positionnement de patte.

Pour palier à cela, j'ai créé un thread portant le doux nom de Servo_Sequencer qui se charge de l'envoi des positions, seul lui est capable de le faire, chaque position envoyée est mise en cache et dès que la communication est possible, elle est envoyée, il est également possible de faire des sortes de transaction à l'aide du concept de context manager de Python.

Exemple :

with ServoSeq:
    ServoSeq.setPosition(0, 120)
    ServoSeq.setPosition(2, 120)

Une fois sortie du contexte introduit par with, les positions sont ajoutées dans le buffer et seront transmises par ordre d'arrivée au contrôleur de servos.

Ligne série saturée

La liaison série est pas mal occupée lorsque Bleuette marche car toutes les communications du Raspberry au Pic inclu dans BleuettePi se font par celle-ci, or, pour lire les tensions analogiques, il faut passer par cette liaison, il est difficile de faire une demande de lecture analogique au moment ou Bleuette doit déplacer une patte sans que cela n'induise des latences.

Pour ces 2 problèmes, chevauchement des ordres et saturation de la ligne série, la prochaine évolution sera l'ajout du Pic sur le bus I2C permettant ainsi de garder la ligne série uniquement pour le pilotage de Bleuette.
J'envisage aussi d'ajouter un convertisseur analogique numérique I2C évitant ainsi au Pic d'avoir à faire les conversions...

Amplificateur audio

La carte BleuettePi inclu un amplificateur audio (LM386) permettant ainsi de donner la voix à Bleuette, le problème est l'utilisation d'une clef Usb Wifi qui rayonne assez fort et qui vient gentiment ronronner dans la partie audio, lorsque du son est émis, pas de souci, le ronronnement est noyé mais dans le cas contraire, c'est plutôt gênant.

Je pense donc déplacer la partie amplification sur une carte fille, j'utiliserai certainement un amplificateur un peu plus puissant.

Carte fille accéléromètre / magnétomètre

La carte fille (GY-27) comprenant un accéléromètre et un magnétomètre est fixée sur BleuettePi via un simple connecteur (type barette sécable), il sera certainement déporté afin d'être fixé au corps de Bleuette pour éviter qu'elle ne vibre et renvoie des informations non fiables.

Grâce à la récente acquisition d'un four à refusion, il est également possible que la future carte BleuettePi intégre directement les capteurs.

La liste des évolutions de Bleuette sera maintenue sur cette page : BleuettePi : Future version

Ouvrir l'article

« Page 4 / 14 »