With the addition of the Raspberry Pi to my rebuilt Up Plus 3D printer I now have three power supplies connected to the machine. The heated bed is using the original 19V power supply that came with the Up, the RAMPS 1.4 and hot-end are using the 12V supply from my old Prusa and the Raspberry Pi is using an old 5V phone charger. This is a lot to connect to start the printer.
I want to simplify things by just using the 19V supply and fit the machine with two step down voltage regulators. I would need one regulator to step the 19V down to 12V and a second to step down again from 12V to 5V. The 5V is easy as the Raspberry Pi Zero W only draws 250mW max so any USB power supply will work. I settled with a dual USB 15W switch mode supply that can handle 6V – 40V input. The larger supply and dual ouput would be handy if I add a WiFi camera later.
The 19V to 12V supply needs to supply the RAMPS 1.4, Arduino, stepper motors and the hotend. I calculated the peak power draw to be 30W (2.5A). I chose a 50W Power Supply Module that included an LCD display that shows the current draw and voltage. The Ebay listing shows that the unit can supply 35W constant without cooling and 50W with the supplied heatsink. I also added a cooling fan.
The first test run had the 12V supply showing peak current draw of under 2.5A so less than 30W but the heatsink was getting too hot to touch even with a fan on it. 10 minutes into the print the printer stopped with the 19V supply shutting down due to short circuit protection. The second MOSFET on the 12V supply had failed short circuit. I contacted the Ebay seller wh didn’t respond to any e-mails. Swindled.
With a doubtful attitude to Ebay sellers I decided to replace the 50W supply with a 200W supply. This new supply doesn’t have a fancy LCD but it shouldn’t burn up during basic use. I kept the cooling fan just to make sure and the power supply is cool during use.
Now with only one power cable this printer is almost looking finished.
Last weekend was the 2019 Australian Feather-Weight Nationals and Daniel decided the enter Prowler. Prowler has been fairly unchanged since last year except for swapping the friction saw blade with an all purpose demolition saw blade. The controls were also divided between Daniel driving the robot and Andrew controling the weapon. This is the first time with both of us controlling the same robot and was hoped to remove some stress from Daniel while trying to drive and operate the weapon at the same time. Oh, and a new paint job.
The competion was held over 2 days with 2 qualifying rounds held the first day. Prowlers first match was against a lifter called Pooper Scooper. Going into the fight we were concerned about Prowler being turned over but Pooper Scooper’s weapon failed early in the fight. The new saw blade worked well on the mild steel and UHMW Polyethelyne top on Pooper Scooper creating several cuts in the top. A nice win to start the weekend.
The second fight was against Bob who is a viscious looking horizontal spinner. The concern here was that the blade whould hit the spikes on the front of prowler and bounce up into the saw arm. Daniel decided to drive aggresivly to prevent Bobs weapon from getting up to speed. During one attempt at sawing into Bob, Prowler drove Bob into the arena wall and Bob bounce up into the saw causing the saws bearings to pop out. After this Bobs weapon also failed and it became a pushing match. Fortunatly Prowler was able to out-wedge Bob and the arm could also clamp Bob to help drive Bob into the walls. During all this driving and attempted clamping Daniel realised that one of Prowlers drives would cut out while the arm was being raised or lowered. Fortunatly Prowler still won the fight.
Upon returning to the pits I refitted the weapon axle and replaced the bearings and checked that the saw was running true. The drive problem while the arm was being moved was determind the be a low voltage cut-out of one of the drive ESCs. To test this the ESCs were swapped with Berserkers ESCs (because Beserker just happened to be in the car) and Prowler worked ok. Prowler would keep Berserkers ESCs for the second day.
The next day the 2 wins had allowed prowler to qualify for the top 16 finals. The first match up was against The Undertaker which is a under-cutter spinner with a 4kg weapon. Fortunately for us the weapon was not working as The Undertaker had burnt out all its weapon motors the day before. This left The Undertaker fighting as a wedge with extra AR450 plates added to its top for extra armour. While Prowler could not cut into the heavily armoured top of The Undertaker we still won by judge’s decision. Now in the top 8.
Unfortunately the 4th fight was against Abomination, an extremely powerful and well built vertical spinner. Daniels idea was not to box rush but to move to the centre of the arena and hope that Abomination would not want to attack Prowler head on but try to circle around us. Being such a powerfull vertical spinner Abomination would have trouble turning to maneuver around Prowler and Prowler could attack the side of Abomination while it was struggling to turn. Despite Daniels over thinking, Abominations builder Michael just drove head first into Prowler and out wedged us. Prowler was thrown onto its back but self righted quickly. Abomination continued to attack and hit the side of Prowler immediately and the shock caused the liner actuators cast aluminium gearbox to shatter and the saw dropped to the floor. Daniel continued to attack and Prowler was thrown into the air a couple of times before landing on its front with the 2 spikes and the saw touching the ground. With the linear actuator broken Prowler couldn’t right itself and was counted out.
So Prowler went 3 – 1 and ended in the top 8 which is pretty good. Abomination went on to win the competition with straight KOs so we lost to the best. No major problems to try and fix between fights and if we had a spare linear actuator Prowler could have been ready to go again in a few minutes. Quite a successful weekend.
Now that I have my 3D printer running reliably and the RAMPS 1.4 mounted I want to disconnect it from my laptop. At the moment every time I want to print something I need to connect my laptop and leave it connected for the duration of the print. There is an option to add an SD card reader to the RAMPS but that would also require adding a control panel to the printer. It is cheaper to add a Raspberry Pi.
I have been using OctoPrint software on my laptop which also has a pre-made Raspberry Pi ROM called OctoPi that can be loaded directly onto a Pi. OctoPi is designed for a Raspberry Pi 2B or 3B and offers camera support out of the box. Since I am on a budget I decided to just use a Raspberry Pi Zero W. There is several reports of OctoPi not running on a Zero W mostly because the single core processor can’t support running the server and the camera streamer simultaneously. Since I don’t even have a suitable camera I don’t think this is a problem.
After loading OctoPi and running through the setup the printer worked first time exactly as it did from my laptop. The next problem is that I wan’t to print directly from my phone. OctoPi has an option of adding a slicer plugin on the Pi and while looking through the options I came across AstroPrint. AstroPrint is a cloud-based 3D printing system that includes a selection of slicers. Files are uploaded to AstroPrint, sliced in the cloud and then sent to OctoPi via a plugin.
For quick prints of simple models AstroPrint works well enough but if the model needs some fancy slicing then it is better to use a desktop slicer. AstroPrint also does not include many options to control the printer so I still need to use the OctoPi web interface or an android app.
The next problem created by adding the Raspberry Pi is that it needs a seperate 5V power supply as the RAMPS cannot supply enough current for the Raspberry Pi and the Arduino. Now I have 3 power supplies plugged into the printer, a 19V, 12V and now 5V.
So now I have my rebuilt Up Plus 2 3D printer working I need to tidy up the electronics. To do this I downloaded a RAMPS 1.4 case off of Thingiverse and set to printing.
The first problem I had was bed adhesion. The buld plates that came with the printer are similar to a prototyping PCB perf-board with hundreds of tiny holes in it. The PETG filament I am using sticks to the board well enough but all the holes make for a really rough bottom layer. After a little Googling I found that the Up software slicer uses a raft for bed adhesion so I will try that. It took some adjusting to get the first layer height offset correct but it is working.
The next problem was that the prints are warping badly. I had not wired up the bed heater yet as I still needed to change the thermistor. The Ups original 100 ohm thermistor doesn’t work with the RAMPS controller so I replaced it with a 100k ohm thermistor. With the RAMPS power supply set to 13.5V the bed could only reach 65 degrees celsius and even then took 45 minutes to get there. The recommended bed temperature for PETG is 70 degrees so the best I could manage was still 5 degrees too low.
While I had changed the thermistor I didn’t change the heater cartridge in the Ups bed which was designed to work with a 19V power supply. The RAMPS 1.4 has a seperate power input for the heated bed but a look at the schematic shows that the MFR1100 11A PTC resettable fuse is only rated for 16V. A look at how these PTC fuses work and at the datasheet for this particular fuse I see that the critical part is not the voltage but rather the power consumption as the fuses rely on heating of the internal elements for them to work. If more than 16V is applied to the fuse while it is failing then the extra power consumed by the fuse while the internal resistance rises can cause the fuse to fail in a non-resettable way. But since this is what fuses usually do I am willing to risk using the standard PTC fuse at 19V.
I wired up the original Up 19V supply to the 11A input and left the 13.5V supply on the 5A input of the RAMPS and gave it a go. Now it reaches the target 70 degrees in under 15 minutes and has no trouble maintaining that temp.
I had started printing the case for the RAMPS before fixing the bed heater and the case had warped and the print failed when it seperated from the raft 3/4 of the way through. Since it took 14 hours to print as much as I did I didn’t want to start again. I cut the part that printed successfully of the bottom of the model in Cura to finish the print with the bed heater active and then glued the top to my failed print. The pieces don’t quite match due to warping but I now have a momento of how the printer worked before the improvements.
With the mechanical repairs done to the old Up Plus 2 I was given I can start on replacing the controller board. The old board had a faulty Y stepper motor driver and wasn’t compatible with the thermistor in my new hot end so I am fitting the printer with the controller from my old printer.
There are several guides on the internet about how to setup and commision a RAMPS 1.4 board in a new 3D printer and I don’t feel like writing my own so I will go over the basic steps here. If you need a more comprehensive guide I would suggest starting here.
Load the latest Marlin firmware onto the Arduino and load OctoPrint onto my laptop and verify that the two can connect to each other so I can use OctoPrint to control the printer.
Connect the endstops to the RAMPS and use the M119 Endstop Status command in the OctoPrint terminal to verify that the endstops work. The Z endstop was connected to the Upper Z Endstop port and the Z probe connected to the Lower Z Endstop.
Connect the motors (while powered off) and check motor direction is correct. I manually moved to carriages to their centers by hand and then jogged the motors 10mm using the OctoPrint controls to check the direction. Since the Z axis is belt driven and falls under its own weight if the motor is off I had to hold it in my hand before driving it. The directions were corrected in the Marlin firmware configuration.h file before reflashing the firmware and trying again.
Check the motors home correctly. This was done with the Ups original magnetically attached Z probe stuck onto the X carriage bracket. I had my hand on the power switch before triggering the home button so I could power off the machine if the motors started homing in the wrong direction. Only the Z axis was wrong and this was corrected in the configuration.h file.
Check each axis Steps/mm setting is correct by measuring starting distance of each axis’s carriage in relation to the printers fame and then using OctoPrint to move the axis 50mm and measuring the real world movement. I found that the Marlins default 80 steps/mm matched the X and Y perfectly and didn’t need adjusting so I set the Z axis to the same 80 steps/mm.
Added the dimensions of the bed into the firmware.
Set Z-probe pin to be the same as the Z endstop and measured and entered the Z probe offset from the nozzle. I also enabled Safe_Z_Homing at the center of the bed as the Z probe was not homing over the bed. Verified with G28 command.
Set Auto_Bed_leveling_Linear in the firmware using 3 points per axis.Verified with G29.
After running G28-G29 I used OctoPrint controls to move to the center of the bed and lowered the nozzle close enough to the bed surface so that a piece of paper could barely fit between the nozzle and the bed. Then I used M114 to read the current position and calculate the correct Z-Probe Z offset and updated the firmware. I like to keep the firmware up to date rather than using EEPROM commands as this means I have a backup of the configuration and if the controller blows up I can reflash a new controller and skip most of these steps.
Connect the extruder drive and verify the drives direction and feed rate with the hotend removed. The rate is checked by feeding a few cm of filament through the extruder and wrapping some tape around the filament where it exits the extruder. I then use OctoPrint to extrude 50mm and measure how much was really extruded using the tape as a reference. I then calculate the error as a percentage and adjust the steps/mm in the firmware by this error. I then repeat the test until the error is as low as possible.
I refitted the hotend and switched it on to check that it heats up. I no longer have an IR thermometer to verify if the thermistor table is correct as the kids wrecked it thinking it was a hammer so I have to presume that the reported temp is accurate. Next I ran M303 C5 E0 S200 to auto tune the PID values and updated them in the firmware.
I have had to pause work on my robots as I have not been able to get any reliable prints out of my old Prusa Mendel 3D printer. The frame of the printer had twisted again making auto bed leveling impossible while the extruder drive was failing. After moaning to my brother about the troubles he gave me a “new” printer. The “new” printer being an old Up Plus 2 that had previously been written off and stripped for parts.
The first thing I did when it arrived was pull all the covers off to see how bad it was. The mechanical faults seemed to be limited to a broken Y belt clamp and a destroyed hotend. The Y belt clamp had been broken when the printer was pushed against a wall while opperating and there may be an accompanying electrical fault that I can’t assess without first fixing the mechanical issues. So first I designed and printed a new belt clamp using the old printer. Fortunately it worked the first try.
Next I needed to replace the hotend. The only hotend I had available was the E3D V6 on my current printer. So I downloaded some drawings of the E3D V6 and measured the Ups hotend and extruder and made a new mount for the hotend. The trick was to try and get the nozzle of the new hotend to be in the same position as the original nozzle. Since the E3D hotend is much higher than the Up hotend the new mount needed to raise the extruder a fair way. This new mount was the last print ever done on the old Prusa Mendel as I pulled the hotend out after it was finished.
With the mechanicals sorted I could test the electronics. I downloaded the Up software and connected the printer to my laptop. The first problem came when homing the motors. The X and Z axis worked fine but the Y axis whould crash into the front after homing to the rear. It seemed that the Y stepper driver IC was damaged and was stepping a different distance when moving one way than the other. That was very strange but not worth looking into after finding out about the thermistor problem.
The E3D V6 comes with a very common 100k ohm thermistor. A 100k thermistor is used on just about all 3D printers everywhere, except for the Up. The Up uses a much more uncommon 100 ohm thermistor. The different thermistors require different pull up resistors on the control electronics for them to work. Because of this the Up software would report a hotend temperature of over 300 degrees and refuse to run. To fix this I would need to replace the pull up resistor and then work on the Y stepper driver fault. Or replace the control board with my own. So I pulled the RAMPS 1.4 board out of my old printer to replace the Ups damaged controller.
The next step was to completly re-wire the printer and setup the firmware from scratch.
With the upcoming first ever beetle-weight competition at the Ipswich Robotic Sports Group in a few weeks I have started a new robot. This is a armoured version of the omni-directional test robot that I built last year.
I have started with the gearboxes and wheels. I am not too confident that the gearboxes are strong enough to take any impacts during a fight so have beefed them up by making a 2 piece 3D printed mount that includes 608z skateboard bearings on either side of the wheel. The 3D printed wheel hub has been enalarged and lengthend to fit the 8mm internal diameter of the bearings while the 4mm gearbox shaft couples to the hub inside the bearing.
I want the robot to have 45 degree sloped armour all around so I will also use the outer bearing mounts as mounting points for the armour. Unfortunatly my poor CAD abilities have meant that these mounts have become quite large but we will see how it looks when finished.
Huntsman has been created up and is now on its way to Chine for King of Bots next month. A custom crate was made around the robot and all the tools and spare parts loaded in. The only things not in the crate are the batteries and the cordless drill that will be used to open the crate. Sad to see it leave but we look forward to seeing him again in a few days.
With only days left before Huntsman needs to be boxed up and sent to China a final test of the weapon was needed. The target was an old laser printer. While this was only a quick test no problems have been found and we are good to go.
I have decided to make a Raspberry Pi based RC transmitter that will allow my kids (and me) to control a robot with an Xbox controller. Since I thought that this would have been a regularly done project I should be able to find lots of examples on the internet. Nope, I only found a couple articles about people attempting this. So I have decided to document my attempts to try and make it easier for the next person.
I have written up all my progress on a few pages here so others can learn from my mistakes. This is my first attempt at Python programming having come from a C and assembly background so please don’t judge me too harshly.