Monday, October 4, 2021

Ghost writing Halloween Project using Ultrasonic Phased Array

Special thanks to UPNALab ( for providing all the tools necessary to build this Halloween project. Much of the heavy lifting was done by their work.


I've wanted to make a halloween project for a while now.  The neighborhood kids always get a kick out of the decorations we put out.  When I came across the SonicSurface project I knew I could retask it to create something scary for the local kids.  

My current intention is to conceal one 256 transducer array above a dusty surface and remotely trigger (or via simple motion sensor) "Spirit" writing on the surface.  I want to make the surface obvious that nothing is concealed within, so the kids can actually touch the dust too... Resetting the dust (baking soda?) would have a bin of baking soda and a servo with compressed air to "redistribute" between groups of kids. 


Build and Prototyping:

So first I went through the SonicSurface build instructions.  Their write up is an excellent read and has many useful details.  

Here is one of the completed arrays.  I had a couple issues with the driver ICs on the reflow front, but managed to fix them with a hot air gun. 

I designed and laser cut a temporary frame to test the two arrays.  I used the default spacing of 0.243 meters (found in the source code somewhere in the github of upnalab. Testing went well, and luckily I didn't have to calibrate any of the transducers.  

I placed a piece of wood and black paper on the bottom, disabled the lower array and spread baking soda over the surface.  I then recorded an "animation" in the ultraino software and played it back with the top array activated. 

It traced out a "scary" star.  

Now that I have the proof of concept working I plan on putting two arrays side by side, and incorporating the ESP32 controller that UPNALABs developed for sending remote sequences.

I also need to design something spooky to hold all of this and make it look like a spirit is authentically tracing its finger to spell messages.  


I decided to go with a "ornate" box suspended above a table.  I'm using a makita battery adapter (paid link) as I have alot of Makita tools .  I then have the 5V converter t(paid link) hat can take 8 to 35 volts input to power the FPGA.  I happened to have a Grove time of flight sensor (paid link) (to the left of the ESP32(paid link) ) that I'm incorporating to make it easy to suspend above any surface without having to specify the Z height to the algorithm that generated the pressure point. 

I'm going to laser cut veneers to glue over the outside of this, but gave a try at a portrait of the "spirit" and skeleton hands on the underlying part.  I had some other scary ideas, but the kids in the neighborhood can be pretty young and don't want to traumatize anyone :) Too much.  The laser settings were off for the image and need some tweaking.  The makita battery is a little taller then i realized, I may also tweak the veneer to cover this better.  

I used 1/4" baltic birch(paid link) ; this should be very sturdy.  

Glue dried and was able to mount the components.  Currently lasering the 1/8" "veneers" with the ghostly face etc.. Will post once complete.

Next step will be to code the ESP32 web server to provide a canvas I can trace and save animations on.  The ESP32 will then read the distance from the time of flight sensor for the constant Z distance, and play the animations x y components via the setfocalpoint calls.  

I'm debating a gesture based activation for the kids to use with the TOF sensor, or if I'll just kick of random animations on my phone via the ESP32 web server.  

I have most of the enclosure done with veneers put on.  I may change these as ideas come in.  The ESP32 server isn't working yet for points on a surface, so I still have the PC sending the animation. I may just export the hex data from the animation and use that as preset animations on the ESP32 if I cant figure out their algorithms.

Had some issues suspending it above the desk using a skeleton arm... So I just added legs to this version. Currently designing the veneers for it to make it look a little better. The time of flight sensor is now used to initiate one of the animations loaded into the ESP32. It will then cycle through. Now for looking into a good way to "dust" the surface.

Considering Sunday is Halloween I'm going to declare this project finished for this year. Next year I'm thinking of using two in a sandwich to make a ghost float around a graveyard in a scary diorama.

Tuesday, April 20, 2021

Socialite Coffee Carriers

 After making some coffee carriers for everyone in my wife's Coffee Club, I decided to make some more for a great Restaurant nearby called Socialite. Unfortunately I have to charge $30-35 each to make up for the time spent sanding, gluing, assembling, and sealing the carriers.  I'm hoping to get a better process down to bring that price point lower.  

Each 18" x 24" sheet of baltic birch makes one box.  Instead of wasting a little space on the sheet, I added coasters to the job. :)  The interlocking "fingers" hold the box together well when using Titebond II wood glue.  

