dinsdag 18 juli 2017

Een DrawBot maken(2): een AxiDraw


Toen ik op internet op zoek ging naar interessante tekenrobots kwam ik ondermeer deze kunstzinnige AxiDraw tegen: mooi én eigenzinnig.

 

  • 3D printen van de onderdelen

Op thingiverse kunnen we de STL-bestanden downloaden om te 3D-printen. Deze versie vereist wel heel veel pruts- en zoekwerk om in elkaar te steken.

Later vond ik een andere versie die toch iets handiger in elkaar te schroeven was: https://www.thingiverse.com/thing:1444216

We hebben van beide versies de stukken reeds geprint. Voor wie het zelf wil doen, hier de uitleg.

Een 3D-printer print geen STL-bestanden maar gcode speciefiek voor de 3D printer die wij gebruiken. De software Cura kan het STL-bestand  omzetten in een gcode-bestand.  Hier wordt uitgelegd waar je Cura kan downloaden en hoe je cura ( versie 15.04.4)  configureert voor onze Vertex printer.

In Cura doe je dan : 'File>load model file' en je kiest een STL-bestand. Er zijn heel wat zaken die kunnen mislopen bij een 3d-print. Het object moet bijvoorbeeld zo gepositioneerd zijn dat er nooit 'in de lucht' wordt geprint. Bekijk dit even met een begeleider voor je verder gaat.

Kijk bij 'Machine' of de juiste 3D-printer (Vertex PLA) is aangeduid en klik dan op 'File > save gcode'.

Dit g-code bestand copieer je dan naar het sd-kaartje van de 3D-printer.

Start de Vertex 3D printer en kies met het draaiwieltje/drukknop:
  1. Init. SD-Card
  2. Control printer > auto home
  3. Print from sd > selecteer je gcode bestand

  • Bouwen van de AxiBot
Het is een heel prutswerk maar de kwaliteit van de constructie is heel belangrijk om straks mooie resultaten te krijgen. Beide websites hebben enkele foto's die je de weg tonen.
In beide modellen worden twee metalen staafjes gebruikt om de pen te laten op- en neergaan en die kunnen we recycleren uit sommige cd-romspelers.


Kijk hier voor de originele versie,


kijk hier voor de latere versie.
  •   uitpakken en monteren Arduino CNC shield
Een overzicht van de aansluitingen vind je in dit filmpje:



Kijk hier voor de 'assembly' van de arduino uno, cnc shield, A4988 drivers en heat sinks (de jumper voor 2 motors op de y-as hebben wij hier niet nodig)

Daarna sluiten we de 2 steppermotors aan op de X en de Y van het arduino cnc shield. De servo motor sluiten we ook aan: rood op 5V, bruin op GND en oranje op z+. En ten slotte sluiten we de externe power supply van 12V aan.

  • Arduino firmware downloaden, aanpassen en uploaden

We gebruiken hier dus een arduino uno (hardware). Om het te gebruiken hebben we de gratis software (arduino IDE) nodig die je kan downloaden  van de officiële website en daarna installeren.

Als je nog nooit met een arduino gewerkt hebt, ga je eerst hier wat leren ledjes programmeren met een arduino uno.

De bedoeling hier is dat we vanaf een pc of raspberry pi "gcode" (zie later meer hierover) doorsturen naar de arduino uno en die gaat de motoren aansturen om een tekening te printen. 

We gebruiken een groot programma op de arduino dat we 'firmware' noemen.  We gebruiken hier "grbl 0.9i with Servo motor support". We downloaden het, unzippen het en copiëren dan de map naar de 'libraries' folder. 
Op een raspberry pi is dat '/home/pi/sketchbook/libraries/. Mogelijk moeten we de map 'grbl-servo-master' hernoemen naar 'grblservomaster'.
We starten de arduino ide, sluiten de arduino uno aan en doen:
  • Extra > Board > arduino uno 
  • Controleer bij Extra > seriële poort of de juiste gekozen is
  •  Bestand > voorbeelden > grblservomaster>GrblUpload 
  • Uploaden
  • een raspberry pi gebruiken

Een raspberry pi gebruiken kan veel voordelen hebben. Het is goedkoop, veel makers-projecten zijn op maat van linux gemaakt ) in windows wordt het helemaal niet gemakkelijker. Bovendien staat het besturingssysteem van een raspberry pi staat op een sd-kaartje. Voor een volledige copie van je systeem en data heb je slechts één sd-kaartje nodig en 10 minuten tijd.
Om het standaard besturingssysteem op je raspberry pi te zetten download je eerst het "raspbian jessie met desktop"-zipbestand van de officiële site: https://www.raspberrypi.org/downloads/raspbian/
Op deze plaats vind je ook de methode om het zipbestand op een sd-kaartje te copiëren.
Raspbian is een versie van Linux speciaal gemaakt voor de hardware van de raspberry pi. Als je nog nooit met linux hebt gewerkt dan kan deze introductie handig zijn.
Om software te installeren en configureren maken we gebruik van een "terminal' waarin we commando's intikken.
Om bijvoorbeeld arduino te installeren is dit eenvoudig: sudo apt-get install arduino

  • gcode verzenden naar arduino: installatie

Een beetje zoals een 3D printer kunnen we ook gcode speciefiek voor onze tekenrobot verzenden vanuit een pc of raspberry pi naar het arduino programma.

Een handig programma hiervoor is  Grbl Controller 3.0. Dit programma draait ook op oude pc's en zelfs op een raspberry pi. Voor windows bestaat er een veelgebruikt alternatief GCodeSender maar dat heb ik niet getest.

Om Grbl Controller op een raspberry pi te installeren kan je deze stappen volgen: lees dit wanneer je problemen hebt met de installatie - ze geven hiervoor enkele tips. Zelf moest ik nog een extra stap toevoegen om het te laten werken, nl. "sudo apt-get install qt4-dev-tools".

Ik herhaal de stappen even (je kan deze commando's gewoon copiëren en plakken in LXTerminal):
  •  sudo apt-get update
  •  sudo apt-get install xrdp
  •  sudo apt-get install arduino 
  •  sudo apt-get install libudev-dev
  •  sudo apt-get install qtcreator
  •  sudo apt-get install git
  •  mkdir github
  •  cd github
  •  git clone https://github.com/zapmaker/GrblHoming
  •  curl http://www.shapeoko.com/wiki/images/6/6a/Coaster.txt > Coaster.nc
  •  cd GrblHoming
  •  sudo apt-get install qt4-dev-tools
  •  qmake GcodeSenderGUIthreads.pro
  •  make (deze stap duurde ongeveer 40 minuten op een raspberry pi 3
Nu kunnen we dus gcode zenden naar de arduino. Maar eerst moeten we dat arduino programma nog juist configureren.

  • Grbl Controller configureren

We hadden een programma ingeladen op de arduino dat de motoren zo instrueert dat er in 3 dimensies wordt bewogen: voor de x-as en de y-as worden de steppermotoren gebuikt en voor de z-as de servomotor.
Een standaard tekenrobot of 3D printer gebruikt 1 motor voor de x-as en 1 motor voor de y-as. Hier wordt voor zowel de x-as als de y-as beide motoren gebruikt. Men noemt dat CoreXY. We moeten daarom de standaardconfiguratie van Grbl Controller aanpassen. 
Op een raspberry pi betekent dit dat we LXTerminal openen:
  • cd /home/pi/sketchbook/libraries/grblservomaster/
  • nano config.h
Er is nu een configuratiebestand geopend dat erg niet-windowsachtig aanvoelt. We kunnen de tekst met de pijtjestoetsen overlopen en zullen uiteindelijk de tekst opslaan met 'CTrl-x' en daarna 'J' (van Ja).
De tekst in het blauw wordt voorafgegaan door //. Dat betekent dat het commentaar is en dus niet actief is. Dat stukje code werd "uncommented".

We zoeken een actief stukje tekst dat begint met "#define HOMING_CYCLE_0  ((1<<X_AXIS) | (1<<Y_AXIS)) en zetten er // voor zodat het blauw wordt en niet meer actief.

We zoeken verder naar een niet-actieve blauwe tekst die begint met "//enable corexy kinematics) en zorgen dat deze 3 lijntjes actief zijn:
#define HOMING_CYCLE_0 (1<<X_AXIS)
#define HOMING_CYCLE_1 (1<<Y_AXIS)
#define COREXY

En dan 'Ctrl-X' en 'J' en <enter>.

We starten de arduino ide, sluiten de arduino uno aan op een usb-poortvan de raspberry pi en doen:
  • Extra > Board > arduino uno 
  • Controleer bij Extra > seriële poort of de juiste gekozen is
  •  Bestand > voorbeelden > grblservomaster>GrblUpload 
  • Uploaden   

  •  gcode verzenden naar arduino:
Om het programma Grbl Controller 3.0 te starten sluiten we eerst de arduino met CNC shield aan op een usb-poort van de raspberry pi:
  • cd /home/pi/github/GrblHoming/
  •  ./GrblController
In het vakje "Commando" kunnen we gcode commando's uitvoeren.
Bijvoorbeeld om de servomotor in te stellen:
m03 s 80 //als het de pen naar omhoog gaat is het goed,  probeer anders andere         waarde kleiner dan 180
m03 / de pen gaat nu omhoog
m05 s 170 // als de pen omlaag gaat is het goed, anders andere waarde <180
m05 // pen gaat omlaag

Als je het tabblad "axis-control" selecteert, kan je de pen met de pijtjes laten bewegen. Mogelijk lukt dat niet en krijg je een foutmedlding: "undefined feed rate". Probeer dan eens volgende commando's in het commando-vakje, eentje per keer:
G1 X1 F40
G1 X-1 F40
G1 Y1 F80
G11 Y-2 F80

Misschien is één stap wel erg groot. Dan kan je de standaardwaarden aanpassen:
$$ geeft je een overzicht van de instellingen, verander ze eventueel in:
$100=80
$101=80

Je kan ook verschillende commando's in een tekstbestand opslaan, bijvoorbeeld met het programma "gedit" van de raspberry pi:
m05
G1 X50 F100
G1 Y50
G1 X-50
G1 Y-50
m03
Sla dit bijvoorbeeld op als testgcode.nc
Wat zou het tekenen?

Op het internet kan je wel gcode vinden speciaal voor tekenrobots met een servomotor, bijvoorbeeld deze:
T1 M6G90 G94
G54 X0 Y0
G00 X0 Y0
G00 X-25 Y20
G91 X-10
G02 X10 Y-10 I10 J0 F200 M3
G02 X-10 Y10 I0 J10;
G90 G00 M5 X0 Y0;
G00 X25 Y20
G91 X-10
G02 X10 Y-10 I10 J0 F200M3
G02 X-10 Y10 I0 J10;
G90 G00 M5 X0 Y0;
G00 X40 Y0
G02 X-40 Y0 I-40 J0 F200 M3
G90 G00 M5 X-55 Y0;
G02 X0 Y-55 I55 J0 F200 M3
G02 X-55 Y0 I0 J55
M30;

Een betere manier is een vector-tekenprogramma gebruiken, bv Inkscape.
Er bestaat een windowsversie, op een raspberry pi doe je:
  • sudo apt-get update
  • sudo apt-get install inkscape
Daarna kan je een speciale extensie downloaden van deze site en die moet je unzippen in de extensions-map van Inkscape. Voor de raspberry pi is dat:
  • /usr/share/inkscape/extensions
Mogelijk hebben de 2 script-bestanden (die eindigen op .py en .inx) niet de juiste rechten. We proberen even deze linux-commando's:
  • cd /usr/share/inkscape/extensions
  • ls turn* -ial // toon de rechten van de bestanden die met turn beginnen
  • als dit bv rw--r-r-- is dan kan niemand dat uitvoeren: sudo chmod 755 turn*
Als we Inkscape nu opstarten kunnen we bijvoorbeeld een geïmporteerde tekening of foto exporteren naar voor onze tekenrobot aangepaste gcode.

Geen opmerkingen:

Een reactie posten