Search This Blog

Thursday, July 4, 2024

I Just Cannot Trash Bin a 3d Printer

My Anycubic i3 Mega 3d printer cost nothing.  One of my son's friends was about to throw it in the trash, but my son suspected that I'd want the unit.  Maybe I could revive it, or at least scavenge parts from it.

Anycubic 3d printer

After rummaging through the parts collection that I was given, I finally had a nearly functioning Anycubic 3d printer.  It needed stepper drivers as they were missing for some reason.  Looking back, I really wish that I'd bought TMC2130 drivers instead of A4988 drivers.  The TMC drivers in my Creality Ender 3 Pro are much quieter than the A4988 drivers in my Anycubic.

At last, a fully functioning 3d printer brought back from the dead!  However, the print quality was terrible.  Layer lines were inconsistent.  There were droops when doing short bridges,  Then again, the issues seemed to be connected to cooling and the Z axis.

I adjusted the belts and replaced the linear bearings, a bit of a try-it-all approach.  X and Y improved with layer lines stacked straight on top of each other as they should have been.  The inconsistent layer lines thickness issue persisted.  The differences were tiny, but noticable.

I had not replaced the Z axis linear bearings because they were more expensive than typical linear bearings.  That's when I noticed that the ends of the X axis were tweaked inward as if the belt was drawing the two outer boxes together at an angle.


After completely disassembling the X axis and replacing the linear bearings, I reassembled it without the belt and lined the outer boxes up perfectly and added the belt and adjusted it.  Everything seemed fine but Z axis resistance seemed inconsistent.  I moved the Z axis by hand through full range and found that the Z axis lead screws wobbled which seemed to vary movement resistance.

I created a pair of Z axis lead screw bearing holders and installed them.  First, The Z axis coupling was fully loosened to let each rod go to its natural position.  The Z axis was moved through full range to detect any binding.  There was no binding; so, I tightened the couplings and verified again, by hand, that there was no binding.  Perfect!

At last the old Anycubic that was headed for the trash was functioning correctly.  Now, what to do with it?


First, I had to support the drooping cables with a retracting key fob.  Uncle Jesse mentioned using these in one of his videos long ago.  After adding a strong magnet to the retractor, I attached it to the cable and it worked well.


Next, the spool holder had to be addressed.


I found a design for a side mount spool holder on Thingiverse and printed it added it to the unit.

I had a Creality Ender 3 Pro that I really liked and the print quality was good; actually it was a bit better than the Anycubic.  I've always wanted to try Klipper, so why not put Klipper on Anycubic?

Installing the Klipper firmware onto my Anycubic i3 Mega was quite easy.  Just follow the instructions in the Klipper GitHub and connect a Raspberry Pi to the Anycubic and add a Anycubic config file to the Raspberry Pi and that's all there is to it!

I had an old Raspberry Pi 3A and a 5 inch LCD to use for running Klipper.  After creating an enclosure for the Raspberry Pi and LCD, I connected the Raspberry Pi to the Anycubic 3d printer and started it all up.


Klipper gets a lot of attention for speed printing like speed Benchy contests, etc ..., but that's not why I wanted Klipper.  I wanted Klipper because the settings are kept in a simple text file.  Edit a setting without recompiling and reinstalling firmware and you'll never want to go back to the old way of doing things.  

Opening VSCode and using PlatformIO and editing a C header file, compiling, placing the bin file on an SD card, rebooting and waiting to see if everything worked is a pain compared to just editing a config file.  Besides, if you make a mistake in your config file and save it, Klipper will let you know where you goofed; so, just go back to the config file and undo the changes.  The Klipper GitHub even has an Anycubic config file, so you can just use that if you make a huge mistake in editing.




I'm not entirely sold on Klipper.  I like the editing convenience, which is why I installed Klipper.  I like that it makes experimentation easy.  Do you want input shaping?  Slowing down when approaching corners?  More precise acceleration control?  Easy, just add a line in the config file.  No need for lengthy recompiling and anxiously waiting to see how things worked out.


The only thing that I don't like about Klipper is that it is a separate control part of the 3d printer.  However, it is nice to be able to directly send prints to the Anycubic using WiFi.  I may even add a camera for remote monitoring prints in progress.  Maybe I should tie in my Raspberry Pi power to the Anycubic so that one switch turns everything on.  It'd feel more cohesive.  Maybe I'll try printing a speed Benchy.  That's what I like most about Klipper, maybe do this or maybe do that is easy compared to using Marlin.