I have a glue applicator on order that I'm hoping will cut down on assembly time.  Fingers crossed :)

DCT Wood Glue Applicator Glue Spreader Kit – 8 oz ounce Glue Dispenser Applicator Bottle, Glue Roller, Glue Tips, Tray

Monday, July 20, 2020



It's been a while since I've made a blog post. Thought this DIY I put together could help some people get a decent working fume extractor together for their laser cutter without killing their wallet or a HAZMAT team at their door.

After receiving a Black and Red Chinese 80watt laser cutter / engraver, it became evident I needed a better solution then just exhausting it out the basement window. The only place I had to put it was 20 feet from the window, and after doing a few test cuts of baltic birch I noticed I needed an stronger exhaust fan and also a filter box as close to the unit as possible. I managed to make a "fairly" inexpensive Fume Extractor that works much better then I has anticipated. The assembly is relatively easy and took me about an hour from start to finish. Here's hoping this project can help others in eliminating the smell of burning wood and acrylic.

What you'll need:

  • IRIS Airtight Pet Food Container - link  $30
  • BLUE 6" 152mm Inlet Short Truck Air Intake Cone Replacement Quality Dry Air Filter - link $21
  • VIVOSUN 2-Pack 6 Inch 8 Feet Non-Insulated Flex Air Aluminum Ducting for HVAC Ventilation, 4 Clamps Included - link $16
  • HORUSDY Hole Saw Set, 17 Pcs Hole Saw Kit - link $27
  • AC Infinity Air Carbon Filter 6" with Premium Australian Virgin Charcoal - link $65
  • VIVOHOME 6 Inch 395 CFM Black Round Exhaust Inline Duct Fan - link $90
  • Duct Connector Flange, Plastic Straight Pipe Flange for Heating Cooling Ventilation System (6'' Inch Round) - link $12
  • Lambro #246 6" Aluminum Duct Connector - link $7
Total Cost: $268.00

I chose to use the airtight food container as a start for my box.  I didn't have any large scraps of plywood on hand, and figured I'd go with everything sourced from Amazon..

The first thing I did was locate where the intake prefilter would go (the short truck air intake).  I drilled a 6 inch hold and mounted the duct flange.  I then attached the prefilter on the inside of the box.   I put some silicone sealant around the flange just to be sure everything was still air tight.

The next step was to locate the hole for the activated carbon filter.  I had to place that up at the top of the box due to its large size.  At first it looks like it wont quite fit, once the hole is there you can slide it down until the filter flange pops through the hole.  

I also placed the prefilter it came with on it.  I used a small piece of foam on the other end to hold it perpendicular to the hole.  You may need to play around with this to get a flat fit on the flange side.  I then applied a liberal amount of silicone sealant here also.

I then inserted the inline blower fan at the exit point (carbon filter), so it "pulls" the air out of the box.  

When connected to the Laser Cutter and routed out the window, its actually very quiet.  My air assist pump was noisier then the inline fan.  I proceeded to run a few projects on the cutter and didn't detect a trace of burnt wood.  I will be trying some acrylic later and will provide more updates.  

Overall I'm very pleased with this setup.  Any questions or comments would be greatly appreciated, I'm sure there's many improvements or cost saving approaches I didn't even think of.

Friday, November 18, 2016

Big F'n 3D Printer


The Reprap's, Prusa's, and other 3D printers are great.  I've printed many things with them that have allowed other projects of mine to progress much faster then making by hand or buying them online and modifying them.  But... there comes a point where you need a part that is just too big for the print volume or you're just too lazy to print a bunch of small pieces and glue and fit them together. Specifically I would like to start helping the local shelters with custom prosthetic's for dogs or animals in general. Typical print volumes don't accommodate 1 piece designs.

That's when I said to myself, "Hmmm I'll just buy a bigger 3D Printer and save myself some time." :) Well, I looked on the internet for printers that have about a 8 cubic foot print volume and found that my budget can't compete with some of these offerings online.  Having built a few DLP Resin 3D printers and filament based ones in the past, I had some aluminum extrusions, stepper motors, RAMPS controllers and what not sitting around.

