Interactive Laser Sheet Generator With Arduino

by jbumstead in Circuits > Art

30282 Views, 276 Favorites, 0 Comments

Interactive Laser Sheet Generator With Arduino

P1020066.jpg
Spinning laser sheets created with Arduino
IMG_1237.JPG
P1020043.jpg
IMG_1223.JPG
P1020101.jpg

Lasers can be used to create incredible visual effects. In this project, I constructed a new type of laser display that is interactive and plays music. The device rotates two lasers to form two vortex-like sheets of light. I included distance sensors in the device so that the laser sheets could be manipulated by moving your hand towards them. As the person interacts with the sensors, the device also plays music through a MIDI output. It incorporates ideas from laser harps, laser vortexes, and POV displays.

The instrument is controlled with an Arduino Mega that takes in the inputs of ultrasonic sensors and outputs the type of laser sheet formed and music generated. Due to the many degrees of freedom of the spinning lasers, there are tons of different laser sheet patterns that can be created.

I did preliminary brainstorming on the project with a new art/tech group in St. Louis called Dodo Flock. Emre Sarbek also ran some initial tests on the sensors used to detect motion near the device.

If you construct a laser sheet device, please remember to be safe operating lasers and spinning discs.

2020 update: I realized the surface created with the lasers is a hyperboloid.

Supply List

IMG_0601.JPG
IMG_0672.JPG
IMG_0911.JPG

Overview and Schematic

laserDiscSchematic2-01.png

A laser beam creates a well collimated (i.e. narrow) beam of light, so one way to produce a sheet of light is to quickly move the beam in some pattern. For example, to create a cylindrical light sheet, you would rotate a laser around an axis parallel to the direction it is pointing. To quickly move a laser, you can attached a laser to a wooden plank attached to a brushless DC motor. With this alone, you can create cool cylindrical laser vortexes!

Other laser vortex projects accomplish this by mounting a tilted mirror at the axis of rotation with a stationary laser directed to the mirror. This creates a laser sheet cone. However, with this design, all laser sheets will appear to originate from a single origin. If the lasers are positioned off axis like with the design I built, you are able to create converging laser sheets, like the hourglass shape shown in the video.

But what if you wanted the light sheets to be dynamic and interactive? To accomplish this, I attached two lasers onto servos and then attached the servos onto the wooden plank. Now the servos can adjust the angle of the laser with respect to the motor’s axis of rotation. By having two lasers on two different servos, you can created two different light sheets with the device.

In order to control the speed of the DC motor, I connected a potentiometer to an Arduino that takes the potenometer’s input and outputs a signal to the electrical speed controller (ESC). The ESC then controls the speed of the motor (a rather appropriate name, yes), depending on the potentiometer’s resistance.

The laser’s on/off state is controlled by connecting them to the emitter of a transistor operating in saturation (i.e. operating as an electric switch). A control signal is sent to the base of the transistor which controls the current through the laser. Here is a source for controlling a load with a transistor with an arduino: https://teachmetomake.wordpress.com/how-to-use-a-...

The servos position is also controlled with the Arduino. As the plank rotates, the light sheet can be manipulated by changing the servo position. Without any user input, this alone can create dynamic light sheets that are mesmerizing. There are also ultrasonic sensors positioned around the edge of the device, that are used to determine if a person is putting her hand close to the light sheets. This input is then used to either move the lasers to create new light sheets OR generate a MIDI signal. A MIDI jack is connected to transmit the MIDI signal to a MIDI playing device.

Controlling Brushless Motor With Arduino

IMG_1097.JPG
esc.jpg
motor.jpg
IMG_1210.JPG
Screen Shot 2017-07-31 at 1.10.58 AM.png

In order to create vortex-like light sheets, you need to rotate the laser beam. To accomplish this, I decided to try to use a brushless DC motor. I learned that these types of motors are really popular with model airplanes and drones, so I figured that it would be pretty easy to use. I ran into a few snags along the way, but overall I am happy with how the motor works for the project.

First, the motor needs to be mounted. I custom designed a part to hold the motor and attach it to a board holding the device. After the motor was secure, I connected the motor to the ESC. From what I read, it sounds really tough to use a brushless motor without one. To make the motor spin, I used an Arduino Mega. Initially, I could not get the motor to spin because I was just connecting the control signal to 5V or ground, without properly setting a baseline value or calibrating the ESC. I then followed an Arduino tutorial with a potentiometer and servo motor, and that got the motor spinning! Here is a link to the tutorial: https://www.arduino.cc/en/Tutorial/Knob

The ESC wires can actually be connected in any way to the brushless motor. You will need some female banana plug connectors. The thicker red and black cables on the ESC are connected to a DC power supply at 12V, and the black and white cables on the control connector of ESC are connected to ground and a control pin on the Arduino, respectively. Check out this video to learn how to calibrate the ESC: https://www.youtube.com/watch?v=F0Fx0NwYUis

Downloads

Constructing the Laser Sheet Chassis

DSC_0038.JPG
IMG_8023.JPG
IMG_0338.JPG
IMG_1068.JPG
IMG_1066.JPG
IMG_1065.JPG

After getting the motor spinning, it is time to build up the light sheet chassis. I cut a piece of plywood using a CNC machine, but you can also use a jig saw. The plywood holds the ultrasonic sensors and has a hole in it to fit a piece of plexiglas. The plexiglas should be attached to the wood using epoxy. Holes are drilled for the slip-ring to fit through.

Another circular sheet of plywood is then cut to hold the brushless motor. In this sheet of wood, holes are drilled so that wires can go through later in the construction. After attaching the motor mount and drilling holes, the two sheets of plywood are attached by 1x3 planks cut about 15cm long and metal brackets. In the photo, you can see how the plexiglas is above the motor and the lasers.

Laser and Servo Motor Assembly

IMG_0911.JPG
IMG_0923.JPG
IMG_0921.JPG
IMG_0927.JPG
IMG_0928.JPG
IMG_0929.JPG
IMG_1099.JPG
Screen Shot 2017-07-31 at 1.12.28 AM.png
Screen Shot 2017-07-31 at 1.12.07 AM.png

The variable light sheets are created by moving lasers with respect to the axis of rotation. I designed and 3d printed a mount that attaches a laser to a servo and a mount that connects the servo to the spinning plank. First attach the servo to the servo mount using two M2 screws. Then, slide a M2 nut into the laser mount, and tighten a set screw to keep the laser in place. Before connecting the laser to the servo, you must make sure that the servo is rotated to its centered operating position. Using the servo tutorial, direct the servo to 90degrees. Then mount the laser as shown in the picture using a screw. I had to also add a dab of glue to ensure that the laser did not shift unintentionally.

I used a laser cutter to create the plank, which has dimensions of around 3cm x 20cm. The maximum size of the light sheet will depend on the size of the wooden plank. A hole was then drilled in the center of the plank so that it fits onto the brushless motor shaft.

Next I glued the laser-servo assembly onto the plank so that the lasers were centered. Make sure that all components on the plank are balanced with respect to the plank’s axis of rotation. Solder JST connecters to the lasers and servo cables so that they can be connected to the slipring in the next step.

Finally attach the plank with attached laser-servo assemblies onto the brushless motor with a washer and nut. At this point, test the brushless motor to make sure that the plank can spin. Be careful not to drive the motor too fast or put your hand in the path of plank’s rotation.

Installing the Slipring

IMG_0919.JPG
IMG_1098.JPG

How do you prevent the wires from getting tangled as the electronics spin? One way is to use a battery for a power supply and connect it to the spinning assembly, like in this POV instructable. Another way is to use a slipring! If you haven’t heard of a slingring or used one before, check out this great video that demonstrates how it works.

First, attach the other ends of the JST connectors to the slipring. You don’t want the wires to be too long because there is potential for them to get caught on something when the plank rotates. I attached the slipring to the plexiglass above the brushless motor be drilling in holes for screws. Be careful not to crack the plexiglass when drilling. You can also use a laser cutter to get more precise holes. Once the slipring is attached, connect the connectors.

At this point, you can connect the slipring wires to pins of an Arduino to do some preliminary tests with the laser sheet generator.

Soldering the Electronics

IMG_0614.JPG
IMG_0616.JPG
IMG_0685.JPG
IMG_0686.JPG
IMG_0687.JPG
Screen Shot 2017-07-31 at 1.12.47 AM.png
IMG_0915.JPG

