Printing bones on a DIY powder bed 3d printer

This project focuses on using building a budget powder bed 3d printer capable of printing bones, and creating the needed ink and powder.

Similar projects worth following
This project focuses mostly on creation of materials needed for printing with hydroxyapatite a printer to go with it. This project will be divided in two parts. First one being construction of a 3D powder bed printer, and second one being creation of materials. As hydroxyapatite is quite expensive and 3d printed bones being quite useless on a regular basis I will try to make all material concepts usable with other materials (eg. ceramics and metal powders hopefully).

NOTE: This project is not for the faint of heart (i have been actively working on it for more than a year, and I am still struggling on a regular basis). If you are certain that you have enough experience with making things I strongly encourage you to try to make it as it yo will learn a lot. If you think of making this 3d printer yourself feel free to discuss it with me.

This project focuses on creation of a 3DP (binder jetting powder bed printer) which can print with hydroxyapatite (material that makes up to 70% bone weight). Beside the printer I will be making the needed material to print out of. I will also try printing with some other materials that are more commonly available (maybe even metal powders). When I will be discusing results of material testing I will also write a bit about the usage of other materials (eg. ceramics)

The idea of this project came from realization that 3D printing is a method, that has a lot of potential in biotechnology and medicine. By saying this i'm not just saying that we can print organs, but we can use this method to make parts used in very expensive equipment. For example we could use this method to make porous elements used as bioreactors, biofilters etc. I started with bone printing as it seemed as the simplest.

I designed the printer so it can be CNC milled. Most of the parts can be salvaged. I also tried to design the printer so it is cheap to build. I will also try to replace all expensive parts with cheaper ones that don't impact the performance too much.

Note that I am just a young enthusiast, so there is going to be plenty of things to improve. By saying this I am asking everyone who is thinking of building this printer to use their own minds and be ready to fix some of my mistakes.

I will be posting project logs everyday (at least I hope so) where I will be talking about material development and printer creation. I will alternate between these two topics so one day I will talk about printer and the next day about materials.

You can acces my GitHub repository for this project here


Schematic and libraries of the controller

Zip Archive - 92.24 kB - 10/21/2017 at 14:54


all of the f3d models and stl files

Zip Archive - 7.50 MB - 10/21/2017 at 14:04


the whole arduino mega code (not final) along with the core of the software

x-zip-compressed - 36.48 kB - 05/02/2017 at 19:47


  • 1 × Arduino MEGA 2560 the brain of the printer
  • 4 × linear guide bearings (12X22mm) i used the 30mm long ones, preferably one could use 2 longer bearings for y axis
  • 1 × 2.5m of gt2 belt used to make drive belts
  • 3 × Gt2 20 tooth pulleys
  • 2 × linear guide rods (12mmX340mm) Y axis rails

View all 23 components

  • Summary

    Jure10/21/2017 at 15:46 0 comments

    This is the last project log. It will be a small compendium where i describe what i have learned in past half of a year.


    I have made replaced the xaar printhead with hp45. I had struggled a lot with it as it has smaller drop sizes. This means that it is harder to wet the base material properly. This is why I have decided to use Xaar128 on the final design. It is also a lot easier to use.


    I have worked with a lot of materials. Besides the wetting properties and structural properties I was also working on sintering properties. I have found out that for sintering you want to slowly (100°C/h) heat up to the temperature a bit lower than the melting point of the material. Have it at this temperature for at least an hour (this increases shrinking and final density). Then cool it down at the same rate.

    I made the printing materials from:

    • Ceramics powder
    • Magnet dust (SrFe12O19)
    • Bronze blend
    • Titanium powder
    • Hydroxyapatit


    I found out that methyl cellulose works very well as a binder and it can be easily used with any of above materials. Only problem I have encountered with it is when I was sintering at temperatures lower than 1000°C. It didn't burn away properly and it has left carbon everywhere. I was mixing it at about 10% of mass of material dust (1g of methylcellulose/10g of final mixture). It depends on the density of material so for titanium i had to use a bit more (15-20%).


    When using metals keep in mind that they can oxidise when particles are small enough (especially with aluminum, this is also a reason why I didn't work with it). They can be easily printed with but problems do appear when sintering. You need an inert gas when sintering, this is a must. Even with argon few samples of titanium oxidised. 

    Alloy blends are not viable option as they wil not mix. This will leave you with samples that look beautiful but are completely useless.

    If you want metal parts from this kind of printer you will need to infiltrate them using some other metal (bronze).


    First things first, the magnets were ferrous, this means that they are a lot weaker then neodimium. I have used SrFe12O19. It prints really well even though it tends to clump up. There is one problem, it is very dirty (if this stuff touches any surface it is going to get stained by a very dark shade of brown). There is also a nice thing about using it where one does not need to sinter it as it can be infiltrated (filled with epoxy or glue). They need to be magnetized at the end.

    Ceramics and hydroxyapatite

    Theese two behave very simmilarly. You need to sinter them at  T>1300°C. If they are not sintered well they will be very crumbly. Otherwise they are a really good starting point as they do not oxidise. The only downfall is they have a high sintering temperature.

  • Web UI printer interface

    Jure08/15/2017 at 18:18 0 comments

    Web UI was one of my primary goals for this project. I think it simplifies a lot of things as it omits the use of any additional software therefore it eliminates any conundrums with instalations or libraries. This is why I have developed a basic UI with main settings and parameters. It is based on python and tornado so it could run on almost every current single board computer. This allows any end user to choose according to his/hers preference. 

    There are still few things missing but currently it looks promising. It still needs a progress bar, print info, estimated time, elapsed time. It also needs ability to store settings and configurations to xml and then read them. Another good thing to implement is model movement and rotation (most likely it is going to be step based). I still need to add the option to manage and select the files stored on the printer itself. Currently I am working on getting the page at the point where it is synchronous with printer (printer status, model loaded, etc.). 

    I have also decided to add a picture of the current page design (I like it quite a bit, due to its simplistic look). In its current state it is able to send commands to the printer, has a model preview and has the ability to add new setting presets (just temporarily, still needs an xml file IO implementation)

  • Broken

    Jure07/29/2017 at 18:40 0 comments

    This week I have been focusing on getting the new printhead up and running, but without success. The HP45 is a fantastic little device from beginning of the last decade, yet it is delicate and hard to operate from my point of view. It has a 22 address lines and 14 primitive lines along with bunch of ground lines and a thermistor and reference resistor. Both the address lines and primitive lines form a 14*22 matrix, that yields 308 usable outputs of which 300 are used for nozzle heater resistors and 8 of them are not connected. All the inputs function at 12V, but the primitives also accept lower voltages to regulate the nozzle drop characteristics. The primitive lines need more current as they power the heater elements in the nozzle.

    I am using the YTec3D hp45 controller. It has 2 subunits, where one is just a set of 4017s along with AND gates to increase their range. They are used to trigger between different address lines. The second unit consists of two TLC59213 latched led drivers. They supply current for the nozzle heating elements.

    After numerous hours of bugfixing, troubleshooting, etc. I found that the problems I have encountered are caused by bricked TLC59213s. It is also interesting that both have 1 latch bricked. Furthermore the broken latches trigger the primitive line 12 and 13. These lines have neighbouring bins, so this indicates a problem on my side. Funnily enough both of bricked latches work alright with the CLK and RST pin but they just ignore the input pin.

    I will order the new part from farnell, so I will be able to replace the chips on tuesday (hopefuly). 

    New design?

    Few weeks ago Formlabs announced their Fuse 1 printer. Luckilly enough Tested ( did a video on this printer. I have watched the video for couple of times just to get some ideas. Upon seeing and thorougly analysing the video and printer itself, I got some of the Ideas that I am going to include in my printer. The main feature I am going to add is a detachable bin (probably around 150mmX150mmX300mm) with a storaged powder deposition system. This way the loading and unloading of the printer are going to be much easier. Also it will be better for the system with any upcoming materials, as it will minimise the dust falling onto the rails.

  • Version 1.1

    Jure07/19/2017 at 21:53 0 comments

    This week I was able to get most of the prototype electronics together. Last few days I have mostly worked on getting the firmware and software up and running. I have also made a ceramic powder that might work with the printer. So if everything goes according to plan, I will be printing with ceramics next week. Then I will get the parts printed parts smelted so I can do some testing of strength, etc.

    Current electronics consist of two lm298 h-bridge drivers (one could be replaced by a normal stepper driver) , a pololu stepper driver, 2 maple minis 2 encoders with simple voltage dividers. Current system looks rather promising as it could be already used without any additional controller (it would lack any interface and the usage would be rather limiting, as user could not select a file from a SD card. I am still working on getting software on Beaglebone together (it is rather hard for me as i am new to beaglebone and especially PRUs on it). For now I have modified previous python program to open an svg and then export it to .pbip file (stands for Powder Bed Inkjet Printing) which is just a bunch of run length encoded nozzle data that is 'synchronous' to the printing protocol (data is in the same order as printer needs it). This could then be also used as somewhat of a universal system if the file is going to be reliable enough. This would also allow for easy replacement of SD card with an SBC as only changes to communication would have to be made (10-20 lines of code)

    If everything works as it should I will make custom pcbs. I will probably draw them in single sided version and double sided version, so they can be ordered or even made at home (I know I tend to make a lot of promises, but I have decided not to upload everything from previous versions as it had a lot of bugs. I will upload almost everything when a design prooves itself as stable)

    I hope I will be able to upload few photos or even a short video of functioning printer.

  • I am back

    Jure07/12/2017 at 20:37 4 comments

    On monday I have received the results of the exams I had in past two months. This also concluded my high school days and started my almost 3 months long break. This means I will have a lot of free time to work on this project.

    Even though I had final exams spread across the last few months, I did some work on this project. I managed to get parallell drive belts on the y axis, add a servo to drive the x axis. I also calibrated the PIDs for both servos. I added limit switches for x and y axis. The HP45 mounts have also been made and attached to the 3d printer.

    Currently I am working on making everything working together. I am also trying to keep everything as clean as possible to be easy to read. Finally I decided on printer to work via web interface, this means no switches, displays, ... (maybe a status led or two). I think this is quite a nice feature as it increases simplicity for the end user. This also makes the printer controllable via tablets or phones (currently it is somewhat useless, but later I/someone could implement a function where user could print things directly from thingiverse or some other site).

    I am also working on making new materials for printing. Currently I am focusing on printing with technical ceramics. I have also decided to drop development on hydroxyapatite for now (it is too expensive/hard to produce and rather useless for now).

    Also I bought my first 3d printer (150$ replica of geeetech prusa i3). I have done some substantial upgrading like extruder replacement (makeshift version of e3d titan). Now it prints comparably to a Makerbot. This FDM 3d printer also allows me to make this project more friendly for those who don't have a cnc.

  • The future

    Jure05/12/2017 at 20:27 0 comments

    Next few weeks are going to be rather hellish. I am having my final exams at the end of may, where I will be recaping everything I have learned in 4 years. This is why there will be irregular logs, where I will be talking of what I have managed to do. I will be trying to finish on some basic upgrades. In June i am planning to continue on material research part of this project (mainly ideas posted in comments, PVA as binder and probably usage of currently researched additives on other powders).

    Hopefully I will be able to finish the replacement of printheads and addition of SBC in one to two weeks. These are currently the hardest for me to do, so mistakes, bugs and errors are bound to hapen.

    I will be also focusing on uploading files for current version of the printer to A360, so everyone can se how I made the printer.

  • Main controller AKA motion controller

    Jure05/11/2017 at 19:56 0 comments

    Today I have been focusing more on completing the firmware of main controller. It is nothing more than movement synchronization, zeroing and movement control algorithms. I am using STM32F103BC microcontroller (micro on the Maple Mini). It has ARM architecture with which I am not so experienced yet. This is why I am still having few problems with SPI communication and so forth. I have also started working with PlatformIO which is slowing me down a bit due to no experience. I have switched from Arduino IDE to PlatformIO, because it is more universal. If I am correct this could allow people to use their own microcontrollers with little or no tweaking at all. It also speeds the development process quite a bit with auto-complete.

    The main controller will function more like command to action interface instead of being a GPIO like interface. This way it will get commands from SBC (probably beaglebone black), which will trigger some sort of action. Here is a list of commands that I will almost certainly implement:

    Setting commands

    • Build cylinder steps per layer
    • Feed cylinder steps per layer
    • X axis resolution (steps per minimal move)
    • Y axis resolution (steps per minimal move)
    • Enable/disable calibration mode
    • Function commands
    • New layer
    • Fill cylinder
    • Start printing layer or single pass (yet to decide)
    • Zero the machine
    • Engage/disengage servos

    I am still deciding on how I want zeroing and calibration to function. One of my Ideas is for main controller to cut power to servos but keep the encoders and servo controllers running. After that the controllers would be sent into calibration mode (via communication line or a pulse on specific input pin). Then one could just move the printhead in to print area zero position. After that main unit would receive the global coordinates of the print area zero position via I2C or some other communication. Second option which is a bit more makeshift is to cut power to the servos, move the printhead into position, reset the controllers and then power on the servos.

    Single pass or layer printing function will probably function so that the printhead moves in to desired position. After that the controller will enter the pulse to move mode. This will be done using interrupts, so I will be able to achieve high speeds (hopefully somewhere around the max speed of the printhead). It will function so it moves to next position (set by resolution settings) after receiving a pulse from printhead controller. Then the interrupt would be attached for new pulse. I am still deciding on how I want main controller and printhead controller to talk to each other. I as settling on the idea of having three lines:

    • Next position (main controller moves the printhead to new position)
    • Next line (main controller moves the printhead to new line)
    • Move finished (printhead controller triggers the printhead)

  • The ideal construction

    Jure05/10/2017 at 22:03 0 comments

    In one of the logs I have mentioned that I will be reworking the construction. By that I mean, that I want to build a system with only one cylinder and a hopper like sytem which feeds powder from a large reservoir to the build space. By doing this I will be making the filling of the machine much easier and at the same time hopefuly increas the life span of the nozzle. One of the biggest problems of current system is that a lot of powder gets in to surrounding air. This makes space around the printer and machine itself dirty, which in a longer term leads to machine damage or even failure. This is due to residual powders collecting on greasy or wet surfaces and then solidifying. This leads to bearing or bushing damage on rails, axles and motors. It also shortens lifespan of printhead and makes it unreliable. One of the things that would be nice to include in the ideal machine is a vacuum that lets you to suck all of the remaining powder out of the build volume and at the same time it doesn't make a mess. All of the sucked powder would then get into a bin where it would be filtered and then sent back to the reservoir.

    This concept was left as one of the last steps needed to upgrade the printe due to the fact that it needs a little bit more thought put in. Also it is not as important as other steps as I can still work a little bit more carefully with powders, but in the long ter this would get very tedious.

  • Addition of single board computer

    Jure05/09/2017 at 20:10 0 comments

    Few days ago i wrote a little bit about problems that new printhead will bring. This is why I am now prioritizing the "replacement" of a pc with an SBC. It will make things much more cleaner and easier to use. I also wrote, how I want the workflow to be. This is why I don't just rush with this upgrade. I want this to work over LAN. By saying this I am avoiding usage of any monitors, keyboards and mice connected to printer. If I were to decide that I would use Beaglebone Black, I would probably include the connection over usb (BBB can be accesed with PC over usb).

    To use an SBC i will have to "port" the current code to Linux. I would then have to change USB serial communication for SPI (shouldn't be too hard to do) and adapt whole program to send new commands. I would also have to set up an php server to host the dashboard, which would have a FTP protocol to send the file to the printer. I will probably stay at using svg files for now as slicing on the sbc itself is a bit too chalenging for me at the moment. But it will be done nontheless. Also as I have mentioned my greater plans, it could be necessary for slicing to be done on pc.

    Current plans show that now I will have 3 separate units instead of one. Previously I had only arduino mega with the needed motor drivers, board with relays and a printhead. Now I will have the SBC and 2 separate maple minis plus the required motor drivers and other boards. To organize the system a bit I might be making new PCBs, where one could be something like RAMPS, but for Maple Mini, and one would be for the printhead (something like a breakout board). Ideally I would embed the STM32F103 microcontroller on the printhead driver board itself (this is also in the works, but it will have to wait as a new version of the driver board is being designed). I will also make a PCB for the SBC, but this will come later as I am yet to decide on what I want to use.

  • A massive thank you to everyone

    Jure05/08/2017 at 18:22 0 comments

    Today I have seen that I have been chosen as one of the 20 finalists for hackaday prize 2017. Currently I am so euphoric that I can't even think normaly. So i would like to thank everyone who suported my project in any way. Wining the place in finals also gave me so much inspiration that I think we could make this device even better, but I won't be uncovering the plans just yet. Anyway I think you guys will like them.

    Sorry for a shorter and pretty much useless log today. Normal logs will be back tomorrow.

    And a massive thank you to everyone!

View all 23 project logs

  • 1


    If you are lost or don't understand the guide completely take a look at the A360 site.


    To assemble the cylinder you will first have to assemble the pistons. You will need 2 or 4 M6 threaded rods per piston. You will also need one nut gear for every rod (3d print the cylinderNutGear.stl file and tap the hole in the middle with an M6 tap). 

    You will have to drill and tap a M3 hole in the center of the threaded rod. Then you will have to grind about 0.5-1mm deep and 2.5mm long on opposite sides tangent to the rod (image above shows how it should look). Then you will put the ground sides of the rods into the slots in bottom plate of the piston. Then you should screw them using M3 screws. On top of the plate add 102X102mm piece of felt (it functions as a seal so make sure it overlaps on every side for at least 1mm). Add the top plate to the piston and bolt everything together. 

    After that you shoul put both cylinders trough the bottom plate of the cylinders. Gently screw on the nut gears and tighten them just a little bit. Then you should assemble the Motor plate by screwing on 2 Nema 17 motors and putting motor gears (cylinderMotorGear.stl) onto the shafts, use loctite or a setscrew to tighten it down.

    After that you put the two assemblies together so the gears are between motor plate and cylinder bottom plate. Then you can easily assemble  the cylinder by gluing (or if you drill and tap holes you can bolt it together), the front, back and middle plate and then you just add the two side plates.

  • 2

    For the gantry you should assemble all of the carriages first. Then you just put the 2 rods and the roller trough the designated guides one of the y carriages and. Add the x carriage on to the rods. At last you add the final x carriage. All you have to do next is to tighten every bolts. There are square holes designed for nuts where the screws are not going trough the whole item.

    Finally you should add the endstops. X axis endstop can be mounted on top of one of the y carriages. There is a hole on top of a x carriage that is meant for an adjustment screw that pushes the endstop. Y endstop should be mounted at the bottom of the linear guide clamp

  • 3
    Final touches in mechanical assembly

    Mount the cylinder to the base plate byput the cylinder in the groove and drilling and tapping the marked holes (holes in the base plate). Then you should assemble the y rail mounts. After that bolt them to the base plate. Put the y rail rods trough  the mounting holes but leave 10cm between the next mount. put the gantry in between. Feed the rods trough the guides and mounting holes. That is it.

    Add the belts, pulleys, wiring. Use springs for belt tensioning. After that you should mount the printer on a fixed plate like a piece of mdf. If the base plate is bending use screws or double sided tape. Connect the motors and electronics (refer to the uploaded schematics).

View all 7 instructions

Enjoy this project?



Ugi wrote 05/09/2017 at 21:37 point

One thing you might like to consider is adding a proportion of fine silica powder either to the dry powder (best I expect) or the binder.  Silica/quartz is just silicon dioxide (essentially pure glass) and is very well tolerated in the body.  It also sinters at below 1300'C so it should act to bind your other components (esp the hydroxyapatite) together.  It's essentially like clay setting in a kiln.  It would not matter if the binder burned out providing the silica sets the mixture when it cools.

Keep up the great work!


  Are you sure? yes | no

Jure wrote 05/10/2017 at 13:56 point

Some form of silica make bioactive glass. I am still doing a bit of research on it. Anyway it is quite a good idea as materials with lower melting points could act as secondary binders. As i have said in previous comment material part of this project has been put aside as i don't have a kiln (I want to make one but i can't find any cheap thermocouples that have a range to at least 1400°C). Plus the curren't printer is somewhat non functional as powders clogged half of the nozzles on the printhead (this is also the main reason why I want to move to cheaper printheads). 

  Are you sure? yes | no

Brian wrote 05/07/2017 at 22:08 point

Great project!

You could also look into bone meal. It is cheap, and contains a large percentage of hydroxyapatite.You would just need to figure out how to remove the organic fraction (protein and other cellular material) in a cost effective way.

  Are you sure? yes | no

Jure wrote 05/08/2017 at 14:53 point

This was one of my first ideas half a year ago, when I was not "sponsored" yet. Because I got the chance to get help from institute (institut Jozef Stefan), i never got around to testing it. It could be easily done by mixing the bone meal first with hydrogen peroxide and then with potassium hydroxide. Then I would have to filter it and probably grind it so I would get realy fine powder. I will probably try it but for now I will be staying at things that are guaranteed to work (plus I don't have a kiln, because i am not working with institute anymore)

  Are you sure? yes | no

Esa Niemi wrote 05/06/2017 at 18:50 point


I haven't read through everything yet, but so far this looks really promising. I was just wondering if the code could be migrated to GitHub, as if and almost always when bugs appear a VCS comes in handy :)

  Are you sure? yes | no

Jure wrote 05/06/2017 at 21:01 point

I will be migrating code to github in couple of days. I will also try to make a shared page on A360 for everyone to see the construction, so i don't have to write so detailed guide on assembly (it is a lot easier to construct the thing from a 3D assembly). But this will probably come a bit later as I am moving from solidworks to Fusion360, which has a different way of making assemblies.

  Are you sure? yes | no

Esa Niemi wrote 05/06/2017 at 21:04 point

Nice! Looking forward to that.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates