loading

It's cute, It's polite and it is really deadly. It's a turret from Portal. It moves, has light, has sound, and something that my previous Portal project did not have: Camera tracking.

The turret is controlled with an Arduino and a PC. The arduino handles the movement and the light, the PC processes the video from a webcam to decide where the turret needs to aim and provides the sounds for the turret.

When no computer is present, the turret automatically switches to manual control. In this mode the turret can be controlled by a joystick, though there will be no sound.

The turret is full 3D printable and requires very little additional tools to make. This does not mean that this is an easy project, but it is manageable with some basic 3D printer, electronics and programming skills.

For more projects like this, go to my site: http://ytec3d.com/

Step 1: Design (and design flaws)

The design was the the hardest part of this project. Not because there are no reference images or because the turret is that difficult in its design. It is because the turret does things that are not physically possible.

At first I wanted to make this turret so it could open and close as well. The issue is (as you can see in the images) that the guns of the turret almost touch each other when the turret is closed. There simply is no room to have a turret with all movement that can also open and close. The solution was a compromise where the turret only moves and doesn't open.

Also the design doesn't include a real space for the electronics (as seen in all the photos and videos). After I built mine i did a last wave of improvements where I hollowed out the top of the turret. There is some space there now to place electronics if you can manage to make them small enough.