Saturday, June 15, 2024

Easy DIY Tempest Spinner



Tempest Arcade Machine

Tempest is one of my favorite arcade games but I have a problem with Tempest.  If you've ever played the original Tempest arcade machine, you'll remember the weighted spinner.  That spinner allowed for incredible speed and agility, limited only by the player's skills.

I don't have the cash for an original Tempest machine nor the available space. Arcade 1 Up machines are nice but why buy one when I can play Tempest on Retropie?  All I need is a spinner. 

Arcade Spinner


Unfortunately, weighted spinner controllers are rare or expensive these days. Not a joystick nor buttons compare to spinner control.  There are spinners available, such as from Arcade 1 Up.  

Rotary Encoder

Some folks have used such spinners, interfaced to an Arduino or Raspberry Pi, which requires a bit of electronics skill.  I tried it years ago but the spin was stiff and not free like an original Tempest spinner.  This is why some simply resort to using a computer mouse as a compromise.

What if you could disassemble a cheap optical computer mouse and turn it into weighted  arcade spinner control?  I did just that. A cheap optical mouse and a 3d printed enclosure are all that you will need to create your own weighted spinner!

Cheap Mouse

I used a wired mouse for simplicity but you can use a wireless mouse if you wish as long as you don't mind finding a place for the mouse batteries.

For this mouse conversion to work, we need the mouse to sense left and right direction for and infinite distance.  Normally when using a mouse, the mouse reaches the end of the mouse pad or desk surface and that is the end of movement in that direction.  For our mouse to work as a spinner, this limitation must be eliminated.

Instead of using the mouse on a flat surface, we're going to use it on an infinite surface, well infinite in one axis: we'll use a cylinder.  We can roll a cylinder under the mouse sensor for any distance desired simply by rotating the drum surface any number of times desired!

Test Version of DIY Weighted Spinner

My prototype of this idea was a drum attached to a knob for control with a mouse placed over the drum.  I spun the knob, and drum, left and the mouse moved left.  I spun right and the mouse moved right.  It was time to try it out with Retropie running Tempest.

The spinner worked perfectly in Tempest.  I could spin in circles as many times as I wanted and as fast as desired.  However, it looked clunky having a mouse sticking out near my spinner knob.

Cutting mouse PCB

Since I used a wired mouse, which was simple compared to a wireless mouse, the PCB was etched only on one side.  I could cut the mouse PCB down to fit inside a spinner enclosure and just move the wire and switch connections by tracing the PCB traces. The LED sensor lens would be needed too, so I used double-sided tape to secure it to the PCB.

Cut mouse PCB with secured mouse sensor lens

After documenting all of the connections to the mouse IC, I cut the mouse PCB to about half it's original height and moved the connections for the mouse buttons and the mouse thumb wheel.  

Mouse wiring schematic

Note that the mouse thumb wheel needs to be connected properly to the IC or the mouse will not function at all.  I simply connected the thumb wheel, being careful to maintain original polarity, and just let the thumb wheel dangle.  Someday I'll hit glue it down.

I ran out of black PLA 3d printing filament; so I 3d printed the new, smaller enclosure, using white PLA.  I also 3d printed the new drum using white PLA.  The spinner no longer worked!

Cut and rewired mouse PCB

I tested the cut up and rewired mouse with a mouse pad and it worked fine.  Must be the drum.  I painted the drum black and now my spinner works great!  Don't 3d print the drum using white filament.

Adafruit PiGrrl board

I wanted buttons on my spinner control since it would be awkward to spin with one hand while trying to push a fire button on a game controller with the other hand.  I wire the left and right mouse buttons to a PiGRRL button board that I had bought from Adafruit a long time ago.  The buttons did not work.  The mouse stopped working at all!

I soon figured out that the mouse buttons did not share a ground connection.  They were not grounded.  However, the PiGRRL board grounded all buttons to a ground plane.  I cut a rectangle around the grounded pins of each pushbutton to break them loose from connecting to the PCB ground plane.  After doing this, I move the button wires to the newly isolated button connections.  

Completed DIY Tempest Weighted Spinner



I put the spinner enclosure together with the newly painted drum and isolated buttons together and plugged it into my Raspberry Pi and started up Tempest.  For the first time in years, I played Tempest with a spinner control and loved it!  My score was nowhere near what my high score was in Tempest as a youth, but now that I have a spinner controller, that may soon change.

I've uploaded the 3d printable files for this project to Printables and created an easy to follow Instructable for this project if you'd like to create your own.