My girlfriend challenged me to make a hand soap dispenser that is cooler than anything we could buy at Crate & Barrel (or similar stores). The result, after a number of design iterations, is this bottle which now inhabits our bathroom.
This dispenser is designed to reduce waste in a number of ways. First, it is easily refillable, and so can be used for many years. Second, as the pump is turned, liquid soap spills from the spout back into a hole in the bottle, thus recycling any drips. Third, this design makes it easy to get as much or as little soap as you want, while commercial soap pumps often dispense more soap than necessary with a single squeeze.
Print one of each part. Twist the crank onto the rotor (it's designed to be a tight fit, but if it doesn't work with your printer's calibration, you can adjust the crank tolerance parameter in the OpenSCAD file). Slide the rotor all the way down into the pump body.
To fill, simply remove the rotor, pour liquid soap into the top of the bottle, and slide the rotor back down into place. Be careful not to fill it too full, or when the rotor is inserted the soap may overflow from the vent hole.
To use, turn the crank clockwise until enough soap is pumped up that it begins to spill from the spout. Wipe your finger up the spout to get the desired amount of soap. The crank should turn easily; soap is viscous enough that a tight seal is unnecessary. This tolerance can also be adjusted in the OpenSCAD file.
The crank drives a progressing cavity*, or Moineau, pump which was invented by RenÃÂ© Moineau in 1930 and first described in his doctoral dissertation. His idea helped him found a company that is still around today, selling these very pumps: http://www.pcm-pump.com/pump-manufacturer/history.html