The rest of the design was only a matter of time. First the turret was designed in one piece in Solidworks to get the design right. Then this part was cut up into smaller pieces and mechanisms were added to make the guns and eye move. All in all the design took between 40 and 60 hours (I don't really track the time).

(Reference image to the right made by: Tyler Garrison, for another turret project by CitizenSnips and modified by me to show the flaws in the turret's original design)

Step 2: Gathering materials

To build the turret you will need several materials:

  • roughly 500g of 3D printing filament
  • several grams of clear filament (for the eye)
  • 2 micro servo's
  • 2 standard servo's
  • 1 Arduino
  • 1 5mm red led
  • 4 5mm white leds
  • 1 laser diode (6mm diameter)
  • 4 npn transistor
  • 4 220ohm resistors
  • 4 100ohm resistors
  • 5 100uF electrolytic capacitors (or similar)
  • M3 screws
  • 2x M4 25mm screws
  • 2x M4 self locking nuts
  • 1 608 bearing
  • 115mm aluminum tube 8mm diameter
  • Wires
  • 1 5V voltage regulator (at least several amps)
  • 1 Joystick module for arduino
  • 1 Beefy battery to power (I used a 3cell 3000mAh LiPo battery)
  • White, green and dark gray paint
  • A PC with a webcam (for the automatic tracking)
  • (1 speaker (to make the turret talk))
  • Iron wire for the antenna and legs

Also you will need some tools

  • Basic tools (screwdrivers, pliers)
  • sandpaper
  • Paintbrushes
  • 3D printer
  • Soldering iron
  • A breadboard

Step 3: Start printing

The next step is to start printing. For this you will need (you'll never expect this...) a 3D printer. Now not every printer will do. I take great care to design things that require as little support as possible, but in some cases splitting up the design into even more pieces is too much additional trouble. For the turret you will need a 3D printer of at least 120mm x 120mm x 120mm (roughly 5"x5"x5") that is comfortable with support material. I used my UP Plus 3D printer that I won last year at the UP2013 contest. I has served me well the last year.


For a complete turret you will need the following parts:

  • Turret body bottom bottom
  • Turret body bottom left
  • Turret body bottom right
  • Turret body coupler (2x)
  • Turret body top
  • Turret eye swivel pan (in clear plastic)
  • Turret eye swivel V2 (in clear plastic)
  • Turret gun left bottom
  • Turret gun left gun
  • Turret gun left top
  • Turret gun right bottom
  • Turret gun right gun
  • Turret gun right top
  • Turret swivel tilt
  • Turret swivel V2
  • leg front left
  • leg front right
  • leg back

All of these parts required about 20 hours to print on my UP! at 0.3mm layer thickness. It took about 500g of PLA filament.

Step 4: Putting it together

With all the parts printed it's time to assemble the turret. Most of the assembly is too complicated to explain in just words, but the pictures also do a great part of the explaining.

The first thing to do is to tap all of the M3 holes with an ordinary M3 screw or bolt. Most screws screw directly into the plastic, reducing the amount of nuts needed. (photo of all M3 holes)

One of the micro servo's needs to be modified so it has the wires com from the bottom instead of the side. There simply wasn't enough room to have the wires com from the side. This servo also needs to get on of it's flanges trimmed so it will fit, bus this will show itself when you are mounting the servo.

Both sides of the shells of the guns (turret gun top and bottom) were linked with 2 M3 screws. Because 3D printing leaves a small amount of shrink in the first layers, the bottom is slightly warped. This left an ugly gap between the two shells. I fixed this by welding the two pieces together after linking them.

The 608 bearing was press fitted in the part named "Turret swivel V2". Then the servo circular mount was attached to the bottom of the swivel. This swivel assembly was attached to a centered standard servo.

When assembling the eye, first press fit the laser into the eye hole. Center the micro servo with the hole at the bottom an mount the eye swivel on top. Then use some small pieces of 3mm rod (I used pieces of M3 thread) to fix the eye in the swivel. Some glue was used to fix the rod in the eye.

The remaining servo's are centered and horns are attached that will be connected to the moving parts with linkages.

Next the servo's are attached in the frame. The standard servo's are attached by screwing them to on of the halves of the body, the micro servo's simply slide in place. When later the body is done and both halves are joined, the micro servo's will be stuck in between.

When all servo's are centered and everything is in place, the linkages can be placed. I used wire to connect the servo arms to the holes in the eye and gun swivel. there are no real measurement here to follow, just make sure that the linkage holds the part in the middle.

Lastly the led in the eye and the leds in the guns are placed. The leds in the gun should fit quite well, but you can use glue to stick them in place. The led for the eye is jammed between the two halves and doesn't require any glue.

The legs are cut out of 4mm rod and 3mm thick aluminum. I simply followed the guides to get all parts in the right shape. The aluminum legs slot in the 3D printed leg pieces, though some force may be required. The wires of the leg fit in the 3D printed base and legs pieces without too much trouble. Next use 2k epoxy glue to glue the legs into place. This was the hardest part because the parts keep moving before the glue sets.

Lastly the antennas are cut from some 1-2mm wire and bent according to the guides. The biggest antenna goes in the outer most hole, the shorter straight antenna goes more towards the center.

Step 5: Make a base

For the turret I made a base out of some plywood I had laying around. The turret refused to stand on its own legs and the added mass makes it all just a tiny bit more stable.

First I cut the base out the plywood with a jigsaw, then I used a router to bevel the edges.

The legs were glued into place with 2 component epoxy glue. The small drops do show at the bottom, but the turret is never ever getting away from the base anymore.

Step 6: Wiring the turret

Most of the paths of the wires are defined. I have included a picture where I show all of the designed parts.

I did my turret with the electronics outside of the turret. There is a hole in the bottom of the turret where the wires can go through. It should be possible to mount a small Arduino and all electronics in the top of the head, but with my version of the design the space wasn't there yet.

I added connectors to all loose wires and added additional wire to the wires that were too short. The arduino, regulator and battery are on the base, covered by a nice piece of cloth.

Step 7: Painting and decals

Normally with these project I would use filler primer before painting. This process takes a lot of time, is a pain in the butt to do and doesn't even add that much to the quality. Because the turret is only smooth shapes I decided to only sand the turret and then paint it.

The turret has only 3 colors: White, dark gray and green. I did print all the parts in white but I painted the white parts white again to get the colors right and to mask imperfections.

Print the decal sheet on a color laser or inkjet printer and cut 2 of the left most decals out of the paper. Use clear adhesive to glue the decals on the side. Then use some of the green paint to blend the decals to the rest of the paintwork. On the pictures the decals seem way too shiny, but in reality the match almost perfectly. The camera does not capture it like the human eye does.

Step 8: Electronics

The electronics control the turret. It consists of connections to servo´s, transistors to power the leds and laser, a joystick to give the turret input an a voltage regulator to convert the voltage of the battery to a nice 5 volts.

Everything was done on a breadboard 1: because I didn't have time to make a circuit and 2: because after I finish this project I don't think I will do that much with the turret again. I have included a schematic so anyone can repeat the result.

Simply follow the schematic to connect all the correct wires to the right ports. Alternatively you can wire it up your own way and modify the ports in the firmware.

The resistors might have a fairly low value, but otherwise the led and laser don't give off enough light. It will shorten the life a bit. If this is a problem you can replace the 100ohm resistors for the eye and laser with 220ohm or 330 ohm.

Step 9: Firmware and software

Step zero, if you have never used an Arduino, go to their site and install the software.

Download the firmware and flash it on to your Arduino. If you connected everything the right way the lights in the eye should power up when you power the system.

The firmware has two modes:

Mode 1 is the follow joystick mode. It reads the analog reading coming from the joystick and converts it to a servo position.

Mode 2 is the serial slave mode. It reads the serial stream of data transmitted by the software and converts it to servo movement. The turret will automatically switch to serial slave mode when the software starts. It will however not change back automatically.

Additionally the firmware protects the turret from rapid movement by slowing down the movement to an acceptable speed.

For the full experience download the software and run it. The software handles the camera tracking and sounds.

The camera can be anything, but I used my laptop camera since it is the only camera I have that worked. Simply plug the camera in. In the ini file you can change the camera the software picks by changing the number.

Simply put it looks for a color in the HSV color model. It looks for this color on the screen, filters the color away from the other colors and filters the noise away. Then it takes the average and sends this over the serial line to the Arduino. It also makes the appropriate noises depending on what happens, from firing to acquiring a target.

The serial port can be selected in the ini file, go to device manager and see what port the Arduino is on. The software only supports com ports up to 9, so if the Arduino is on a higher com port, you will need to change the Arduino com port manually to a lower number.

You can select the color by moving the sliders. It isn't RGB because HSV differentiates a lot better between colors. It is a bit hard to use if you don't know what to do, so a simple manual. Open all lines (move min to left and max to right) so the screen is completely white. Then slide the top 2 bars until you have the color you want (don't worry about the noise yet). Next you can filter the noise out by dragging the remaining 4 sliders. The software is now tracking any object in the color you selected.

The software is hugely based on this example http://youtu.be/bSeFrPrqZ2A of color tracking in Open CV. Another shout out to my colleague (He who does not want to be named) who did the software. Without him I would not have been able to have this turret done in time.

This software (and firmware) have been written in a fairly short time frame. both have a tendency to crash or jam. For the software, simply restart until it works, for the firmware, push reset to set the Arduino.

Step 10: Final thoughts

The turret project was not a straight forward project. I have started and stopped it twice before I got it good enough to finish. The design was extraordinary difficult because of the original design in portal and my demands for this project. Even after many drawing hours the design still wasn't technically finished. Some features like the legs and "where are the electronics going" were not tackled until the assembly was halfway done. This does show if you know where to look.

Having said that, the turret has been one of the more rewarding projects. It was a fairly small print with only 20 hours, it was quick to build and it has a surprising amount of functionality. It also has something that the GlaDOS lamp did not have, but was requested a lot afterwards: tracking. This time I had someone near me who was capable and willing to write the code to track a person. At this point I am capable of writing such a piece of code, but not in the short amount of time I had left before the deadline. Yes both the firmware and software crash fairly often but both do work.

All in all the turret was a great project with just the right amount of problems to keep it interesting.

How much money would you say would be spent on electronics alone? (Disregarding the arduino board and breadboard, I already own those)
<p>Hi, the project is GREAT! I have one question, though, how long did it take to make?</p>
<p>KICKSTARTER!!!!!! I NEED THIS IN MY LIFE AT MY DESK AT WORK!!!!! KICKSTARTER!!! MAKE MORE<br><br>talk with valve on licensing... DO THIS NOW!!! HOW AM I JUST NOW SEEING THIS!!!<br></p>
<p>Awesome project, you've shown some real dedication to create something this cool and involved. I was thinking though about how you might eliminate the dependence on a computer for tracking, and had the thought that perhaps one could integrate a Raspberry Pi or similar small computer directly into the design. If the software exists or could be written, this would be an ideal solution, as it could be run off the same battery and has the easy to use PiCam. Of course, getting all the electronics to squeeze into the shell so that the guns retract would also be an amazing improvement. I'll put this on my list of things to do when I'm through school and have time. Bravo!</p>
<p>Hi! I'm quite surprised with all the work you've put into this. Bravo. I only have one question though. Do you think this could be tweaked somehow to eventually allow the guns to retract and fit everything?</p>
<p>I couldn't get the guns to also retract in the tiny amount of space I had, so my opinion is no, but if you can manage, give it a go and share it when you have managed.</p>
<p>This is seriously impressive, this is what I want to be doing for a living lol. Question: Any estimate to how much this project cost? (Not including buying a 3D printer/fillament).</p>
<p>I can guarantee you, me too, but I guess being an engineer will have to do. This was not that expensive a project. Around &euro;100-&euro;150 probably. </p><p>The thing that is more costly is time. Designing is over 40 hours, making it is also that. Everything combined this thing clocks out at 100 hours. </p>
<p>Fortunately, I have more time than I do money (; but this summer will be very boring for me so I seriously hope I find the motivation to do this! </p>
<p>This is so cool! That it's actually vunctioning and moving around is really a feat in itself! I bet some of my geeky friends might be really interested to try this out themselves!</p>
<p>this is awesome. i was wondering if the camera had to be attached to a laptop or desktop. Is it possible if I disassemble an old webcam and attach it to the portal turret through arduino? please answer back.</p>
<p>Attaching a webcam to the arduino is nearly impossible. You will need a special microcontroller camera for that. My webcam was on my laptop because the software doesn't allow a second webcam to be attached to the computer, but if you have a desktop you can have a camera that can be mounted anywhere.</p>
<p>This is awesome! <a href="http://www.instructables.com/id/Making-the-shell-for-a-functional-full-size-Apertu/" rel="nofollow">http://www.instructables.com/id/Making-the-shell-f...</a> Did you happen to take any inspiration from my Instructable? Also, I had the same problems as you, but the fact is Valve had a solution since they made one IRL that opens, closes, and simulates shooting. The solution the used is to remove the back panel of the gun box so you can fit servo's and other parts in the center(you can look at my gun box to see what I'm talking about. But other than that, top notch!.</p>
<p>*They used.</p>
<p>*servos <br>Sorry, my grammar is a bit off when I type too quickly.</p>
<p>Did you ever update the software and what was the OS base you ran it on ?</p>
<p>Extremely cool project, you got my vote!</p>
<p>I love this I will vote for it without question. Makes me really really want a 3D printer.</p>
Absolutely awesome, nice one!
<p>i think this is a great project if i had a 3d printer i may have give it a try even though i have nowhere to put it, many thanks for the instructable. </p>
<p>Rather than tracking a colour I suppose that it would be possible to control it with face tracking software or a heat sensor.</p><p>Maybe add remote-control Airsoft guns, though they would probably be too bulky to fit the shell.</p>
<p>Absolutely incredible idea and great execution! I'm sure this will do well in the sensor/battery/epilog contests</p>
Woah! That's amazing! A working portal gun next? ;P
<p>nice! add a Pixy and you can drop the PC connection :)</p>
Dankalicious
<p>put a high power laser on it</p>
<p>Amazingly well done! </p>
<p>Fantastic!</p>
<p>Oh wow, this is awesome!</p>

About This Instructable

60,858views

748favorites

License:

More by dragonator:Solar System Orrery (3D printed) Heat exchangers and 3D printing Hand In Hand Skeleton Clock 
Add instructable to: