arduino laser show with real galvos
by:HoldPeak
2020-04-18
In this project, we use Arduino UNO/Nano to run the laser display with a laser indicator.
We use the real galvos (galvanometers)
Like in a commercial laser projector, because these products have recently become very cheap (
Approximately EUR 100/USD)
Higher quality than speakers or stepping motors.
In terms of hardware, we use an external 12-bit DAC (
Digital to analog converter)and an (optional)
Amplifier circuit, creating a signal for galvonometers.
If you have some basic experience with Arduino boards and breadboards, you can build this project.
You can get away without any soldering, although eventually soldering the PCB can be a better solution.
On the software side, a complete Arduino sketch is provided, which features: all the source code is provided, and it can be easily adapted into its own program!
Inspire/further readingI was initially inspired by the following project, which explains well how the laser projector works and uses speakers to simulate galvos: the speaker has very limited quality and complexity of the objects you can draw, which is why we use real galvos in our project.
If you want to build (optional)
ILDA amplifier, see Part list in amplifier step.
The most expensive part of this project is 20 Kpps galvos.
I bought my set on ebay: Search for \"20 Kpps galvo\" on internet/ebay and you should find the right one.
These devices usually have a bipolar power supply (My use is 15 V /-
15 V, if you\'re in 12-
15 v should be no different).
For our project, we need to turn the laser pointer on/off from Arduino.
For this you need to buy a cheap red laser indicator.
It usually has an on/off button that you need to fix to a permanent press.
On my pointer, I just press the button permanently with tape.
Next you need to remove the battery box (
The back part of the pointer)
And add the power cord instead of the battery.
The easiest way is to use two crocodile clips, usually one on a spring (-)
And one more case (+).
Take a look at the image of the sample laser indicator.
To test the pointer, you can connect this way: Arduino 5 v-
> Arduino GND-laser> Laser -
If your laser indicator absorbs too much current to safely connect to the digital output of the Arduino, you have to switch it using a transistor or MOSFET.
There is no problem with my pointer so it may draw less than 50 mA.
The Pointer needs to be at the correct height to point to galvos, for which you need to build some brackets.
I used some Lego blocks to make the stand, as shown above.
Of course, you can build it using any other material.
The Galvo set should include: there is no power cord in my set, so I added a standard 3-wire power cord (
I used the old PC power cord and removed the connector of the PC).
Be careful when you use the power supply as it works on AC 220 V/110 V which is (
You should know)DANGEROUS!
I suggest you buy a box to install everything and reserve an extra isolation position for the power supply.
I stuck a plastic box on it and covered the power supply so that no one had access to the high voltage input.
The cable from the power supply to each driver card and each driver card will now be connected to one of the galvos.
You should have two remaining connector cables that you can insert into the ILDA input for each card.
You can use these connector cables, or you can use a separate female jumper cable.
Next, we will connect them to the Arduino/DAC output.
For this project, we choose the MCP4822 DAC (as PDIP-
8. friendly to bread boards).
It can be used for 3-4 euros.
It offers 12 bits of dual channel and has an Arduino library for use.
It is connected to the Arduino via SPI and supports an additional latch pin that provides Synchronous updates for both channels.
It will produce two output signals from 0 V to 4. 096V.
The DAC of the Linked Data table below: the wiring is as shown in the picture above.
The laser pointer is connected to GND and Arduino pin d2.
As mentioned earlier, if you want to be on a safe side in terms of drawing current from Arduino, you can also use a transistor/MOSFET instead of connecting directly from pin d2.
The connection to the DAC is as follows: Arduino CLK (pin D13)-> DAC SCK (pin 3)Arduino MOSI (pin D11)-> DAC SDI (pin 4)Arduino CS (pin D10)-> DAC CS (pin2)Arduino pin D7-> DAC LATCH (pin 5)Arduino 5V -> DAC VDD (pin 1)Arduino GND -> DAC VSS (pin 7)
This leaves us with DAC pins 6 and 8, which provide us with two analog output signals.
One output of the DAC is connected to the ILDA driver card of X galvo and the other to Y galvo.
Since the ILDA driver card is expected to have a bipolar signal, in pricipal we have-
5 v to 5 v, reverse signal of negative Drive input.
But these Drive cards don\'t care much about the bipolar signal, so you can connect each DAC output (
It is 0 to 4. 096V)
Connect to the ilda in connector and connect the ilda gnd and the ilda in-
GND of Arduino.
This will not drive galvos to their full angle range, but it should have generated the image in about 1/4 of the galvos range.
In the next steps, we will learn how to create the correct bipolar signal.
In principle, the DAC can be replaced by any other dual-channel DAC that works on 5 v and supports locking, but you need to adjust the Arduino sketch to make it work with a different DAC.
The DAC code is inside the laser. cpp file.
If you don\'t have a box/box yet, now is a good time to buy one.
Don\'t forget to add an opening so the laser can be fired.
I just used a wooden box and put one (too big)
And added a flap to turn it on/off.
As you can see in the photo, I still have enough space, so I should choose a smaller box.
After installing everything, place the laser pointer near galvos and adjust it to point it to the center of the first galvo.
I would suggest not fixing it at this time so you can fix it again
Adjust later.
Arduino should be powered via USB so you need to connect it to your PC (
Or connect to USB charger later)
Go to the laser show
You can also get power from the galvo power supply, but this requires a DC power supply
DC step down module, easy to add but out of scope for this project.
Your settings should look similar, usually in the above picture, except for the extra (optional)
Amplifier PCB on image, will be explained later.
If you haven\'t installed the Arduino IDE yet, now is a good time to install the Arduino IDE.
You can download the complete sketch of the laser show from the following website: As explained, Arduino should now run the laser show immediately.
Since the laser indicator does not have much power, you need a dark place to fully enjoy the performance.
Of course, you can upgrade the project to a more powerful laser diode, but this is not covered in this tutorial and additional safety measures are required.
Trouble Shooting: fine tuning: look at the laser.
H files to fine tune the various times of the hardware.
The on/off delay of your laser indicator may be smaller/larger than mine, and galvos may react differently.
The Galvo drive card usually also has a potentiometer to fine tune the shoot, so you can play with these as well.
In my settings, I still can\'t get to the closing point of the profile accurately, probably because of overshooting.
Note: If you want to get a larger projection angle or you are eager to learn how to generate a bipolar signal and its inverse signal, you just need to complete this step.
In the previous steps, we have built a laser projector that can work, but we have not generated the correct bipolar ILDA signal that the driver card expects.
So how does the bipolar signal work?
The double pole means that the signal is from-5V to +5V (
So it has a range of 10 v and GND is the center).
In addition, the ILDA standard wants to get the same signal as the inverted signal again.
For example, negative ILDA input for e. g. -
5 v requires a positive ILDA input of 5 v.
What we want to make now is the amplifier circuit to amplify the single-pole DAC signal (from 0V to +4. 095V)
To the bipolar range-5V to +5V.
For this, we need a dual-pole power supply.
Fortunately, we can use the power supply of galvos, which is bipolar.
We will build the amplifier for X and Y respectively because it is the exact same circuit.
In order to amplify the analog signal and reverse it, the operational amplifier (
Operational amplifier)is used.
Since we want to make the amplifier adjustable, we will increase the potentiometer for gain and bias instead of the fixed resistance.
This allows the entire setup to be adjusted according to the different input ranges of the DAC and different supply voltages.
Required part: the picture above shows the circuit of a data line and you need to build it twice.
I generated a circuit view and a breadboard view.
I decided to put it on the prototype PCB with the DAC, but it all depends on you and the breadboard works fine as well.
My PCB is shown on the last picture.
Finally, you need to connect the two DAC outputs to both amplifiers and their /-
Output to ILDA drive input.
Make sure you also connect the Arduino\'s GND to the GND of The galvo power supply to get in common.
Also connect the power supply to two amplifiers.
Everything should be set up now and you can run the laser display and adjust the image using a potentiometer.
A potentiometer for gain (
It scales the image)
Another one for offset (
It moves the image).
The TL082 IC contains two separate op amps.
An operational amplifier for moving and scaling signals (
Reverse it too)
, The output is negative ILDA input-.
The second op amp is used to reverse the signal again to obtain a positive ILDA input.
You can expand this project in various ways.
We use the real galvos (galvanometers)
Like in a commercial laser projector, because these products have recently become very cheap (
Approximately EUR 100/USD)
Higher quality than speakers or stepping motors.
In terms of hardware, we use an external 12-bit DAC (
Digital to analog converter)and an (optional)
Amplifier circuit, creating a signal for galvonometers.
If you have some basic experience with Arduino boards and breadboards, you can build this project.
You can get away without any soldering, although eventually soldering the PCB can be a better solution.
On the software side, a complete Arduino sketch is provided, which features: all the source code is provided, and it can be easily adapted into its own program!
Inspire/further readingI was initially inspired by the following project, which explains well how the laser projector works and uses speakers to simulate galvos: the speaker has very limited quality and complexity of the objects you can draw, which is why we use real galvos in our project.
If you want to build (optional)
ILDA amplifier, see Part list in amplifier step.
The most expensive part of this project is 20 Kpps galvos.
I bought my set on ebay: Search for \"20 Kpps galvo\" on internet/ebay and you should find the right one.
These devices usually have a bipolar power supply (My use is 15 V /-
15 V, if you\'re in 12-
15 v should be no different).
For our project, we need to turn the laser pointer on/off from Arduino.
For this you need to buy a cheap red laser indicator.
It usually has an on/off button that you need to fix to a permanent press.
On my pointer, I just press the button permanently with tape.
Next you need to remove the battery box (
The back part of the pointer)
And add the power cord instead of the battery.
The easiest way is to use two crocodile clips, usually one on a spring (-)
And one more case (+).
Take a look at the image of the sample laser indicator.
To test the pointer, you can connect this way: Arduino 5 v-
> Arduino GND-laser> Laser -
If your laser indicator absorbs too much current to safely connect to the digital output of the Arduino, you have to switch it using a transistor or MOSFET.
There is no problem with my pointer so it may draw less than 50 mA.
The Pointer needs to be at the correct height to point to galvos, for which you need to build some brackets.
I used some Lego blocks to make the stand, as shown above.
Of course, you can build it using any other material.
The Galvo set should include: there is no power cord in my set, so I added a standard 3-wire power cord (
I used the old PC power cord and removed the connector of the PC).
Be careful when you use the power supply as it works on AC 220 V/110 V which is (
You should know)DANGEROUS!
I suggest you buy a box to install everything and reserve an extra isolation position for the power supply.
I stuck a plastic box on it and covered the power supply so that no one had access to the high voltage input.
The cable from the power supply to each driver card and each driver card will now be connected to one of the galvos.
You should have two remaining connector cables that you can insert into the ILDA input for each card.
You can use these connector cables, or you can use a separate female jumper cable.
Next, we will connect them to the Arduino/DAC output.
For this project, we choose the MCP4822 DAC (as PDIP-
8. friendly to bread boards).
It can be used for 3-4 euros.
It offers 12 bits of dual channel and has an Arduino library for use.
It is connected to the Arduino via SPI and supports an additional latch pin that provides Synchronous updates for both channels.
It will produce two output signals from 0 V to 4. 096V.
The DAC of the Linked Data table below: the wiring is as shown in the picture above.
The laser pointer is connected to GND and Arduino pin d2.
As mentioned earlier, if you want to be on a safe side in terms of drawing current from Arduino, you can also use a transistor/MOSFET instead of connecting directly from pin d2.
The connection to the DAC is as follows: Arduino CLK (pin D13)-> DAC SCK (pin 3)Arduino MOSI (pin D11)-> DAC SDI (pin 4)Arduino CS (pin D10)-> DAC CS (pin2)Arduino pin D7-> DAC LATCH (pin 5)Arduino 5V -> DAC VDD (pin 1)Arduino GND -> DAC VSS (pin 7)
This leaves us with DAC pins 6 and 8, which provide us with two analog output signals.
One output of the DAC is connected to the ILDA driver card of X galvo and the other to Y galvo.
Since the ILDA driver card is expected to have a bipolar signal, in pricipal we have-
5 v to 5 v, reverse signal of negative Drive input.
But these Drive cards don\'t care much about the bipolar signal, so you can connect each DAC output (
It is 0 to 4. 096V)
Connect to the ilda in connector and connect the ilda gnd and the ilda in-
GND of Arduino.
This will not drive galvos to their full angle range, but it should have generated the image in about 1/4 of the galvos range.
In the next steps, we will learn how to create the correct bipolar signal.
In principle, the DAC can be replaced by any other dual-channel DAC that works on 5 v and supports locking, but you need to adjust the Arduino sketch to make it work with a different DAC.
The DAC code is inside the laser. cpp file.
If you don\'t have a box/box yet, now is a good time to buy one.
Don\'t forget to add an opening so the laser can be fired.
I just used a wooden box and put one (too big)
And added a flap to turn it on/off.
As you can see in the photo, I still have enough space, so I should choose a smaller box.
After installing everything, place the laser pointer near galvos and adjust it to point it to the center of the first galvo.
I would suggest not fixing it at this time so you can fix it again
Adjust later.
Arduino should be powered via USB so you need to connect it to your PC (
Or connect to USB charger later)
Go to the laser show
You can also get power from the galvo power supply, but this requires a DC power supply
DC step down module, easy to add but out of scope for this project.
Your settings should look similar, usually in the above picture, except for the extra (optional)
Amplifier PCB on image, will be explained later.
If you haven\'t installed the Arduino IDE yet, now is a good time to install the Arduino IDE.
You can download the complete sketch of the laser show from the following website: As explained, Arduino should now run the laser show immediately.
Since the laser indicator does not have much power, you need a dark place to fully enjoy the performance.
Of course, you can upgrade the project to a more powerful laser diode, but this is not covered in this tutorial and additional safety measures are required.
Trouble Shooting: fine tuning: look at the laser.
H files to fine tune the various times of the hardware.
The on/off delay of your laser indicator may be smaller/larger than mine, and galvos may react differently.
The Galvo drive card usually also has a potentiometer to fine tune the shoot, so you can play with these as well.
In my settings, I still can\'t get to the closing point of the profile accurately, probably because of overshooting.
Note: If you want to get a larger projection angle or you are eager to learn how to generate a bipolar signal and its inverse signal, you just need to complete this step.
In the previous steps, we have built a laser projector that can work, but we have not generated the correct bipolar ILDA signal that the driver card expects.
So how does the bipolar signal work?
The double pole means that the signal is from-5V to +5V (
So it has a range of 10 v and GND is the center).
In addition, the ILDA standard wants to get the same signal as the inverted signal again.
For example, negative ILDA input for e. g. -
5 v requires a positive ILDA input of 5 v.
What we want to make now is the amplifier circuit to amplify the single-pole DAC signal (from 0V to +4. 095V)
To the bipolar range-5V to +5V.
For this, we need a dual-pole power supply.
Fortunately, we can use the power supply of galvos, which is bipolar.
We will build the amplifier for X and Y respectively because it is the exact same circuit.
In order to amplify the analog signal and reverse it, the operational amplifier (
Operational amplifier)is used.
Since we want to make the amplifier adjustable, we will increase the potentiometer for gain and bias instead of the fixed resistance.
This allows the entire setup to be adjusted according to the different input ranges of the DAC and different supply voltages.
Required part: the picture above shows the circuit of a data line and you need to build it twice.
I generated a circuit view and a breadboard view.
I decided to put it on the prototype PCB with the DAC, but it all depends on you and the breadboard works fine as well.
My PCB is shown on the last picture.
Finally, you need to connect the two DAC outputs to both amplifiers and their /-
Output to ILDA drive input.
Make sure you also connect the Arduino\'s GND to the GND of The galvo power supply to get in common.
Also connect the power supply to two amplifiers.
Everything should be set up now and you can run the laser display and adjust the image using a potentiometer.
A potentiometer for gain (
It scales the image)
Another one for offset (
It moves the image).
The TL082 IC contains two separate op amps.
An operational amplifier for moving and scaling signals (
Reverse it too)
, The output is negative ILDA input-.
The second op amp is used to reverse the signal again to obtain a positive ILDA input.
You can expand this project in various ways.