You've Reached the Center of the Internet
It's a blog
Laser Table
Phil, Will, and I built an aimable laser made with a mirror and two servos driven by an Arduino. The laser draws persistent patterns on the surface of a small table treated with glow-in-the-dark spray paint. It can be controlled using a cool multi-user Node.js/Socket.io web interface. Give 'er a look.
Laser System
The laser is controlled by an Arduino nano that drives two HS-311 servos. Coordinates are sent to the Ardiuno from a computer over serial. One servo controls the azimuthal angle of the mirror and the other controls the polar angle. The purpose of the laser system is to aim the laser at the glow-in-the-dark table surface. The laser system sits under the surface and draws on it from below. The laser itself is a violet laser from eBay. Be careful with this laser. It would just love to destroy your eyes. The whole thing is hot-glued to a 2x4. This was originally a temporary solution that we thought was really funny, but it ended up staying that way. You know how that goes...
Laser Controller
Commands are sent to the laser system by a laptop which polls a web server. We used Node.js to run some local Javascript code that handles the polling and the serial output. We chose Javascript because it seemed to handle the asynchronous HTTP better than Python and those are the only two languages that exist. We know this could have been a Raspberry Pi, but it isn't. Sorry.
Web Server
The web server is a Node.js server that uses Socket.io for real-time client interaction. The server responds to laser controller GET requests with the most up-to-date position for the laser. It also serves a page that allow clients to control the laser on their phones. The server randomly chooses a connected user every five seconds and allows them to control the laser using their touch screen. Other users who are waiting for their turns see the path plotted on their screens in real time.
Table
The table is simply constructed from a few 2x2s and scrap wood. It is really a piece of junk, just there to hold up the drawing surface. The surface of the table is a piece of plexiglass treated with glow-in-the-dark spray paint. We started by thoroughly sanding both sides of the plexiglass to diffuse the eye-boiling laser. We used 100 grit sandpaper and a random orbit sander. Try not to break the plexiglass like Phil did or touch the wet paint like I did. Those are both bad things to do.
Below is the code on the Arduino and the Github repositories that contain the server and laser controller code.
https://github.com/ishmandoo/laser
https://github.com/philzook58/node_laser_control