Mot-clé - openscad

Fil des billets - Fil des commentaires

Lundi, juillet 7 2014

Table de placement manuel : Le cadre

Suite à l'introduction de ma table de placement manuel, je vais poursuivre en vous présentant le cadre.

Tous le design des pièces est réalisé à l'aide de OpenSCAD et est disponible sur le dépôt GitHub suivant : GitHub / hugokernel / ManualPickAndPlace

La base

Le cadre qui va supporter la mécanique doit être suffisamment rigide pour ne pas bouger, je désire aussi quelque chose de suffisamment fin, les profilés aluminium couramment utilisé dans le milieu maker m'ont semblé parfaitement adapté.

Voici le cadre en profilé aluminium de 20mm, les profilés sont maintenus entre eux par des équerres internes :

frame.png

Concernant la taille du cadre (60x40cm), il est parfaitement possible d'avoir d'autres dimensions (tout est paramétrable dans les sources OpenSCAD), j'ai choisi cette dernière en fonction des arbres de précisions (trempés et rectifiés) de 12mm de diamètre que j'ai pu trouver.

Par dessus, nous rajoutons les supports d'arbre de précisions (réalisé via une imprimante 3D) :

rod_support.png

Les supports viennent se fixer aux 4 coins du cadre, les arbres de précision rentrent dedans en force et n'en bouge plus :

frame2.png

Pour cet étape, il faut imprimer :

Le chariot X

Les chariots pour l'axe X sont eux aussi aussi fabriqués via une imprimante 3D, ils ont chacun 2 parties creuses dans laquelle on insère des roulements linéaires (type LM12UU) dans lesquels viendront coulisser les arbres de précision.

lm12uu.png dolly_x.png

Tout ceci monté :

frame3.png

Pour cet étape, il faut imprimer :

Le chariot Y

Le chariot de l'axe Y possède 4 roulements linéaires, un support porte-outils (indiqué par la flèche) et des trous de fixation pour le "repose bras".

dolly_y_top.png dolly_y_bottom.png

frame4.png

Pour cet étape, il faut imprimer :

Récapitulatif des pièces à imprimer

Concernant l'impression des pièces, les jeux étant assez faibles, n'hésitez pas à faire quelques tests avant de tout imprimer.

Toutes les sources des pièces de cet article sont sur GitHub dans le fichier ManualPickAndPlace / cad / table.scad.

anim.gif

Ça nous donne quelque chose comme ça :

À suivre...

Jeudi, octobre 31 2013

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

Lundi, août 6 2012

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 :

Dimanche, mai 20 2012

L’impression 3D, la « tête » d’impression et Openscad: l’OpenSource à la rescousse

Le tendeur en S dont j’avais évoqué l’idée dans le post précédent est maintenant réalisé. Il fonctionne à merveille :-)

Les pièces du tendeur

 

Tendeur en place

 

J’ai eu ensuite quelques déboires avec les axes X et Y. J’ai finalement réglé mes problèmes en remplaçant tous les paliers par des roulements à billes. En effet, les paliers glissent très bien mais dès que les courroies sont sous tension, les déplacements sont plus durs et ça fini a un moment ou à un autre par coincer provoquant ainsi des mouvements saccadés…

J’ai donc usiné des nouveaux supports pour y insérer des roulements à billes de rollers à la place des paliers.

 

Roulements

Pour les chariots, j’ai remplacé le double palier par une douille à billes prisonnière à l’intérieur du chariot.

Douille à billes

Après ces quelques modifications, tout fonctionne parfaitement ! Pour les déplacements en Y, j’ai fait des premiers tests, j’arrive à une vitesse de 12 000 mm / min. Je ne pense pas pouvoir imprimer à cette vitesse, mais la machine supporte sans problème  une vitesse de déplacement élevée.

 

Reste à réaliser le support de la tête d’impression… Ce n’est pas une mince affaire, la pièce est relativement complexe, et j’ai du mal à la visualiser et surtout à en estimer les mesures exactes. J’arrive à mes limites ;-)

Heureusement, l’ordinateur est là pour nous aider à simuler différents modèles de support. L’idéal pour moi étant de réaliser un modèle 3D qui me servira ensuite à projeter à plat les pièces pour pouvoir ensuite les fraiser.

 

Le premier « truc » qui vous vient à l’idée: SolidWorks ! Oui et bien c’est « très » cher et je ne l’ai pas. Sketchup alors ? Non, il ne tourne pas sous linux ( même avec Wine je n’y arrive pas ). Alors comme toujours on va regarder du côté des solutions opensource. J’en connais 4 que j’utilise régulièrement:

  • LibreCAD: Excellent outil mais qui se limite à la 2D, nous l’utiliserons pour compléter les projections 2D des pièces.
  • HeeksCAD: Pour ce qui est de la conception 3D, il le permet mais j’ai du mal avec son ergonomie…
  • FreeCAD: Très bien, dessin 3D paramétrique, pas trop dur à prendre en main. Mais il a un gros soucis pour le moment. Autant il permet de créer des pièces facilement autant il est très difficile de les assembler dans un modèle 3D complet. A surveiller dans les futures versions, il évolue assez vite.
  • OpenSCAD: Un outil atypique ! Il permet de dessiner des pièces complexes en 3D paramétrique, mais ici, point d’interface graphique, le dessin se fait à l’aide d’un langage de programmation.

 

Espace de travail

 

Mon choix s’est donc porté sur Openscad. Il présente aussi l’avantage de générer des fichiers STL qui seront utiles lors de l’utilisation de l’imprimante 3D. D’où l’intérêt de commencer à le maîtriser dès maintenant.

 

Openscad dispose d’un éditeur intégré mais celui-ci est peu évolué. Si vous voulez plus de convivialité, vous pouvez utiliser un éditeur externe. Pour celà, il faut « cacher » l’éditeur intégré et cocher l’option « Automatic reload and compile »

Option

 

Options

 

Si vous utilisez emacs comme moi, vous pouvez lui dire de traiter les fichier « scad » comme des fichiers C. Ça permet d’avoir une bonne indentation et une coloration syntaxique correcte.

Pour cela, il faut mettre les lignes suivantes dans le fichier « .emacs »

(add-to-list 'auto-mode-alist '("\\.scad$" . c-mode))

 

L’environnement est prêt, on peut commencer à travailler. Pour commencer par des choses simples, modélisons  une douille à bille.

// Linear Ball Bearing
include 
 
$fn=50;
$lbb_inner_diameter=8;
$lbb_outer_diameter=15;
$lbb_length=24;
 
module linear_bearing_15_24()
{
  color(Aluminum) difference()
    {
      cylinder($lbb_length,$lbb_outer_diameter/2,$lbb_outer_diameter/2,center=true);
      cylinder($lbb_length+1,$lbb_inner_diameter/2,$lbb_inner_diameter/2,center=true);
    }
}
 
//For test
linear_bearing_15_24();

Linear ball bearing

C’est très simple, juste la différence entre 2 cylindres ! Là ou c’est génial: on ajuste les variables et hop on change les côtes.

 

Pour continuer, un peu plus compliqué: la tête chauffante. On va la modéliser rapidement pour qu’elle nous serve ensuite de repère pour la construction du support.

 

// HotEnd jhead MK IV
$fn=50;
 
$hotend_resistor_diameter=5;
$hotend_filament_diameter=3;
$hotend_outer_diameter=16;
$hotend_peek_length=50;
 
// Peek element
module peek() {
color(black) difference()
  {
    difference()
      {
	// Peek cylinder
	cylinder($hotend_peek_length,$hotend_outer_diameter/2,$hotend_outer_diameter/2);
	// Hole for filament
	translate([0,0,5]) cylinder($hotend_peek_length,$hotend_filament_diameter/2,$hotend_filament_diameter/2);
      }
 
    // Mount groove
    translate([0,0,$hotend_peek_length-10])
	{
	  difference()
	    {
	      cylinder(5,9,9);
	      cylinder(5,6,6);
	    }
	}
  }
 
}
 
module copper_end()
{
  translate([-5,-6.5,3])
    {
      difference()
	{
	  cube(size = [16,13,8]);
	  translate([12,15,4])
	    {
	      rotate([90,0,0])
		{
		  cylinder(20,$hotend_resistor_diameter/2,$hotend_resistor_diameter/2);
		}
	    }
	}
    }
  difference()
	{
	  cylinder(3,1,4.5);
	  cylinder(3,0.35,3);
	}
  translate([0,0,3])
    {
      difference()
	{
	  cylinder(20,4,4);
	  translate([0,0,1]) cylinder(21,3,3);
	}
    }
}
 
module hotend()
{
  translate([0,0,13])
    {
      peek();
    }
  copper_end();
}
 
// For test
hotend();

 

Hotend

 

Pas mal non ;-)

 

Et pour terminer le support. Grâce à openscad, on peut changer les côtes, déplacer les perçages… pour simuler tout ce qui nous passe par la tête !

Même si ça peut paraître compliqué au premier abord, c’est très agréable à utiliser. Je ne prétends pas maîtriser complètement l’outil, mais je me débrouille.

 

Autre point très intéressant, on peut utiliser des conditions et autres boucles. Ici j’utilise quelques variables qui si elles sont initialisées à 1 modifient le rendu pour me permettre d’obtenir rapidement les projections à plat.

 

// Hotend Mount
 
include ;
include ;
 
$top_length=50;
$top_width=50;
$side_height=50;
$hole_cable_diameter=15;
 
$fromA=0;
$fromB=0;
$fromtop=0;
 
module mount_top()
{
  difference()
    {
	cube(size = [$top_length,$top_width,15]);
	translate([15,15,-2]) cylinder(20,$hotend_outer_diameter/2,$hotend_outer_diameter/2);
    }
}
 
module mount_side_A()
{
  rotate([0,90,0])
    {
      difference()
	{
	  cube(size = [$side_height,$top_length+5,5]);
	  translate([25,40,0])
	    {
	      cylinder(15,$lbb_outer_diameter/2,$lbb_outer_diameter/2, center=true);  
 
	    }
	}
      if ($fromA==0)
	{
	  translate([25,40,5]) linear_bearing_15_24();
	}
    }
}
 
module mount_side_B()
{
  rotate([90,90,0])
    {
      difference()
	{
	  cube(size = [$side_height,$top_length,5]);
	  translate([40,35,0]) cylinder(15,$lbb_outer_diameter/2,$lbb_outer_diameter/2, center=true);
	  translate([30,15,1]) cylinder(10,$hole_cable_diameter/2,$hole_cable_diameter/2, center=true);        
 
	}
       if ($fromB==0)
	 {
      translate([40,35,0]) linear_bearing_15_24();
	 }
    }
}
 
module mount_complete()
{
  if ( $fromA==0 && $fromB==0 )
    {
      mount_top();
    }
 
  if ($fromtop==0 && $fromB==0)
    {
      translate([-5,-5,15]) mount_side_A();
    }
  if ($fromtop==0 && $fromA==0)
    {
      translate([0,0,15]) mount_side_B();
    }
  if ($fromtop==0 && $fromA==0 && $fromB==0)
    {
      color(black) translate([15,15,-48]) #hotend();
    }
}
 
module mount_full()
{
 
  if ($fromtop==0 && $fromA==0 && $fromB==0)
    {
      // rod A
      rotate([0,90,0]) translate([10,35,-50]) cylinder(300,4,4);
      // rod B
      rotate([90,90,0]) translate([25,35,-150]) cylinder(300,4,4);
    }
  //Holes for hotend groove
  difference()
    {
      mount_complete();
      translate([23,-10,7.5]) rotate([-90,0,0]) cylinder(40,2.5,2.5);
      translate([7,-10,7.5]) rotate([-90,0,0]) cylinder(40,2.5,2.5);
    }
}
 
if ( $fromtop==1 )
  {
    projection(cut=false) mount_full();
  }
 
if ( $fromA==1 )
  {
    projection(cut=false) rotate([0,90,0]) mount_full();
  }
 
if ( $fromB==1 )
  {
    projection(cut=false) rotate([90,0,0]) mount_full();
 
  }
if ( $fromtop==0 && $fromA==0 && $fromB==0 )
  {
    mount_full();
  }

 

Hotend mount

 

Si l’on utilise les variables indiquées en haut du fichier, on obtient les projections à plat des 3 faces qui m’intéressent.

Si: $fromA=1;

fromA

Si $fromB=1;

 

FromB

 

Si $fromTop=1;

 

FromTOP

 

Le tout peut être exporté en DXF pour être ensuite utilisé dans LibreCAD puis HeeksCNC pour le fraisage des pièces. Seul petit bémol, les cercles et arcs de cercles sont des successions de segment ce qui n’est pas optimal. On peut facilement les reprendre dans Librecad.

Les différents plans sont regroupés dans un Zip si vous voulez jouer avec openscad.

Si un expert openscad passe par là, il peut nous donner des astuces dans les commentaires, je suis preneur ;-)

La suite sur la fraiseuse…