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]

Dazzle DVC 100 sous Ubuntu 8.04

Si comme moi vous souhaitez utiliser une périphérique de capture video Dazzle DVC 100, il faut un tout petit peu d’huile de coude, le module em28xx présent avec ubuntu hardy ne reconnaissant pas ce matériel.

Après insertion de la prise usb, la commande lsusb nous donne le type de périphérique:

[code]

Bus 005 Device 003: ID 2304:021a Pinnacle Systems, Inc. [hex]

[/code]

Par défaut, seule l’acquisition audio est prise en compte, la vidéo elle, n’est pas gérée.

Après quelques recherches sur notre ami Google, il s’avère que ce matériel est géré par le projet v4l-dvb dans ses dernières versions.

Dans une console, installons les outils nécessaires à la compilation du module.

[code]

sudo apt-get install mercurial build-essential

[/code]

ensuite, nous sommes prêts pour récupérer les sources du module à l’aide de mercurial.

[code]

mkdir ~/src

cd ~/src

hg clone http://linuxtv.org/hg/v4l-dvb

cd v4l-dvb

[/code]

Nous voilà prêts pour la compilation.Le -j2 passé en paramètre au make permet d’utiliser les multicoeurs (2) des processeurs récents. Si vous avez un mono processeur classique, un simple make suffit.

[code]

make -j2

….

CC      /home/pierre/src/v4l-dvb/v4l/zr36060.mod.o
LD [M]  /home/pierre/src/v4l-dvb/v4l/zr36060.ko
CC      /home/pierre/src/v4l-dvb/v4l/zr36067.mod.o
LD [M]  /home/pierre/src/v4l-dvb/v4l/zr36067.ko
CC      /home/pierre/src/v4l-dvb/v4l/zr364xx.mod.o
LD [M]  /home/pierre/src/v4l-dvb/v4l/zr364xx.ko
make[2]: Leaving directory `/usr/src/linux-headers-2.6.24-19-generic’
./scripts/rmmod.pl check
found 261 modules
make[1]: quittant le répertoire « /home/pierre/src/v4l-dvb/v4l »
[/code]

Tout a l’air OK, lançons maintenant l’installation des modules pour le noyau courant.

[code]

pierre@vbox:~/src/v4l-dvb$ sudo make install
make -C /home/pierre/src/v4l-dvb/v4l install
make[1]: entrant dans le répertoire « /home/pierre/src/v4l-dvb/v4l »
Stripping debug info from files
-e
Removing obsolete files from /lib/modules/2.6.24-19-generic/kernel/drivers/media/video:

-e
Removing obsolete files from /lib/modules/2.6.24-19-generic/kernel/drivers/media/dvb/frontends:

Installing kernel modules under /lib/modules/2.6.24-19-generic/kernel/drivers/media/:
dvb/dvb-usb/: dvb-usb-dtv5100.ko dvb-usb-opera.ko dvb-usb-cxusb.ko
dvb-usb-vp7045.ko dvb-usb-af9005-remote.ko dvb-usb-ttusb2.ko
….

….
video/em28xx/: em28xx-dvb.ko em28xx.ko
video/pvrusb2/: pvrusb2.ko
radio/: dsbr100.ko radio-maestro.ko radio-zoltrix.ko
radio-terratec.ko radio-aimslab.ko radio-maxiradio.ko
radio-gemtek.ko radio-trust.ko radio-sf16fmr2.ko
radio-typhoon.ko radio-cadet.ko radio-aztech.ko
radio-si470x.ko radio-sf16fmi.ko radio-rtrack2.ko
radio-gemtek-pci.ko
video/uvc/: uvcvideo.ko
dvb/ttusb-budget/: dvb-ttusb-budget.ko
video/pwc/: pwc.ko
video/zc0301/: zc0301.ko
video/ovcamchip/: ovcamchip.ko
video/au0828/: au0828.ko
/sbin/depmod -a 2.6.24-19-generic
make[1]: quittant le répertoire « /home/pierre/src/v4l-dvb/v4l »
pierre@vbox:~/src/v4l-dvb$

[/code]

Maintenant, à l’insertion du boitier Dazzle, dmesg est beaucoup plus compatissant 🙂

[code]

[ 5747.848507] em28xx new video device (2304:021a): interface 0, class 255
[ 5747.848515] em28xx Has usb audio class
[ 5747.848517] em28xx #0: Alternate settings: 8
[ 5747.848519] em28xx #0: Alternate setting 0, max size= 0
[ 5747.848521] em28xx #0: Alternate setting 1, max size= 1024
[ 5747.848524] em28xx #0: Alternate setting 2, max size= 1448
[ 5747.848526] em28xx #0: Alternate setting 3, max size= 2048
[ 5747.848528] em28xx #0: Alternate setting 4, max size= 2304
[ 5747.848531] em28xx #0: Alternate setting 5, max size= 2580
[ 5747.848533] em28xx #0: Alternate setting 6, max size= 2892
[ 5747.848535] em28xx #0: Alternate setting 7, max size= 3072
[ 5747.848727] em28xx #0: em28xx chip ID = 18
[ 5748.434840] saa7115′ 0-0025: saa7113 found (1f7113d0e100000) @ 0x4a (em28xx #0)
[ 5749.203790] em28xx #0: i2c eeprom 00: 1a eb 67 95 04 23 1a 02 12 00 11 03 98 10 6a 2e
[ 5749.203803] em28xx #0: i2c eeprom 10: 00 00 06 57 4e 00 00 00 60 00 00 00 02 00 00 00
[ 5749.203821] em28xx #0: i2c eeprom 20: 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 5749.203847] em28xx #0: i2c eeprom 30: 00 00 20 40 20 80 02 20 10 01 00 00 00 00 00 00
[ 5749.203857] em28xx #0: i2c eeprom 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 5749.203873] em28xx #0: i2c eeprom 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 5749.203899] em28xx #0: i2c eeprom 60: 00 00 00 00 00 00 00 00 00 00 2e 03 50 00 69 00
[ 5749.203924] em28xx #0: i2c eeprom 70: 6e 00 6e 00 61 00 63 00 6c 00 65 00 20 00 53 00
[ 5749.203948] em28xx #0: i2c eeprom 80: 79 00 73 00 74 00 65 00 6d 00 73 00 20 00 47 00
[ 5749.203974] em28xx #0: i2c eeprom 90: 6d 00 62 00 48 00 00 00 10 03 44 00 56 00 43 00
[ 5749.204000] em28xx #0: i2c eeprom a0: 31 00 30 00 30 00 00 00 32 00 30 00 33 00 35 00
[ 5749.204025] em28xx #0: i2c eeprom b0: 36 00 30 00 37 00 35 00 31 00 33 00 34 00 31 00
[ 5749.204051] em28xx #0: i2c eeprom c0: 30 00 32 00 30 00 30 00 30 00 31 00 00 00 32 00
[ 5749.204075] em28xx #0: i2c eeprom d0: 33 00 31 00 32 00 33 00 00 00 00 00 00 00 00 00
[ 5749.204100] em28xx #0: i2c eeprom e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 5749.204123] em28xx #0: i2c eeprom f0: 00 00 00 00 00 00 00 00 0a 07 d4 04 31 62 5d 0e
[ 5749.204150] EEPROM ID= 0x9567eb1a, hash = 0x72aaae84
[ 5749.204153] Vendor/Product ID= 2304:021a
[ 5749.204156] AC97 audio (5 sample rates)
[ 5749.204160] 300mA max power
[ 5749.204163] Table at 0x06, strings=0x1098, 0x2e6a, 0x0000
[ 5749.788387] em28xx #0: V4L2 device registered as /dev/video0 and /dev/vbi0
[ 5749.788396] em28xx #0: Found Pinnacle Dazzle DVC 90/DVC 100
[ 5749.788468] em28xx audio device (2304:021a): interface 1, class 1
[/code]

Voilà, c’est terminé, vous pouvez maintenant choisir n’importe quelle application supportant les périphérique v4l. Pensez par contre a refaire un make && make install à chaque mise à jour de votre noyau.

P.S, pour faire ce tuto, j’en ai profité pour faire les tests sur une ubuntu installée sur virtualbox 2, bien pratique pour être sur d’avoir une Ubuntu toute propre.

Xsane et tesseract, l’OCR qui marche très bien sous Linux

Voici comment utiliser l’OCR (reconnaissance de caractères) avec Xsane sous Ubuntu hardy.

Il faut tout d’abord installer Xsane, imagemagick (avec synaptic ou apt-get) et tesseract. Pour installer ce dernier, il faut utiliser le tutoriel situé ici. Faites bien attention à suivre le tutoriel « Par les deb de « b52″ (32 et 64 bits) ».

Afin d’interfacer Xsane et tesseract, il faut un script. J’en ai trouvé un nommé xsane2tess mais il ne fonctionne pas chez moi. J’en ai donc créé un autre que vous pouvez installer comme ceci:

[code lang= »bash »]

cd /usr/bin

sudo wget https://www.equinoxefr.org/wp-content/uploads/2008/07/xsane2tess.pl

sudo chmod +x xsane2tess.pl

[/code]

Ensuite lancez Xsane et allez dans Préférence / Configuration (ALT+s) pour entrer les options suivantes

Xsane

Après avoir validé les bonnes options, il faut mettre les paramètres Sane comme suit:

Xsane

  1. Mode enregistrer
  2. Nom de fichier sans extension
  3. Type de fichier TXT
  4. Mode de scan: GRIS
  5. Résolution: 300 dpi donne de bons résultats
  6. Sélectionnez la zone de texte
  7. La sélection
  8. Effectuez une rotation si nécessaire
  9. Lancez le scan

Voilà, vous avez maintenant un beau fichier TXT qu’il vous faudra vérifier avec openoffice et son correcteur d’orthographe par exemple.

Les résultat sont assez étonnants, j’avais essayé GOCR il y a quelques temps mais j’en étais très déçu. Là, il y a avec tesseract, une véritable alternative aux outils propriétaires.

Bonne OCR 😉

Ubuntu, 3G et Nokia N95 avec Orange

Voici comment connecter très facilement un PC Linux ( Ubuntu 8.04 sur eeepc ) à internet avec un téléphone 3G.

nokia n95

J’ai un nokia N95 qui est parfaitement supporté sur Ubuntu. Pour se connecter, j’utilise le cable USB, mon EEEPC n’ayant pas de bluetooth. Lors du branchement du téléphone, il faut sélectionner le mode

PC SUITE sur NOKIA. Sous Linux, un petit dmesg nous en dit plus:

[code]

[   65.528724] usb 2-1: new full speed USB device using uhci_hcd and address 2
[   65.545353] usb 2-1: configuration #1 chosen from 1 choice
[   67.050935] cdc_acm 2-1:1.10: ttyACM0: USB ACM device
[   67.060398] usbcore: registered new interface driver cdc_acm
[   67.060858] /home/adamm/git/ubuntu-hardy/debian/build/custom-source-eeepc/drivers/usb/class/cdc-acm.c: v0.25:USB Abstract Control Model driver for USB modems and ISDN adapters
[   67.094186] usbcore: registered new interface driver cdc_ether
[   67.104548] usb 2-1: bad CDC descriptors
[   67.104988] usbcore: registered new interface driver rndis_host

[/code]

Pour établir la connexion, nous avons besoin de wvdial.

[code]

sudo apt-get install wvdial

[/code]

Ensuite, pour le paramétrer, créez le fichier /etc/wvdial.conf contenant ceci:

[code]

[Dialer Defaults]
Modem = /dev/ttyACM0
Baud = 460800
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init5 = AT+CGDCONT=1, »IP », »orange »;
ISDN = 0
Modem Type = Analog Modem
Phone = *99***1#
username = orange
password = orange
Stupid Mode = 1

[/code]

Pour établir le lien, branchez le téléphone puis tapez

[code]

sudo wvdial

[/code]

et hop à vous internet mobile.

Je précise que j’ai un abonnement Orange et que ça marche sans surfacturation (Internet Max). Le même principe marche chez SFR (en modifiant le useragent du navigateur) et Bouygues. S’il n’y a pas d’abus avec ces connexions, il n’y a pas vraiment de raison que les opérateurs verrouillent le système.