This is a method of color screenprinting shirts called CMYK printing, which uses Cyan, Magenta, Yellow, and blacK to product a full-color image, just like a color 2D printer would.
In order to ensure proper alignment of each layer for each Tee shirt, precise coupling of some kind must be used. If you look at the bottom right, it seems some kind of endstop is used to ensure each screen is located properly in the horizontal direction, and the rood itself butts up against the metal frame to align the vertial direction and prevent rotations. While this may not exactly be micron repeatability, this certainly seems good enough for this application! Perhaps I should make a Kinematic Screen Printing Coupling? Maybe in the future!
Here's a video of a photographic image recreated by this process. This time, a machine is used with four stations and four tee shirt holders that move from station to station, where each station only puts down one color. I imagine some kind of final alignment features are used in order to get each station to be repeatably applied to each tee shirt.
Clamp (Y) axes both fully disengaged, back clamp screw touching the rear top plate.
X axis against wall near its stepper motor
Z axis all the way up.
Electronics and turning on your FASBot:
The FASBot uses a 22.2 LiPo battery, which can last it a long time. Place the battery inside the FASBot's electronics compartment on the hook-and-loop fastener patch. The power connectors should be facing AWAY from the wall.
To turn the FASBot on, flip the switch on the backside UP.
A digital display shows the battery's voltage. This battery will charge up to 25V and should be disconnected and charged before it reaches 18V.
Software and communicating with your FASBot:
The FASBot uses an Arduino Uno with grbl CNC firmware.
The Arduino Uno is fitted with an XBee wireless communication device on a shield. An identical Xbee attached to a USB dongle is required to communicate with the FASBot. This XBee will show up as a serial port on your computer. In order to allow for reliable wireless communication, a serial baud rate of 19200 must be used.
The FASBot can be controlled using GCode from the CNC GCode Interpreter.
For its intended purpose in aircraft manufacturing, a Python program was written in order to allow the FASBot to be integrated with the Triple Scissor Extender and allow the pair to work together autonomously. The FASBot must be turned ON before running the Python program.
FASBotTest.py
"""
FASBot control software
by Daniel J. Gonzalez - dgonz@mit.edu
Spring 2016
"""
import serial
import time
# Open grbl serial port
s = serial.Serial('COM13',19200)
def setupFASBot():
# Wake up grbl
s.write("\r\n\r\n")
time.sleep(2) # Wait for grbl to initialize
s.flushInput() # Flush startup text in serial input
sendG('G20')
def sendG(msg):
print 'Sending: ' + msg
s.write(msg+'\n')
grbl_out = s.readline()
print ' : ' + grbl_out.strip()
def exitFASBot():
# Close file and serial port
s.close()
def sendFasten():
#Drive Spindle
sendG('S100 M3')
#Move Spindle Down
sendG('G90 G0 Z-1.25')
#Turn OFf Spindle
sendG('M5')
#Move Spindle Back up
sendG('G90 G0 Z-0.5')
def test():
setupFASBot()
"""
for i in range(0,25):
sendG('G90 G0 X3')
sendG('G90 G0 X4')
raw_input(" Press <Enter> to Move to rest location.")
"""
#raw_input(" Press <Enter> to Start up FASBot.")
#Move Spindle To Side
sendG('G90 G0 X4.5 Z-0.5') #(1.783/2) #(1*(1.75))
#raw_input(" Press <Enter> to Close Clamp.")
#Close Clamp
sendG('G90 G0 Y1.6')
#raw_input(" Press <Enter> to Start Fastening Job.")
for i in range(0,6):
sendG('G90 G0 X'+str(i*1.75))
sendFasten()
#raw_input(" Press <Enter> to Move to pickup position.")
#Move Spindle Home
sendG('G90 G0 X4.5 Z0')
#raw_input(" Press <Enter> to Open Clamp.")
#Open Clamp
sendG('G90 G0 Y0')
#raw_input(" Press <Enter> after FASBot is removed from TSE.")
#Move Spindle To Side
sendG('G90 G0 X0') #(1.783/2) #(1*(1.75))
exitFASBot()
test()
This test program requires the user to press ENTER in order for the FASBot to perform the next move. By putting this code into the code running the Triple Scissor Extender, they can both be used together autonomously. For the demonstration, two computers were used, each running its own program that required the user to press Enter
Once the Python program exits, the FASBot may be turned off.
The Ultimaker is a great 3D printer that is known in the desktop 3D printing community for printing quickly and reliably. It can use both ABS and PLA filament, and the original is made from a lasercut plywood construction and assembled using slotted "t-nuts" (The community calls these bolted joints t-nuts even though these aren't real T-Nuts, which you can use to clamp parts to a mill bed, among other things).
This sounds similar to my FASBot! Here I will look into the similarities and differences between the two.
To start, the material, while also wood, is plywood, as opposed to MDF. According to some online sources (http://www.diffen.com/difference/MDF_vs_Plywood), plywood is stiffer than MDF an is less sensitive to moisture.
How much stiffer is plywood than MDF? According to Matweb, the Young's Modulus of plywood is 9.8 GPa. According to MakeItFrom, the Young's Modulus of MDF is only 4GPa. Plywood is over twice as stiff!
This is probably bcause MDF is compressed bits of wood fibers while plywood has long grains. It's the difference between baking a cake of carbon fiber shavings and epoxy versus making a tube from longer strands of carbon fiber epoxied together. The latter will be stronger.
The main structure forms a cube that is held together with slots and tabs for alignment, and "T-nuts" to keep everything together.
The printer uses belt drive for the X-Y axes, and a hefty leadscrew for the Z axis. Here are the main guides that transmit force to the printer head. A single, long bushing is pressed through each, that looks about 3X as long as the diameter of the shaft. Saint Venant strikes again! The belts are tensioned using those little clamps sticking out the sides.
Each axis has a pair of these guides, spaced far apart. Each slides along a shaft that also transmits motor torque. The axis shafts are held at each end with a radial bearing that are held in place with a pair of plates (shown above disassembled).
Like my FASBot clamp axes, the Ultimaker transmits motor force to one direct leader slide and one follower slide through a belt transmission. Using this construction, force can be applied to both sides at once, preventing jamming. Each pair of slides pushes another shaft sideways, causing the printer head to move. The printer can still slide along this shaft, but is constrained by an orthogonal shaft coupled to another pair of slides.
The build platform is the carriage of the Z axis. It has two beefy sides to allow it to be cantilevered without much deflection, and a pair linear bearings allow it to move only up and down.
The bearings are held in place with stacked parts. Note that the length of this bearing is about 3X the diameter of the guide shaft. Saint Venant!
The leadscrew is constrained at the bottom using a rigid shaft coupling that attaches a stepper motor located underneath the printer bottom plate. A bearing supports the shaft coupling, and thus the leadscrew, axially. The leadsrew is not constrained at all from the top, which would allow it to. This is acceptable, because the printer process is only sensitive while the bed is moving downward, and this occurs in tiny steps of 0.001" (~ 20 microns) at a time. The only forces the leadscrew will see are downward gravitational forces.
In the last PUPDate, it's made obvious that everything works to some extent.
But how well does it work? What didn't exactly work? What would I change in a second iteration?
I tested the axis positioning repeatability and backlash to validate the module's design. Because both the clamp and nut driver axes are based on the same design, and because most axes are hard to reach or to instrument (instrumentate?), I decided to test only the X- axis.
Here, the FASBot consistently moved slightly under the 0.005" it was commanded to move, implying a systematic error. This is possibly due to rounding errors in the conversion from mm to inches in the grbl firmware, which add up after a few hundred steps.
After moving left, I attempted to switch directions and move right in order to measure the axis backlash. I kept track of how many jog commands it took before it began to move again. The backlash is 0.025", just under 1/32". This is probably due to the exact locations of the tooth engagement and the series spring compression. I can probably use a stiffer spring with a longer stroke, or disassemble the axis and find the right combination of nut rotation that allows for the most spring compression and the least backash.
The repeatability test had the FASBot continually moving its X-axis between 4 and 3 inches in order to move past the backlash hysteresis. The dial indicator was zeroed for the first data point reaching 4 inches. I measured each data point when the carriage stopped at 4 inches and manually entered it into MATLAB.
3 Test Trials were conducted, with the FASBot being homed after each one.
Tests 1 and 2 exhibit similar behavior, with the machine always reaching farther and farther away from the original position. Test 2 was the worst, with the FASBot moving further and further away from the zero'd position after each move. The maximum deviation was 0.035 inches, more than the axis backlash! I imagine this behavior can be attributed to the stepper motor skipping steps every time it moves, perhaps because it must overcome static frictional torque. If my axes are overconstrained, I can add a flexure to or machine the sides of one of my axis bushings in order to eliminate this overconstraint.
Microstepping may have also been useful to prevent skipping steps due to motor vibration. I conducted these tests with full stepping, in order to maximize motor torque, but the sharp vibrations in the stepper motor during acceleration/deceleration could have been enough to cause it to skip steps. I could switch to half- or quarter-stepping and see if I can achieve smoother motion with no continuous deviation. All of the error can be eliminated using feedback control.
The best repeatability was achieved in Test 3, with a maximum deviation of 0.0055 inches. Perhaps after all of the previous trials, the bearings had smoothed out and the static friction was decreased, or maybe I just got lucky with the motor vibrations.
I made the mockup on the underside of a wall we had for an old climbing robot we had in lab. The climber, funny enough, is to perform the outside fastener drilling, reaming, countersinking, and placement for the 787. It seems fitting to have a mockup on the inside of the climbing wall!
I waterjet the Shear Tie and Stringer out of some UHMW Polyethylene we had lying around in lab. The coefficient of friction between these parts and the urethane rubber I purchased for the clamp axes felt quite high, and was 0.5 from looking up tests online. I bent the components using a heat gun to heat a perforated line I waterjetted into each component, then clamped them to big pieces of Aluminum we had in lab. This worked fairly well, and while the components are not nearly as stiff as the composites used in the 787, they will work well to hold the FASBot and demonstrate the concept to the Boeing visitors!
Here's my bigger Master's project, the Triple Scissor Extender, with an 8020 end effector attached to the top plate, moving up against the fuselage facade.
Here it is matching the angle with the fuselage facade. This will work nicely!
I can't wait to talk all about this big guy to you and the rest of the Machine Design Qual committee this IAP! I hope you like the work I've done!
In a desperate attempt to put together a quick kinematic coupling in a situation where accuracy is not important, but repeatability would be useful, I put together this crazy thing out of 8020 adjustable-angle bracket bottoms that actually worked! It's three grooves for the FASBot-TSE Kinematic Coupling, which will have a set of permanent magnets in the center for preloading the FASBot.
Off to lasercutting! First I cut a set of components where the fine hole tolerances didn't matter as much. Because the lasercutter cuts ON the line and does not compensate for kerf, I know through experience that all of the slots and tabs will fit nicely.
For the parts that do require nice fits, such as for the ACME nuts and the leadscrew and linear slide bushings, I cut a nominal test piece out, measured the actual size of the holes and of the piece, and then tested the fits. They all fit too loosely, so I made the holes a little smaller in the CAD so the cut parts would come out exact.
Et Voila! Lots and LOTS of parts! Time to assemble it all!
They fit together well enough, but there were issues with tapering, like you'd see on a waterjet, but something I didn't predict would happen with the lasercutter.
The taper preloaded the bushings radially and actually made it difficult to slide the linear rail through!
I took a reamer to every hole that mattered, and it seemed to fix the issue.
Axis 1 and 2 assembled! I made a 3D printed holder for the DC motor powering the nut driver, that couples to the planetary gearbox housing using the same U-shaped pin from the electric screwdriver from the past Seek and Geek.The structure also serves to clamp the vertical axis together.
Here are the twin clamp axes!
I cut the ACME screws to length, and then turned down the ends to be able to slide into the double bearings, the shaft collar and conical spring for linear preload and constraint, the belt pulleys (for the clamps), and the shaft couplings for the driven axes. On the other end was also a shaft end for the opposite radial bushing. These operations took quite a while, and I got well acquainted with the Makerworks lathe's autofeed features to ensure my final passes were very smooth.
To put the leadscrew onto each axis was tricky, because I wanted to eliminate backlash and preload the nuts outward. I threaded one end in, and kept threading until it touched the second nut. Then, I back it off a bit, preloaded both nuts together with a small clamp, and then threaded the acme screw back again through both. After releasing the clamp, play and backlash were eliminated, and the carriage had the same stiffness as the twin preload springs, making this a Type 1 antibacklash mechanism (same stiffness in both directions). This technique for assembly also worked for the other axes.
Here is the assembled double-bearing block at the driven end of a clamp axis. Note the pair of conical springs between the bushing and the shaft collar. (I decided on two series springs to achieve the preload force I wanted. One spring was too much/not enough force resolution).
And one assembled axis! The linear rails are constrained from translating only by the walls of the end blocks, which are constrained by the overall structure. Lots of stacked components!
Both clamp axes assembled into both halves, with the backplate holding the drive stepper ready to couple to the leader clamp. Note the pulleys connecting the leader clamp to the follower clamp.
At this point, I attached the stepper and wanted to see the axes moving. This video was taken before I figured out how to increase the current limit. This is probably at about 10% current, and you can hear the poor motor beggine for more juice. BUT IT MOVES! MY AXIS IS HAPPY!
Testing my settings for motion/revolution, after changing those grbl settings and increasing the current limit! SO EXCITING!
Now it's time to put the belt between the two! I ordered two belts, one that was JUUUUST undersize, shown here, which is way too short, and one that was oversize. These are what McMaster had on hand.
An idler pulley was made using a pair of flanged bearings and by drilling out the center of a pulley.
Oh no! My calculations for how long the belt was going to be for the tensioning mechanism were off!
I ended up drilling a bunch of holes until I found one that was sufficiently far enough to properly tension the belt. This works!
Now both axes move! WOW!
I put together most of the FASBot at this point, and gave the Arduino an XBee Wireless Adapter shield in order to create a wireless serial bridge between my computer interface and the now-unteathered battery-driven FASBot! I can't believe it worked so easily!
Remember that horrible excuse for a Kinematic Coupling? Well, it works!
Here is the chunk of steel on the FASBot and a couple of rare earth magnets clamped to the center of the three grooves.
After the FASBot surviving a couple of accidental 3-foot drop tests, I eventually switched to much more powerful Neodymium magnets.
I ended up changing the front plates to be one bigger plate in order to increase rigidity as the horizontal axis moved.
Nut Driver Axis pair closeup.
Clamp Pair closeup.
Look how happy it is!
Professor Asada seems pleased!
Here is the Triple Scissor Extender coming by to pick up the FASBot!
"Two Robots: A Story of Trust, Courage and Friendship In A Dungeon Laboratory" A Master's Thesis by Daniel J. Gonzalez
Time to make all of the wiring pretty! I used a drill to twist up the stepper cables.
You can see the wiring from the spindle and the vertical axis going to a adhesive ziptie holder in the dcenter of a plate under the top plate. Adhesive hook-and-loop fasteners attach the yellow battery to the bottom surface in the electronics box. No shaking components while this thing goes inverted!
Here at the side, a pair of ziptie holders keep the wiring from the horizontal axis neat.
All excess wiring is then folded up and ziptied to a holder.
Wiring and electronics area closeup.
Here is the TSE with FASBot in the lowest position.
After upgrading the magnets, the full-weight FASBot can mount to the TSE without worry of falling!
The final kinematic coupling with the nicer magnets.
And here is the entire demo we showed to Boeing of the TSE and the FASBot working in conjunction!