Stap 8: Software (Raster gravure)
Toen ik oorspronkelijk ontworpen met de machine, wilde ik slechts het graveren van regelmatige bitmap afbeeldingsbestanden. Dus, ik maakte drie afzonderlijke programma's, die samen worden gebruikt, zodat normale bitmapafbeeldingen worden gegraveerd op hout.C#-programma (genereert "instructie" tekstbestand)
Dit accepteert een bitmapbestand en uitgangen een tekstbestand, met "instructie tekens". Het type van de bitmap zij aanvaardt is een 24-bits bitmap, met alleen zwarte en witte pixels (geen greys / kleuren). Het programma analyseert de bitmap, rij per rij scannen voor de zwarte pixels die moeten worden gegraveerd. Eerst, het scant de bovenste rij van links naar rechts, dan druppels een rij, scans rechts-naar-links, omlaag druppels neer een andere rij, scans links-naar-rechts, enzovoort, totdat de laatste rij wordt gescand. Het kan overslaan Blanco pixels aan de randen van de rijen, en kan lege rijen overslaan. Ook, als gevolg van de Arduino seriële buffer beperkingen het programma verdeelt het tekstbestand in de door komma's gescheiden "instructie blokken", die onder 64 tekens lang zijn. Deze numerieke instructies worden geïnterpreteerd door de Arduino (Zie Arduino Sketch sectie voor details).
Dit programma werkt goed voor kleinere afbeeldingen (bijvoorbeeld minder dan 1000 x 700), maar krijgt verzanden met grotere afbeeldingen die veel van verbrande pixels hebben (kan meer dan 10 minuten duren voor het genereren van het instructiebestand).
De manier dat dit programma de afbeelding scant voert over rechtstreeks naar de manier waarop die de machine de afbeelding graveert. De Arduino gebruikt de instructiebestand om de machine graveren de afbeelding rij per rij te maken.
Monster door komma's gescheiden instructie blokken (om te zien wat de cijfers betekenen, blader naar de Arduino schets sectie):
111111111111111111111111115555555555555555555555555555555555920,
019201920192010101010101010101010101010101010101010101010101010,
010101010101010101010101010101010101010101010101010101010101010,
0101010101010101010101010192019201920,
11594039403940394039403940303030303030303030303030303030303030,
030303030303030303030303030303030303030303030303030303030303030,
0303030303030303030303030303030394039403940394039403940,
Het uitvoerbare bestand is aan de onderkant van de pagina
Verwerking van IDE Sketch (Streams instructie gegevens)
Een eenvoudige verwerking schets is gemaakt voor het streamen van de inhoud van het instructiebestand.
U kunt krijgen verwerking vanaf hier: http://processing.org/
De gegevens stroomsgewijs wordt verzonden via een virtuele seriële poortverbinding met de Arduino. De schets stuurt de door komma's gescheiden instructie blokken, één blok tegelijk, met een vertraging tussen blokken. Deze vertragingen worden berekend tijdens runtime, op basis van de inhoud van elk blok van de instructie. De vertraging is nodig om ervoor te zorgen dat de Processing Schets niet nieuwe instructies de Arduino verzenden voordat de voorgaande instructies hebt uitgevoerd. Als dit gebeurt, zal de gegraveerde afbeelding beschadigd worden, zodat de timing waarden in de schets Processing gebruikt en Arduino sketch verenigbaar moeten zijn.
De Processing Schets biedt ook een vooruitgangsstatus, door het totale aantal instructie blokken tellen, en voortdurend te rapporteren hoeveel instructie blokken zijn verstuurd naar de Arduino.
De schets is aan de onderkant van de pagina
Arduino schets (Interprets instructie gegevens en besturingselementen hardware)
De Arduino schets interpreteert elk blok van de instructie. Er zijn een aantal instructie tekens:
1 - Beweeg recht door één pixel FAST (lege pixel)
2 - Beweeg recht door één pixel SLOW (verbrande pixel)
3 - links een pixel FAST (lege pixel verplaatst
4 - move links door één pixel SLOW (verbrande pixel)
5 - move omhoog door één pixel FAST (lege pixel)
6 - move omhoog door één pixel SLOW (verbrande pixel)
7 - move neer door één pixel FAST (lege pixel)
8 - move neer door één pixel SLOW (verbrande pixel)
9 - inschakelen laser
0 - beurt laser uit
r - return assen startpositie
Met elk teken loopt de arduino een overeenkomstige functie, om te schrijven naar de pennen.
De Arduino regelt de motorsnelheid via de vertragingen tussen stap pulsen. Ideaal, de machine zou lopen de motoren met dezelfde hoge snelheid, of de gravure van een pixel of passeren over een lege pixel. Echter, als gevolg van de laserdiode beperkte macht, heeft de machine te vertragen iets wanneer een pixel branden. Dit is waarom er twee snelheden voor elke richting in de instructie karakter lijst hierboven. Momenteel heb ik de machine een lege pixel in 8msvoorbij, en een verbrande pixel in 18msvoorbij geconfigureerd.
De Arduino schets ook besturingselementen afbeelding schalen.
De stepper-stuurprogramma's zijn geconfigureerd voor half-intensivering, wat betekent dat de bestuurders 400 stap pulsen per één omwenteling van de motor moeten, of 400 stap pulsen / 5 mm van de lineaire beweging. Zonder alle schalen zou de gegraveerde afbeeldingen te klein om te zien.
Ik besliste te gebruiken een schaalfactor van 8, zodat wanneer de machine één pixel beweegt, 8 stap pulsen worden gestuurd. Dit vertaalt zich naar 50 pixels / één omwenteling van de motor, of 50 pixels / 5mm van de lineaire beweging. Dit betekent dat de Pixelpitch 0.1 mm, of 254 dpi. Een beeld dat 1600 x 900 pixels zullen 16 cm x 9 cm groot.
Opgemerkt moet worden dat, hoewel de Pixelpitch 0.1 mm is, de plek van de pixel gemaakt door de laser groter dan 0.1 x 0,1 mm is.
De schets is aan de onderkant van de pagina