How I Made 3D Printed Customized Christmas Holly Ornaments

My computer rendered Christmas card that I sent to friends and family this year had 3D printing as a theme. You can read all about it here.

My 2017 Christmas Card: Santa Adopts New Technology


Because many friends and family have never seen a 3D printer for the objects it creates, I decided to make a little Christmas to stuff in their Christmas cards. It’s a little piece of Christmas holly customized with their name on it. This video shows how I designed and 3D printing these little trinkets from my friends and family.

3D Printed Icosahedron Star Christmas Ornament

One of the fun things I like to do with my 3D printer is create Christmas ornaments. My radiused is this 20 pointed star shown here on my living room Christmas tree.

The basic shape begins with a 20 sided shape where each shape is an isosceles triangle. In order for it to print properly I had to cut that shape into two pieces. Then I separately printed the 20 spike shaped pieces to connect to each of the 20 triangles. One of the spikes includes a little loop so that you can hang the ornament.

We used super glue to put the pieces together. After gluing of the spikes onto the two halves of the central core it looks like this.

Then we finally glue the two sections together.

The files so you can print your own ornament are available on https://www.thingiverse.com/ by clicking here.

3D Printed Christmas Tree Illuminated by Circuit Playground Express

In 2015 I created some 3D printed Christmas ornaments as seen here. It occurred to me the other day that the tree ornament was just about the right size to sit on top of an Adafruit Circuit Playground Express. The Neopixels would reflect upward onto the ornament. I would have to resize it slightly and cut out some notches for the USB port and JST power connector.

I printed it using white PLA and I think it turned out pretty well. I also have some transparent T-Glaze filament that I may try as well. Here are some photos and a YouTube video showing how it looks.



I will post the code that I used to animate the lights sometime soon. It is currently written in Arduino C++ but I also want to create a Circuit Python version as well before I publish it.

Here is a link to the STL file on Thingiverse.

Here is a link to the original ornaments also on Thingiverse.

3D Printed Easter Eggs

Last Christmas I made some 3D printed Christmas ornaments so when Easter rolled around this year I decided I would try my hand at designing some 3D printed Easter eggs. Here are the results…

Just like my twisted spear and twisted tree ornaments from Christmas, this one consists of basic shapes given a twist and multiplied at different angles. For the egg I started out with a simple doughnut shape called a torus, selected the top half and scaled that by 1.75 in the vertical to make a basic egg shape.

en twisted the shape 180° like this.

I then made another copy and twisted it 180° the opposite direction. Here I have color-coded each piece light blue and dark so you can see which is which.

I then made two more copies and rotated them 120° and 240° respectively so that we have a total of six twisted tori. I’ve color-coded all of these as well. There is both a front view at a top view.


l started wobbling as it printed and I ended up stopping the print because it was just coming out too nasty. I also had lots of problems with threads. Here’s a photo of my first failed print sitting up on a little podium I built.

I tried putting supports under it but the automatic support system in Simplify 3D was also creating supports inside the egg which I didn’t want. And I couldn’t get the manually placed supports where I wanted them. I decided to just go back to the CAD program and model supports exactly the way I wanted them and then not use supports in the slicer. I added a base disc and six pillars. These pillars were not necessarily traditional supports to make overhangs print easier. Instead they were just to steady the model while it printed. By the way I was printing with 2 shells and no infill also with 4 top and 4 bottom layers. The base is 1 mm thick. The 6 supports were 2.5 mm in diameter.

Initially I was still printing with the point down and here is the results.

As you can see I was getting very bad threading. I also didn’t like the look of the model with the pointed end down and that’s when I turned things upside down and put the pointy end at the top to emphasize the egg shape. I also needed to try to reduce the threading somehow to get a cleaner print. I tried increasing the filament retraction and the Z lift but it didn’t help much. I finally decided to turn down the heat from 210°C down to 200°C. I made this change mid-print while printing this blue version. You can see the threading is still bad at the bottom but after I reduced the temperature it was still present but much less so. I didn’t want to experiment further by reducing the temperature so I let it finish at 200°C.

I also tried filling in the gaps in printing a solid shell. Again I started with a sphere shape, selected the top half, and scaled it appropriately. Here is the result.

All of this was modeled in Blender 3D which isn’t really designed to be a modeler for 3D printing. It’s more for rendering and animation but it does allow export to STL format. I’ve been using it because I didn’t want to learn multiple CAD programs and I was under the impression that Autodesk Fusion 360 would only allow you to use it for three years for free and then you had to register it at a very expensive subscription price. I’ve only recently learned that you can continue to renew your free license for enthusiast or student use without having to pay for subscriptions. Only commercial use for companies earning over $100,000 per year requires a paid subscription. I’m not quite sure how you would model this particular object using Fusion 360 but I haven’t had time to play with it yet.

Unfortunately Blender 3D has lots of problems when it comes to Boolean operations on objects or what we used to call in POV-Ray CSG for “constructive solid geometry”. It’s a process of taking multiple pieces and either merging or intersecting them. Although there have been some recent improvements in CSG operations on Blender 3D, it still struggles to merge or union objects that have coincident surfaces. Sometimes you can fudge one object or another by 1/10 of a millimeter and get it to work but it is very finicky.

All of the prints shown here were done without merging the objects. I exported them as a single model with multiple parts. I used an option in Simplify 3D by clicking on “Mesh->Separate Connected Surfaces”.


This in effect takes the multiple pieces and merges then in the slicer. There were still some issues with non-manifold parts of the model but I didn’t realize that until after I had printed them. After much tinkering using different options in Blender 3D and fudging the pieces back and forth I was able to get Blender 3D to create a single solid model. Those corrected models are the ones I’ve uploaded to Thingiverse however I have to admit I’ve not actually printed the versions I’ve uploaded. I’m still confident that not only will they print, they should print better than one’s that I actually printed myself.

I demonstrated this project on the Adafruit Show-and-Tell weekly video chat. Click on the icon on the right to see that video.

You can get the original Blender files, some intermediate blender files I used in creating the merged versions, and completed STL files that should print reasonably well. I recommend printing with 2 shells, no infill, and no supports. If you get threading, try turning down your heat. You’re still going to need to do some cleanup on the non-solid version. Threading is always going to be a problem with a print like this.

