Fraiseuse CNC DIY v3 – Episode 1

Vous vous souvenez de ma « fraiseuse CNC v1« , c’était une première version, pas vraiment fonctionnelle mais qui m’a permis de me familiariser avec la fabrication d’une telle machine.

CNC Mill
CNC Mill

Ensuite, j’ai fabriqué la version actuelle, estampillée V2, tout à fait opérationnelle celle là.

Cnc mill
Cnc mill

Cependant, avec l’expérience, elle souffre de quelques limitations:

  • La première, la plus gênante est la surface de la table de fraisage, beaucoup trop restreinte ( 12 x 12 cm) alors que l’encombrement de la machine est assez conséquent. C’est essentiellement du à la conception de type fraiseuse avec une table X / Y mobile et un axe Z fixe.
  • Le deuxième soucis vient de la précision, elle est très bonne, mais encore insuffisante. J’arrive sans problème à faire des circuit imprimés mais ils ne sont pas parfaits. On doit pouvoir faire mieux.

Partant de ce constat, j’ai décidé de me lancer dans une 3° version qui j’espère sera plus performante. Avec toutefois 2 contraintes:

  • Le prix devra rester raisonnable
  • La fraiseuse devra pourvoir rentrer dans le caisson anti-bruit que j’ai fabriqué pour la V2. Ça limite la surface totale de la table de fraisage à une taille de 40x40cm ce qui, si je ne fais pas d’erreur de conception, devrait donner une surface utile d’environ 30x30cm ce qui est bien plus grand que la précédente.

Pour arriver à un bon résultat, j’ai cherché du matériel me permettant d’obtenir des mouvements linéaires très précis sans pour autant êtres ruineux. Pour cela, j’ai trouvé sur Ebay des arbres de précision avec des paliers en aluminium équipés de douilles à billes. Pour la structure de la machine et les différentes pièces mécaniques, je me suis orienté vers du polyéthylène haute densité ou PEHD, moins cher que le DELRIN. C’est un plastique très dur, facile à fraiser / couper qui sert notamment dans le domaine alimentaire pour faire des planches à découper la viande. Je vais utiliser la fraiseuse V2 pour fabriquer les petites pièces plastiques de la V3. Concernant les entrainements, je pense rester sur des tiges filetées de 6mm, même si le rendement n’est que de 30%, elles sont d’un coût < à 1€ / m alors que les vis à billes sont de l’ordre de 100 € / m…

Les premières pièces:

DIY CNC Parts
DIY CNC Parts

Voilà deux exemples glanés sur le net de ce que pourrait être la machine finale:

aliversionwk9

drawingfi4

Il ne me reste plus qu’à valider quelques « concepts » côté mécanique avant de me lancer dans la construction. La suite au prochain numéro.

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.

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.

[youtube:http://fr.youtube.com/watch?v=GhIafLmoYuc]

Bricolage autour d’un routeur Asus WL500Gp – Partie 4

Après une bonne journée de boulot, me revoilà avec un œil neuf sur mes problèmes de la veille. Après en être resté sur des soucis avec les modules python, je me suis dit pourquoi s’acharner sur le script easy_setup si l’on peut essayer wymypy directement. J’ai lancé un wget  http://manatlan.free.fr/setup/wymypy.tar.gz et là oh surprise:

root@OpenWrt:/opt# python wymypy
wymypy can’t connect to your MPD :  Errno 12: problems connecting to `localhost’ on port 6600

Victoire, après quelques heures de galère, voilà quelque chose de positif.

Lançons mpd (après avoir modifié mpd.conf):

root@OpenWrt:~# mpd –no-daemon –stdout
current locale is « C »
setting filesystem charset to ISO-8859-1
mixer control « Speaker » not found at line 152
using software volume

Puis wymypy:

root@OpenWrt:/opt# python wymypy
wymypy is listening on http://localhost:8080/
(hit CTRL+C to quit)

Tout à l’air de fonctionner. Je n’ai plus qu’à copier quelques MP3 sur un disque externe pour tester l’ensemble.

Filling external harddrive with some MP3

Mon disque est branché. Je lance un petit mpd –create-db pour créer la base de données. Tout se passe à merveille. Un petit tour dans /etc/mpd.conf pour ajuster quelques paramètres (le mixeur se nomme « Vol » et non « PCM »)

P.S: J’en profite pour tester recordmydesktop, un très mon petit logiciel pour créer des « screencast »

[youtube:http://fr.youtube.com/watch?v=qRjsnZzeop4]

L’interface de wymypy

screenshot wymypy

Le routeur et le disque externe (reste à ranger les câbles)

My asus audio center :-)

C’est terminé pour cette partie là du projet, il me reste juste à créer quelques scripts de démarrage pour peaufiner le système.

Sinon, je vais peut-être ajouter un écran LCD ( et oui, il reste un uart libre dans la boite ). J’ai trouvé sur internet un programme permettant d’émuler un écran LCD graphique avec un vieux palm III. ça tombe bien, j’en ai un qui traine dans un tiroir…

Entre mon autre asus WL500GP qui envoie sur ma dédibox les données de ma station météo et celui-là qui se prend pour une station multimédia, je peux vous dire que ce routeur est fantastique pour un bidouilleur. Il surpasse même le célèbre LINKSYS WRT54G (grâce à l’usb), qui traine aussi dans un de mes tiroirs.

peut-être à bientôt pour la suite 😉

Bricolage autour d’un routeur Asus WL500Gp – Partie 3

Me revoilà avec mon routeur légèrement bricolé 😉

Pour ceux qui n’ont pas suivi, voilà la partie 1 et la partie 2.

La dernière fois, je m’étais arrêté sur un problème d’espace disque.

ipkg: write error: No space left on device

Heureusement, il me reste en interne un port USB pour pouvoir ajouter un peu de mémoire. J’ai retrouvé une clef usb obsolète de 128Mo.

exploded usbkey

Je l’ai démonté pour en retirer la petite carte électronique.

Connector removed

Pour les premier tests, je démarre le routeur sans fixer la clef définitivement. Ca ne fait pas pfffttt 🙂 c’est déjà bon signe. J’attends que le routeur boote avant de me connecter en ssh. Un petit dmesg me rassure.

SCSI subsystem driver Revision: 1.00
hub.c: new USB device 01:03.1-1, assigned address 2
usb.c: USB device 2 (vend/prod 0xd8c/0xc) is not claimed by any active driver.
Initializing USB Mass Storage driver…
usb.c: registered new driver usb-storage
USB Mass Storage support registered.
hub.c: new USB device 01:03.1-2, assigned address 3
scsi0 : SCSI emulation for USB Mass Storage devices
Vendor: PIXIKA    Model: USB Flash Drive   Rev: 4.00
Type:   Direct-Access                      ANSI SCSI revision: 02
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
SCSI device sda: 255231 512-byte hdwr sectors (131 MB)
sda: Write Protect is off
Partition check:
/dev/scsi/host0/bus0/target0/lun0: p1
WARNING: USB Mass Storage data integrity not assured
USB Mass Storage device found at 3

Testing on router

Voilà, on peut maintenant la coller définitivement.

Memory hot glued on motherboard

Le test avec mon eeepc fraichement installé sous ubuntu.

checking with my eeepc

On peut maintenant se lancer sereinement dans l’installation des utilitaires qui nous manquent.

Un petit coup de fdisk, une pincée de mkfs.ext2 et nous voilà avec un beau filesystem de 128Mo tout prêt à acceuillir le Python récalcitrant.

root@OpenWrt:~# mkfs.ext3 /dev/scsi/host0/bus0/target0/lun0/part1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
16000 inodes, 127472 blocks
6373 blocks (5.00%) reserved for the super user
First data block=1
16 block groups
8192 blocks per group, 8192 fragments per group
1000 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

j’ai ajouté un script de montage de la partition dans le /etc/init.d

root@OpenWrt:/opt# df -h
Filesystem                Size      Used Available Use% Mounted on
none                     14.9M     36.0k     14.9M   0% /tmp
/dev/mtdblock/4           6.0M      5.8M    236.0k  96% /jffs
mini_fo:/jffs             1.2M      1.2M         0 100% /
/dev/scsi/host0/bus0/target0/lun0/part1    122.5M      4.0M    112.2M   3% /opt

il n’y a plus qu’à ajouter « dest opt /opt » dans le fichier /etc/ipkg.conf et à utiliser ipkg avec l’option « -d opt »

root@OpenWrt:/etc/rc.d# ipkg install -d opt mpd
Installing mpd (0.13.0-1) to opt…
Downloading http://downloads.openwrt.org/kamikaze/packages/mipsel/./mpd_0.13.0-1_mipsel.ipk
Configuring mpd
Done.

root@OpenWrt:/etc/rc.d# ipkg install -d opt /tmp/python_2.5.1-2_mipsel.ipk
Installing python (2.5.1-2) to opt…
Configuring python
Done.

Cool 🙂

Maintenant la suite, installons wymypy. Le site de l’auteur indique qu’il faut utiliser easy_install pour installer son programme.

root@OpenWrt:/opt# python ez_setup.py –install-dir=/opt
Traceback (most recent call last):
File « ez_setup.py », line 267, in <module>
main(sys.argv[1:])
File « ez_setup.py », line 198, in main
egg = download_setuptools(version, delay=0)
File « ez_setup.py », line 120, in download_setuptools
import urllib2, shutil
File « /opt/usr/lib/python2.5/urllib2.py », line 87, in <module>
import base64
File « /opt/usr/lib/python2.5/base64.py », line 9, in <module>
import struct
File « /opt/usr/lib/python2.5/struct.py », line 30, in <module>
from _struct import Struct, error
ImportError: No module named _struct

Au secours !!!

Bon un peu de google me dit qu’il manque _struct.so a cause de mauvais chemins.

Je mets donc un PYTHONPATH=/opt/usr/lib/python2.5 et un PYTHONHOME=/opt/usr/

Allez, on progresse, il me dit qu’il lui manque le module md5… C’est sans fin…

La suite au prochain numéro 🙂