Arduino Laser gravör (8 / 11 steg)
Steg 8: Programvara (Raster gravyr)
När jag designade ursprungligen maskinen, ville jag bara att gravera regelbundna bitmapp bildfiler. Så jag gjorde tre separata program, som när används tillsammans kan tillåta normal bitmappsbilder att vara graverad på trä.C# Program (genererar "instruktion" textfil)
Detta accepterar en bitmappsfil och utgångar en textfil, som innehåller "instruktion tecken". Bitmapp typ det accepterar är en 24-bitars bitmapp, med bara svarta och vita pixlar (ingen greys / färger). Programmet analyserar bitmappen, Skanna rad för rad för de svarta pixlar som ska graveras. Först det söker igenom den översta raden vänster till höger och sedan droppar ner en rad, skannar höger till vänster, droppar ner en annan rad, skannar vänster till höger och så vidare, tills den sista raden är skannas. Det kan hoppa över tomma pixlar på kanterna av rader och kan hoppa över tomma rader. Också, eftersom de Arduino seriell buffert begränsningarna, programmet delar upp textfilen i kommaavgränsade "instruktion block", som är under 64 tecken lång. Dessa numeriska instruktioner tolkas av Arduino (se Arduino skiss avsnitt för detaljer).
Detta program fungerar bra för mindre bilder (t.ex mindre än 1000 x 700), men får köra fast med större bilder som har massor av brända pixlar (kan ta över 10 minuter för att generera filen instruktion).
Det sättet att det här programmet skannar bilden bär över direkt till hur maskinen gravyrer bilden. Arduino använder filen instruktion för att göra maskinen gravera bilden radvis.
Prova på kommatecken separerat instruktion block (för att se vad siffrorna betyder, rulla ned till avsnittet Arduino skiss):
111111111111111111111111115555555555555555555555555555555555920,
019201920192010101010101010101010101010101010101010101010101010,
010101010101010101010101010101010101010101010101010101010101010,
0101010101010101010101010192019201920,
11594039403940394039403940303030303030303030303030303030303030,
030303030303030303030303030303030303030303030303030303030303030,
0303030303030303030303030303030394039403940394039403940,
Körbara är längst ner på sidan
Bearbetning IDE skiss (strömmar instruktion data)
En enkel bearbetning skiss skapades för att stream innehållet i anvisning fil.
Du kan få behandling från här: http://processing.org/
Data strömmas via en virtuell serieport anslutning till Arduino. Skissen skickar kommaseparerade instruktion block, ett kvarter i taget, med en fördröjning mellan blocken. Dessa förseningar beräknas vid körning, baserat på innehållet i varje instruktion block. Fördröjningen behövs för att säkerställa att bearbetning skissen inte skickar nya instruktioner till Arduino innan tidigare instruktioner har körts. Om detta inträffar, kommer att graverade bilden vara skadad, så timing värden används i bearbetning ritningarna och Arduino skiss har förenlig.
Bearbetning skissen ger också ett framsteg ställningen, genom att räkna det totala antalet instruktion block, och kontinuerligt rapportera hur många instruktion block har skickats till Arduino.
Skissen är längst ner på sidan
Arduino skiss (Interprets instruktion data och kontroller hårdvara)
Arduino skiss tolkar varje instruktion block. Det finns flera anvisningen tecken:
1 - flytta höger en pixel snabbt (tom pixel)
2 - flytta höger en pixel SLOW (brända pixel)
3 - flytta vänster en pixel snabbt (tom pixel
4 - flytta vänster en pixel SLOW (brända pixel)
5 - flytta upp en bildpunkt snabbt (tom pixel)
6 - flytta upp en bildpunkt SLOW (brända pixel)
7 - flytta ner en bildpunkt snabbt (tom pixel)
8 - flytta ner en bildpunkt SLOW (brända pixel)
9 - aktivera laser
0 - tur laser OFF
r - tillbaka axlarna till startposition
Med varje tecken kör arduino en motsvarande funktion, att skriva till produktionen stift.
Arduinoen styr varvtal genom förseningar mellan steg pulser. Helst, maskinen skulle köra motorerna med samma höga hastighet, om dess gravyr en pixel eller passerar över en tom pixel. På grund av laser-diod begränsad makt, maskinen har dock att sakta ner något när bränning en pixel. Det är därför det finns två hastigheter för varje riktning i instruktion karaktär listan ovan. Jag har för närvarande konfigurerat maskinen att passera över en Tom pixel i 8msoch att passera över en bränd pixel i 18ms.
Arduino skiss styr även bild skalning.
Stepper drivrutinerna har konfigurerats för halv-stepping, vilket innebär att förarna behöver 400 steg pulser per ett varv på motorn, eller 400 steg pulser / 5 mm för linjär rörelse. Utan någon skalning, skulle graverade bilder vara för små för att se.
Jag beslutade att använda en skalfaktor i 8, så att när maskinen flyttas en bildpunkt, 8 steg pulser skickas. Detta kan översättas till 50 pixlar / en revolution av motorn, eller 50 pixlar / 5mm för linjär rörelse. Detta innebär att pixelstorlek är 0,1 mm, eller 254 dpi. En bild som är 1600 x 900 bildpunkter kommer att vara 16 x 9 cm i storlek.
Det bör noteras att även om pixelstorlek är 0,1 mm, pixel plats skapad av laser är större än 0,1 x 0.1 mm.
Skissen är längst ner på sidan