Support DIY pour caméra USB de chez Adafruit

Adafruit vend une petite webcam USB à utiliser comme outil d’inspection pour vérifier ses soudures, lire les inscriptions sur les composants, ou s’amuser avec les enfants… C’est une sorte de microscope USB low cost mais qui donne néanmoins de très bon résultats, pour peu que l’on arrive à faire la mise au point correctement. En effet, celle-ci est manuelle et dépend de la distance lentille / objet et du niveau de grossissement. Une fois le grossissement choisit, il faut approcher / éloigner le microscope pour avoir une image nette. Avec le support de base, c’est quasiment impossible de maintenir une image stable.

Microscope
Microscope

 

D’où l’idée de construire un support réglable !

Les pièces sont modélisées avec openscad puis imprimées sur mon imprimante 3D.

Support modélisé
Support modélisé

 

Fixation basse
Fixation basse
Plaque de contreplaqué 3mm
Plaque de contreplaqué 3mm
Coulisseau réglable
Coulisseau réglable
Coulisseau réglable
Coulisseau réglable
Bras de support
Bras de support
Vis de réglage
Vis de réglage
Fixation sur le support en bois
Fixation sur le support en bois
Réglage de hauteur
Réglage de hauteur
Support
Support
Molette de réglage
Molette de réglage
Molette de réglage
Molette de réglage

 

Les supports hauts et bas sont collés à l’epoxy ( JB weld, quel produit miracle 🙂

Tests :)
Tests 🙂

 

L’ensemble des fichiers pour reproduire les pièce est disponible sur Thingiverse.

 

et voici pour finir ce bref article des images à divers niveaux de grossissement.

 

Capteur d'humidité x200
Capteur d’humidité x200
Capteur d'humidité x10
Capteur d’humidité x10

 

Pour l’électronique, le grossissement x10 à x20 est largement suffisant. Au delà, c’est plus pour explorer l’infiniment petit 😉

 

P.S: vous avez vu, mes impressions sont quand même meilleurs qu’avant ! J’ai augmenté la température de l’extrusion de 185° à 220° ! Depuis fini les buses bouchées ou les bulles en cours d’impression.

 

L’impression 3D, c’est cool quand ça coule !

Ca y est !!!!

Elle marche !!!

 

Et oui, après pas mal de galères pour régler tout ça, l’imprimante marche. Il y a encore quelques ajustements à faire, mais rien de bien méchant. J’arrive à imprimer des couches de 0.15 mm ce qui me semble tout à fait convenable.

Depuis les derniers épisodes ( 1, 2, 3, 4 ) j’ai mis en place le support de la tête d’impression. Le support avait été modélisé à l’aide d’openscad puis les différentes parties découpées à la fraiseuse dans du PVC avant d’être assemblées par collage.

Hotend mount

Les deux roulements linéaires sont justes rentrés en force dans leurs logements. Il n’y a aucun jeu.

 

 

La suite concerne le moteur d’extrusion, c’est là que j’ai eu beaucoup de soucis. L’extrudeur est une pièce « temporaire » que je vais remplacer rapidement dès que je pourrais imprimer. De nombreux modèles existent, en particulier les modèles de type huxley ou les wades et leurs dérivés.

Dans l’immédiat je vais encore mettre à contributio openscad et la fraiseuse. J’ai à ma disposition, 2 engrenages et un moteur NEMA23.

Le modèle sera celui-ci:

 

OpenScad Model

 

Ce qui donne un truc monstrueux mais néanmoins fonctionnel

Extrudeur 1

 

Extrudeur 1

 

J’installe alors un tube en PTFE de 4mm de diamètre intérieur ( à trouver chez Weber métaux à Paris ) pour guider le filament entre l’extrudeur et la tête mobile. Tout marche à peu près, mais je galère avec l’entrainement du filament. Ca patine beaucoup, trop de pression sur le fil… bref pas terrible. Je le démonte et remonte plusieurs fois en changeant la pièce qui agrippe le filament: boulon taillé à la dremel, poulie crantée… tout y passe jusqu’au moment ou dans un nième démontage j’explose littéralement mon bel engrenage !

Quelle m… ne pouvant toujours pas imprimer, il faut trouver une autre solution. Je n’ai pas d’engrenage aussi gros… rien qui traîne 🙁

Je tombe alors sur un moteur NEMA 17, sa poulie et une courroie de la bonne taille. J’assemble tout ça rapidement et reprend mes tests.

 

Extrudeur 2

Pour entraîner le filament,  j’ai opté pour un insert en laiton de 6 mm dans lequel j’ai taillé des dents à la dremel puis que j’ai collé avec de la cyano sur l’axe.

Ça marche enfin.

Les premières pièces peuvent sortir !

J’accumule les tests et les phases de calibrage en suivant ce qui est préconisé sur le site reprap et chez l’excellent richrap.

test 1

Pas terrible mais le carré est carré… un début.

 

S’ensuit de nombreux tests

encore des tests

 

Il y a même un « croco cochon » caché dans le tas de PLA !

 

De temps en temps, plus de plastique qui sort de la tête, galère… souvent au bout de 15 à 30 min d’impression… je démonte, remonte purge la tête… rien à faire jusqu’au moment ou je trouve un minuscule morceau de plastique ( probablement du PEHD ) qui s’est glissé dans la tête. Depuis que je l’ai viré, plus de soucis d’alimentation. Il faut dire que la tête de 0.35mm ne laisse que peu de marge pour laisser passer des cochonneries qui auraient pu se déposer sur le filamement…

Au bout d’un moment les bons réglages sont trouvés et des pièces fiables commencent à être produites…

Engrenage

 

