Dimanche, novembre 18 2012

Raspberry Pi: créer une station de téléchargement grace à PyLoad


Bonsoir à tous ;)

Ce soir, je vais vous montrer comment transformer un simple RaspberryPi en une station de téléchargement puissante et contrôlable à distance. Ce guide utilise l’OS Raspbian, je vous conseille de l’utiliser également.

Tout d’abord, connectez-vous en SSH à votre Pi:

ssh user@adresse_du_pi

Tout d’abord il nous faut installer liblept3. N’étant pas disponible via apt-get, il nous faut l’installer manuellement:

cd /tmp

 

wget http://ftp.de.debian.org/debian/pool/main/l/leptonlib/liblept3_1.69-3.1_armhf.deb

 

dpkg -i liblept3_1.69-3.1_armhf.deb

 

rm liblept3_1.69-3.1_armhf.deb

Ensuite viennent quelques packages dont python a besoin pour faire fonctionner pyload

sudo apt-get install python-crypto python-pycurl python-imaging python-qt4 tesseract-ocr screen

Cette opération devrait prendre un certain temps. Une fois terminée, téléchargez pyLoad;

wget http://download.pyload.org/pyload-v0.4.9-all.deb

Installez-le:

sudo dpkg -i pyload-v0.4.9-all.deb 

Maintenant vous pouvez le supprimer:

rm sudo pyload-v0.4.9-all.deb 

C’est l’heure de tester PyLoad. Dirigez vous vers son répertoire d’installation:

cd /usr/share/pyload/

et lancez-le:

./pyLoadCore.py

Vous devriez obtenir quelque chose de similaire:

14.11.2012 22:14:01 INFO Starting pyLoad 0.4.9
14.11.2012 22:14:01 INFO Using home directory: /home/pi/.pyload
14.11.2012 22:14:27 INFO ExtractArchive: No UnRar installed
14.11.2012 22:14:28 INFO ExtractArchive: Activated UnZip
14.11.2012 22:14:28 INFO Activated plugins: CaptchaTrader, ClickAndLoad, ExternalScripts, ExtractArchive, UpdateManager
14.11.2012 22:14:28 INFO Deactivate plugins: Ev0InFetcher, HotFolder, IRCInterface, MergeFiles, MultiHome, MultishareCz, RealdebridCom, RehostTo, XMPPInterface
14.11.2012 22:14:28 INFO Downloadtime: True
14.11.2012 22:14:28 INFO Starting ThriftBackend: 0.0.0.0:7227
14.11.2012 22:14:33 INFO Free space: 12.12 GiB
14.11.2012 22:14:33 INFO Starting builtin webserver: 0.0.0.0:8001
14.11.2012 22:14:34 INFO Activating Accounts...
14.11.2012 22:14:34 INFO Activating Plugins...
14.11.2012 22:14:34 INFO pyLoad is up and running
14.11.2012 22:14:36 INFO No Updates for pyLoad
14.11.2012 22:14:37 INFO New version of hook|UpdateManager : 0.13
14.11.2012 22:14:43 INFO *** Plugins have been updated, please restart pyLoad ***

Il peut être intéressant d’installer quelques fonctionnalités manquantes, comme unrar:

sudo apt-get install unrar-free

Une fois terminé, relancez pyLoad, il devrait mettre à jour les plugins nouvellement activés. Là encore, ça peut prendre un moment. Une fois terminé, essayons d’accéder à pyLoad via le navigateur Web. Ouvrez votre navigateur et tapez l’adresse suivante:

http://adresse_de_votre_pi:8001

Vous devriez obtenir quelque chose!

Passons maintenant à la configuration du login/password. De retour à la ligne de commande, cette instruction vous permettra de configurer les utilisateurs:

./pyLoadCore.py -u

Nous avons presque terminé! Lancez pyLoad en tant que service:

service pyload start

C’est terminé! Amusez-vous bien!

Lundi, novembre 12 2012

MR3020 et I2C avec les GPIO

La torture du MR3020 continue ! Comme je l’avais mentionné dans le post précédent, il me faut un bus i2c pour communiquer avec le contrôleur de mon robot qui sera basé sur un Arduino. Il existe de nombreuses GPIO sur le MR3020 mais certaines sont indisponibles car utilisées par le processeur ( initialisation de la flash par ex ). D’autres sont disponibles, comme les LED ou les interrupteurs. Je pourrais utiliser ces GPIO mais c’est dommage de supprimer des fonctionnalités du routeur…

Le routeur MR3020 a un cousin qui dispose de 2 GPIO non utilisées sur sa carte: les GPIO 7 et 29. Nous allons donc rechercher si sur notre routeur elles existent aussi. La page openwrt du MR3020 ne mentionne pas l’utilité de ces 2 GPIO mais qui sait… elles existent peut-être aussi sur ce routeur !

Pour les retrouver, on va d’abord décharger le module de gestion des LEDS pour être sûr de ne pas utiliser ces GPIO.

rmmod leds_gpio

Ensuite, on exporte ces 2 GPIO et on les place en mode OUTPUT.

cd /sys/class/gpio/
echo 7 > export
echo 29 > export
echo out > gpio7/direction
echo out > gpio29/direction

Les GPIO sont prêtes pour être utilisées. Afin de les repérer facilement sur la carte à l’aide de l’oscilloscope, on va générer un signal d’horloge bidon avec une fréquence peu élevée à l’aide d’un script « quick and dirty » en python.

import sys
import time
 
while True:
        value = open("/sys/class/gpio/gpio7/value","w")
        value.write(str(0))
        time.sleep(.0005)
        value.write(str(1))
        value.close()
        time.sleep(.0005)

Après quelques minutes de recherche, le signal carré est localisé sur les les pattes des résistance 15 et 17, comme sur son cousin le WR703N. Les autres pattes de ces résistances sont à la masse. Ce sont donc des resistances de pulldown mais à quoi servent-elles ? mystère … En tout cas, elles vont me servir ;-)

 

Le signal carré

 

R15 et R17 donnent accès aux GPIO 7 et 29

 

Reste maintenant une opération relativement délicate: dessouder ces 2 minuscules résistances et souder des fils sur

  • R15
  • R17
  • GND
  • +3.3v
  • +5v

 

Résistances supprimées et fils soudés.

 

Oui, oui, c’est minuscule ! La preuve si vous comparez avec une résistance classique:

Les CMS font mal aux yeux :-)

 

Ensuite passons à la masse. Elle sera prise sur les pattes de l’interrupteur de sélection du mode.

Masse

 

Le 3.3v que l’on prendra sur les pattes de ce que je pense être un régulateur.

3.3v

 

Et pour finir le 5V. Il est optionnel mais je pourrais en avoir besoin plus tard. Autant le câbler tout de suite.

5V

 

Pour résumer les positions des différentes lignes, rien ne vaut une petite photo d’ensemble.

le bus i2c prend forme

L’i2c étant un bus à collecteur ouvert, il faut placer des résistances de pullup sur les lignes SDA et CLK. Des résistances de 10k sont adaptées pour ça.

Un petit connecteur est réalisé sur un bout de protoboard.

Connecteur

 

Voilà, c’est presque terminé. Pour tester, je vais utiliser une eeprom i2c venant de chez HobbyElectro, le magasin en ligne créé il y a quelques temps par Furrtek.

 

Il faut configurer et charger le noyau i2c-gpio-custom en créant un fichier /etc/modules.d/99-i2c contenant la ligne

i2c-gpio-custom bus0=0,7,29

c’est tout ;-)

Linux est maintenant capable de dialoguer en i2c sur les GPIO 7/29. Elle n’est pas belle la vie ?

 

Il suffit alors de câbler notre petite eeprom en suivant le datasheet.

Eeprom 24AA256

 

On ne branchera que VSS ( masse ) , Vcc, SCL et SDA.

 

Montage rapide

L’utilitaire i2c-detect permet de scanner le bus à la recherche d’une adresse i2c.

Trouvé ! l’adresse est 0×50

 

Tout marche, l’eeprom est trouvée en 0×50. Parfait !

Bientôt la suite avec l’Arduino…

Lundi, novembre 5 2012

Projet de robot Wifi – Torture d’un routeur TPLink MR3020

J’ai en projet un robot piloté en wifi depuis un smartphone ou un PC. La base de ce robot est un routeur très économique le TP-Link MR3020.

MR3020

 

Seulement voilà, j’ai à brancher sur ce routeur:

  • Un arduino sur lequel seront connectés moteurs ( des servos modifiés ) et capteurs.
  • Une webcam basique ( Logitech CZ110 ).

 

Au départ j’avais en tête d’ajouter une connectique USB surement présente sur le microprocesseur du routeur, comme j’avais fait il y a quelque temps sur un routeur Netgear. Seulement voilà, le datasheet du microprocesseur n’est pas public et son « form factor » le rend très difficile à bidouiller.

Vous me direz, un usb, ça suffit pour la webcam. Sauf que le routeur n’a que 4Mo de mémoire flash ce qui rend impossible l’ajout de logiciels comme python et mjpeg-streamer. Il faut donc ajouter de la mémoire supplémentaire. Pour cet ajout 2 possibilités: 1 MMC utilisée avec des lignes GPIO ou 1 SD / clef en USB. Les lignes GPIO étant peu nombreuses ( sauf à retirer interrupteurs et LED ) j’ai opté pour l’USB ainsi qu’un lecteur de µSD. Je vais aussi utiliser 2 lignes GPIO en I2C pour communiquer avec l’arduino.

Je me suis procuré un hub USB STOREX à 3€ pour le démonter et récupérer son PCB. Malheureusement le hub n’est pas autoalimenté mais la consommation de la caméra + SD étant très limitée on va y remédier en branchant l’alimentation du hub sur l’USB.

Allez, hop on démonte la boîte qui est collée. Seule la carte nous intéresse. L’alimentation est inutile dans ce projet, on va la mettre de côté pour plus tard.

Le hub USB

 

La prise d’alimentation doit être retirée ainsi que les connecteurs USB afin de gagner de la place et du poids.

Hub usb / Alimentation

 

Le lecteur de µSD à 3 € est aussi démonté afin d’accéder facilement aux pistes USB. Il est démonté « proprement » pour être ensuite ré-assemblé, la carcasse de la prise USB étant indispensable au maintient de la carte µSD.

µSD reader

 

Le lecteur peut alors être directement soudé sur le hub USB toujours dans l’idée de gagner de la place.

Le hub usb

 

Ensuite, on peut ré-assembler le lecteur et le coller sur le hub.

Le hub et le lecteur de µSD

J’ai abîmé quelques pistes en dessoudant le connecteurs USB. Il faut dire qu’à 3€, le PCB ne vaut pas grand chose… mais bon c’est quand même de l’epoxy et non de la bakélite.

 

Retournons maintenant sur le routeur. Afin d’augmenter sa portée assez réduite, nous allons lui ajouter une antenne externe. Il suffit pour cela de supprimer le shunt en J4 et de venir souder l’âme du câble d’antenne sur la piste à côté de l’inscription J4 (1) et la masse sur le pad à côté (2).

 

Antenne externe en J4

 

C’est tout petit et en zoomant ont voit bien mes gros pâtés !

 

Connexion de l’antenne externe

 

voilà le résultat avec le routeur dans son coffret d’origine.

Antenne externe et console série

 

Pour ne pas abîmer le routeur, je n’ai pas dessoudé son port USB. J’ai juste soudé directement des fils sous le PCB pour les relier au hub. Un coup de fer et l’on peut rendre au routeur sa fonction d’origine. De plus, à cet endroit, la place occupée par le connecteur ne me gène pas.

 

La caméra est installée avec une nouvelle connectique à base de barette sécable en 2.54.

Le MR3020, son hub usb et la webcam

 

Voilà c’est tout pour les modifications matérielles. La suite concernera la recherche de GPIOs libres et la partie soft.

 

GPIO sur l’interrupteur de sélection du mode

 

Voilà par exemple une piste. Plutôt que de retirer les LEDS qui ont leur utilité, on peut retirer l’interrupteur de sélection du mode qui ne nous sert pas. Ça nous donnera nos 2 GPIO  (1: GND, 2: GPIO 18 & 20) pour l’i2c. Mais avant de faire ça, je vais voir s’il n’y a pas d’autres GPIO peu utiles voire inutiles comme sur son cousin le WR703N

 

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…

Mercredi, février 29 2012

Tamponne moi un barbu

Un petit tutoriel vidéo mettant en scène pas mal de logiciels libres pour créer des tampons à l’aide d’une fraiseuse numérique.

 

Avant le tutoriel en vidéo, voici la liste des outils utilisés:

  • Inkscape: Logiciel de dessin vectoriel utilisé ici pour vectoriser un fichier PNG.
  • LibreCad: Logiciel de CAD qui sert juste pour éditer le fichier DXF sortant d’inkscape.
  • F-engrave: L’outil indispensable pour la gravure numérique.
  • EMC: Le logiciel de pilotage de la fraiseuse.

Ne pas oublier le logo de @lagrottedubarbu

 
Le tutoriel en vidéo:

Samedi, janvier 21 2012

Flux de création de fichiers GCODE avec des outils libres

Après le petit tutoriel de ce matin, voici un post qui résume le « flux de production » de mes fichiers GCODE.

  • La base

Tout commence par l’objet indipensable à la prise de mesure: le pied à coulisse.

  • Les matériaux

Une fois l’objet à créer correctement dimensionné, il faut trouver le matériau dans lequel on va le créer. J’utilise principalement des bois et plastiques, les métaux étant (à par pour de la gravure) trop difficiles à fraiser avec mon matériel (il manque un refroidissement liquide ou un moteur de broche avec une faible vitesse et un gros couple).

  • Pour le bois, je prends en général du MDF ou du contreplaqué qui peuvent faire entre 3 et 15 mm.
  • Pour le plastique j’utilise beaucoup le PVC qui a un bon rapport qualité / prix ainsi que du PEHD ( c’est ce qui est utilisé pour les plaques à découper dans votre cuisine ;-)   ou encore du DELRIN (qui est excellent mais cher)

Le choix du matériau est fait, maintenant les logiciels ! Ne soyez pas effrayés, il y en a un certain nombre mais chacun est très performant dans son domaine.

  • Les logiciels de CAO

Pour dessiner des pièces à usiner, celui que j’utilise le plus, c’est LibreCAD. C’est un fork libre du projet QCAD. Avec un peu d’habitude, vous dessinerez en quelques minutes des pièces relativement complexes en 2D. Vous pouvez commencer par regarder le tutoriel d’Andre PASCUAL, il parle de QCAD mais c’est la même chose, à part les icones qui changent, le principe est identique et le tutoriel est excellent.

 

Quand il s’agit de graver des dessins ou du texte, rien de vaut inkscape qui n’est plus à présenter. Il est préférable lorsque vous utilisez inkscape pour créer des fichiers DXF, nécessaires dans la suite du flux de production, d’enregistrer avec le greffon « Better DXF Output ». Pour certains dessins contenant des courbes de bezier ( splines ), je suis obligé d’ouvrir les DXF de LibreCAD avec Inkscape puis de les réenregistrer pour qu’il convertisse tout en polyline. Sinon, j’ai des plantages lors de la génération du GCODE avec HeeksCNC. Un bug qui sera surement corrigé par les développeurs, mais en attendant…

Dans un autre cadre très particulier, celui de la création de circuits imprimés, j’utilise KiCAD, un concurrent du très connu EagleCAD. Avec ce logiciel, je génère des fichiers GERBER qui seront ensuite convertis en GCODE.

  • Les logiciels de création du GCODE

Ici, seulement deux logiciels sont utilisés:

HeeksCAD / HeeksCNC vont permettre de transformer le fichier DXF 2D en un fichier permettant de piloter la machine CNC. On renseigne au logiciel le diamètre de l’outil, son positionnement par rapport à la pièce, la vitesse d’avance… Bien qu’assez jeune, ce logiciel donne de très bon résultats.

 

En dehors des DXF, il y a les fichiers GERBER de Kicad. Là j’utilise pcb2gcode qui est un logiciel en ligne de commande.

 

pcb2gcode --metric --zsafe 2 --zwork -0.06 --offset 0.2 --zchange 25 --mill-feed 100 --mill-speed 5000 --back $back
  •  Pilotage de la CNC

Ici, un seul choix et non des moindres: EMC (LinuxCNC). Il prend en entrée les fichiers gcode et pilote la machine au travers d’un support temps réel du noyau linux. Il est préférable d’ailleurs de lui dédier une ancienne machine.

Et voilà après 2 heures de travail une manette de coinceur pour un voilier. L’originale en rouge est fendue, la nouvelle en DELRIN est très solide :-) et identique à l’originale (les économies de plastique en moins), elle parait plus épaisse mais ce n’est qu’un effet d’optique sur la photo.

 

 

Diagramme du flux de production

 

Si vous connaissez, utilisez d’autres outils, mettez les en commentaire c’est toujours intéressant !

Samedi, février 5 2011

Fraiseuse CNC DIY v3 – Episode 2

Voilà la suite tant attendue ( par moi surtout ;-) ) de la construction de ma fraiseuse numérique.

En cours de conceptionLa voilà presque terminée. il me reste 1 moteur à câbler et la vis sans fin de l’axe des X à installer, tout le reste est en place. On est bien loin de l’épisode 1 avec ses quelques pièces éparses !

DIY CNC Parts


N’ayant pas eu le temps de faire un article à chaque étape de l’avancement de la construction, j’ai mis en place un Wiki dans lequel je vais essayer de documenter l’ensemble du projet afin d’aider ceux qui comme moi veulent se lancer dans la fabrication d’un tel outil. Le wiki est « ouvert », si vous aussi vous construisez une machine et que voulez m’aider à documenter, je peux vous donner un accès en écriture. Pour le moment il n’y a pas grand chose, mais je compte l’enrichir régulièrement et je compte aussi sur votre aide !

L’adresse du projet: http://odcnc.equinoxefr.org


Lundi, octobre 6 2008

Fraiseuse CNC sous Linux, « Do It Yourself »

Après quelques tests sur ma précédente fraiseuse, je me suis rendu compte que le manque de précision était fatal à ce genre de machine. Bien décidé à ne pas laisser tomber, j’ai décidé d’en reconstruire une nouvelle beaucoup plus précise.

Le cahier des charges est assez simple:

  • La machine doit rester bon marché
  • Il s’agit d’une petite fraiseuse de bureau et non d’un routeur de 2x3m
  • Elle devra fonctionner sous EMC2 (Linux Ubuntu 8.04)
  • Elle devra être suffisement précise pour réaliser des gravures de circuits imprimés.
  • La conception se fera au feeling, je suis incapable de concevoir une telle machine sur plans.

J’ai choisi des matériaux faciles à trouver, il s’agit de tube carré en aluminium vendu en barres de 1 mètre chez LeroyMerlin, de tige filetée de 6mm, de boulons de 6mm et de roulements à billes de roller et d’autres récupérés dans des imprimantes ainsi que du tube de 25mm en acier pour la potence de l’axe Z.

La motorisation est assurée par 3 moteurs pas à pas unipolaires 4.1V 1.1A acheté chez Technimaniacs, les prix sont très corrects et le service parfait :-) à recommander. Je n’ai pas réutilisé les anciens moteurs, ils nécessitaient d’être démultipliés ce qui me faisait perdre en précision, de plus, leur puissance était vraiment limite.

Pour ce qui est de l’électronique, il s’agit de la même carte que ma première fraiseuse, un kit de chez HobbyCnc. Elle a le mérite de bien fonctionner et d’être très bon marché par rapport à la concurrence. Le pilotage ce fait cette fois sous linux avec EMC2. Un excellent logiciel opensource de pilotage de fraiseuse.

La chaine logiciel (opensource)utilisée est la suivante:

  • Qcad pour le dessin des pièces. Les fichiers sont enregistrés en DXF

  • Gcnccam pour générer le GCODE

  • Ensuite c’est axis qui est utilisé comme interface à EMC2.

EMC2 est installé sur une ubuntu 8.04 avec un noyau temps réel RTLinux. C’est absolument nécessaire sur ce type de machine afin de garantir la précision du fraisage.

Pour la gravure de circuits imprimés, il y a Eagle et un script de génération du Gcode. Je ne suis pas certain que ce soit facilement faisable avec Kicad :-(

Voici quelques photos de la machine construite. Le seul gros problème rencontré: un axe des Z trop souple donc une machine très imprécise. Je l’ai donc entièrement refait en acier soudé au chalumeau. Il est maintenant très rigide. Pour le reste, c’est assez simple, un châssis rectangulaire en aluminium dans lequel vient coulisser le mobile de l’axe des Y. C’est sur ce mobile Y que vient glisser le plateau de fraisage. L’axe des Z qui porte la dremel est guidé par des rails en alu. Des roulements de roller maintiennent le chariot Z en place.

Cnc mill Z axis Z axis IMG_5911 Z axis Z axis IMG_5913 Ball bearing from rollers IMG_5916 Aluminium rails Y stepper mount Unipolar steppers IMG_5917 ball bearing from old printers Limit switch from old printers Electronics Electronics Plugs Power supply 12v 80Va First test

Voilà une petite vidéo de test avec le fichier de démo d’Axis. Le fraisage ne se termine pas la course de ma machine étant trop limitée. Pour un premier test, la précision est au rendez-vous.

- page 1 de 2