Oasis 3DP

A powder and inkjet 3D printer based on HP45 inkjet technology

Similar projects worth following
Oasis is a powder and inkjet 3D printer (3DP) that uses older inkjet technology to print an object. HP45 inkjet printheads jetting binder are used to bind powder locally. This part can then be cleaned and treated to create an 3D object.

3DP can print in several materials to get several results:
-Gypsum: For full color parts if printed with a color. Infiltrated with CA afterwards;
-Sand: For sandcasting moulds;
-Sugar: For edible prints;
-Ceramics: For printing stoneware. Parts need to be fired afterward;
-Metals: With a lot of post processing;

Oasis (and my other 3DP printers as well) were developed to add powder and inkjet 3D printing to the list of open source 3D printers.

Oasis is not a finished printer, rather a working prototype. Software and hardware may have quirks.


Oasis is a open source powder and inkjet (3DP) 3D printer. It is designed to be a hackable platform to experiment with 3DP printing.

Current specs:

  • Build size: Ø84mm x 100mm;
  • Printhead: HP45;
  • Printhead DPI: 600;
  • Printhead swatch size: 300 nozzles, 0.5" (12.7mm);

Handy features:

  • A cover to keep dust out and powder in. (This may seem mundane, but was seriously lacking in my previous printers).
  • A large, flat, unobstructed build area that is easy to clean. (Again, seems mundane, is not mundane).
  • An aluminium extrusion frame where parts can easily be bolted on.
  • Plenty of room for future additions (It should be able to handle 5 printheads or a 200mm cubed print area).

Logs of interest

How 3DP

'3DP' also going by the names 'binder jetting' or 'powder and inkjet printing', is a technique that uses inkjet and powder to fabricate parts. 3DP printers consist of a moving inkjet printhead, a build area, and a way to deposit new layers of powder in said build area. The example below uses 2 hoppers and a spreader. The left hopper supplies the powder and is called the 'feed hopper', the part is built in the right 'build hopper'. A spreader can move between these hoppers to transfer powder from one to another. The order of operation for 3DP printing is as follows:

  1. The inkjet head deposits binder wherever the part needs to be. Where the binder fills the powder, the powder solidifies;
  2. The build piston lowers by the layer thickness, the feed piston raises enough to fill the build area completely;
  3. The spreader spreads the powder from the feed hopper to the build hopper;
  4. The spreader returns and the printer starts at step 1 again. This is repeated until the part is finished.

After this printing, the part is allowed some time to dry. It can then be removed from the printer and gently cleaned. After this the part can either receive further processing, or be used directly.

Why 3DP

3DP is quite unlike FDM and SLA. It's biggest advantages are:

  • You do not need support material. The powder is added one layer at a time, and the powder from the previous layers supports the next layers. All the unprinted powder can be reused infinitely.
  • A wide range of materials can be printed. While FDM is limited to plastics, and SLA requires light sensitive resins, 3DP can print most materials that come as powders.
  • Color can be printed. Because 3DP uses standard inkjet technology, it is possible to add color, simply by printing dye alongside the binder.

3DP is not perfect though, There are some drawbacks that need to be considered:

  • Powder printing is inherently messy. Very messy.
  • All prints require post processing, ranging from simple cleaning to firing or infiltrating. Untreated parts are very fragile. This also limits maximum size of parts. The part needs to be able to survive post processing.
  • All of the print area needs to be filled with powder. While the excess can be reused, a minimum amount of powder is required to print at all.
  • 3DP prints only one material at a time.
  • Hollow parts need escape holes to drain unprinted powder.

What 3DP

There are a variety of materials 3DP can print. The only thing these materials have in common is that they are powders. In most cases, a glue is added to the powder. Examples of this are PVA, sugar or maltodextrin. The binder is generally an inert liquid, like an alcohol/water mix. I have...

Read more »


The software license for Oasis.

Adobe Portable Document Format - 77.43 kB - 09/08/2018 at 10:54


Oasis Total BOM 20181018.xlsx

A bill of material for one Oasis, to the current state of the machine.

sheet - 26.92 kB - 10/21/2018 at 08:11


OA-Y00-A01-00 3D-PDF 20181014.PDF

A 3D PDF of the mechanical parts of Oasis. Slow and in a finicky format, but openable by adobe pdf reader. Good for reference.

Adobe Portable Document Format - 26.12 MB - 10/14/2018 at 13:06


Oasis make package

A full package with all electronics, 3D files, drawings and software required to make one Oasis. While in combination with the 3D PDF, it should be possible to to build an Oasis, more information will be given in the instructions section.

x-zip-compressed - 42.61 MB - 10/21/2018 at 15:43


Oasis source files

Part 1 of 2 of the full source files. Needs to be downloaded together with part 2. Can be opened using 7-zip by selecting all parts and selecting 7-zip->Extract Here. Would love to post as one file, but there is a 50MB cap. Contains a Solidworks 2014 assembly of Oasis, all KiCad files and all soft- and firmware.

001 - 40.00 MB - 10/14/2018 at 13:18


View all 6 files

  • 1 × Full BOM can be found in files ("Oasis Total BOM *date*") 1 Oasis contains 128 unique mechanical parts and 40'ish electrical ones. Listing them here would be madness.

  • Future plans for Oasis

    Yvo de Haas11/05/2018 at 06:44 0 comments

    I have spent the past few months working hard to get Oasis ready before the deadline of the Hackaday Prize. While I am of course a bit sad that I did not win, I knew that I was going against some great projects. Congratulations to all the winners.

    My goal for the past few months has been to get Oasis 'working'. Printing, as good as I can in the time I have. Now that I no longer have any deadlines, I will dial the amount of work I put in Oasis a bit back. This does not mean that I will stop it, not at all. 3DP has been really interesting to me for the past few years, and I still want to make it better, but I need to catch up with other things too, something that I made little time for the past few months.

    While it may take a while, these are the things I hope work on with Oasis for the coming time (not in order):


    So far I have been printing with original Zcorp materials. This is not really going to work well on a cheap(ish) and open source DIY powder printer. Zcorp powder and binder is REALLY expensive. I have had my eyes on several recipes since Plan B year ago. I compiled the most notable ones here. Now that I have a machine that is workable, I will finally test some of these recipes.

    My main focus will be ceramics, then gypsum. Other material options such as sand and maybe metal will be for an unplanned future.


    Cleaning parts is difficult. For Plan B I built a box with gloves and an air pump to clean the parts. While this works surprisingly well. I want to make a better tool using better parts. This will be a negative pressure chamber with better recovery of the powder. I also want more pressure for the cleaning air. Lastly, I hope I can make it somewhat portable.


    Firmware works, sort of. Both the decoding of printing lines and the printing happens in  the main loop. Because of this, I cannot print much faster than 50mm/s right now, while the absolute max should be around 400mm/s. I do not hope to get the maximum speed without FPGA's but I do hope I can reach around 200mm/s without much fuss.

    To get to this speed I hope to offload all of the inkjetting code to interrupts and DMA. If I manage that, I will instantly lose the biggest bottleneck in the code. Set up inkjetting for one burst using interrupts, and letting it trigger through DMA. I might need to update the controller side of the PCB to make it work, but that is a small price to pay for higher speeds in my opinion.

    I also want to add features such as virtual speed and hardware trigger so it can print without an encoder, making it more usable to other people as well.


    Python I had to learn from scratch. If I would write it again now, I would do a lot of it completely different. And so I probably will. Too many points to mention, but I will make it faster, more stable, more usable, and to fix a problem I still have, make it output Plan B code as well.

    Another thing I want to do in software is make it usable without 3DP. I have yet to think of a way to make a universal inkjet driver for use in other projects, but it is something that I would be really interested in.

    Selling parts

    I have been getting requests for assembled printhead drivers. I ran the numbers for an assembled driver, and I get to the $150-200 range. Right now, with all the software and firmware in a meh state, I really am not comfortable selling it at those prices. I will take effort to make the price go down by redesigning it, and improve the software so it will work for more people and I actually feel comfortable selling it at higher prices.

    Color printing

    I want to find a way to print in full color. There are several options. One is to add a CMY head. HP has ones that are compatible with the HP45 connector. It is narrower however, limiting print speed. I can also make a driver for 5x HP45 printhead. More expensive, but a lot faster. What I decide on will be for later, but I do want to get full color available at some point.

    ... Read more »

  • How to install the HP45 connector

    Yvo de Haas11/02/2018 at 19:05 0 comments

    I sell HP45 connectors on Tindie. In order to prevent the misery that is the connector falling apart, I am writing this guide.

    The kit of the HP45 connector contains several parts:

    • 1 Fully assembled, capped HP45 connector;
    • 2 #6x3/8 screws to mount the connector
    • 2 Resin washers to get the right depth for the screws
    • 5 Spare pins and springs for if you lose one (or five)

    The footprint of the HP45 connector is in the design files, or as a separate download here. This footprint should be on a PCB of 1.6mm (or thicker) since the 52 springs will push against the PCB. The pads should also be gold plated, since the springs only make direct contact, and are not soldered in place.

    Mounting the connector

    To mount the HP45 connector you will need a Phillips 1 screwdriver and a 2.5mm Allen wrench.

    1. Take the HP45 connector and place it pins facing up, so you see the screw head.
    2. Remove the screw using the 2.5mm Allen wrench (but do NOT lift the connector up).
    3. Flip the HP45 connector WHILE holding the back cover on the back.
    4. When the pins are facing down, you can remove the back cover to expose the springs.
    5. Align the PCB with the 3 centering pins, and place the PCB over the connector.
    6. Take the 2 washers and screws and place them in the 2 outer most holes (3.3ish millimeters).
    7. Push on the PCB to make all the springs compress so there is no gap between the PCB and the connector.
    8. Take the Phillips screwdriver and screw the screws into the connector. Do not over tighten, this will strip the threads you make out of the plastic.
    2.5mm Allen wrench and Phillips size 1 screwdriver
    Place connector in this position
    Remove screw
    Flip connector WHILE keeping the cover on the back
    Remove the cover from the back
    Take PCB
    Align holes and place PCB over connector
    Place the 2 washers and 2 screws
    Tighten screws in connector

    The connector is now ready for use.

  • Can Oasis print a Benchy?

    Yvo de Haas10/24/2018 at 18:49 0 comments

    Yes it can print a Benchy. It took a few tries because Oasis is still a bit finicky and Benchy was quite challenging, even in 3DP, but it looks great.

    One fun property of 3DP that is really weird for me to get used to is that I really do not care about orientation, but very much about Z-height. Because of this, I printed Benchy on it's side. It took around an hour to print at layer height 0.2mm. Currently adding a new layer takes 8-10 seconds. Benchy is 30mm'ish wide. This totals 25 minutes of new layers.

    Cleaning and infiltrating it was quite difficult. I did not want to damage it, and my depowdering setup is not perfect yet. I did miss a few small spots, but I got almost all of the powder out.

    The Benchy looks really nice, though it is a bit more rough than an FDM printed part. The text on the back of the boat is not visible, the text on the bottom is. All tiny details are visible. A curious thing I noticed is that the side facing down was a lot more smooth than the side facing up. I suspect I used too much binder, and the binder wicked to the layers below, smoothing out the part. The layers facing up cannot wick into unbound binder, and so stairs are visible here.

    Now that I have printed a decent Benchy, I think I am now legally allowed to call Oasis a real 3D printer.

    (PS. should I be spending a whole log on a Benchy? Probably not, but I don't care, because Benchy)

  • The parts of interest

    Yvo de Haas10/16/2018 at 20:05 0 comments

    Oasis is designed mostly around standard 3D printer parts. However due to some technical challenges with 3DP, there are a few specialty parts I cannot design around. In this log I hope to explain what they are, where I got them, and what alternatives are possible.

    Spreader + motor

    One of the most important parts of powder printing is the spreader, A round, smooth roller. It is also one of the more difficult parts to get, and possibly the biggest compromise I had to make to ease of getting the parts. In Plan B, first I did without, which did not work. Then I had to jump through a lot of hoops to make one anyway, that worked somewhat. Now I am blessed to work at a company that can order at Misumi. Misumi, is magical. They have everything. The spreader is a standard(ish) part at misumi, 'SSFRHQ20-200-F20-P5-T20-Q5'.

    If you can buy at Misumi, do that. I have included a drawing of the spreader, 'OA-Y20-P13-00'. This is exactly what you buy at Misumi. If you have access to a lathe, you can make the spreader yourself. It does need to be concentric and smooth, but other than that should not be difficult.

    To drive the spreader a motor is required. For this I am using a cheap 25mm gearmotor. I used 300 rpm @ 12V, which seems about right.

    Between the motor and the spreader is a timing belt. I use GT2, and use a closed belt of 120mm long. They are available through the usual internet suspects. Timing pulleys can also be found here if you have trouble finding them. All used pulleys are GT2, 20T, 6mm width. The pulley on the spreader motor is 3D printed for 'pulley not being available' reasons. I advise against printing the other pulleys.


    The printhead and the motion driver are controlled by separate controllers. To synchronize them I use an encoder strip. These things are common in inkjet printers anyway, and are not that hard to get.

    For the actual encoder I use a 'AVAGO HEDS-9740#150', a 150 lines per inch optical encoder head. Most component suppliers list them, but do not have them in stock. Places like ebay do sell them. The tape can also be found on Ebay. you'll need a matching 150 lines per inch tape.


    Oasis uses mostly standard 3D printer bearings (608, 624, 625, preferably ZZ, LM8UU). However, on some places special bearings are needed. The spreader takes 685-ZZ (685-2Z) bearings. I cannot easily provide a link, but ebay has them in bulk.

    Aluminium extrusion

    Oasis is built around aluminium extrusion profile. 2 types of profiles are used. 30x30 and 30x60. There is not much to the profiles. They need to be 30mm, have a groove of 8mm, and the hole in the middle of the profile needs to be able to take an M8 thread. Not all profiles will need M8, but some do. You'll also need 30x30 angles, and 60x60 (2x30 long) angles. The exact type of nut you'll use is unimportant, but I prefer profile nuts that can be inserted after assembly. 

    I bought mine at Misumi because I was already ordering. I suggest finding a supplier near you. In the BOM, the Misumi name is given, but the number in the order number is the required length. You can use that to cut your profiles.

    An example of the used profile. Bear in mind that not all holes need to be tapped M8.

  • A video is there

    Yvo de Haas10/09/2018 at 18:44 0 comments

    There now is a video of Oasis

    I will not add much more to this log, since I spent the last week making this (^) video. I can now work on finishing the file packages and instructions for other people to be capable of making this printer.

    One last thing that will be clarified in the previous log: I now sell the HP45 connector on Tindie.

    Previous log:

    Because logs are ordered by when the first draft was made, not when it was published, putting my 2 weeks ago started log behind this one.

  • The color of the day: Blue

    Yvo de Haas09/27/2018 at 19:03 0 comments

      I refilled my printhead with actual Zcorp binder. I got this stuff from a friend of mine a while ago, and it will allow me to get a bit of a baseline before I start messing with my own binders and powders.

      The first important step is to print a new carriage. I thought the refill port was on the front, I though wrong. It is on the bottom. I want to plug the printhead with a screw and o-ring, so I need a hole there. I ran out of the faint blue, so I will be using the much nicer dark blue.

      To get a good idea of what the HP45 is, go here: It has some great pictures of the HP45 itself and some explanations that will become important. Summary, a spring loaded tank that holds the ink under a vacuum.

      I needed a few things to refill the printhead. The first is the binder. I also added some ink so I can see what I am printing. I chose blue because I like it. I also needed a syringe with needle, a lot of paper towels and running water. Refilling printheads is messy. You cannot believe how much ink can be diluted and still be completely black. Last I needed a suction head so I can draw the ink through the nozzles. This is a tool I 3D printed and added a o-ring to. It works shockingly well considering I spent 5 minuted designing it.

      Interesting note, the blue color of the prints now comes from the binder, not the powder. This is how you can add full color. CMYK and binder and you have a full color printer. I will investigate this after this first part of the project is done, but it is not part of the scope of this project itself.

      The rough list of steps needed to clean and refill a HP45 printhead:

      1. Take the sticker of the bottom;
      2. Push the ball sealing the printhead into the printhead;
      3. Squeeze (milk) the ink out of the printhead (it does not simply drain);
      4. Suction last ink through the nozzles using the tool;
      5. Fill with water/alcohol mix (or plain water for some of the repeats);
      6. Combination of milking the printhead and sucking ink through the nozzles;
      7. Repeat step 5 and 6 till water comes out clean;
      8. Refill printhead with binder (and optional ink, I did 1/20 cyan ink);
      9. Clamp the printhead with a strong clamp. The head should not have any air in it;
      10. Cap the hole. I used an M4 screw with a 3.5mm ID o-ring;
      11. Release the clamp;
      12. Suck the binder through the nozzles using the suction tool;
      13. The printhead now ready for use;

      I will post a proper guide later, mainly because I cannot save drafts in guides and like to write over a few days. I have plenty more pictures and detailed steps available, but I also have 100 other tasks that need doing right now.

      A thing I discovered very quickly is that the vacuum on the printhead is really necessary. Previously I just filled the head without the clamp. After a single burst of ink there was ink leaking from the printhead. I then opened the head, clamped the body with a clamp, and closed it again. This time it printed perfectly.

      Another thing you will find out (I did at least) is that refilling a printhead is messy. Once the ink touches your hand, it stays there. My hands are various nice shades of black and blue. Next time I will be wearing gloves.

      I have heard (but not confirmed) that you can replace the milking and sucking with a centrifuge. I have no centrifuge here, so for me it will stay a mystery, but it is a nice thought.

      I will be printing with this binder for the coming few days, trying to dial in the ink percentage and trying to print some nice objects.

      Left binder, right pure ink
      Printed in glorious blue

      More coming soon, this project is now really moving.

  • Some info on interfacing with the HP45

    Yvo de Haas09/25/2018 at 19:13 0 comments

    In the previous logs I have barely mentioned the interfacing with the HP45, although it is quite an important part of this project. The best I did was this log, where I spent 62 words on the problem. In this log I will give some more background on what the problem with the HP45 is and how to work with it.

    Too many pads

    When you look at it the problem is quite simple. The HP45 has too many pads. Reliably connecting to 2 or 3 pads is simple. Reliably connecting to 52 is a bit more difficult. Depending on what pad you lose, you can lose between 14 and 22 nozzles. The problem with this many pads is so big most manufacturers don't bother with it anymore. They just put some more electronics in the printhead itself. The HP45 is between the first inkjet printheads where they were figuring it out, and the later printheads where they optimized the design.

    Pogo pin connector

    Pogo pin breakout board (on 5mm squares)

    Imagine replacing a pin on this (I did, it sucks)

    This is 2 PCB's, with IC's in the middle. If something breaks, good luck fixing it..

    My first way of connecting to the HP45 is with a pogo pin board. I have had breakouts and full drivers built this way. They are built on 2 boards to give the pins stability and to make routing somewhat possible with a 2 layer board. It is practically impossible to route without more than 2 layers, because all pogo pins are essentially through hole, and you cannot reach all the pins at once.

    In all fairness, it worked quite well. It is not perfect though. The pogo pins are only 0.8mm thick and so are incredibly fragile. In most printhead carriers you inert the printhead from the top. This means it is easy to hit the pins sideways while loading a printhead. This has happened, and the pins cannot take any sideways load and simply bent. The pins are soldered to both boards, so if a pin gets bent, you have to desolder it from both boards at the same time. I have done this, but it is the absolute worst job to do.

    Cue the HP45 connector

    Breakout board
    Full driver board

    Fabulous, isn't it?

    The HP45 connector is a purpose built connector that has 52 pogo pins in a single plastic housing. It does not have the travel of my own pogo pin circuit (not that you need it), but it has pins that you can hit sideways without breaking them. Also it does not solder in place, but makes contact with the PCB pads, giving more freedom in routing. In my case I can now route on a single 2 sided PCB.

    The HP45 connector is founds here: It is also on Alibaba through the same supplier. While it states it can supply small quantities for under $10, my experience is that those prices start happening at size 100. You get these connectors unassembled, dropping an assembled one is cause for much tears.

    I myself have bought a batch at CFConn. I now have way to many. I sell them on Tindie right now. I will start selling more HP45 related components later when the documentation is finished.

    The HP45 connector uses tiny gold plated springs and pins in a plastic housing to make connection to the HP45. The travel is about 1.5mm on each pin.

    3 locating pins locate the connector to the PCB. 3 holes can be used to mount the connector. the 2 outer holes are 2.8mm, the inner hole is 3.85mm. I use the 2 outer holes with M3 cutting into the holes, but I am still looking for proper plastic screws. To make a connection with this printhead, you'll need 52 located pads on a (preferably gold plated) PCB. I have included the KiCAD files on the page of the connector, here on my own site, or is in the electronics section of the source files.

    I currently have 2 boards, a breakout board that breaks the 52 pins out to 2 2x10 pin boxed headers (grounds are shared) and 1 driver board. The...

    Read more »

  • She prints!

    Yvo de Haas09/24/2018 at 18:51 0 comments

      Not much, not amazing, but prints nonetheless.

      I have made all modifications to 3D print in the last few weeks. Now all I need is to try out more, and make the improvements to make it better. Currently I am printing in original Zcorp powder with HP45 ink. I got this powder (and binder) from a friend a few years ago. I have yet to experiment with my own powders and have only tested with this so far. I printed a 12mm diameter by 3mm disk as a proof of concept. The part was strong enough for removal and cleaning.

      There are a few limitations at this moment. I have not yet had the time to modify printheads. This means I am printing in pure ink. This means that 1. my print is extremely black and 2. the green strength (untreated part strength) is poor. The powder has a lot of chunks, hairs and other contaminants in it. I still need to filter it through a mesh some time. I have to use the depowdering tools I made for Plan B ( I have no good superglue anymore to infiltrate the parts, so I have no pictures of finished parts. The part broke while infiltrating with bad superglue.

      Those are all the tiny problems left. I can easily fix them with some time though, so it is all right.

      Pistons and new layer

      The pistons now have seals in them. I have used sponge for a while because it is low friction and flexible. I have a little leak on the feed piston to fix, but other than that it is powdertight.

      While preparing to print, I made some final tweaks to the new layer function. I have made it so the last motion is always up. Even on movements down it will now move down too far, and back up again. This is to ensure accuracy. By always moving in the same direction you prevent the backlash in the leadscrew causing problems. I cannot move both pistons at the same time due to GRBL 4th axis issues, so moving pistons is not terribly fast.

      The current sequence is:

      1. Move to the back of the feed piston*;
      2. raise the feed, lower the build;
      3. starts spreader and move to overshoot position;
      4. stop spreader, move pistons down by clearance distance*.

      (*all piston movements will go down first so they always move up)


      I finally added the polycarbonate to the frame of Oasis and it looks amazing. This cover serves to keep the dust from printing in, and the dust and junk from me being there out. I wanted to have it on before the powder would sit for longer times in the open.

      USB cable

      I finally wired the USB cable through the ribbon cable (no good photo's :( ) This was the plan all along, but now with the cover in place I needed to do it. Else I have no way of connecting a USB to the printhead with the cover closed. I will try and finish up the wiring diagram of Oasis now that I am finished.

      (near) future updates

      I realized that I need to give some more information on the actual HP45 connector side of things. I will do this soon'ish, as well as actually making the HP45 connector (and some of the boards) available for sale. The connectors are hard to come by in small quantities, so I had to buy a lot of them.

      I will fix the printing and post processing issues I have right now, and maybe print a few more challenging parts. I will also attempt to refill a head with actual binder in the near future.

      Hackaday prize video in a few weeks.

      I will also start on making some of the assembly instructions, and file packages available. I do not think many people would want to start on this yet (while it is still a working prototype) but I won't let missing files be the limitation.

  • Phase 2 in progress

    Yvo de Haas09/08/2018 at 18:53 0 comments

    Phase 2 sounds really ominous. All I am doing is turning a DIY 2D inkjet printer into a DIY 3D one. Now that I am talking about it, things are going really well. An overview of the progress.


    The pistons are 2 90x3.5mm PVC tubes. The design called for 90x3mm aluminium, but I had some supply issues. The effective size of the pistons is around Ø83mm by 100mm high. This will be plenty for material testing. Once I need bigger prints I will design a better hopper with more volume (or another printer with a bigger hopper).

    The software for the 4th axis turned out to be a bit of a nasty surprise. The Arduino CNC shield has 4 stepper motor drivers, but that 4th driver is a lie, at least with default GRBL. I now run a special ( Version of GRBL that supports the 4th axis while giving up some spindle support. I can not run both pistons at the same time and this version is GRBL 0.9 (currently 1.1) (which required some tweaks in my software) but both axes move and provide feedback. I will upload wiring diagram and include the firmware with correct configuration when I can. Once I get around to writing instructions I will dedicate a section to wiring and configuring the GRBL driver. It has slowly grown to be quite complex.


    The spreader is now mounted and wired up. The CNC driver board I use does not have powered outputs, so I have made a tiny mosfet based circuit to power the spreader. I have attached the spreader to the coolant pin (which is controlled by spindle commands, yay alternative GRBL). Sending the M4 command starts the spreader, M5 shuts it down. The spreader itself uses a 12V 25mm gearbox motor at 300rpm. I have 120rpm available if 300 is too fast.

    SVG file reader

    In the  last log I said that I would only write a parser for SVG files myself if nothing else worked. As it turns out I lied. I wrote a parser (I had a weird day, don't judge). It only takes Slic3r SVG files, which only use straight lines and have layers. It runs just about as fast as anything else in python does (dead slow), but so far it gives clean layers. This is a great relief, because the parser was the last potential issue (lets hope).

    On the software side all I need to do now is write the code that makes all the 3D printing motions and prints the right layers at the right time, but that is peanuts compared to the SVG parsing.

    See below, a GIF of software reading an SVG of a gyroid.

    Next log

    All I need now is the adding the right code to move the pistons, and to print the right SVG slice. I also need an overshoot bin, which is easily built. When those parts are done, there should be nothing stopping me from printing in 3D. Then I can start playing with materials and binders. I have added a new package of software to the files for anyone interested.

    The next log should be interesting. It won't be too soon sadly, I have a few full weekends, so expect a bit of radio silence for 2 week.

  • Commencing phase 2

    Yvo de Haas08/31/2018 at 18:40 0 comments

    2D printing is now almost working. It is not perfect in several ways, but it is capable enough that I am convinced it will work for 3D printing.

    What was wrong in the previous log:

    • 1 mask was flipped in the firmware. This caused the wrong row to start when the right row entered or exited the print area, cutting off 4mm of odd or even on either side of the print. The mask was flipped the right way around. The print improved immediately.
    • one of the Base 64 en/decodings is the wrong way around, sending the nozzles in order 6,5,4,3,2,1 instead of 1,2,3,4,5,6. I have dug quite deep, but have not found where. I then decided that I was lazy and flipped it in the software. This turned diagonal lines from jagged to perfectly straight. 
    • head needed to be cleaned with alcohol before printing. The ink in the heads dries quickly, and within a minute the head becomes clogged. Simply wiping it with a paper towel helps, but cleaning it with a paper towel soaked in 70% IPA worked wonders. It gives about 30 seconds to start the print. Not ideal, but workable.

    There are a few small things left to be done before I can print well enough for 3D:

    • The first sweep after starting up sometimes does not print. This is firmware side and has been there since the first tests. I know where the problem happens, and have fixes ready.
    • The first sweep of a print is offset by around 0,5mm. This seems to be some encoder drift from the motion between the home position and the other smaller movements. All other sweeps in a long print line up perfectly. The exact nature of the problem remains a bit of a mystery.
    • At least 1 pair, probably 2 pairs of nozzles are swapped. I will do a few tests to narrow down which. If I can also identify the nozzles that are swapped with, I will fix, else I will simply disable for now.
    • Software DPI setting. The software does not yet have all checks in place to change the nozzles per inch sent to the printhead. I will add this during phase 2, where it actually becomes important in the SVG parsing as well. Firmware side already handles it fine.
    • mystery exit on occasion. Haven't had it for a while, but the code has mysteriously exited with a code I cannot find right now (-10#... with around 12 numbers (negative)). The problem is gone for now, but I will keep my eyes open.

    There is also one issue I will not be fixing for now. I cannot properly send lines of code while the printhead is printing. Somewhere in the mess of code, probably in the Python side, the software refuses to send code fast enough. I have had other mystery issues where some threads do things instantly, while others take forever, and these same threads at other times run fast. The short of it is that I am limited to 1000 lines of inkjet code. With DPI working and set to 150, I can easily print any print I have had on Plan B with room to spare. I already had to send long dithered images before I was reaching the limit of the buffer. This is why I have decided not to pursue any fix for the 'cannot send while moving' problem until I am done with phase 2. 'First make it work, then make it better'.

    Phase 2 has now started

    In phase 2 I will be converting Oasis from a working 2D printer to a working 3D printer.

    For this I will need to complete the following tasks:

    • Designing and building 2 powder pistons. The most obvious thing I need is 2 hoppers, 1 feed and 1 build. These are going to be small, around 80-100mm in diameter. Small because every square centimeter of hopper also needs to be filled with powder, and I want to test around with powders a bit. Round because it is a shape I can buy off the shelf. Bigger hoppers will be designed eventually.
    • Spreader wired up and working. The spreader is in place, it only lacked the motor when I was building it. I have to print a pulley, attach the motor to the spreader, and wire something into the GRBL driver so I can make the spreader...
    Read more »

View all 21 project logs

  • 1
    Before you start assembling

    You want to build an Oasis. Neat. Be aware that it is a prototype and not a finished, optimized product. Toolchain, Software and firmware still needs to be optimized. Why is there documentation if it is not finished. Because it works.

    All the most up to date files for Oasis are here, in the file section of the page. To make an Oasis you will need 3 files the most. The first is an excel file called 'Oasis total BOM *date*'. This contains the full Bill of Materials for Oasis, mechanical  and electrical. The second is 'OA-Y00-A01-00 3D-PDF *date*' This is a 3D PDF of the mechanical build of Oasis. This should help aid in the building of Oasis. The last is a zip file 'Oasis make package *date*' This contains all files and drawings to make an Oasis.

    After extracting you will see 4 folders. 'Electronics', 'Firmware', 'mechanical', and 'software'. Each folder contains all necessary files to make an Oasis for that category.

    In 'Mechanical' There is a certain file structure in the names. All custom parts and assemblies have the name: 'OA-Ynn-Ann-nn' or 'OA-Ynn-Pnn-nn', where 'n' is a number. 'OA' is the project (Oasis), 'Ynn' is the group, or subassembly. 'Pnn' is a part, 'Ann' is an assembly, and the last 'nn' is the revision. The project starts at 'OA-Y00-A01-00' (as of writing. If you see a higher revision, don't worry and pick that). This contains the full drawing of the assembly, and refers to other subassemblies and parts.

    In each subfolder you will find at least one PDF drawing of that subassembly, PDF drawings of parts you might need to make, and STL files of parts you need to print. All drawings and step files are accompanied with STEP files you can open in many CAD packages for reference or to change them.

    These drawings, accompanied with the 3D PDF, should help you assemble the mechanicals of Oasis.

    Now the bad news. I do not have a full set of photos in the order of assembly. I built what is in the files over 3 months, improving parts as I built. In my drawings, I tried to give a good suggestion for order, but the photo's will not follow that. If you want to assemble it in your own order, feel free. All the the provided photo's are for reference and not in chronological order at all. Nonetheless I hope they will be useful.

  • 2
    Assembling electronics

    The electronics can be installed afterwards, but in order to keep this guide as chronological as possible, it is first time to assemble the electronics. In the BOM, under 'Electrical' you will find a list of components, including what name they have on the PCB, and the footprint.  I will be hand soldering SMD in this example, so it might be a bit messy in places.

    HP45 driver board

    The first board and the most complex board is the driver. This driver board controls all addresses, primitives and has the ability to test the nozzles.

    Install the capacitors. The footprint of the capacitors is 0603 and they should be at least 16V. C1, C6, C7, C8, C10, C11 are 0.1uF,  C2, C4 are 1uF. Polarity does not matter on these capacitors.

    Install the resistors. The footprint of all resistors is 0603, they should be 1% and need to be around 0.1W. R7, R11, R12 are 330Ω, R5 is 1.2kΩ, R1, R2, R3, R4, R9, R10 are 2.2kΩ and R6, R8 are 10kΩ.

    Install the mosfets. There are several types. Q1 and Q2 are the small ones. They are PMV20CNER and have a SOT-23 footprint. They only serve to shift level, so any low threshold voltage N channel mosfet should work. Q3 is the big one. It is a SIRA12DP-T1-GE3 in an SO-8 power pack. It needs low on resistance and a gate voltage lower than 3V. The dot marks the orientation for Q3.

    The IC's are plentiful on the driver board. IC1, IC3, IC6 are HEF4017 with package SOIC-16 3.9mm. The exact 4017 is not important, only that it is at least 15V. IC5 is HCF4081, the package SOIC-14 3.9mm. Again, only voltage is important. IC2, IC4 are TLC59213. Rhese will be most difficult to solder. The package is TSSOP-20. Foot pitch is 0.65mm. The last component is C7, LM311. It is SOIC-8. On all components there are dots and marks to indicate orientation.

    Install the Electrolytic capacitors. C3, C5 are 100uF, 16V minimum, package 8mm, height lower than 10mm. C9 is 1uF, 16V minimum, package 4mm.

    Mount the HP45 connector using M3x6 or #6 screws (I am experimenting with #6, if they behave I will include them in what I sell. The holes are not actually big enough for #6, so I do have to ream the holes right now.

    2x 16 pin female headers, 2.54mm (J1, J2)

    HP45 controller board

    Mount the U1 7805 voltage regulator, footprint TO263-2.

    Place the Teensy 3.2 on the controller to align the male headers. Solder a few of the pins on the Teensy (But NOT on the PCB) to secure the headers. You'll need 2x 1x14, 1x 1x5 and 1x 1x3.

    Solder SMD male header 2x7 (or 2x 1x7) under the Teensy 3.2. Make sure it is aligned with other headers. Make sure all SMD pads under teensy make good connection to the Teensy if you permanently solder it in place. Once it is in place, you cannot access it to repair a solder joint.

    Solder the Teensy 3.2 to controller board. Here you can optionally solder female headers to the board. Be aware though that this will increase the height of the whole assembly to a point where it will not properly fit in Oasis.

    Solder the electrolytic capacitors C1, C2. 100uF, 16V min, package 8mm.

    Solder the male headers 2x 1x16, 2.54mm pitch (J4, J5), 1x4 female header, pitch 2.54mm (J3). 1x3 3,5mm screw terminal (J1).

    Put boards together and enjoy.

  • 3
    Assembling the frame

    The first component that needs to be built is the base frame. In the drawings this is Y10. The drawings for these parts are: OA-Y10-A01-00 (frame) and OA-Y10-A02-00 (Lid). It is easiest to start with the 2 sides, then add the middle profiles to it. The bottoms of the side frames need to be tapped M8 to hold the feet. The 2 30x60 profiles do not reach all the way. They are 30mm short to allow passage of the X driveshaft and belt.

View all 15 instructions

Enjoy this project?



wikyxx8 wrote 2 days ago point

Hello,Sir,your project is fabulous,and we are now trying to follow your project,we have already complete the firmware and the software,however now we meet some problems,


first is the part of circuitry connection,some of your circuitry map show that some wires should link to GND, does it means connect to the ground or connect to the negative electrode?

Ťhe second problem is of the software part. In your instruction 11, when we open the "Oasis, and try to connect the motion(in my computer it is com4), python shows such a information:” (Make sure 'QTextCursor' is registered using qRegisterMetaType().)” why is this happened? How can I solve it?


The third problem is also in the instruction the process of controlling HP45, HP45 can be successfully connected , but the python only shows that HP45 is opened ,there is no more informantion about the condition of HP45, so we doubt that we didn’t successfully connect HP45. Is that a problem or it is just normal?

  Are you sure? yes | no

Yvo de Haas wrote 19 hours ago point

I treat the GND as the negative electrode.

The warnings I had as well. Some of the widgets I used do not like the way I use them and python throws some errors. It was planned to be fixed a while ago, together with some other things, but I had issues and did not fix it. It should not give any issues. It is still planned to be fixed, but won't be for a while.

The HP45 serial window does not actually get any text. This made the code unstable, and I turned it off. In the same package of fixes this was to be addressed, but QT gave problems. The command window should tell whether you are connected. The temperature, lines left and position should now update. If you do have a printhead in, you can also see values when you press 'test', but without a printhead this just returns 0.

  Are you sure? yes | no

Joeri wrote 09/15/2018 at 17:51 point

would color printing be an easy addition to this printer?

  Are you sure? yes | no

Yvo de Haas wrote 09/16/2018 at 17:40 point

The size of the printer is as it is so I can have a row of printheads, or another printhead that has CMYK. Oasis in it's current configuration cannot. It needs a faster printhead driver that takes 5 printheads before I can print in color, but that would be possible. All other additions are software.

  Are you sure? yes | no

Donovan M. wrote 09/07/2018 at 12:49 point

Nice work! It reminds me of the powder 3d printer that printed a velociraptor call in Jurassic Park 3

  Are you sure? yes | no

nomoria wrote 07/17/2018 at 01:56 point

Really nice job!

Can't wait to see the actual results!

  Are you sure? yes | no

Involute wrote 05/02/2018 at 19:00 point

Do you know the status of 3D Systems' patents on this technology?

  Are you sure? yes | no

Yvo de Haas wrote 05/02/2018 at 20:48 point

I would not know exactly if the CISS would last for more than a liter, but I do know HP themselves make a CISS head with a attached container around half a liter (I think), so it should last in to that order of magnitude handled well.

I would have to look for the patent, but if I am not mistaken, one of the key patents expired after December 2017.

  Are you sure? yes | no

Involute wrote 05/03/2018 at 01:00 point

Thanks.  When do you expect to make your first print?

  Are you sure? yes | no

Yvo de Haas wrote 05/04/2018 at 06:12 point

Difficult to say exactly. All critical parts arrived yesterday (will post a log soon) so mechanically it will take a few weeks. But I will still need to program the head, and write controller software. I do expect to be finished before the finals of the Hackaday prize.

  Are you sure? yes | no

Involute wrote 05/02/2018 at 18:59 point

When do you expect to make your first print?  Also, wouldn't you expect the CISS HP45 to last for more than a liter?

  Are you sure? yes | no

fik3 wrote 03/19/2018 at 15:32 point

Interesting project but how do you replace ink ?

Do you use cartridge till end but that could damage it ?

  Are you sure? yes | no

Yvo de Haas wrote 03/19/2018 at 21:50 point

The HP45 is a fairly easy printhead to fill. It does not have a sponge but a hollow chamber that is kept at a slight vacuum using a spring. Filling it simply requires a hole to be drilled and capped after filling. This hole can also be used to drain the head. Alternatively, I have heard of draining the head using a centrifuge. Only challenge is keeping the preload on the spring while filling it.

I also plan to either buy or modify CISS HP45 heads (Continuous Ink Supply System). These have a small tube leading to them to feed new ink to the head. This way you can print from a tank and directly see the level.

The head has indirect ways of detecting that it is empty. The head has a temperature sensor. If this spikes quickly after a burst of inkjet, you can assume the head is empty. All of the energy will not be deposited in the ink, but remains in the head. If the head gets past a certain temperature, there is an error. If this happens a few times in a row, the head can be assumed to be empty.

  Are you sure? yes | no

Elliot Williams wrote 03/18/2018 at 21:47 point

I really want to see this work. :)

  Are you sure? yes | no

peter jansen wrote 03/17/2018 at 18:31 point

This is a really exciting project.  A long time ago I tried to jet photopolymer from an HP cartridge (with thermal heads), then from an Epson cartridge (with piezo heads).  You likely already know this, but the commercial systems that do this tend to use piezo heads with really large apertures, so that the liquids are easy to jet, don't have to be put through thermal cycles from the thermal heads, etc., and it just seems really challenging in ways that aren't entirely clear to me (not being a materials science) to get it to work well and repeatable, and to do it inexpensively.  Really interesting project, I'm excited to see what you come up with, and if you're able to get it working!

  Are you sure? yes | no

peter jansen wrote 03/17/2018 at 18:32 point

Also, have you thought about using a thin UV curing binder that's easy to jet, and then briefly curing each layer? 

  Are you sure? yes | no

Yvo de Haas wrote 03/18/2018 at 18:19 point

I am aware of the benefits of using piezo inkjet as opposed to thermal inkjets. Piezo generally lasts longer and has more flexibility on the fluids it can handle. However, thermal inkjets are not completely unreliable and piezo inkjet also has limitation. Several piezo systems cannot handle conductive fluids and piezo heads also fail or clog.

When you take into account the added cost of piezo heads (≈€150, Xaar 128) versus thermal heads (≈€15, HP45, excluding driver) and the fact that the Zcorp powder and inkjet printers also use HP printheads (HP only do thermal inkjet as far as I know), the HP45 seems like a reasonable head to use. As soon as you get into more exotic binders, the thermal inkjet does indeed start to become a limit, but most older powder and inkjet have used fancy water and alcohol mixes for a long time. I have already tested thermal heads to work on my older machines and I think it will be a good starting point for a new machine. 

I have considered several projects using piezo inkjet heads and UV resins (including your suggestion), but so far, I haven't done any. The scope of this project will not include it to keep the project manageable, but a followup might.

  Are you sure? yes | no

Krzysztof wrote 03/17/2018 at 15:09 point

How long does typical printhead like this last? Will it be able to jet out 1L of water/alcohol without breaking?

  Are you sure? yes | no

Yvo de Haas wrote 03/17/2018 at 18:10 point

I think 1L will be a bit much. The head only has 42ml of storage on it's own. I am not entirely sure if the life isn't more, I think the heads are refurbished and refilled after they are taken back, but 1L seems a bit much. 

Having said that, the head will not fail in one go, nozzles will start to break, and that is something that can be measured. Original printers using the head will just refuse to print, but you can compensate for broken nozzles in the software.

  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