Go print your girlfriend’s skull right now!

As it turns out, the reason they give you the CD after you take an MRI or CT scan is not to show other doctors, but to print your own (or your girlfriend’s) body parts.

After reading a few great blog posts about selecting areas of interest from these scans and making a printable version of them, I managed to create a printable STL file of my girlfriends’ skull. These posts were good, but either I couldn’t read the DICOM data into the software they used or the latest version of the software was different. In the end I used 3dSlicer and Autodesk Meshmixer to create the model.

You can get 3dSlicer here. Start it up and load the DICOM data from the CD.

LOAD DICOM DATA > Import > Choose directory with all the scan files > Choose to copy files to local directory rather than just link them > Select patient > Load

Now that all the data is loaded, go to All Modules > View Controllers

Here you can choose the Axial Sagittal and Coronal (X, Y and Z, maybe not in that order) slices.

Once you’ve done that, the slices have to be centered in the three viewing windows. To do that you first have to click on all three eyes to set the visibility to on, for each view. Then, each view has a small crosshair shaped icon (upper left of each black view window) which you have to click to center the slices in their respective windows. You have to do this for each view.


Once all slices are loaded a label map can be created. A label, apparently is an area which you can select in all the slices (or something similar). We’ll use this to separate the area that we need to print.

Choose the Editor module from the Modules menu. The Master Volume is the direction or view that will be converted to a 3d model. Some work better than others, in my case the axial view had a better resolution (smaller distance between individual slices). The merge volume is the volume that will be referenced later on when creating the model. Make note of this name. Next, click on the icon with a gradient pictured. This is the Threshold effect. Basically you set some limits with the range slider and you look at the three windows to see which areas are glowing. These areas will make up our 3d model. After setting the threshold limits, take a look at what number the label has. The idea is that you can use different colors to highlight different areas at the same time and each will be a different label and have a different number. Make note of this number. Now click Apply.


Next, the model is created after the label map. Go to the Model Maker module. Here set the Parameter set to Create new command line module. Input Volume will be the name I previously mentioned to note and in Models choose Create new Model hierarchy. Choose a Model Name. Now, under Model Maker Parameters in the Labels field, fill in the number of the label previously noted. The filter type I used was Laplacian. You can also play around with the smoothing and other sliders. Now click Apply.


In order to save the model click on the save button in the upper left corner and choose only the model you just created with the Model Name, name and from the dropdown menu choose filetype: stl and the path where you wish the file to be saved.


Now open the model in Meshmixer. I first used the Inspector from Analysis to repair any mesh problems, with the Smooth fill option.


From Edit > Separate Shells is used to separate unconnected parts of the model. The object browser opens and you can delete the other shell parts and keep the one that’s needed.


To smooth the ridges left between the CT slices, I used the BubbleSmooth brush from the Sculpt menu and smoothed all areas that were rough.

I also cut the skull in half to print it more easily with the plane cut tool from the Edit menu.


Here is what the model looked like before exporting:


Now export the model as an Stl file and get printing!

I used supports for the lower half printed upside down and no supports for the upper half. 0.2mm layer height and 30% infill. After printing, the parts were acetone welded together and filed down imperfections. The seam is still visible for now.


Go print your girlfriend’s skull right now!

3d Printed – Arduino powered Lazy Man’s Tea Steeper

While working on the HL2 Turret project I made myself some tea. Heat up water, add tea bag, forget tea bag in said water, drink horribly bitter tea. After repeating this process several times I got a bit fed up and decided it was time to fire up the printer and solve this very /r/Britishproblem. Luckily I had some terrible 9g servos and an Arduino Pro Mini to use.


Not having a lot of time on my hands, I decided to limit the design process to only two hours. if it could be done, great, if not, drop the project. Granted, I gave myself one hour before that to think about how this tea steeper should look and work. The good news is, I managed in only 1.5 hours but some mistakes were made.

The red servo horn is designed with ‘tabs’ because I thought it would be a good idea to file the axle of the servo to get better torque transmission through the joint. Bad idea. There is no torque to speak of in this design. It’s a damn tea bag. I drilled out the holes and it’s just an interference fit with screws now. This way the initial position of the horn is also adjustable. Another thing is that I made a hole in the purple case for the servo cables to go through. Never thought about the connectors and they didn’t fit. I filed the hole bigger and eventually cut off the connectors because they wouldn’t fit in the case anyway. D’oh!


While the parts were printing I decided to get started on the software side. After 3.5 hours of trying and failing to correctly calculate the inverse kinematics I was already tired and decided to just used predefined angles for the home position, lifted position for tying the bag to the servo horn and the dunked position. There also is an intermediate position for repeatedly lifting and lowering the bag to get it to fill up and stay vertical.

Once the print was done I acetone welded all the parts together and thankfully it came out great.

Basically, when powered on, it waits for you to hang the tea bag on it, then dunks it three times then waits for three minutes and lifts the bag up to let it drip. Perfect tea every time!

All in all, I used only 8 hours for this project. Which isn’t too bad. Future improvements include an LED or RGB LED to indicate status or time remaining to brew, and inverse kinematics for the servo positioning.

If anyone is interested, I’ll publish the CAD files also (Fusion 360 and STLs), and maybe the sketch (although it’s not really well made).

Edit: Get the .Step file here.

Your Majesty, I am ready to be knighted!


3d Printed – Arduino powered Lazy Man’s Tea Steeper

First Youtube Video Published! Also, 3d printed lcd pcb enclosure!

Okay, so I published my first Youtube video. I was really nervous while filming and I may have made one or two mistakes in editing and filming. So please, comment on the video to help me improve!

I needed to see what I’m filming while I’m doing it and a 7″ LCD left over from another project came in handy. The problem is that the enclosure was long gone and I also wanted to mount it on a small tripod.

This is what the final product looks like. I’m using a Li-po to power it, maybe not such a good idea but it was available.


Besides the usual measure once print twice issues, in editing I heard a hum or buzz when I powered on the LCD, maybe someone knows what that’s about so please comment.

Check out the video here.

  • Parts printed in ABS
  • Layer height 0.3mm
  • Raft settings: 0.2mm air gap; Surface layers: 1; Extra margin: 4mm
  • Slicer: CuraEngine
  • Host: RepetierHost
First Youtube Video Published! Also, 3d printed lcd pcb enclosure!

Car alarm remote control repurposing

A while ago, I got hold of a car alarm unit and its two remote control fobs. When i hooked it up to 12V I realized that it didn’t  work, not responding to any of the commands from the two fobs even though their batteries were OK. Naturally, I opened up the unit to start harvesting parts and noticed the RF module within (the one that sticks out perpendicularly ) and I figured it shouldn’t be too hard to use the module with an Arduino.

Basically, my code uses pulse in to see whether incoming pulses are longer than 1000 microseconds and if a pulse is longer than that I consider it a ‘1’ and if it’s not, a ‘0’. So it constructs a string called ‘codein’ about 75 characters long and then it searches for 25 character pre-defined strings within it (using the substring command) , to see whether a button has been pushed on one of the remotes. If a button push has been recorded then it prints out which one over the serial connection. Oh, and I was lucky and discovered that each remote delivers different codes, meaning that I am able to remotely control 8 channels.

To figure out which codes you need to pre-define for your buttons you can un-comment the lines which display the incoming string. So here’s the code:

// RF module receiver code for Arduino.
// The module is connected to the Arduino havin 3 pins: +5, GND and data. The data pin is connected to
//digital pin 11 on the arduino.

int inpin = 11;
 int onoff = 0;
 int i=0;
 String codein="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";

//there are about 100 zeros in the initial codein

unsigned long duration;
 void setup()

void loop()

for (i = 0; i < 100; i++) {

duration = pulseIn(inpin, HIGH);
 if (duration > 1000)
 else {

 Serial.println(codein); //uncomment these two lines to figure out your remote codes
 delay(1000); // this is the second line
 for (i=0; i<75; i++){
 if (codein.substring(i,i+25)=="0010100111000110001010000") // substitute remote codes here
 { Serial.println("lock!!!"); if (onoff == 1){onoff = 0;} else {onoff = 1;} // LED toggle on/off
 if (codein.substring(i,i+25)=="0010100111000110001001000") // and here
 { Serial.println("unlock!!!");
 if (codein.substring(i,i+25)=="0010100111000110001000100") //and here
 { Serial.println("mute!!!");
 if (codein.substring(i,i+25)=="0010100111000110001000010") // you get the idea 🙂
 { Serial.println("ring!!!");

if (codein.substring(i,i+25)=="0010010110111101111001000")
 { Serial.println("lock2!!!");
 if (codein.substring(i,i+25)=="0010010110111111111000100")
 { Serial.println("unlock2!!!");
 if (codein.substring(i,i+25)=="0010001001011011111111100")
 { Serial.println("mute2!!!");
 if (codein.substring(i,i+25)=="0010010010110111111111000")
 { Serial.println("ring2!!!");

// this toggles the 13 pin led on or off
 if (onoff == 1) {
 else { digitalWrite(13,LOW);


Car alarm remote control repurposing