Arduino Laser Engraver

by:Qingyu     2020-03-01
Before I started the construction, I made the CAD model of the machine to make sure everything fit and to determine the size of the part.
Some screenshots of the machine CAD model are above. The y-
The shaft is at the bottom of the machine, providing a moving base for the carving. The x-
The shaft is at the top, moving the laser assembly (
Laser is not shown in the model).
The machine uses ballscrews and linear bearings to control the position and movement of the x and y axes.
The specifications of the ball screw and accessories of the machine are: 16mm ball screw, 400mm length (
462mm including processing end)
5mm pitchC7 precision grade BK12/BF12 ballscrew bracket I chose to use ballscrews (
Minimum rebound)
Rigidity and efficiency.
Since the ball nut consists of the ball bearing rolling on the track and the ball nut, the friction is small, which means that the motor can operate at a higher speed without stopping.
The second photo shows the test accessories for x-axis.
The two sides of Ballscrew are linear bearings on the steel shaft.
This configuration is quite common for cnc machines, providing a stable foundation for the substrate (Y-axis)
And laser components (X-axis).
The parts I use are: 16mm hardened chrome plated shaft, 500mm length (qty: 4)
16mm linear bearing-SC16LUU (qty:4)
16mm Axis support-SK16 (qty:8)
The rotation direction of the ball screw nut locks the aluminum used (
That\'s how we spell it in Australia! )
The angle of the moving part connected to the axis.
This can be seen in the last photo that shows y-axis.
The base plate is fixed on two linear bearings and fixed on the ball nut (
Through the aluminum corner).
The rotation of the ball screw shaft causes a straight line movement of the substrate.
Ball screw bracket and shaft bracket mounted on 50mm x 50mm hollow aluminum column.
These pillars are used for all the main structural components of the machine, and are actually aluminum fence pillars (
If someone is from Australia, buy at Bunnings).
The thickness of aluminum is about 2mm.
I chose to use these pillars because they are easy to cut and drill holes, and also maintain their shape well when supporting heavy objects.
Also, since they are square, they provide a good reference surface to make sure things are parallel/vertical.
These holes are drilled with cordless electric drills, and the columns are cut with a herringbone saw. (
Can also cut aluminum column with steel saw).
M5 plug-in screws and M5 nuts are used to hold most of the parts together.
Since I wanted everything to be adjustable, I did not use the permanent fastening method.
The use of screws also means that the machine is easy to disassemble and modify for future upgrades.
Above are some pictures of the frame being built.
Foundation of Y-
The shaft is made by a few A4-sized 4.
5mm thick transparent acrylic sheets.
After using some bad results in the previous design, I decided to use some Japanese 23 motors with decent torque ratings for this machine.
Powerful stepping motors also require powerful drives to make the most of them.
So I chose to use a dedicated step driver for each motor.
Some details about the selected components are as follows: stepping motor (qty:2)
Frame size is 1.
8. maintain torque (255 oz-in)
Step 200/Revolution (1.
8 ° step angle)Up to 3.
Current weight-1. 05kg (
It\'s really heavy! ! )
Bipole 4 wire stepping driver (qty:2)
Digital step driver subdivision function output current 0. 5A to 5.
6A output current limit (
Reduce the risk of overheating of the motor)
Control signal: step and direction input pulse input frequency up to 200kHz20V-
The DC supply voltage of each shaft is 50 v, and the motor drives ballscrew directly through the motor coupler.
The motor is mounted on the frame using two aluminum corners and one aluminum plate.
Aluminum Angle and thickness 3mm, strong enough to support the 1 kg Motor without bending.
Note: it is very important to align the motor shaft and the ball screw correctly.
The coupler I use has some flex to compensate for minor errors, but they fail if the alignment errors are too big!
The laser diode I chose is 1.
5 w 445nm diode installed in 12mm aixiz housing with a focusable glass lens.
These can be found on eBay, pre-assembled.
Because it is a 445nm laser, the light it produces is a visible blue light.
When operating at a high power level, the laser diode requires a radiator.
I used two SK12 12mm aluminum shaft brackets to install and cool the laser module.
The intensity of the laser output depends on the current through it.
The diode itself cannot adjust the current, and if connected directly to the power supply, it absorbs more and more current until it is destroyed itself.
Therefore, it is necessary to adjust the current circuit to protect the laser diode and control its brightness.
The circuit diagram of my laser driver is on it.
The circuit requires a minimum of 10 v DC power supply and has a simple on/off signal input provided by Arduino.
The LM317T chip is a linear voltage regulator configured as a current regulator.
The potentiometer is included in the circuit to allow the current to be regulated.
The value of the resistor is: R1-1 ohm (3W)R2 -5 ohm (15W)
Potentiometer R3-180 ohm (0. 5W)(
R1 and R2 need to have enough rated power to support the power consumed through them)
R1 and R2 together control the value of the regulated current.
The current output range of the circuit is: R1 R2 = 1 ohm: 1.
25A R1 R2 = 6ohm: month.
21A is a pn junction transistor used as a switch.
The circuit will turn on the laser when the Arduino has a 5 v output.
The circuit will turn off the laser when the Arduino outputs 0 v.
I used the veroboard (stripboard)
Install all laser drive components.
The radiator is also installed on the LM317T and pnp transistors.
Used for connections between different points on the veroboard.
The machine has two separate power supplies due to different voltage requirements.
20 V for stepping motor driver50V DC supply.
The maximum current per step motor is 3.
0A, but the motor does not need 3 during normal operation. 0A.
When they run continuously, I find that they need less than 1A each.
When the motor changes the speed, they usually need less than 2A each.
The power I used to provide two step drives is 100 W lab power, with a maximum output of 36 V at 3A.
The laser driver requires a supply voltage of at least 10 v and a current of at least 1. 25A.
I use the ATX PC PSU as a 12 v power supply.
The laser driver is connected to the PSU via the splitter box I made that provides the standard banana jack for the 5 v and 12 v terminals.
There is also an analog ammeter in the box for monitoring current.
For instructions on how to create the atx psu distribution box, there are many other instructions on this website.
Arduino provides brains for machines.
It outputs step and direction signals for the step driver and laser enable signals for the laser driver.
In the current design, only 5 output pins are required to control the machine.
The picture above shows a chart showing all electrical connections.
One important thing to keep in mind is that the foundation of all components should be connected together.
I used solid core 22 ad hoc wires in signal line and power cable.
For the power cord, the power end is terminated with a banana plug.
When I first designed the machine, I only wanted it to carve out regular bitmap image files.
So I made three separate programs that, when they were used together, could carve the normal bitmap picture on the wood. C# Program (
Generate \"instruction\" text file)
This will accept the bitmap file and output the text file containing the \"instruction character.
The Bitmap type it accepts is 24-
Bit bitmap, only black and white pixels (
No gray/color).
The program analyzes the bitmap and scans the black pixels that need to be engraved line by line.
First, it scans the upper left line. to-
Right, then a row down, scan right-to-
To the left, down the other line, scan to the left-to-
Right, and so on until the last line is scanned.
It can skip the blank pixels at the edge of the row, or it can skip the blank row.
In addition, due to the limitations of the Arduino serial buffer, the program divides the text file into comma-separated \"instruction blocks\" with a length of less than 64 characters.
Arduino explains these digital instructions (
See the Arduino sketch section for more information).
This program works for smaller images (
No more than 1000x700)
, But will be in trouble because there are a large number of large images of focal pixels (
Command files can be generated in more than 10 minutes.
The way this program scans the image goes directly to the way the machine sculpt the image.
Arduino uses instruction files to make the machine sculpt images line by line.
A comma-separated instruction block (
To understand the meaning of numbers, scroll down to the Arduino sketch section)
: 111111111111111111111111115555555555555555555555555555555555920, 019201920192010101010101010101010101010101010101010101010101010, 010101010101010101010101010101010101010101010101010101010101010, 0101010101010101010101010192019201920, 11594039403940394039403940303030303030303030303030303030303030, 030303030303030303030303030303030303030303030303030303030303030, 0303030303030303030303030303030394039403940394039403940, the executable file is located at the bottom of the page Processing IDE sketch (
Stream instruction data)
A simple process sketch was created to stream the contents of the instruction file.
You can get processing from here: the data is streamed through a virtual serial port connected to the Arduino.
The sketch sends a comma-separated instruction block, one block at a time, with a delay between blocks.
These delays are calculated at runtime based on the content of each instruction block.
A delay is required to ensure that the processing sketch does not send a new instruction to the Arduino before execution.
If this happens, the engraved image will be damaged, so the timing values used in the processing sketch and Arduino sketch must be compatible.
The processing sketch also provides progress status by calculating the total number of instruction blocks and constantly reporting how many instruction blocks were sent to Arduino.
The sketch is at the bottom of the page sketch (
Explain instruction data and control hardware)
The Arduino sketch explains each instruction block.
There are several instruction characters: 1-
Move one pixel to the right quickly (blank pixel)2 -
Move one pixel to the right slowly (burnt pixel)3 -
Move a pixel to the left quickly (blank pixel 4 -
Move one pixel slowly to the left (burnt pixel)5 -
Move one pixel up quickly (blank pixel)6 -
Move one pixel up slowly (burnt pixel)7 -
Move one pixel down quickly (blank pixel)8 -
Move one pixel slowly (burnt pixel)9 -
0-turn on the laser
Turn off r-laser
Arduino runs the corresponding function to return the axis to the start position of each character and write it to the output pin.
Arduino controls the motor speed by the delay between stepping pulses.
Ideally, whether it is engraving pixels or passing through blank pixels, the machine will run the motor at the same high speed.
However, due to the limited power of the laser diode, the machine must slow down slightly when burning pixels.
That\'s why there are two speeds in each direction in the command character list above.
Currently I have configured the machine to pass blank pixels in 8 MS and pass burnt pixels in 18 MS
The Arduino sketch also controls image scaling.
The step driver is configured as half
Stepping, which means that the driver needs 400 step pulses per turn of the motor, or 400 step pulses/5mm linear motion.
The engraved picture will be too small to see without any zoom.
I decided to use the scale factor of 8 so that when the machine moves one pixel, 8 step pulses are sent.
This is equivalent to 50 pixels/1 turn of the motor, or 50 pixels/5mm of linear motion.
This means that the pixel spacing is 0. 1mm, or 254dpi.
The image size of 1600x900 pixels is 16 cm x 9 cm.
It should be noted that although the pixel spacing is 0.
1mm, the pixel point generated by the laser is greater than 0. 1mm x 0. 1mm.
The sketch is at the bottom of the page. This step is designed to share the improvements made by the readers of the structures. Handshaking -
The improvement from \"spiraloutfall 35\" is from \"spiraloutfall 35 \"(Smart user name! )
Who implemented a serial handshake between the processing sketch and the Arduino (
For grating engraving).
This eliminates the need to set the time delay in processing the sketch.
In addition, the Arduino sketch has PWM control for the laser output, and you will notice some other changes if you look closely at the code.
He is happy to share his ideas and code.
Here are his notes: Arduino sketch: version 4.
0 handshake processing sketch: 2.
0 handshake version Note: realize handshake now: no longer need to set the delay time in processing.
This means that Arduino and processing send and receive data when another one is ready.
Processing waits until serial data is received: SerialEvent ()\'. So Serial. print()Until the serialprintln()
Is the entire command of Arduino. (
Black and white images only; no greyscale)1.
The Arduino println issues A \"A\" waiting for processing to receive and send back.
Establish a connection \". 2.
Arduino sends a \"1\" to indicate that it is ready for the \"length\" of the next instruction set. 3.
If processing \"1\" that received it \"(Length 10)(
The reason explained in the code). 4.
Arduino now expects line length.
Read the sequence when it comes and write the line length = line length-10.
Arduino sends the \"2\" signaling ready for the instruction block. 5.
If processing receives \"2\", it sends the next instruction block. 6.
Arduino receives the instruction block and continues to read each byte until numBytes = linelength (
Number of bytes expected)
As a basic guarantee for complete data 7. Repeat steps 2-
Until all instructions are sent.
Plus, I got a button and a pot.
When Arduino starts, when it is looking to start processing (
Establish contact ()function)
, It enables the user to open the laser by pressing the button;
The percentage of \'on\' is determined by the reading of the pot.
Do not use buttons/pans after setting up. -
This enables me to set the laser current attraction/limit (at max Pot)
And my target line (at low Pot)-
Button: from one side to ground, from one side to pin 12, set to INPUT_PULLUP-Pot (
10 k or anything enough not to blow the pin (20mA I believe))
: 1 end to 5 v, the other end to Gnd, the middle to the simulation (A0)
After setting, the laser power is determined by the variable laser percentage defined. The laser control must be at Pin 10 (Or any with PWM
For analogy ()to work.
If you don\'t have a pot yet, you can set the laser to full power just by entering the PIN 145 v.
The processing and Arduino files are in the \"handshake. The zip file below.
Send me a message if you would like to share your improvements or suggestions (
Via instructures or getburnt1 @ gmail. com)
, I can upload to this step.
Some images engraved by the machine are on it. (
For engraved photos and Arduino logos, some image processing is required before sending the bitmap to the C sharp app).
For more pictures, please take a look at it on my website: Overall, I think the project is worth the time and effort.
I have gained a lot of knowledge that can be transferred to future projects.
The most useful thing I \'ve learned is probably to make sure all parts work together effectively
If there is a weak component, it has the ability to limit the whole machine due to the dependencies between components.
For example, the motor must be strong enough to move the shaft, but the frame must be strong enough to hold the motor, etc. . .
There are also some updates in the future that will make the machine better :-
Install a stronger laser to speed up the machine
Add limit switches on both axes to protect the machine from impact (
Not crashing yet, but it is inevitable that there is no limit switch)-
Custom message
Chat Online 编辑模式下无法使用
Chat Online inputting...