puis d’autres…

 

Jeux d’engrenages

 

J’ai rencontré un problème qui n’est pas encore résolu: quand la tête « saute un vide », le PLA doit arrêter de couler pour éviter de laisser des filaments dans tous les sens. C’est pour cela que Slic3r que j’utilise prévoit un paramètre « retraction » qui permet de retirer le filament pour stopper son écoulement. Seulement quand je fais ça, c’est pire, je me retrouve avec des patés sur mes pièces.

patés

En réalité c’est du au « bowden tube » qui guide le filament, il y a 1mm de jeu qui absorbe et ralentit la rétractation du filament ce qui est contre productif et produit des patés. Pour le moment en attendant un tube de 3.19mm, j’ai désactivé le paramètre et le résultat est très correct.

 

Pour ce qui est de la vitesse d’impression, on peut surement mieux faire ( la mécanique de l’imprimante me permet de monter à 200 mm / s )

 

Slic3r

 

Mais je doit pour cela régler le problème de tube et améliorer le moteur de l’extrudeur. Le résultat est quand même à la hauteur de mes espérances, l’imprimante va pouvoir se mettre à jour dans les semaines qui viennent !

 

Voilà une vue d’ensemble de la bête 🙂

La bête

Reste à ranger le câblage, mettre l’électronique dans une boite… encore du boulot…

 

La machine tourne avec le firmware Marlin 1.0 RC

Elle est pilotée par le couple Slic3r ( 0.8.4 dev ) et pronterface le tout sous Linux bien entendu. Encore une chaîne opensource, open hardware !

 

Openscad -> STL -> Slice3r -> Pronterface -> RAMPS 1.4

 

Pronterface

 

Possédant maintenant une imprimante 3D et une fraiseuse, je trouve l’impression 3D absolument fascinante. On dessine un object ou on le télécharge sur « Thingiverse« , on clique sur imprimer et au bout de quelques (longues) minutes, on manipule un objet tout neuf qui n’a pas grand chose à envier à une production industrielle !

L’impression 3D pour tous, le révolution de demain ? Surement… avec de nouveaux enjeux

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…

L’impression 3D, jeux de courroies

Après avoir monté le chassis et l’axe Z, il est temps de s’attaquer à une partie assez compliquée: les entraînements X et Y par courroies.

Ayant à ma disposition plusieurs jeux de poulies MXL provenant d’imprimantes et autres scanners, j’ai commandé les courroies correspondantes à cette norme anglo saxonne ( pas de 2.032 mm ). L’inconvénient vient du diamètre des mes poulies, un petit peu grand. Je pourrais éventuellement en imprimer par la suite si la machine marche bien. Par ailleurs, j’ai volontairement commandé des courroies un peu grandes pour me permettre de tester  l’entraînement direct par les moteurs.

 

Je dispose des quelques poulies crantées mais pas assez pour les 2 axes.

Poulie crantée

Il me faut donc fabriquer des poulies lisses pour les installer à l’opposé des poulies crantées. N’ayant pas de tour sous la main, j’ai usiné 2 flasques en PVC qui sont ensuite collées.

Flasques

 

Un coup de colle PVC et l’on dispose de belles poulies !

Poulies lisses

Les axes de guidage en acier de 8mm sont tenus sur le châssis par des supports usinés dans du PVC de 5mm.

Usinage en cours

Un palier en bronze permet d’assurer la rotation de l’axe. Une rondelle vient empêcher le guide de sortir du palier.

Support d'axe

 

Les moteurs sont installés dans des supports en PVC de 5 mm. Les courroies passent directement sur la poulie du moteur procurant ainsi un entraînement direct. Le support du moteur pouvant coulisser le long du chassis, il sert ainsi à tendre la courroie avant d’immobiliser le tout à l’aide des 2 vis 6 pans creux.

Moteur X

 

Moteur pour l'axe Y

 

Les poulies lisses sont installées à l’opposé des poulies crantées.

Poulies

 

Moteur Y

 

Chaque axe disposant de 2 courroies, la première est tendue par la position du moteur. La deuxième dispose d’un tendeur improvisé à partir d’une poulie récupérée dans une imprimante.

Tendeur pour l'axe Y

 

La motorisation de l’axe Y est prête, reste à mettre en place les chariots supportant la barre de guidage Y. Les chariots sont usinés en 2 parties puis assemblés à l’aide de 3 boulons.

Demi chariot

L’axe est ainsi solidaire du chariot une fois les boulons serrés.

Un des chariots pour l'axe Y

 

La courroie est bloquée sous le chariot par une plaque usinée dans du PVC de 3mm et vissée à l’aide de 2 vis dans le PVC du chariot.

 

Un des chariots pour l'axe Y

 

Un des chariots pour l'axe Y

Les moteurs sont câblés avec des câbles RJ45 dont les conducteurs sont utilisés 2 par 2 pour permettre de disposer d’une plus grande section. Les câbles sont ensuite glissés dans les rainures du châssis.

Connecteurs

 

Connecteurs

 

L’axe X ne dispose pas encore de son tendeur. Il est plus compliqué à réaliser que pour l’autre axe étant donné la présence du moteur de l’axe Z qui va obliger à réaliser un tendeur en S pour abaisser la courroie sous le support du moteur.

 

Sketch

 

Le montage a bien avancé, les moteurs sont en place et l’axe des Y est complet. La barre de guidage de la tête d’extrusion se déplace suivant l’axe Y avec une vitesse importante et une grande fluidité. Le poids de la structure limite les vibrations mais des patins anti-vibration sous les pieds ne seraient pas de trop quand même.

 

 

Bientôt la suite avec je l’espère des tests d’impressions !