I set out and built a 3D printer with at least a 8 cubic foot volume.  It also turns out after having done that, it is too big to get out of my basement without disassembling it... :(

Note: I had fudged the print volume at 2 cubic feet.  It's actually 8 cubic feet.  2' x 2' x 2'

Nearly Complete Build.  Two 60 Amp 12 Volt supplies and RAMPS 1.4 + Arduino Mega Control

If you look closely you can see a Reprap placed inside the Big F'er

Summary of Features:

  • 8 Cubic foot print volume (capable of larger with minor changes - i.e bigger cast aluminum plate) - The reason I chose 1/4" Cast Aluminum plate was to make sure it was dimensionally stable when heated.  Anything else will most likely warp over that big of an area.  
  • X, Y, Z end stops
  • Filament runout sensors to pause BIG jobs
  • Auto leveling bed (4 steppers to support heavy weight, but also allow auto leveling in addition to Z-probe) - used CNC shield board with 4 stepper drivers tied to the Z lines on the RAMPS 1.4 board.
  • Smoke sensor (separate from main control system - tied to power supply inhibit lines) - no one wants to burn their house down.
  • FLIR Lepton module to monitor and provide feedback on heat distribution for design improvements.
  • Dual Bowden extruders (allow fast transits by minimizing weight of extruder sled)
  • Heated bed (cast aluminum plate and four 280 watt silicone heating pads)
  • Had been named "Big F'er" because I managed to hit my head many times working on it and assembling it.  I apologize to anyone offended by this totally appropriate name. 
  • Inductive Z probe

Customized Marlin firmware: HERE

  • RAMPS 1.4
  • Dual Extruder
  • Heated bed protection off (have fire/smoke sensor) - Plate warms slowly.
  • 100k thermister for heated bed
  • Calibrated for specific leadscrews and GT2 timing belt
  • Intend to modify in future for 4 stepper based auto leveling.  
AutoCAD 14 Design File;  This is more of a sketchpad I used to design different mounts and parts.  It is provided for anyone wishing to make their own customizations changes to STL files.  WARNING: It's a mess!  Download HERE


The first step is to build a rigid frame 3 feet square approximately.  I used 3 foot long sections of 8020 2" x 2" 10 series extruded aluminum.  With the 8 hole gussets this works very well and provides a rigid and stable frame.


Here's the base assembled with the Y-axis rods and X-axis mounted.  Turns out the X-axis design got trashed because there was a little bit of sag over the long distance.  You can see the working design below.  

The STL for end mounts that were used for the 5/8" Y-axis rods are here. You may need to scale the print a little to get a tight fit on the rod.

The bearings used on the Y-axis sleds are SWD10 NB Systems Ball Bushing 5/8" inch Open Block Linear Motion.

The above pics are of the old Y-axis sleds.  The distance is too far for the two linear rods to not deflect.

They were redesigned to use a linear rail and matching bearing.  I got these off ebay.  Brand new, they are fairly expensive.  The sleds have holes to screw in the standard endstop switches for the X and Y axis.  

The STLs for the sled are HERE and HERE.

The idler portion is simply an 8mm bolt with nuts on either end sandwiching some skate bearings
NEMA 17 stepper motors are used throughout.  GT2 timing belt and pulleys too.
STLs for Y-axis Stepper mount and Idler Mount HERE and HERE.

One issue encountered with the Y-axis was some sag (the whole reason I redesigned the X-axis... oh well)   The 5/8" rods are great, but over 3 feet there is just enough sag to make me question the quality of prints.  So not wanting to start over I designed a SAG fixer :)  All it really is, is a mount below each Y-axis rod with an 8mm threaded shaft that allows me to push ever so slightly on the center of each Y-axis rod to make it straight.   The STL is HERE


I used some 600mm screws with brass nuts for each of the Z-axis attachment points.  They are terminated with an 8mm bearing block.  A flexible coupler is used to attach each screw to its stepper. 1" Wide 80/20 Series 10 extrusions were used to construct the Z bed.

The brass nuts are attached to the plate bed with these mounts.  The STL is HERE.

Each NEMA 17 stepper is screwed into a mounting plate (STL HERE) that is then screwed onto the 8020 extrusions.  

The 8mm bearing pillow blocks are mounted to the bracket (STL HERE) that is then attached to the top side of the 80/20 extrusions placed at the right height.

Here are the Z axis drives mounted.  Notice the 80/20 cross bars that the pillow blocks attach to.  You may need to play with the height etc to make sure everything is square. 

The linear screws aren't enough to keep the Z bed stable and rigid.  I also installed 4 - 20mm linear rods.

The rods are attached with Milling Machine SK20 20mm Bore Linear Rail Shaft Support Rod Bracket . LMF20UU Linear bearings are then slid on and attached to the Z bed via mounts (STL HERE)

Here is a picture of the Z bed with the plate upside down.  The 12" square silicone heating pads are attached to the back of the cast aluminum plate with 3M 468MP Adhesive Transfer Tape.  

The silicone heating pads are driven by TWO RepRap Champion 3D Printer Heated Bed Power Module Upgrade. I also used a standoff to mount a small 40mm fan to each.  Ideally I would like to have one driving each pad, this will allow you to heat things up faster with a properly specced power supply.  I put two pads in series for each power module and it's a little slow.  

Due to the length of my 20mm shaft and Z axis leadscrews I had to put 2" sections of 80/20 extrusions on the Z bed to offset the cast plate up.  This worked perfectly.   I also used Ruland MSP-20-F 20mm split ring clamps to set the limit for range on the Z axis.  Currently my homing operations simply stall out the Z motors if things aren't level. 

The Z end stop mount (STL HERE).  Is placed on the cross beams above each Z axis linear screw (or approximately around).  The theory is each end stop will prevent it's stepper from stalling at the split ring clamp and the bed will level based on that.  However I have only wired one of the Z end stops to Z min on the RAMPS 1.4 board. 


The X carriage was fairly easy to assemble.  There are three STL files.  The main carriage (STL HERE).  The clamp mounts for the E3D nozzles (STL HERE); and the belt connector and end stop unit (STL HERE). 

The bowden extruders and filament out sensor were mounted to the top cross beam.

The runout sensor mount STL is HERE.  It uses the same endstop switch as all the others. You may need to fiddle with the metal spring clip on the switch to get it to work without snagging.   Designed for 1.75mm filament.  

Have a beer and relax...

 Found some 3 foot square sections of aluminum sheeting at Home Depot.  This will help keep the heat in and the bed heater from cycling too much.

Video of the very first test case (40mm cube)
Kept the protective plastic on the build plate until I knew the heads wouldn't crash into it.

Don't even bother printing PLA onto a bare aluminum build plate unless you can crank up the temp.
Gluestick works very well as a surface treatment.  PLA stuck very well on a build plate at 40 deg C 


Most wiring is fairly standard for a RAMPS 1.4 configuration.  Exceptions are noted below. The actual cabling is 4 conductor shielded wire:

Heated Bed:

The heated bed utilizes the High Power heated bed module.  Two silicone heating pads are tied in series then wired to the heated bed output of the module.  Same with the other two silicone mats.  12 Volts is wired into both modules.  The control inputs are placed in parallel and wired to the heated bed output of the RAMPS 1.4.

Z-AXIS Steppers:

Currently... To drive the 4 Z-axis steppers I used a CNC Shield I had.  I bridged the X,Y,Z, and A step lines and connected them to the RAMPS 1.4 Z stepper STEP line.  I did the same with the DIR lines.  I took 5 volts and ground from the RAMPS 1.4 board and connected it to the CNC Shield too.  The Z enable line was then bridged and 12 volt power applied.  Works great :)

LED Lighting

Got a roll of 12 volt LED lighting i'm going to tie into the power.  


The electronics enclosure is based on this thingiverse posting:

The bowden extruder stepper motors should be atleast 2 amp 84 oz-in.  I was having some lost steps given the resistance through the length of teflon tubing to the extruder end.

The thermistor attached to the center of the heated plate should have some thermal grease added.  I secured mine down with kapton tape.  

The 10 series aluminum extrusions are great, however if you don't get the order of assembling things right these drop-in nuts can be a timesaver :)


Thermal images are taken with FLIR Lepton module at 80x60 resolution.  Wish it were a higher resolution. Oh well..

Thermals Image of left nozzle at 220 deg C and right nozzle off:
 Thermal Image of underside of build plate while warming up:

Test Print:

40mm Cube - No skirt or brim.  Turns out it needs it with a bed temp of only 40 deg C. Notice the peeling on the right side.

Parts List Summary (Total Cost Approx. $2000):

  • QTY 1 - uxcell DC6-36V 300mA NPN NO 3-wire 4mm Tubular Inductive Proximity Sensor Switch LJ12A3-4-Z-BX
  • QTY 12 - 80/20 Inc., 2020, 10 Series, 2" x 2" T-Slotted Extrusion x 36"
  • QTY 6 - 0/20 Inc., 3393, 10 Series, Bolt Assembly: 1/4-20 x .5" Button Head Socket Cap Screw (BHSCS) and Slide-In Economy T-Nut (25 Pack)
  • QTY 12 - 80/20 Inc., 4138, 10 Series, 8-Hole Inside Corner Gusset
  • QTY 2 -O1 Tool Steel Round Rod, Precision Ground, Annealed, 0.625" Diameter, 36" Length
  • QTY 4 -SWD10 NB Systems Ball Bushing 5/8" inch Open Block Linear Motion
  • QTY 1 -Mechanical Endstop Switch with Cable for 3D Printer 
  • QTY 2 -5PCS Nema17 Stepper Motor 2A 40mm Body 4-lead 1m Cable W/ Connector
  • QTY 1 -10 Meters GT2 timing belt width 6mm Fit for RepRap Mendel 
  • QTY 2 -HICTOP 5 x 2GT GT2 20T Gear 6mm Inner Hole 5mm
  • QTY 4 -600mm Lead Screw 8mm Thread Lead Screw 2mm Pitch Lead Screw with Brass Nut
  • QTY 2 -2PCS 8mm Bore Inner Ball Mounted Pillow Block Insert Bearing KP08
  • QTY 2 -2 PCS Flexible Couplings 5mm to 8mm NEMA 17 Shaft for RepRap 3D Printer or CNC Machine
  • QTY 5 -1" Wide 80/20 Series 10 extrusions
  • QTY 4 -20mm Shaft 32 Hardened Rod Linear Motion
  • QTY 8 -Milling Machine SK20 20mm Bore Linear Rail Shaft Support Rod Bracket 
  • QTY 4 -LMF20UU Linear bearings
  • QTY 4 -12" square silicone heating pads 
  • QTY 1 -3M 468MP Adhesive Transfer Tape
  • QTY 2 -RepRap Champion 3D Printer Heated Bed Power Module Upgrade
  • QTY 2 -40mm Silent Case Fan
  • QTY 4 -Ruland MSP-20-F 20mm split ring clamps
  • QTY 2 -bowden extruders
  • QTY 2 -Metal Hot End E3D J-Head
  • QTY 1 -OSOYOO 3D Printer Kit with RAMPS 1.4 Controller + Mega 2560 board + 5pcs A4988 Stepper Motor Driver with Heatsink + LCD 12864 Graphic Smart Display Controller with Adapter For Arduino RepRap
  • QTY 1 -Carol E2034S.18.10 4 Sound, Alarm and Security Cable, Multi-Conductor, Shielded, Riser, Gray Premium-Grade, Gray PVC
  • QTY 1 -RepRap Champion CNC V3 Shield + UNO R3 Arduino Compatible Board + 4 PCS TI DRV8825 StepStick Stepper Drivers
  • QTY 4 -80/20 Inc., 3375, 10 Series, Roll-In T-Nut with Flex Handle 10-32
  • QTY 2 -12 Volt Power Supply (30Amp minimum)
  • QTY 1 - MIC 6 - 24" square 1/4" Thick - Cast Aluminum Plate - $144 - You get what you pay for. 
  • QTY 1 - LED Lighting roll.  
  • QTY 1 - Linear Carriage for X axis (THK Linear Guide Carriage SR15W1SS)
  • QTY 1 - Linear Rail approx 990mm (NSK Linear Guide Rail, L1U150990LCN-PCT LU)

  • BuddhaFett Test Print: 0.2 layer height.  Need to up the retract amount, getting a little oozing from transitions.  :)

    Much more to come.  I plan on detailing more of the wiring and posting the smoke/fire cutoff system.  

    Any questions please don't hesitate to ask in the comments.  

    Any Bitcoin donations would be greatly appreciated, and help fund any current & future projects.