Introduction: True 8bit Photo Engraving on Chinese Laser Cutter - Maybe a Worlds First?

Update 11/04/2016: The new firmware is ready :)
You can download the HEX file here.
To upload it to your Mega2560 please use XLoader.
The program pretty much explains itself: Select hex file, set board and com port, hit upload and enjoy.
All vital values are stored in the EEPROM for easy tweaking like acceleration, jerk, max speeds...


This is an updated addition to my previous Instructable about replacing the Moshi controller.
So if your K40 clone is still a virgin then please head over to the above Ible first for the hardware conversion.

The story so far...
It began with the need to get rid of the original controller to be able to do proper vector cuts and raster engravings.
All this explained in the above Ible in case you missed it.
But soon I noticed that these low power diode lasers can do really good looking photo-engravings.
Ok, what can be easier than doing this on a proper CO2 laser???

That is how the journey to the holy grail of CO2 Laser engraving started....
To understand the problem I have to go bit into the details here, so forgive me for the dry explanations.
Unlike a diode laser our CO2 systems are many, many times more powerful.
And where a diode laser with TTL pulses can cover the full PWM range of 0-255 a CO2 can't do this at all.
Most systems require a minimum power of above 6% for the laser the fire at all.
And to be on the save side of lifetime and problems the max power should be kept under 60% at all times.
So instead of 256 shades of grey - or here power levels, we only have a bit over 50.
Ok, not too bad for simple things...
Wrong...
At least with my machine 6% power means slight burns on wood, 15% already very deep burns if the speed is not high enough.
Trying to engrave a photo with just 9 levels of power between just visible and burnt through is not nice.
After testing a lot of tools, extensions and such I found only one tool being able to generate proper G-code for photo engraving in 8Bit.
It is Image2Gcode but not the outdate version you find quickly through a websearch.
Bryan and Leo69 over at Viscious1 have create a more powerful version of the tool and still update to make it even better!
Please check the above link for the most current version of the program and to leave your feedback.
Only with proper feedback such great tools will see ongoing support and improvements!
Having such a powerful and totally free tool at hand was a great start but to make real use out of it I had to find a way of controlling the power of the beast in more defined ways.
Turnkey Tyranny did a great job with his firmware in terms of documenting it, which allowed me (after some inspiration from our great guys in the forum) to modify the code.

The coding and the problems...
One thing I noticed in the Marlin code was that the PWM signal for the Laser is not controlled in the usual 255 stepping we all now from the 3D printers and spindle speed commands.
Instead Turnkey Tyranny opted for the original 0-100% settings.
Meaning Zero for the power level is zero and 100 is already the max power the tube can provide!
This explains a few things in terms of going up one power level means instead of nothing on the paper the laser burns right trough the paper....
Here is a pic of the best I could do with the limited power settings:


As you can see there are only a few "shades of grey" due to the fact that the power was limited between 6 and 11 and because Marlin does not like decimal digits.

After some testing with a spare Arduino and some LED's I started to experiment with the code for the PWM signal.
If anyone wants to know all the details let me know in the comments and I'll explain more.
Some initial test looked really good so I decided to try to new code on the machine.
Zero still means Laser is basically switched off but the max S level is no longer just 100 or 255, it is increased now to 10000 - yes a one with five zeros.
As a result the PWM resolution is now 100 times more detailed :)

Some example calculations from the original firmware to this one:
If before the laser started to mark wood or paper at S7 it will now start somewhere around 700.
I say "somewhere" as you can now really find the sweet spot between nothing and a barely visible laser mark.
And of course where before at S20 you did you cuttings through play you will now need S2000 for the same result.
For our purpose of engraving:
Let's say at S7 you got enough power to leave a visible mark in wood.
At S10 you already cut through the first plywood layer.
For an engraving you don't won't to go through the first layer, if you need deep engravings you use solid timber instead.
Before we only had 3 power levels to play with, now we can spread this over 300 levels - well enough to fit 256 shades of grey into it ;)

Ok, great! We can do proper engraving now - but how??
Well first off always keep in mind that everything here is based on the Turnkey Tyranny firmware and Inkscape plugin.
This means the machine still does not comply to normal CNC standards as it would when running on GRBL for example.
For me that is perfect as it is easy to to use with freeware alone that I understand to use.
Certainly there are other tools available that claim to do 8bit engravings, Picengrave just to name one comercial product.
But in the freeware region there is not much that can compare to Image2Gcode as linked above.
But since it is not optimised just for our machines there is some manual editing required if you want to place the engraving in a specific place.
Our bed origin is in the upper left, while CNC machine have it in the lower left.
This means our movements are inverted in the Y-direction.
The first step in the program is to flip your image upside down - this way it will be orientated correctly.
Without code modifications the engraving will take place in the top left corner as set by the limit switches.
For this example I will leave it there without code mods.
Load your photo into Image2Gcode and as said flip it.
Pay attention to the size and resolution settings and adjust accordingly!
For small engravings I use a resolution of 0.1, bigger things at 0.2 or 0.25 - this is the distance between the generated laser lines and for a perfect result should match the diameter of your focal point.
The mode of course is Gray scale 8bit.
On the Laser profile tab you can set the parameters you found best after some testburns.
Due to current limitations the speed will not go as high as you are used to - so start with lower power levels as for now I have no found a way to increase the processing speed of all the movement commands (at least nothing easy).
For the below image I used a value of 500 and 755 for low and high power settings.
Speed was set to 3600mm/min to test but I assume the real speed is somewhere around 600-800mm/min - as said still have to find a way to improve the speed here.
The tick box for decimal values was something we tried to get more control over the PWM but Marlin does not support it.
Optimized raster reduces the movements and engravings to areas with laser activity - especially images with large, unengraved areas will benefit from the time saved here.
The profiles are os no use for us right now, so just use "Max" and double check your power values are still the same.
Under the Gcode tab we set the desired feedrate use the "S" parameter for the power settings and the M5 command to turn the laser off.
You can play with the engraving patterns if you like.
After clicking on "Generate file" you open the resulting Gcode in Proterface to send it to the machine - the engraving will happen in the top left corner!
Here are some images of the first (successful) engraving:
Original in grayscale


Engraving before the cleanup, all the burnt ash still in there


Engraving cleaned up


As you can see there is still room for improvement so playing with the power levels to find the perfect match and doing some tests is the current way to go.
If required I might change the firmware again and check if full 16PWM encoding is possible to, this would give even more than 10000 steps for the PWM signal.


Right now it is a good alternative to getting a diode laser if you want to do more than just engravings or work with quite thin materials.
A decent diode laser module with power control (including TTL and PWM) will cost almost the same as one of these K40 clones.
So you get the enclosure and some more or less good working exhaust system free.
With the more controlled power brittle materials like glass, ceramics or some stones should get better results now too.
Simply dial down the power until the amout of splitting is reduced to a minimum.
Using the M649 command in the Gcode to set pulse mode operation also helps a lot here.
Just do some tests with different pulse rates through the Inkscape plugin to set one laser dot next to the other without creating a full line.

Step 1: Image Preparations and the Use of Image2Gcode

As you could see in the previous step, the orignal image was modified so the background is just white - white means nothing to engrave ;)

Depending on what look you are after you either use quite low power settings to just char the wood or you burn a bit deeper into the material for a lithopane like effect.
The color of the image also depends on the material you use, in this example it was just 3mm plywood.
I ran out of testblocks but noticed that for deeper engravings a fine grained wood with very low resin content is best.
Pine and some hardwoods, especially here in AU, contain a lot of resin and grow very fast.
So you end up with different densities for the wood and even in pulsed operation it is very hard to get the same result in all different grain areas.
If you just char the wood it is best to secure the ash with a thin layer of hairspray to prevent it from fading away.
For longer lasting result use some clear spray paint after this.

Resolution and number of colors...
The image resolution does not need to be higher than what your machine can engrave.
So using the 4K images directly from your GoPro might be a bit of overkill.
At moderate power levels I get a spot size of around 0.12mm, smaller for fast moving lines though.
If we convert this into a DPI value we get just over 210DPI.
With a finely tuned machine and fast enough movements you might get the spot size to around 0.08mm or just over 315 DPI.
With that in mind you only have to consider how big you want to engrave, example:
Your photo is in 600DPI with a size of 20 by 15cm.
You want to want engrave this only 4cm wide instead of 20.
To make it easier for Image2Gcode you would resize your image to 300DPI with a width of 4cm.
In the oppsite case, with the image being 600DPI but only 4 by 3cm you can simple enlarge the pic in Image2Gcode as there is enough detail and for enlarging on such a scale you don't need to generate a new image.
Since we do only 256 shades of grey the image should be saved as such and not in 16bit or more.