If you want to export from Blender 3D you can use the file “twisty_easter_egg_merged_2.blend”. If you select the object “Base” it will print the hollow version. If you select the object “Shell” it will print the solid version. The file “twisty_easter_ege.blend” is the original model before I tweaked and merged all the pieces. You can look at it to see how the original design was created.

You can get the files here on Thingiverse. Enjoy!

How I Sleep Better Thanks to My New IPad

I’ve already chronicled the story of my month-long stay in the hospital last December which resulted in getting a trach and being on a ventilator. The worst part of the experience is that I am not be able to talk while on the vent. Fortunately I only need to be on the ventilator now at night to help me sleep. However the communications issues are still a problem. It’s common for me to need to call my dad in the middle of the night to rollover or to suction out the trach.

My main means of communication with my dad while on the vent consists of messages I type on my laptop. My laptop sits on my dresser next to me on top of my cable box. A long HDMI cable runs from the laptop around the back of my bed and up to the TV hanging on the wall over my bed as can be seen in this image.

You can click on any of these images for larger versions. There is also an HDMI cable from the TV to the cable box. By switching inputs on the TV, I can either watch cable TV or use the laptop. Normally computer control on my desktop or laptop is via dictation software Dragon NaturallySpeaking but of course if I’m on the ventilator I cannot talk to use the computer. However I have an infrared remote control that not only controls the cable box and TV but it provides mouse control and some keyboard controls for the laptop (mostly arrow keys). The IR control is in the black box sitting on top of the TV.

When I get on the ventilator at about 11 PM each night, I call up a notepad window on the laptop and use the Windows on-screen keyboard. I have it set up in scanning mode and use a single switch on my IR remote to type on the keyboard. I have a couple of files of text with standard messages but then I can type anything I want as well.

The system has worked very well ever since I got out of the hospital late last December but I’m finding it’s uncomfortable to lie on my back all night long. Typically I wake up somewhere between 5 AM and 8 AM and need my vent suctioned. At that point I’m more comfortable if I rollover on my right side.

The problem with lying on my side is that I can’t see the TV monitor to see what I’m typing on the laptop. Also there is a small black box on top of the TV that is my IR remote control. It has a 2×16 character LCD display that I need to see in order to operate the IR remote. I cannot see it lying on my side either.

That meant that if I needed to communicate with my dad while on my side we had to play 20 questions. I can signal yes or no with my facial expressions. If that didn’t work he had to take me off the ventilator and insert my talking valve. I needed some sort of device that both he and I could see while lying on my side.

When I was in the hospital I used Bluetooth switch control to type messages on my iPhone to communicate with doctors, nurses, and family. However the iPhone screen is pretty small so I decided I would buy an iPad. I settled on an iPad mini 2. As you can see in the image it sits on top of my laptop and cable box. I could’ve opened the lid on the laptop but it was sitting at an angle that would make it difficult for me to see. The iPad is a better choice. Also if I’m ever in the hospital again I will use it instead of the iPhone because it has a bigger screen.

My IR remote sits on top of the TV as shown in the first image above. I control through a control box that sits on the dresser next to the cable box. The two are connected using an X-Bee radio. In addition to sending RF signals to the IR remote, it also sends RF signals to a similar device in my dad’s bedroom so that I can push a certain set of buttons and it sets off the alarm to wake him up to tell him I need something. This image shows the interior of that control box on the dresser. It consists of an Arduino Micro, X-Bee radio, Adafruit Power Boost 500C and a Lipo battery. The battery is a backup in case of a power failure.

Connected to that box are three micro switches mounted in a 3D printed plastic ring that helps me hold the buttons in my hand.

My friend Yahnatan refers to it as my Dr. Strange Sling Ring. It really made me mad when he called it that. I’m not offended. I’m mad that I didn’t think of it first! In order to control the iPad I would need to add Bluetooth of some kind to the X-Bee/Arduino device. I decided to use the Adafruit BLE SPI Friend.

If I was designing the system from scratch I would have used an Adafruit Feather 32u4 BLE with one of their RF feather wings but those didn’t exist when I first built this project. I’ve got everything already designed around a 5 V device and the X-Bee RF system. I also didn’t plan ahead thinking that I would someday need to attach an SPI device like the BLE Friend. Unfortunately I had already used the dedicated SPI pins on the Arduino Micro for other purposes. Fortunately the Adafruit Bluefruit software library has an option for software SPI. It will allow me to use any set of six pins to connect the device. I was pleasantly surprised that that feature worked right out of the box.

I have the software configured so that if you press all three buttons simultaneously for more than one second it toggles between IR mode and Bluetooth mode.

The only remaining task was to make a 3D printed stand for the iPad. I wanted something that would hold it perfectly straight up and down 90°. It had to be stabl enough that it wouldn’t knock over to easily but I wanted to be able to fold it up so it would lie flat for transport when not in use. Should I ever end up in the hospital again I would be using this iPad rather than the iPhone to communicate with doctors and nurses.

The photos below show my 3D printed stand. The legs are not solidly printed on the long beam. They are attached with 4-40 machine screws so that they can pivot 90°.


I’m still a little bit concerned that it may be unstable. I tried to make 3D printed suction cups using Ninja Flex however the rim of the cups was not smooth enough to make an airtight seal. I ended up buying some suction cups from Amazon but they have not arrived yet. I’m not sure if I’m going to install them or not.

One other item to share… I must’ve been using some really cheap PLA plastic that was very stringy because as the stand was being printed there was an unusual amount of threads connecting the two uprights. The end result looked like some sort of weird tennis net. I’ve never seen threading this bad. Of course it was easily broken off and removed but I thought it was so bizarre I had to share it.

I been using the device for a couple of weeks now and it works really well. It allows me to not hesitate to roll over on my side where I can sleep more comfortably and know that if I need to communicate with my dad I can do so easily.

I talked about this project on the weekly Adafruit Show-And-Tell video chat. You can see that video by clicking on the icon on the right.

The Ultimate Remote is Dead. Long Live the Ultimate Remote 2.0

In late 2015 I built a piece of assistive technology that I called my Ultimate Remote. The device was an infrared remote for controlling my TV and cable box. It also had infrared mouse control for my computers. There were also limited keyboard commands mostly arrow keys, enter key, backspace and some control keys for doing cut-and-paste. Finally it was a Bluetooth device for doing accessibility switch control on my iPhone. I wrote about it in this blog post from January 2016.

The Ultimate Remote Control and Why I Built It


The core of it was an Adafruit Micro BLE device which was discontinued shortly after I purchased it. Adafruit replaced it with the Adafruit Feather 32u4 BLE. The Micro BLE also had an ATMega32u4 which is one of my favorite 8-bit processors.

The display was a monochrome 1.3 inch 128×64 OLED graphic display. It also contained one of my infrared I/O boards although it only did output. I didn’t really need to read any IR codes. On the end of a long wire were three lever micro switches that I would hold in my right hand to control the device.

The device served me well for well over a year. It was critical to me during my recent hospital stay where I was on a ventilator and could not talk. I used the switch control to type notepad messages on my iPhone and communicate with the nurses and doctors. You can read about that adventure here.

Pray That They Listen to the Man with No Voice

The micro switches have always been the weakest link in my devices. I have to use switches that have a feather touch to them and that means they are very fragile. The switches get knocked around quite a bit and so it was inevitable that one of them would break. About a week ago one of the switches failed and we had to replace them.

I had planned for many months to rebuild the entire device. I had used up all of the program memory in the device and could not add any new features or any new IR commands. I did not have codes installed for my Blu-ray player and there wasn’t any room left. In fact one time I had tried to recompile the code and because one of the included libraries had been updated, the code wouldn’t fit anymore. I don’t know if it was the Bluetooth BLE library or the graphics display library but something changed. I had to go through my code and try to free up some space by eliminating some error messages or shortening other messages. I finally got it to recompile but the writing was on the wall that I needed to upgrade.

The obvious choice was to use a new Adafruit Feather M0 BLE. Instead of the traditional 8-bit 32u4 running at 16 MHz with 32K flash memory and 2.5K RAM, I would have a 32-bit ARM Cortex M0+ running at 48 MHz, with 256K flash memory and 32K of RAM. The main problem was that my infrared library IRLib did not support these newer 32-bit ARM processors.

I had just recently spent weeks researching the new processor and converting my infrared library to support the newer chips. The timing and frequency modulation portions of my IR code are extremely dependent on the internal timers of the processor and that is very hardware dependent. I had to learn a whole new system of timers and PWM frequency control to rewrite the code. Fortunately I got it running just in time.

Although I had the infrared code working on the new processor, and had a Feather M0 BLE available to build a new device, it should not have been necessary to rush the new device into construction. All we had to do was repair the old remote by replacing the micro switches. I already had another set of switches assembled in anticipation of building the new remote. All we had to do was cut the cable on the old one, splice in the new cable and everything would be fine.

Dad decided that rather than having a stiff, unsightly splice in the middle of my cable, he would open up the box, unsolder the old cable and solder on the new cable. He ended up completely disassembling everything to get at the wires that needed replacing. I appreciated that he would go to that trouble even though this device was going to get replaced probably in a month or two. Unfortunately this was a bad decision.



Above are photos of the interior of my original ultimate remote. As you can see the wiring is pretty complicated. Unfortunately I only have about four different colors of wires available so we had to use the same color wires for different purposes. For example there are multiple green wires used for different purposes. After replacing the cable to the micro switches, dad tried to plug everything back in the way it was. We plugged in the device and I tried pushing the buttons but nothing would happen. In the course of trying to figure out what was wrong he touched one of the infrared LEDs and discovered that it was very nearly becoming more red than infra. It was too hot to touch. Although we did not get a visit from the infamous “Blue Smoke Monster”, if we had left it connected very long we would’ve had at least smoke and possibly fire as well.

It didn’t take us long to find out that the culprit was 2 green wires that had been crossed. We fixed the wiring and plugged it back in. No heat this time. The device worked intermittently for about five minutes and then quit working altogether. It was obvious that we had burned out the IR LED at least and possibly the transistors driving them.

Fortunately I had sufficient parts to build a new IR output board so we spent the next afternoon building it and installing it. It would not work either! One of the problems we were facing was that we had assembled and disassembled the box many times. I had been using small gauge stranded wire with silicone insulation. That is very flexible and made it easy to route the wires in a tiny box. However several of these wires were soldered into through hole locations on the circuit boards. Right at the point where they are soldered in, they are extremely susceptible to breaking if they are bent back and forth too many times. A better solution would have been to put a header pin in the hole. Then we could solder the stranded wire onto the pin and cover it with a piece of heat shrink tubing. At this point it was too late to do that.

We tried repeatedly to diagnose the problem with the new IR board but every time we fixed one thing, something else would break. There was also the possibility that we had damaged the Adafruit Micro BLE board itself. As I mentioned earlier, that board has been discontinued so there was no possibility of replacing it. After two full afternoons of working on it, I decided to throw in the towel and put all of our efforts into building the completely new device that had been planning for months.

I had all of the necessary parts. The new device would have a much larger 2.4 inch TFT color graphics display instead of the 1.3 inch monochrome OLED. This device also features a resistive touchscreen however I don’t have any use for that feature. It also includes a slot for an SD memory card. I may come up with a future use for that.

One of the nice things about the Feather Wing TFT board is that the feather board plugs into a socket in the backside. You don’t have to run wires from the main processor to the display board. However one of the disadvantages is that there is only one power and one ground pin on the device. So I was going to have to cut up a little piece of prototype board to make a power and a ground bus. This would bring in power from the outside, connected to the Feather and display boards, and run power to the infrared board. Similarly I needed ground wires to all of those parts plus a ground wire for the micro switches. We also needed to solder a jumper so that I can turn the backlight of the display off and on. There is a solder pad available but you have to jumper it to one of your Feather pins.

Although the Feather boards have a built-in battery connector and a battery charging circuit, I decided to power the device from an external 5v battery source. My old Ultimate Remote was a 5v device throughout while the Feather system runs on 3.3v. In the old system I had a short cable with a barrel jack running from the remote into a battery pack I call a Printy Boost. The Printy Boost is a device which I designed for the Adafruit Learning System as seen here. The Printy Boost also provides extended battery life to power my iPhone. So rather than have a separate battery for the remote and for the iPhone backup power I decided I would stick with the old system and run a cable from the Printy Boost into the remote just like I did before. Rather than connect to the +3.3v pin I connected to me “USB” pin which was the same as powering it through the USB cable at 5v.

There are some differences between the Feather TFT board and the old monochrome OLED graphics board so I had to tinker with the software to get things to run. Most of it was compatible because Most of the Boards operate on the Adafruit Graphics library but there are still differences. Once I had display software converted I tried using the device. Unfortunately it didn’t work again! You would think I would be more careful about crossed wires after the previous fiasco. It turns out we had the infrared I/O board wired backwards. I had drawn the wiring diagram looking at the front side of the IR board. That means on the right 2 pins are power and ground. Then moving to the left you skip one pin and the next one is the IR output. However the way the board is oriented in the device, the backside of the board is facing upwards. We wired it with power and ground on the right but that was wrong. Fortunately this just meant that the power lines were going to the receiver pins which were not being used in this application. So nothing burned out. We reversed the wiring and everything worked fine.

The final step was to design a 3D printed enclosure for the device. That took another afternoon or so.

We mounted the TFT display into the lid of the box using black nylon plastic screws and nuts out of this kit sold by Adafruit. They are really handy because they are selected to fit in the 0.1 inches diameter mounting holes used in most Adafruit boards. When that box of screws was first added to the Adafruit catalog I knew I would need them someday and purchased it right away. They work perfectly so it was a great purchase.

The rest of the box is held together by 5/8 inch sheet metal screws. I like using sheet metal screws because they have a pointy end that taps really well into 3D printed PLA plastic. Here are some more photos of the completed project.



There are still lots of software tweaks I have to implement. It takes longer to erase a 320×240 color display than it does to erase a 128×64 monochrome display. The monochrome device required you to call a “display” method to update the display after writing to it. The new color device updates as you write to it. The result is you can see the screen update where the old one would update instantly. I think the updates actually slow down the entire process a little bit. So I’m going to have to optimize the code so that it only updates the screen when absolutely necessary and only does it in small pieces. In the old system it was easy to just erase everything and redraw it from scratch every time but that won’t work very well in the new system.

Of course I also have to add all the features I’ve been wanting to add but didn’t have sufficient memory under the old system. I have to add all the codes for my Blu-ray player and there are some additional keyboard codes that I want to add. I may end up implementing an entire keyboard system so that I can type anything using IR codes. I’ve developed a special protocol for my IR library that allows me to use any mouse or keyboard commands possible. I’ve only been using a fraction of that capability.

One other difference between the old and new system involves the power output of the IR board. When I originally designed my infrared I/O board I ran the LEDs with no current limiting resistors. Because the LEDs are only intermittently running (assuming you don’t cross your wires), it’s safe to put more than 1 amp through them. But my experience is that sometimes USB power can’t supply enough power when that current spikes during transmission. So I’ve added some 33 ohms current limiting resistors in line with the LEDs on the latest version of my infrared I/O board. The old device did not have these resistors but it ran well because it was powered by a battery pack rather than a USB plug. Now that I’ve worked with the new remote I’m realizing it doesn’t have the power of the old one. I’m going to try shorting across those resistors and see if it helps.

I still have fond memories of my original Ultimate Remote. It served me well for over a year and was literarily a lifesaver while I was in the hospital. But I’m also looking forward to the new things I will be able to do with the new improved Ultimate Remote 2.0.

Afterward: After I completed the project I presented it on the weekly Adafruit Show-and-Tell. I was the first guest in the video below.

3D Printed 6 Piece Star Puzzle

When I was a child I used to enjoy playing with little puzzles. One of my favorites was a 6 piece star-shaped cube that I thought was particularly clever in its design. I decided I would try to 3D print one of those puzzles. Before going to the trouble of designing it myself I decided I would look on Thingiverse to see if someone had already created it.

This particular puzzle was available in several versions including this one on the right.
However it wasn’t exactly like the one I remembered. All of them that I found on Thingiverse had six identical pieces. I also saw some YouTube videos on how to assemble such a puzzle. It looked to me like it did not stick together very well.

The puzzle that I remembered also had 6 pieces but they were of three different types. Three of the pieces were identical to the ones in the Thingiverse models. Two of them were similar but they had a notch cut out. The final piece was completely solid and would be slid into place to lock everything together at the end.

So I made a modified version of the model linked above. I had to do a little tweaking to get the tolerances right but it turned out okay.

You can download my modified puzzle on Thingiverse at https://www.thingiverse.com/thing:2160633

Here is a photo of my completed puzzle.

Here is a photo of the individual pieces. I refer to the pieces as “part 1”, “part 2” and “part 3”. That designates how many of each of the pieces there are. That means there are three copies of “part 3” and so on.

Here is how to assemble the pieces. Start with a piece 3 in this orientation.

Add another piece 3 vertically on the right side.

Add the final piece 3 vertically on the left side.

Place a piece 2 horizontally across the back with the notch on top.

Place the other piece 2 horizontally across the front with the notch on top.

Slide the final piece into place from the front in a hole left by the notches.

Many thanks to by HotIceT for the original design. My piece 3 is identical to his and the other pieces were derived from that by modifying the STL files in Blender 3D.

Modifying the “Pause at Height” Cura Plugin for Printrbot Plus

Recently I did some 3D printing objects as a kind of diorama that I photographed for my 2016 Christmas card. One of the objects was this sign saying “Emmanuel – God Is with Us”. The background or base of the object was printed in brown filament and the raised lettering was printed in white filament. I use a single extruder Printrbot Metal Plus.

The trick to printing this is to print the brown portion, get the printer to pause while you change filaments, and then print the white lettering raised above it. I’m using Cura 15.04 which is the most recent version that can be easily configured for Printrbot. It has a plugin called “Pause at Height” that is designed to allow you to do just what I want. You pick a Z height at which the printhead is retracted and paused while you swap the filaments.

If you open Cura and click on the “Plugins” tab you will see the following:

There are two plugins installed by default. The one we are interested in is Pause at Height. You click on the plugin and then click on the tiny down arrow at the bottom of the window and a dialog will appear that allows you to set the parameters for the plugin. It will look like this…

It gives you a series of parameters that you can fill out. Then when you print your object, theoretically the printer will pause and allow you to change filaments. Unfortunately the Printrbot Metal Plus does not have any sort of control panel so there’s no way to resume the print once you’ve paused. I tried using the plugin anyway just to see what would happen. At the proper point in the print, the printhead retracts back and to the side as it’s supposed to. But rather than pausing, it immediately goes back where it left off and begins printing.

If you look at the lower left corner of the plugin screen you will see a button that says “Open plugin location”. If you click on that button here’s what the folder looks like in Windows Explorer.

You can see the plugins are actually Python programs that have a .py extension. We want to look at the one named “pauseAtZ.py”. We will open it up in our favorite text editor and take a look around. If you look at the code at approximately line 104 you will see this

It appears that this Python script is reading and writing your G-code looking for the proper place to do the pause. Then it inserts additional G-code to do the retraction and the actual pause. The important line is line number 110 which inserts the G-code command “M0”. This is a stop command as described here
http://www.reprap.org/wiki/G-code#M0:_Stop_or_Unconditional_stop
Apparently the firmware in the Printrbot Metal Plus does not recognize that particular G-code. There are other G-code options that we can substitute.

Using your text editor, do a “save as” and give it a different filename with a .py extension and save it in the same folder as the original. Modify line number 110 to read as follows

The “G4” command is described here
http://www.reprap.org/wiki/G-code#G4:_Dwell
It causes a 30 second pause. I found that this gives me sufficient time to withdraw the original filament, replace it with a different color, and force some of the new filament through the nozzle to flush out the old color.

There is one other change you should make in that file. On the very first line it reads:

This is the name that appears in the plugin tab of Cura. You should change this name to something like

so that you can distinguish it from the original plugin.

I made those changes, selected the modified plugin and it worked perfectly. You have to play around with the preview slicing to determine what level you need to set for the pause. You might try printing a small test piece if your object is extremely large.

Adapting a PrintInZ Plate to a Printrbot Metal Plus 3D Printer

When I first got my Printrbot Metal Plus 3D printer I had lots of difficulty getting the prints to stick to the build plate. I didn’t want to use blue painter’s tape because I already had Kapton tape on the plate and I wasn’t sure if perhaps I would someday be needing to print ABS which requires the heated bed. I didn’t think that would work very well with painter’s tape.

As it turned out I’ve never used ABS. I’ve only been printing with PLA and occasionally T-Glaze. I’ve been getting pretty good adhesion by using Elmer’s glue stick on top of the Kapton tape and heating the bed to 70°C. But before I came up with that solution I invested in a “zebra plate” from PrintInZ. This is a plastic print bed insertion that offers great adhesion with no tape and no heat for PLA. It is supposed to be good for ABS as well with heat. I purchased one of their plates at approximately 10 x 10″ which is the size of my bed. Unfortunately I didn’t realize that the way that the Printrbot bed is mounted there’s no way to use those large springy document clips to hold the plate in place as seen in this screen grab from a PrintInZ YouTube video.

clips

The rails on which the print bed slides are located all the way to the very edge on each side of the print bed. There is an aluminum plate at the front and back of the print bed but even if you can get a clip over the edge of it, it would not clear the frame of the printer when the bed was all the way forwards are all the way backwards. There simply was no good way to get the plate to stick.

The company has a new product called a PrintInZ Skin which has an adhesive back on it. But one of the nice features of the plate is that if a part sticks too well, you can remove the plate and give it a slight warp and the part will pop off. Also the plate has a core consisting of a thin sheet of copper that will trigger the capacitance proximity sensor on the bed leveling system. The skin does not have a copper core and is probably too thick for the proximity sensor to be triggered on the metal bed beneath it. They do not recommend using it for that type of bed leveling.

Although I was getting reasonably good results with Elmer’s glue stick, it was a pain to have to reapply it and to clean it up after every print. I kept seeing more and more great reviews for the PrintInZ Plate so I finally had to come up with some system to easily mount and easily remove the plate.

We inspected the underneath side of the black aluminum plates at the front and back of the build plate. We determined that if we avoided the slide rails on each side and avoided the belt on the left side that we would be able to safely drill into the aluminum and bolt in some brackets that would hold the plate in place.

back_1

This photo shows the rear of the build plate where we put in some 1/4 – 20 screws with a spacer on top and a washer. You need to drill a hole slightly smaller than the 1/4 inch diameter and then use 1/4 inch thread tap to cut threads into the aluminum. That way you do not need a nut on the other end. You can screw directly into the aluminum plate.

The screw on the left side of the machine (shown on the right here from the back) is halfway between the mounting rail and the belt. The screw on the other side is just inside the rail but we probably should have moved it a little farther towards the center. There is a microswitch inside the machine that limits the Y-axis travel and if the screw is too long it will hit that switch. You also of course need to make sure that the screws do not go so deep that they catch on the lip of the frame of the machine. As long as the power is turned off, you can manually slide the build plate forwards and backwards to ensure that the screws do not catch on the edge of the frame.

back_2We accidentally drilled the rear holes too close to the build plate so that the spacer would not fit. We had to grind a flat side on the spacer to get it to go in. If you drill your holes out a tiny bit from the build plate and use a slightly larger washer you can avoid that problem.

On the front we could’ve done the same thing but we wanted to make it easy to remove the plate in case we needed to warp it to remove a piece. Instead we took some scrap sheet metal (actually we cut up an old license plate) and fashioned some brackets. We drilled the holes very close to the front edge of the black aluminum plate that is at the front of the build plate. The brackets have slotted holes. We used 1/4″ – 20 wing screws to hold the brackets down. The brackets have a slot in them so that you could loosen the wing screws about one turn and slide the brackets forwards away from the build plate. Again on the left side we are halfway between the left rail and the drive belt.

front_1front_2

One problem is that when the printer does the automatic bed leveling procedure, it touches down in three far corners of the build plate. It starts with the back left and then goes to the front left and finally the front right. We had hoped that the brackets were small enough that it would clear everything when it did the Z probe sampling. Unfortunately on the left side, the probe barely touched the left bracket. If we had drilled that hole just a couple of millimeters to the right or had put it to the right of the belt completely then it would’ve hopped over the bracket as it traveled from the left front corner to the right front corner. On the right side, the nozzle and the Z probe cleared the bracket but a tiny corner of the fan shroud touched the bracket. Again had we move the entire thing a fraction of an inch to the left it would’ve cleared.

There is a possibility that depending on the height of the screws and washers in the back, that the fan shroud might also clip them. You need to ensure that anything you print doesn’t come close to the far corners of the build plate. It reduces the size of your printable area but it is rare that you would have to build something that reaches all the way to the four corners of the plate.

Rather than re-drill and re-tap the holes we decide to fix it with software. We decided to only limit the front edge because the automated bed leveling required it. We did not artificially adjust the software to clear the back edge. We will just be careful never to print anything back that far. There are two places that you need to adjust the software. You need to adjust the firmware in the Printrbot itself. And then you also need to adjust the printing software you are using to tell it that your build plate is slightly smaller than expected. We use both Cura 15.04 and Simplify 3D software to drive the printer. We will describe what needs to be changed.

First to adjust the firmware we loaded Cura and called up the control panel. There are G-code commands that you need to type into the control panel. First type the command “M501” which will give you a printout of the current settings. You might want to drag your mouse across them and do a cut-and-paste and save the values just in case you accidentally mess something up. Here are the values that I had.

cura_1
Note you can click on any of these images for larger versions.

We are only interested in the last two items. The value “M211” is the maximum position and we will want to reduce the Y value to 244 instead of 254. Type in the commands…

The first command changes the value. The “M500” saves the value. And then the “M501” displays the results again to verify it.

The other thing we need to change is the bed probe offset value M212. As you can see I had my Z value set at -0.70. This value sets how high off the print bed your first layer is set. I wasn’t sure how the Z probe would measure the copper plate embedded in the PrintInZ compared to the plain print bed with a Kapton tape over it. So I sent the value higher to about -0.30 and printed the small 3 mm test piece. I then lowered the value a couple of tenths at a time until the print looks good. As it turns out my original value of -0.70 was okay but there was no guarantee that it would’ve been. I suggest you do the recalibration. As before you would type

The other commands save and re-display the values.

Now you need to tell Cura that your print bed is smaller. On the menu at the top click on “Machine-> Machine settings…”. Change the Maximum Depth from 250 down to 240. I would’ve expected these values to be 254 rather than 250 but these are the recommended settings from Printrbot.

cura_2

I also use Simplify 3D for printing. To adjust the settings click on the “Edit Process Settings” and under the tab labeled “G-Code” change the “Build Volume” in the Y-Axis from 254 down to 244. The default 254 makes more sense to me than the 250 in Cura. On the other hand one time I tried to print an object extremely close to the maximum X-Axis value and when it was drawing the rim before the print it reached the limits and the machine made a grinding noise. So you might want to think about changing all of these values to 250, 240, 250. After change in the value, click okay.

simplify_1

I’ve been able to successfully print using either printing software and I’m extremely satisfied with the PrintInZ Plate build plate. It really works very well as advertised. I highly recommend it.

Here is my appearance on the Adafruit Google+ Show and Tell on Wednesday, January 4, 2017 to describe this project.

Groundhog Week

In this installmenpurposet we will cover the third week of working on the new wheelchair. We work on 3-D printing parts for the joystick and waiting on word from the wheelchair people about my programming glitch.

 

S.S.D.W.

I called this installment “Groundhog Week” after the movie “Groundhog Day” in which Bill Murray repeats the same day over and over again. I sort of feel like this week is a repeat of the previous week. Better cliché title for this week is the abbreviation “S.S.D.W.” There is a common saying that people often abbreviate using the letters SSDD. It stands for “Same Shit, Different Day” and is used as a way to say one’s life is boring and monotonous and not particularly satisfying. When I went to write the opening paragraph for this installment of the blog I started by editing the intro from the previous installment. I realized that all I needed to do to make it accurate was to edit the words “second week” so it would read “third week”. So the title of this segment is “Same Shit, Different Week”.

To recap where we left off, the wheelchair is stuck in the state where only the attendant controls will work. Also I cannot get it into programming mode to undo whatever I did wrong. Meanwhile I’m redesigning the joystick mount because the one that the vendor provided will not stay steady enough around my neck. I had already designed a swing away crossbar that would go across the front of the U-shaped rod that hangs around my neck. Now I need to design something that will fastened to that and will hold the upright piece to which the joystick is mounted. I spent all day Sunday April 10th watching NASCAR and designing and printing parts.

In the image below the long cylindrical piece and clamp on the right were pieces I had already designed. The clamp on the right holds the actual joystick. The piece I worked on Sunday was the clamp on the left which will attach the entire assembly to the crossbar. It turned out I could just copy the clamp on the right and resize it. As always you can click any of the images here to see a larger version.

clamps

On Monday April 11 we were supposed to take the wheelchair into the shop to have them reprogram it. Unfortunately my caregiver had to cancel and dad had to get me dressed. She has had a lot of things going on in her life lately. She has a young daughter with recurring ear infections, the transmission went out on her car so she has to borrow a friend’s car or get a friend to actually drive her to my house. She had been working for me for about three weeks and still had not worked the entire week without missing at least one day. She does absolutely wonderful job when she’s here. Fortunately she seems to have since gotten things worked out and has not missed a day since then.

I had had second thoughts about taking the wheelchair in for repair in the first place. I kind of wanted to be there while they were working on it so I decided to not take it in but to have them come to me. They had told me they can send someone on Thursday the 13th. I had tried to get them to hold that appointment for me in case I couldn’t make it on Monday because I knew my caregiver girl was a little bit unreliable lately. They had said I could just call and reschedule. They would not hold the date for me. When I called them back they said the Thursday appointment had been filled. The soonest they can get here would be Monday the 18th. Like I said… S.S.D.W. I spent the rest of Monday working on an installment of this blog.

 

All Printed up and Nowhere to Go

On Tuesday I finally finished all of my 3-D printing parts and we assembled the joystick mount. Here are some photos of the completed project.

completed_bib

This shows the latching mechanism and how it swings open so that you can fit the device around my neck.

completed_latch

Here’s what the device looks like when I wear it. Note in the background the calendar behind my head and it looks like Michonne from The Walking Dead is trying to chop off the top of my head.

wearing_bib

The only problem I have now was the wheelchair would only work using the attendant controls because the software was glitched. I was all dressed up… or rather all 3-D printed up… and nowhere to go.

Also on Tuesday I had my monthly visit from the nurse from my home health agency. They send someone out once a month just to take my blood pressure, temperature, and see how things are doing in general. Also on the same day by coincidence I had my quarterly visit from my caseworker from CICOA (Central Indiana Council On Aging). She helps me wade through all of my Medicaid issues and she does my case management to get Medicaid to pay for the home health aide. I was able to show them the new wheelchair but I couldn’t really show off driving it which was a disappointment. I spent the rest of the day doing some Internet research to try to better understand what might be going wrong with the programming and other issues.

 

Going on Tilt

When playing poker and you get a bad beat, it rattles you emotionally and sometimes you start playing badly. In poker parlance this is called being “on tilt”. With all the ups and downs I’ve had in trying to get the wheelchair to work right I felt like I was permanently “on tilt”. Alternative title for this section could’ve been “Tilting at Windmills” considering we seem to be on a hopeless quixotic quest and getting a working wheelchair was an “impossible dream”.

Clever clichés aside, the next topic actually did have to do with tilting. Most wheelchairs have some sort of little “wheelie bar” out the back of the chair to keep it from tipping over backwards. My old chair had a bar on each side with a tiny wheel perhaps the size of a skateboard wheel. The bars were easily removable and that was one of the first things that I did when I got the old chair. By removing them, it is possible to have someone tilt my chair backwards to go up a small step or a curb.

Only twice in my life do I ever recall coming close to tipping over backwards in the chair. There was one particular ramp at Market Square Arena that was way steeper than the others. Trying to go up it one time I was a little bit worried the front end of my chair was getting a little bit light. There was another time my mom was driving me up a small wooden ramp up a step at a retreat center in Culver Indiana. Halfway up the ramp she accidentally jerked the joystick a tiny bit and my front wheels raised. Fortunately she stopped quickly before I tipped over backwards. The only time I actually tipped over backwards was the day that my van lift fell and I tipped over and landed on top of my friend Judy. That’s a story for another day.

I do know that even on level ground it is technically possible to get my old wheelchair to tip over. You would have to put it in high-speed, drive it backwards at full speed, and then slam it into forward at full speed. You could get it to tip backwards that way. But even when I had much better use of my hands, I was never driving it that way to begin with. Once my arms started giving out it was physically impossible for me to make such an abrupt maneuver.

quickie7 A popular design for new wheelchairs these days is what they call “mid wheel drive”. The chair essentially has drive wheels that are fat tires perhaps 10 or 12 inches in diameter in the middle of the chair and then it has caster wheels in both the front and the rear. The photo on the right is a Quickie Series 7 chair (mine is a 6). Essentially the chair has six wheels. It has a strange suspension system that keeps all six wheels on the ground as you go over rough terrain. And if you have a rounded curb or an obstacle like a speedbump it will climb up or down that very easily. But to go up a square step have someone attempt to tip your wheelchair backwards for you, there’s no way to do it. That’s why I didn’t get the Series 7 and got the rearwheel drive Series 6.

Although my new chair has rear wheels behind the drive wheels, they normally sit about a half inch off the ground. They are only to be used as an anti-tip mechanism. They have a strange retraction mechanism that appears to be spring-loaded. There is a cable running from each of the rear wheel assemblies to some sort of motor or actuator in the front of the chair underneath the seat. When we had the demo chair we couldn’t figure out how it worked but we figured we would be removing these anti-tip wheels anyway. Sadly the wheelchair salesman wasn’t sure how they worked either.

We did have some concern that if I was reclined, the chair I buy back might be at risk of tipping over backwards and we might need to keep them in place. We were going to have to do some experimenting before we actually removed them. As you can see in the side-by-side images below, the center of the rear wheels of my old chair were probably six or 8 inches backwards from the position of my back. But in the new chair because the wheels are smaller diameter and the way it is constructed, the center of the rear wheels is almost directly below the point where my back hits. While this new chair is heavier and the weight of the equipment is further forward under the seat than my old chair, the actual tipping point is a little more dangerous.

compareprofile

The other issue that concerns us about these rear wheels is that the chair might not fit on the wheelchair lift on my van. When we had the demo chair, I did not ride it on to my wheelchair lift but dad did try rolling it up on the lift without me. He thought that the chair would not fit with those anti-tip wheels sticking out the back. There is a metal flap that folds up behind the rear wheels to keep me from rolling off. Dad thought that the only way to get that chair to fit would be to put the flap in the space between the anti-tip wheels and the drive wheels. That would definitely be awkward and yet another reason why to remove these unnecessary wheels. The photo below shows my wheelchair sitting on the lift platform with the anti-tip wheels in front of the flap. It turned out that when we actually put me on the lift with me sitting in the chair and did some experimenting that I would fit with the anti-tip wheels in front of the flap. Unfortunately to get into that position we had to roll me so far forward that my feet would hit the bumper of the car. I actually had to slide my feet backwards on the foot rests. When sitting in my old chair I was that lower and thus my foot rest was lower and my feet would fit under the bumper when I rolled forward. Anyway even though I would fit on the lift, it was going to be a complicated process.

on_lift

One of the things we couldn’t figure out was why there was such a complicated mechanism on these wheels. It looks as though there some sort of spring-loaded suspension system and then there was this cable that runs to the front of the chair and some sort of actuator. But we couldn’t figure out what activated it. We couldn’t find anything of the user manual that explained it in the dealer had not been able to explain it.

antitip_close>So I got online to my new favorite go to place for all things wheelchairs, an online discussion forum at wheelchairdriver.com. I asked them if they thought it was safe to remove these wheels and what was the complicated mechanism all about. You can click here to read the thread but the gist of it is that they didn’t think I should remove them. Of course these are people who are a lot more active than I am riding their chairs around on rough ground. If I have this chair when I was in my teens it was a bit of a different story. It was also interesting that the members of the forum got into a heated debate on whether or not the Quickie Series 6 was actually “rearwheel drive”. One guy said it’s a compromise between a mid wheel and a rearwheel with all of the disadvantages of both. I guess he wasn’t a fan.

The bottom line is that these wheels are supposed to be able to flex upwards so that you can go up and down curbs and ramps. However if you recline the wheelchair, that mechanism gets locked in the down position keep you from tipping while reclined. Some people said that their anti-tip wheels were constantly touching the ground while most people said that like mine they were slightly off the ground. One guy said that his dealer made a modification with a wedge-shaped part that would adjust the height of the down position. A few days later going through some paperwork we found an addendum that explained this little extra block could be inserted but it didn’t make it very clear what that little block would do for you.

 

Need Knowledge… Do an Experiment

When the experts can’t agree and the instruction manual doesn’t instruct there’s only one thing to do… actually experiment. Over Wednesday and Thursday of that week we tried a number of different things. We got me on and off the van lift and I rode up and down and actually got in the van. More on that later. We drove me out to my front curb. Our curb is about 6 inches tall and is very rounded however when I was younger and rode around the neighborhood a lot I used to have trouble getting up and down it so dad poured a small concrete ramp in the center. We drove me down the ramp okay and then we tried driving up the rounded part of the curb. It had the power to get the front wheels climb up the slope but because the rear anti-tip wheels would not retract it was lifting the drive wheels off the ground. When we went back to drive up the ramp we almost couldn’t get me to go. The chair would roll down the ramp okay whether the drive wheels were touching or not. When we tried to drive up again, we realized that the drive wheels were barely coming off the ground. It was just enough to lose traction. We had to get a bit of a running start to get me up curb even with the ramp. We had hoped that once the full weight of the chair was on the anti-tip wheels that they would retract a tiny bit. Unfortunately they did not. Something weird was going on because they should retract as long as I wasn’t reclined any.

it was clearer than ever that the wheels were going to be in the way and severely limit my ability to go up and down even small ramps if they were sufficiently steep. We still didn’t know just how tippy this chair would be because anytime we tried to tip it, the wheels would hit. It wasn’t until the next day that I came up with another idea. We went back outside and parked the wheelchair on the front porch which is up about a 4 or 5 inch step from the driveway. We parked me with the anti-tip wheels hanging off of the edge of the porch into the driveway. This would allow dad to try to tip the wheelchair in a controlled manner. He tried tipping the chair back with me sitting at my normal seating position as if he were trying to take me up a curb. It seemed to him the chair was no more or less tippy than my old chair was.

Then we gave it a real test. We reclined and tilted the wheelchair all the way back and he tried to see if it would tip. He could put a lot of weight on the rear of the chair and make it tip but it didn’t seem like there was any way it was going to tip by itself. Keep in mind I would not be driving the chair anywhere or be driven anywhere while in that reclined position. I wouldn’t do it on uneven ground.

 

“Never Start 2 New Foods at Once”

The above quote is a proverb that my mom always used. She always said that when you are trying to get a baby to eat solid food or different kinds of baby food that you should only try one thing at a time. If you try 2 new foods at once and the baby has a bad reaction to it, you don’t know which one was responsible. It’s been a philosophy that has served me well in dozens of situations whether it was building gadgets or troubleshooting software. If you make 2 changes at once and something goes wrong then you are clueless. So even though we had come to the conclusion that it was safe to remove the rear wheels, we were not going to do it right away. I was concerned that messing with it might trigger some sort of safety mechanism and shut the chair down completely. We had already gotten in trouble when I messed with the programming. I wanted to wait until we solved the programming problems before we made any new changes to the chair. Unfortunately a few days later we did not heed the “2 new foods” rule and it got us into more trouble. But that’s another story.

 

More Comfort Issues

Other activities of this week included padding and reupholstering the armrests. The armrests that came with the chair were very hard rubber with little or no cushioning in them. They also had a concave shape on the top surface which would be great to keep your arm in place if you lay your arm absolutely parallel with the length of the armrests. However I like to keep my arm sometimes at somewhat of an angle and so the edges of the concave shape dig into your arms. I had been referring to them as “an armrest only a quadriplegic could love”. We had been putting a pillow under my arm but then as an experiment we cut a piece of foam and put it on the armrest with duct tape. After a few days I decided that was the right height for a permanent solution. Dad went out to the fabric store in Avon and purchased a few square yards of dark blue Naugahyde upholstery material and made covers for the foam.

We also came up with a temporary solution for had to mount my ultimate remote control and my iPhone. I used to have a gadget that was an aluminum bar that would fastened to the upright portion of my armrest. We had two of them in fact. One of them held an easel on which I can put books or papers. I would use it if I was giving a speech somewhere and didn’t have a table in front of me. I had used it at Enneagram seminars and some RCIA classes. I also had a similar manner for my video camera when I used to hang out at the Speedway and shoot video in the garage area. I no longer had used for either of these so we repurposed the swingarm part of it by cutting a slot in the end that would hold my iPhone bracket from the other chair. The upright pipe on the armrest is a different diameter so dad had to do some cutting and grinding but we got it to work. The iPhone bracket itself will probably get redesigned into a simpler form that will probably hold the iPhone a tiny bit higher but for now it’s good enough. We are thinking about possibly moving the LCD display from the right arm rest of the wheelchair onto this adapted swingarm. The display currently is not in a very useful position and I can’t really see it where it’s at. Anyway it was great to be able to use my TV remote and my iPhone again.

After being so frustrated with the wheelchair, I needed to take a break so I took a day off from working on it to play with a raspberry pi. I mentioned in a previous post that I was replacing an old raspberry pi model 1 B with a newer model 2 and giving the old one to my friend Buz who lives in Michigan. Fortunately getting the old one running for him went much smoother than setting up the new one for me. After getting it ready here, I mailed it to him and the following week we got together on Skype and I talked him through how to set it up. It was a lot of fun connecting with an old friend. We will probably do more Skype in the near future.

Saturday I planned to go to church and as we had not yet gotten a hold down straps installed in the van I had to sit in the old wheelchair. I couldn’t believe how uncomfortable I was all day long. The new chair really had me spoiled.

On Sunday the 17th I spent the day watching NASCAR and IndyCar and working on the blog. Hopefully next week would be a both better week. The repair man was scheduled to come on Monday. That would also be my dad’s 81st birthday. Hopefully it would be a really good day.

There is one other incident during the week on Thursday April 14 that I need to blog about but it doesn’t really have anything to do with the wheelchair. It was something of a more personal nature which belongs on my personal blog rather than my technology blog (even though technology is very personal for me). You can read the story on my personal blog here. So that wraps up the third week after my new wheelchair arrived.