I cut a prototype board to connect all the electronics. Because I used a 12V power supply, I need to use two dc-dc converters: 5V for the lasers, servos, potentiometer, and MIDI jack, and 9V for the Arduino. Everything was connected as shown the diagram by either soldering or wire wrapping. The board was then connected to a 3d printed part using PCD standoffs.

Constructing the Electronics Box

IMG_0628.JPG
IMG_0629.JPG
IMG_0631.JPG
IMG_0635.JPG
IMG_0637.JPG
IMG_0651.JPG
IMG_0652.JPG
IMG_0670.JPG
IMG_0659.JPG
IMG_0663.JPG
IMG_0668.JPG
IMG_0674.JPG
IMG_0675.JPG

All the electronics are housed in a wooden box. I cut 1x3 lumber for the sides of the box, and cut a large opening in one side so that the wires on a control panel could go through. The sides were connected using small blocks of wood, wood glue, and screws. After the glue dried, I sanded down the sides of the box to even out all imperfections in the box. Then I cut thin wood for the front, back, and bottom of the box. The bottom was nailed to the sides, and the front and back were glued onto the box. Finally, I measured and cut holes the dimensions of the components on the front panel of the box: the power cable jack, usb jack, MIDI jack, and potentiometer.

Installing Electronics in the Box

IMG_0678.JPG
IMG_0677.JPG
IMG_0681.JPG
IMG_0682.JPG
IMG_0684.JPG
IMG_0689.JPG
IMG_0691.JPG
IMG_0699.JPG
IMG_0692.JPG
IMG_0693.JPG
IMG_1231.JPG
IMG_0918.JPG
Screen Shot 2017-07-31 at 1.11.47 AM.png
Screen Shot 2017-07-31 at 1.11.31 AM.png

I attached the power supply to the box using screws, the Arduino using a custom designed mount, and the circuit board created in Step 7. The potentiometer and MIDI jack were first connected to the circuit board using wire wrapping wire, and then glued to the front panel. The AC jack was connected to the power supply, and the DC output of the power supply was connected to the inputs of the Buck converters and cables that connect to the brushless motor. The motor, servo, and laser wires are then run through a hole in the plywood down to the electronics box. Before dealing with the ultrasonic sensors, I tested components individually to make sure that everything was wired correctly.

I initially purchased an AC power jack, but read some pretty bad reviews of it melting so I had incorrectly sized holes on the front panel. Therefore, I designed and 3d printed some jack adapters to match the size of the holes I cut.

Mounting and Wiring the Ultrasonic Sensors

IMG_1079.JPG
IMG_1077.JPG
Screen Shot 2017-07-31 at 1.20.06 AM.png
IMG_1078.JPG
IMG_1059.JPG
IMG_1058.JPG
IMG_1061.JPG
IMG_1062.JPG
IMG_1064.JPG
IMG_1088.JPG
IMG_1104.JPG
IMG_1214.JPG

At this point, the lasers, servos, brushless motor, and MIDI jack are all connected to and can be controlled by the Arduino. The last hardware step is connecting the ultrasonic sensors. I designed and 3d printed an ultrasonic sensor. I then wired and evenly attached the ultrasonic sensor assemblies to the top plywood sheet of the light sheet generator. The wire wrap wire were run down to the electronics box by drilling holes in the plywood sheet. I connected the wire wrap to the appropriate pins on the Arduino.

I was a little disappointed with the ultrasonic sensor performance. They worked pretty well for distances between 1cm - 30cm, but the distance measurement is very noisy outside that range. To improve the signal to noise ratio, I tried taking the median or average of several measurements. However, the signal was still not dependable enough, so I ended up setting the cut-off for playing a note or changing the laser sheet at 25cm.

Programming the Dynamic Laser Vortex

P1020043.jpg

After all the wiring and assembly is completed, it is time to program the light sheet device! There are many possibilities, but the overall idea is to take in the inputs of the ultrasonic sensors and send out signals for MIDI and controlling the lasers and servos. In all programs, the plank’s rotation is controlled by turning the potentiometer knob.

You will need two libraries: NewPing and MIDI

Attached is the full Arduino code.

Downloads