Considerations for better results...
You want to do some simple tests first to tune your power settings.
With now 10000 levels between zero and full there is plenty of room to play.
In a perfect world you want no engraving at all for everything white and the desired level of burn for total black.
Easiest way to do this is by using one of the many greysacle calibration patterns available within graphics programs or on the web.
If in doubt quickly make your own in boxes with 10% increments for the brigthness level for black to white.
Please keep in mind that we burn the material, so for most organic things this means material is being removed.
To only get a greyscale image without burning into the material means using very fine power settings - still very hard at our power levels.
In most cases it also pays off to increase the brightness of the picture before processing, either within Image2Gcode or in your favourite photo editor.

Using Image2Gcode....
I assume you are happy with your image so far and that the unwanted background is removed.
Load your picture into Image2Gcode.


As you can see I already flipped it and increased the brightness a little bit.
Orientation is set to the lower left, meaning the engraving starts there and goes up in the machine - but feel free to play with your own settings.
Note that I set the resolution to 0.14 - it is a good compromise between possible speed and higest resolution of the machine.


These are my current settings for engraving in plywood.
If you tick the box for "Optimized raster" you can set a threshold for elimination of white areas.
This means the laser wont even move over these areas saving a lot of time.
Pay attention to the power levels! If you change the profile these values will change, so double check before you continue!
As you can see I operate between 550 and 805 - of 10000 possible.
Change to the old firmware options this would be between 5.5 and 8.05% - but now with 255 different power levels ;)

In the Gcode header I have added some values to set my image into the area of the clamping window instead of the top left corner, this header will replace some of code generated by the program but more on that in a bit.
For the Laser on we use the "M03 S" command and to shut the laser off the M5 command - these relate to the spindle speeds in a normal CNC setup.

Here is the resulting Gcode, without the additions in the header field:


I don't want a box around my engraving, so actual code for it starts at line 21.
In line 12 and 12 you see some mess with the coordinates, this bug should be fixed soon.
But for my purpose the entire section between line 1 and 21 is replaced with what is defiened in the header section, so some manual labour with Notepadd++ or your favourite editor is required.
When done and ready for our machine it looks like this:

As you can see I also fixed problem with in line 22 with the two commands in a single line.
If you use this as a template so to speak you should be fine.

The changes are quickly done in Notepad++ so it pays off to do some tests with lower power settings on a piece of cardboard to get the alignment right before you start burning on the real thing.
To engrave the picture use your favourite Gcode sender like Proterface, Repetier or a dedicated sender - optional if you have the display added you can load the file from the SD card.

Step 2: The New Firmware...

At this point I will only provide the Hex file that is optimised for the K40 Laser cutter clones.
All important things can be changed over the EEPROM settings, use M501 to show them in Pronterface for example.
Adjust acceleration, and jerk to what your machine can handle without loosing steps.

Once I got some more feedback on how this firmware performs I will provide the source files or fork them on Github so everyone with a diode laser or other machine setups can use it as well.

How to flash the firmware:
First make sure you selected the right Com port and board in the Arduino IDE settings.
Next load the EEPROM clear sketch and change the 512 value to 4096 - the size of our memory.
Upload the sketch to clear all EEPROM settings - this is vital to prevent problems, if something does not work right after the flashing it is usually because of missing this step.
Now exit the IDE and star Xloader, if you don't already have it you don download it here.
Usage explains itself:
Load the HEX file, select the Arduino Mega2560 and your Com port and click on upload - done!

If you prefer to use the AVR Studio enviroment you can do so as well.

Step 3: Some Samples of the Engravings I Tried So Far

As before on 3mm plywood:

Same image but on 4mm borosilicate glass:


Glass was a weird thing to engrave as the massive laser power meant in contious wave mode the broken glass pieces were fused together with the next laser line, creating a look like broken safety glass with the image in it.
Took some careful tuning to get the power levels just right but only by using a pulsed laser mode proper results could be seen.
This is almost to my liking ;)



As a funny fact I broke my first glass plate in continous wave mode as the glass was overheating and got more and longer stress cracks with every new line.
I guess the same will happen with hard and brittle materials like granite or slate.

Did a short and bad test on a little piece of clear acrylic only got a melted surface.
IMHO a very short focal lens is required here and very short but inense pulses.
This way the material will be evaporated instead of melted without shooting through.
But not planning anytime soon to get special lens for something I might never need.

Still to follow is some marble but I need to get a cutting disc for my grinder first as the slate is too big for the machine.
Anodized aluminium should be no problem either but I guess on this material a rastered bitmap is to be prefered as the colored layer is ultrathin and I doubt it is possible to adjust the laser levels fine eough for proper results.

Step 4: Customized GCode Generator for the K40 Clones

I did some digging in the Image2Gcode program and changed a few things.
The result is that the filesize of the Gcode file is now quite a bit smaller and the code more to the liking of the Turnkey Turanny Firmware.
The program is linked for download here, so just some hints on the best (IMHO) usage:

When you load your image into the program increase the brightness by 10% and reduce the contrast by 10% - otherwise totally black areas might not be engraved!
If you want the image to be engraved as loaded you need to flip it - this is because of our different homing layout.
Resize as required and double check the aspect ratio box is ticked!
A resolution of 0.12 works quite well, bigger engravings might need a higher value here as otherwise Pronterface complains about memory issues.
Orign set to the top left corner. (We need this for the offset later on!)
For the laser profile tab you have to find the best power levels for your material, cardboard seems to work great with 730 and 985.
Make sure the box for "Optimized raster" is ticked , set the threshold to 0.
In the Gcode tab we set a new orign for the engraving to get it out of the top left corner in the header field:

G92 X-135 Y-50
Means the engraving starts from these coordinates plus the height of the image.
For a 50x60mm engraving this means the image will be located between X135 / X185 and Y50 / 110.
Keep in mind here that we use the top right corner to start the engraving, but as our X-axis moves down and not up the numbers seem a bit weird at first.
Play with it and they soon make sense :)

In the footer we add

M5
G28 Y X
This makes sure the laser really is off and that the head moves into the home position.
And as usual we use the "S" parameter, "M03 S" and "M5".
Last but not least make sure to select the "horizontal scanning" as I still struggle to implement the changes properly to the diagonal scanning pattern.

Engrave as usual but make some tests before starting on the expensive things!




Step 5: Coustom, Custom and More Custom Work ;)

I finally complete the works on the firmware to allow vector- , raster- and 8bit-work.
For the 8bit engravings there is still Image2Gcode required but I optimised the last release to create better usable code for the china clones.
It was quite some hard work as some of the required changes turned out to be quite hard to realise.
Here is a little video showing all three laser modes in a single job.
Where the china original had only limits and problems it is now possible to do quite good work with the machine.
Keep in mind all is freeware and no commercial software is required for all of this.
This means you are not limited anymore.
Sure some things like automatic alignment of parts through the software, adjustable focus / work platform height and the safety mods are still missing - but it finally works like a 4000$ machine :)

Since there is no real feedback in my two K40 laser Instructables I assume either noone uses these mods or that everyone is just happy with it.
So if you want the latest firmware release or the source code - or the modfied Image2Gcode program then please pop a comment and if possible include a pic of your machine.
Would also be nice for the stats if you click the "I made it!" button ;)
Customised display welcome messages are an option too ;)

Comments

author
Mr.D4 made it! (author)2017-06-03

Excellent work, mate! Thanks so much for the hard work!

Just one question,

Whenever I try to engrave raster images it is just a solid lasered line for every single line. Vector works fine, but if i want to engrave anything, no matter how much grey, black or white there is, it will be completely black.

I have included pictures if it helps at all. The screenshot is what it should be and the outcome is the next pic.

Your thought would be much appreciated thank you!

20170604_015018.jpg20170604_015106.jpg
author
Downunder35m (author)Mr.D42017-06-03

Nice to see another one enjoying the "upgrade" :)
Is the outcome always the same or does the engraving change with different minimum and maximum settings?
I suggest to raster a black block starting with the lowest setting, increase until you just see the laser actuall darkens the paper/cardboard a little bit - this is your low setting for raster engravings.
The max setting should be so that the paper/carboard goes really dark without burning away.
For wood or other materials adjust accordingly.

It is possible that your tube/power supply offer much different energy densities compared to mine.
In that case you would have to adjust the minimum setting in the firmware where the calcultaions for the gray vales are remapped.
But try the above first.

Last but not least try to use a grayscale test image to these calibrations, it really helps!
If in doubt make one with 8 values from 0 to 255 for the pure basics and search Google for one with 32 or even 256 different levels for the finetuning - the later might need some tweaking in the above firmware section.

author
Mr.D4 (author)Downunder35m2017-06-04

Thanks for the reply!

You were right!!! I had to adjust the intensity to 1% and set the PPM to .02.

Seriously thank you for helping me and the entire open source community, you're the best!

author
Downunder35m (author)Mr.D42017-06-04

Good to know I still remember a few things from what I have done :)
Once you got the basics down for the 8bit engravings you should follow my footsteps in terms of using a text file to record your settings and materials used - or better use a database and include pics from before and after.
This really helps to establish baselines and troubleshooting.
But please be aware that you are not dealing with a diode laser but instead CO2!
Where a diode laser would char the wood at max settings a CO2 already vaporises the material at very low settings.
All organic materials are affected this way on a CO2 system and finding the "sweet spots" for photo engraving can be very time consuming.
For example: To get my engravings to work properly on glass I wasted about 28 glass panes.
And that is 20x20cm and all engraved with many small pics until I got it almost right LOL

author
trichard3000 (author)2017-04-14

Hi, I'm having a frustrating problem with my Z-table.

My table homes properly with a "G28 Z" command. I can adjust the Z height using the Move Axis menus and it moves accurately. However, if I use Move Axis, then for any G0 code I issue afterwards (regardless of Z value or whether or not Z is even specified like "G0 F150") it returns the Z axis back to the homed/zero position.

I suspect the Z value is getting accidentally zeroed out in the code somewhere but I'm too much of an amateur coder to figure out where it might be happening.

I also could be mis-configuring my Z-axis in general, because I really don't know what's expected. On a printer, increased Z means increased distance between the head and the bed. I set my Z-table up the same way with a Z-min endstop at the top of the Z-table's travel and homing to it. Increased Z moves the table down. This looks like it may be the opposite of what the Laser Focus menus expect, so I'm second guessing this approach. I'm not sure why this would cause a return to zero on any G0, though.

Everything seems okay until I send real gcode, then the Z-axis returns to zero. If it makes a difference, the return to zero happens in coordination with a corresponding move on another axis. Put another way, it doesn't return to 0 first and then execute XY moves, it moves X/Y at the same time that Z is moving to 0.

I've done a ton of searching and there's just not that much info about Z axis issues with laser cutters out there. Any help on this is greatly appreciated.

Thanks!

author

I did not activate a moving build platform inmy code, nor did I ever test it.
So can't really give much help for that.
If you mean a fixed table and a homing problem then it will be either in your Gcode or the setup for the printer software.
A fixed offset means it stays active all the time, so the axis moves up or down first, then to the start position for the print.
An offset in the Gcode will be handled differently depending on the placement and where/how the homing is performed.

author

Okay I believe I found the bug. I don't know what other effects this might cause yet but my z-table is working properly now. In MK-Main.cpp at the beginning of the G-Code Functions section, you changed the first For loop in gcode_get_destination() from:

for (int i = 0; i < 3; i++) {

to:

for (int i = 0; i < Z_AXIS; i++) {

When I instead use:

for (int i = 0; i <= Z_AXIS; i++) {

... everything works as expected. If you aren't using a z axis, everything else would work normally so it's understandable that you wouldn't have seen this.

The only other changes I made were in in the ultralcd.cpp menus.

Under the Auto Home section of lcd_prepare_menu(), I added Z to the G28 command in the MENU_ITEM.

In the laser focus menu, I changed the laser_set_focus() function to match my z axis direction by changing:

float focus = LASER_FOCAL_HEIGHT - f_length;

to read:

float focus = LASER_FOCAL_HEIGHT + f_length;

and for these commands to enqueue properly, in the same function change:

enqueuecommands_P(cmd);

to:

enqueuecommand(cmd);

Again, without a Z, you'd never bump in to any of this. Unfortunately it's going to be a week or two before I can circle back to testing the actual engraving workflow but I can't wait to give it a test!

Thanks for your hard work on all of this!!

author

Thanks for working this out, I guess other people reading this will like your findings!
Might be a good idea to upload your code to Github or a filesharing site in case someone would like to try your code.

author

I'm definitely a git newbie but once I get through testing your whole workflow and making sure I didn't break something else, I may do that. For now, anyone trying to solve this particular issue at least has some breadcrumbs to follow.

Having a Z table adds a lot of flexibility. For instance, I have a simple test pattern gcode file that draws 10cm lines, each at .5mm extra z depth. I can dial focus in more precisely and the settings are very repeatable. I can also do multiple cuts at different focus depths for thicker or difficult materials. For your 8-bit etching approach, it seems that using a slightly higher power setting while a bit out of focus could produce a more airbrushed look. Z control let's you play with this kind of stuff.

This is pretty minor compared to your accomplishment, though! I've already downloaded your version of image2code and I'll give it a shot as soon as I can dig back in to this.

Thanks again!

author
AlexH18 (author)2016-09-09

Ok. So I got this up and running on my K40 using your hex file which is great. Thanks for your hard work. Seems to work fine with the limited tests I've done. I was previously using a self customized version of Marlin and it worked okay but I wanted to try it out with your changes. My main issue is that I am using a Reprap Discount Smart Controller and it doesn't work at all after updating with this firmware. Obviously this is just a matter of changing the appropriate settings in your firmware. I downloaded a copy from your github and attempted to compile it with no changes, I'm getting the following errors:

ccPq8iPm.ltrans0.ltrans.o: In function `main':

ccPq8iPm.ltrans0.o:(.text.startup+0xe0): undefined reference to `setup'

ccPq8iPm.ltrans0.o:(.text.startup+0xe8): undefined reference to `loop'

collect2.exe: error: ld returned 1 exit status

exit status 1

Error compiling for board Arduino/Genuino Mega or Mega 2560 256.

I'm using Arduino 1.6.11. Any ideas?

author
DawidC7 (author)AlexH182017-02-25

Can you tell what have you changed to get that display working please ?

author
Downunder35m (author)DawidC72017-02-25

The assignment for the display type in the configuration files.
Standard procedure on Marlin firmware.

author
Downunder35m (author)AlexH182016-09-09

I am using the 1.6.8 Arduino IDE and there are no problems compiling.
The errors you see usually come from an incompatible IDE version or missing libraries, like U8Glib for the display stuff.
Also please keep in mind that for standalone usage the Arduino still needs a power supply due to the changes on the RAMPS board.

author
AlexH18 (author)Downunder35m2016-09-09

I'll try 1.6.8 and see if I get a different result. I'll also double check that U8Glib is still installed. As far as power goes, I didn't even have the board connected. I got these errors on verify/compile, not upload.

It's a weird one though huh? I've never seen these errors and everything I find is talking about the project being named Main and that being the root cause...But that's not the case here! Thanks for your help, I'll let you know how it goes.

author
AlexH18 (author)AlexH182016-09-09

Well, it compiles fine with 1.6.8. Not sure what they changed in 1.6.11, but it breaks your code. Maybe you or someone else will grab 1.6.11 and verify they have the same problem?

author
Downunder35m (author)AlexH182016-09-09

It is more common than you think.
A lot of code only compiles without errors if you use the right version of the IDE and plugins.
I have an older Marlin release that will only compile correct with the 1.05 version and nothing else.
Other programs require that you manually load a specific library instead of using the built in one(s).
I gave up on finding out why and if I get code that won't compile I first try with a different version of the IDE before even looking at the code to find a problem.

author
RobertS319 (author)2016-12-18

Hi, first I would like to say a huge thank you to the work that you
have done and put together for us to follow. I have now followed both of
your indestructible's and have the set up working almost perfectly. For
some reason however if I compile your latest source from https://github.com/Downunder35m/MarlinKimbra-K40

The K40 always burns at the same power setting, no matter what i set in the inkscape layer name.

Your
precompiled hex linked above works perfectly but I cant jog properly on
the LCD panel. This isn't really that much of an issue at the moment
but I can see it being a problem when and if I want to print from an
SDcard in the future. do you know what the changes made where, in the
precompiled hex and the latest github source?

many thanks

author
jenov (author)2016-10-28

I only have access to a 250mw LD over my place. It is kind of restricted to get higher power LD. I had tried engraving a photo on wood using the image2gcode software but it turn out that the whole engraving is the same tone. I think I am missing the TTL driver to have toning. Still looking around if I can do something with the ramps D9 output to around 5V to drive the LD. That way I can PWM with M106 S for the toning. Not sure but I hope it can be done.

author
jenov (author)2016-10-28

That will be great and I will for your update and test. I am thinking with the higher PWM resolution,the print out will be nicer? :)

author
Downunder35m (author)jenov2016-10-28

It highly depends on the material and laser.
For example glass still looks a bit better if a bitmap raster is used at equal power levels.
On the other hand getting more or less realistic 2.5D engravings only works with enough power levels to correspond to the shade of gray.
The main difference to standard approaches is that with the higher resolution in the power levels it is no problem to map the 256 different shades to power levels in the mid range.
So instead of always having 0 for no power and 255 for max power you can actually finetune so your engraving starts with a power level where the laser is actually doing something.
Same for the other end, if full power just burns everything...

author
jenov (author)2016-10-28

I see and also can I know which version of Marlin is that? I am currently using 1.1.0 RC7.

author
Downunder35m (author)jenov2016-10-28

Not quite sure, same for the relevance.
As said, it was created for laser works and here it works just fine.
When I find enough time the project will be updated to the latest Marlin - if there are any real benefits by doing so.

author
jenov (author)2016-10-27

Can I know if this modified Marlin file still work on a 3D printer? I do not have a laser cutter. I just want to mount a laser diode to work on my 3D printer when I want to do some engraving and switch back to 3D printer when I need to print 3D model. Thanks

author
Downunder35m (author)jenov2016-10-27

In theory it should work just fine but I never tried it as I don't have a spare printer to test.
But of course you would need to adjust the firmware to the needs of your printer.

author
timberwolfl (author)2016-10-24

Some images I did :) Grain direction is important to the final look. I prefer having the grain in line with the direction of the laser raster. Also had to increase the brightness a few steps in order for the solid black areas to show up.

IMG_20161022_211937592.jpgIMG_20161022_212138513.jpgIMG_20161023_221651571.jpg
author
Downunder35m (author)timberwolfl2016-10-24

That looks really great!
Thanks for posting the pics!

author
timberwolfl (author)2016-10-22

I've been playing around with rasters and for the most part it's going great. My one issue is that the Image2Gcode program seems to be treating pure black the same as pure white and assigning those areas the same power level. This leads to strange looking engravings :P Any thoughts on if I'm doing something wrong?

author
Downunder35m (author)timberwolfl2016-10-22

I can tell you it does not.
Without knowing what you entered I can only assume your power levels are not matching up.

author
timberwolfl (author)Downunder35m2016-10-23

Yeah, I figured I did something dumb. Later today I'll try and get you the image, output g-code, screenshots of my settings, and a picture of the output. If you have a chance to take a look over it. Thanks for the reply.

author
timberwolfl made it! (author)2016-10-01

Hi there! Followed your previous instructable a while back to add in an arduino controller. Lovin the laser cutter. Lots of fun making things. My next step is to switch to your latest firmware to try some engravings. Any new changes in the last few months to the firmware or Image2Gcode program that haven't been added here? Also, I'd be interested in an instructable on the customized display welcome messages :) Keep up the good work and thanks!

Laser.jpg
author
Downunder35m (author)timberwolfl2016-10-01

Currently I am a bit limited on my free time due to a new job and quite odd working hours.
My plan is to try some firmware changes good people made on the project and if they turn out to be better than what is currently possible to implement them.
However, the hardware is reaching the limits even with base64 enconding in terms of possible speeds.
I only mention this as I had some request in this regard refering to commercial machines running completely different hardware to reach engraving speeds over 10 times as fast as this here.

IMHO the speed race is good for those doing a lot of (commercial) work with their machine, like selling art or models.
For plain cutting there is no benefit at all.
But even with higher speeds for the engraving process I personally have my doubts in terms of real life benefits.
Higher speeds also mean higher power levels.
Sadly these chinese machines have no guarantee on how long the tube will last.
Some only get a few days out of them before they fail, others a few years.
For this reason I wanted to try a slightly different approach to the power settings.
Instead of a PWM signal that switches between full power and zero at very fast speeds my attempt was to generate a DC voltage that corresponds to the set power level.
Sadly it only worked half decent for cutting jobs but not for engraving as the power changes for 8bit engravings happen too fast for a discreet logic and everything else I tried caused a delay.

The current firmware is available on Github and as long as noone uses it in any way or form to make profit from it feel to make your own modifications.
But please keep the feedback here and contribute by making a request on Github if you made major changes that would benefit everyone.

author
timberwolfl (author)Downunder35m2016-10-02

Thanks for the update. I understand the busyness of life; work always gets in the way of play... I'm just a hobbyist with my laser, so faster engraving won't make too big a difference for me. I enjoy making dividers and components for my board games mainly. And it's fun to say when people ask where I got it that I made it myself.

Found the firmware on github. I had the same issue as another fella here and had to use Arduino 1.6.8 to get it to compile, which is no big deal. My first challenge was to turn off the beeper on the Smart Controller :P Being a level 0 programmer, I went into the 35.h board profile and assigned the pin for the beeper to -1. Let me know if you have a more elegant way as I wouldn't mind a beep for errors or whatever, I just didn't want them while navigating the menus. Was driving me a little crazy.

Good luck with the new job!

author
magikshow (author)2016-07-20

как поменять шаг двигателя?

author
Downunder35m (author)magikshow2016-07-20

Sorry, please stick to english!
If my translator is correct than you want to change the stepping, this is done in the firmware or through corresponding Gcode.
If you enter M501 as a code Pronterface will show the stepping and codes for it together with all other vital parameters.

author
magikshow (author)Downunder35m2016-07-21

here's my power supply

drawwhere the wires connect?

please!

my pb.jpg
author
Downunder35m (author)magikshow2016-07-21

Please provide the markings on the circuit board for the plugs in the picture and if you can from the controller as well.
Without them it is next to impossible to tell as you got yet another different model for the power supply.

author
magikshow (author)Downunder35m2016-07-21

On your photo the same power supply. Please draw your circuit connections! On Board not signed connectors (

author
magikshow (author)Downunder35m2016-07-20

how to enter the code to adjust the revs per centimeter ? у меня примерно 101

author
magikshow (author)magikshow2016-07-20

I have about101with respect to x and y

author
Downunder35m (author)magikshow2016-07-21

http://reprap.org/wiki/G-code#M92:_Set_axis_steps_...

But as said, if enter M501 in Proterface it will give you the current values.
There are also calculator in the Reprap community to aid with the values but I prefer calipers and adjsuting manually if required.
When you set new values with the M command you need to enter M500 next to store the new values into the EEprom, otherwise they will be back to default with the next start of the machine.

author
magikshow (author)Downunder35m2016-07-21

what is the commandto change the stepof the engine?

author
TroyO (author)2016-03-03

That is amazingly fantastic. Great work! I'm ordering my toys soon and will most likely be doing a RAMPS upgrade shortly thereafter. This proves the potential is there, and that it can be done.

Thank you for the detective work, and sharing of both this and the primary RAMPS upgrade intractable, they both are great and greatly appreciated too!

author
Downunder35m (author)TroyO2016-03-03

Thanks for the feedback!
It is always nice to actually hear that people find some of my work useful here :)

About This Instructable

5,935views

20favorites

License:

Bio: I like to improve myself and things I find :) Learning new things every day is next to impossible but I still try - only a working ... More »
More by Downunder35m:X96 (S905x) Android TV Box - Updating the Firmware and Costom RomsThe Paracord Stubbie HolderMy Little Paracord Splicing Guide
Add instructable to: