Reprap 3D Printer Build Log: 2nd Entry
Here’s update 2. I was hoping to be a little further along for this update, but if building a 3dprinter teaches you anything, it’s that anything can go wrong and you need to be willing to adapt and have patience. Also, a set of small files, a soldering iron and a drill will be your best friends in this journey. I really suggest you spend $5-10 on a set of these:
I left off last time with having tested the ramps board, the stepper drivers/motors and the PSU. Next up is building out the Y-axis that the bed moves along on, then the upright frame that holds rods for the X and Z-axis. When I first started trying to put the extruded aluminum into the printed parts, I was surprised with how tight the fit was. This, it turns out, is normal, I just had to use my files and drill when necessary to get things to fit. Oh yeah, and make sure you put all your t-slot nuts in BEFORE you seal off the ends, it’s hard to pull these things apart once they are put together. And one more thing, when assembling the frame and X,Y,Z axis, it’s very important that everything is square. If it’s not, it’s going to be hard to get your printer to print straight lines.
I mentioned earlier that not everything goes according to plan, the first instance of this was when I tried to attach the Y-axis motor. The plastic was thicker than expected and the screws were too short. So I went to the next length up of my M3 screws, but these were too long for the threads on the motors which is why I have those extra nuts on the screws in the pic below.
After attaching the motor, and drilling the MDF board and attaching it to the bearings, which went smoothly, came the next hangup, the Y-belt holder. This is a tricky part in assembling the Y-axis. First, I had some trouble getting the belt to fit into the grooved slot in the belt holder, but after lots of filing, and some use of the heat gun (which I don’t really think is the greatest idea, but sometimes you gotta get crazy) I got it to fit. After that, getting the belt attached and keeping it tight is hard to do with just one person, so if you have a friend around willing to lend a hand it really helps.
Ok, so now I have the Y-axis assembled, I’ve made sure it’s square, and the bed slides along the smooth rods easily. YAY! Next is assembling the upright frame, which is what will hold the X and Z axis and the electronics mount to it as well. And the Y-axis too. It’s pretty straightforward, but like before, make sure everything is square. This directly impacts your ability to print accurately. And triple check that you are inserting the t-slot nuts in the correct positions. I goofed on this and I will need to improvise now on how to hook up the lcd display. I’m not going to get into much detail on the frame, it’s fairly simple.
Here’s the frame and Y-axis together, but not yet attached (the upright frame is actually backwards in this pic).
Next came the X-axis. This one seemed fairly easy as well, but I hit a pretty big snag on this one, and I learned that it is a common issue in the community. For some reason (that I’m not entirely sure I understand fully, I’m learning as I go, so feel free to correct me if I’m wrong) when the STL file gets sliced up by whatever slicer you are using, the inner diameters shrink up by as much as 0.5mm. You can read about it here, and see what the community has to say on GitHub. This can make fitting parts together very difficult, even with lots of sanding and filing. The part that gave me the most trouble was the X-end motor and idler. I had been filing the insides of the holes for the linear bearings for quite some time, and was able to get them to fit in the X-end idler.
But, things went badly for the X-end motor mount. You can see in the pic below that it cracked.
After that happened, I thought maybe it wouldn’t matter and I would just move on and finish assembling the X-axis and that would be one of the first parts I would print and replace. But when I was testing to see if the belt would fit into the X-carriage I discovered that it too suffered from the shrinking effect, and it would be nearly impossible to get that belt to fit. You can see to the right of the belt is where it is supposed to go, and it’s nearly closed off.
After discovering this I contacted Marty, who is the designer of this variation on the RepRap theme, and is also the person who sold me the printed parts. He is an awesome, and very helpful dude. I asked for replacement parts and he was more than happy to get me new ones and he even explained to me what had happened and why, pointing me to the issue open on github. Very, very helpful guy and obviously passionate about 3dprinting. He has a Youtube page here that documents the assembly of the Wilson TS and he has an eBay store where you can get various parts. And from what I hear, he is really good about answering your questions.
So, while I’m waiting for new parts I’ll be assembling the extruder, and doing anything else I can. Stay tuned!
Reprap 3D Printer Build Log: Quick Update
Just finished assembling the Y axis and the upright frame. I will post a more in depth write up early next week when I get back from vacation. For now, here’s a crappy cell phone pic.
Reprap 3D Printer Build Log: 1st Entry
I’m going to be documenting the build process of my very first adventure into the open source 3dprinter realm. After doing quite a bit of research I’ve decided to build the Wilson TS variant of the reprap design. It’s well documented, has some great videos of the build process from the designer himself, and it’s a simple design that I just kind of gravitated toward.
If you are planning on doing this yourself, and not building one of the models that has a kit available, plan on spending a large amount of time just researching the materials and figuring out where to buy them at the best price. This past week I received most of the electronics:
- arduino mega
- pre-assembled ramps 1.4 board (I suggest getting preassembled unless you like doing tedious soldering)
- a4988 stepper drivers
- kysan stepper motors
- various fans
- hot end, associated thermistor and heat resistor
- mechanical endstops
- OEM power supply, 12v 30a 360w
I had already ordered and received the printed parts on ebay, from the designer. He has a shop that has printed parts for the ts and rs variants of the wilson.
The first thing I wanted to do before building the frame, was to make sure that the electronic components I had received were all working properly (not that I could do much else since I have not received all of the hardware, like the aluminum extrusions and various nuts and bolts).
First thing to do was to wire up the power supply. This is fairly straightforward, and there’s plenty of tutorials floating about on how to do this with whichever PSU you decided to use. If you are using an OEM power supply, make sure you get your multimeter out and tune it into 12v by twisting the little potentiometer to the left of the terminals.
Hooking up the ramps board to the arduino is simple. Next came the stepper drivers. Be extra careful to plug these in oriented correctly. The best way to make sure is that the labeled pins on the Ramps board match the labels on the drivers. I would start with one to begin with, in case you goof up, you don’t fry all of them. I should also mention, that you need to install the 2 pin jumpers on the pins underneath the drivers, just do all 3 to start, as that is the default. These determine the resolution of a step. After that, plug the Arduino into your laptop and load up this little program from the reprap wiki that just turns the motors, and flashes LEDs so you know everything is working. If you have the hot end and heat bed, it will test those as well, but I have not received all the parts necessary to do this.
Next, plug in one of the stepper motors to the corresponding pins. Use this wiki page as reference when doing so to orient them correctly, you definitely don’t want to plug them in backwards and ruin a motor. Now, cross your fingers, and supply the board with power. Each driver will have a little potentiometer that you will want to adjust to supply your stepper motor with the right amount of power so it turns without jerking around, but not too much as this will generate unnecessary heat. If this works, proceed with hooking up the rest of the drivers and motors and repeat the same process.
Here’s a video of my motors all spinning, yay!
So, after I got all the motors working and throwing out one bad stepper driver (I had 5, but only needed four) I wanted to get the electronics mounted to the plastic that would hold them to the frame of the printer and get the fan working. In order to have a fan, you’ll need to solder two pins to the points labeled as 12v-AUX on the board. Should be right next to the x-axis stepper driver.
That’s about as far as I could get with parts I have now. I should be getting all the hardware for the frame this week and will begin assembling that soon. I’ll keep posting updates on this blog as I go along, documenting the trials and errors.
Here’s a few pics of what I have done so far.
Learning how to use an #8bit shift register to control stuff using fewer pins on my #Arduino.
Asteroid Hunter for CS50x + LaunchCode Class
I’m taking the edx.org CS50x class with a group of St. Louis area locals through LaunchCode. So far we have had 1 class, and we will have our second tomorrow where we will be pairing off into smaller groups. I started work on the first problem set a little early. The requirements were wide open, make a game, story or interactive art. This is the result so far:
It’s still a bit buggy, but definitely playable. If you are interested, Scratch is free, easy to learn, and a fun way to get acquainted with basic programming concepts.
A Simple Battle System
Lately I’ve been playing around with Python. I’ve completed all the Codecademy courses and have gotten nearly all the way through Learn Python The Hard Way, which is a great resource for learning. A couple of the exercises are creating text based adventure games. One of the extra credit prompts from LpTHW was to come up with some sort of battle system. Here’s my first stab at it, it’s also my first attempt at doing some OOP. If you copy this and run it, you will be prompted to make a decision to either fire your weapon or to run away. Each time you fire your weapon there is a chance for a miss, hit or extra damage hit. Same goes for the computers turn. You keep doing this until one of the player’s health reaches zero. It’s not perfect, but I’m proud of it and plan on adding more features, like powerups, different weapons with varying “accuracy” and “damage” amounts, and the ability to fight more than one opponent.
from random import randint class Character(object): def __init__(self, name, health): self.name = name self.health = health def attack(self, target): roll = randint(1,12) if roll <= 3: print "%s misses. Deals 0 damage" % (self.name) return target.take_dmg(0) elif roll <= 10: print "%s hits his target. Deals 1 damage" % (self.name) return target.take_dmg(1) else: print "%s hits his target with great accuracy. Deals 3 damage" % (self.name) return target.take_dmg(3) print "%s is attacking %s" % (self.name, target.name) def take_dmg(self, dmg): self.health = self.health - dmg return self.health if self.health <= 0: self.die() def die(self): print "%s is dead" % (self.name) exit(1) class Player(Character): pass class Villain(Character): pass class Battle(object): def __init__(self, player, villain): self.player = player self.villain = villain def fight(self): print "You can 'fire' your wepaon or you can try to 'run away' but it may not work!" while True: if (self.player.health <= 0): return self.player.die() elif (self.villain.health <= 0): return self.villain.die() choice = raw_input("> ") if choice == "fire": self.player.attack(self.villain) self.villain.attack(self.player) print "Your health: %s\n%s health: %s" % (self.player.health, self.villain.name, self.villain.health) elif choice == 'run away': if randint(0,1) == 0: print "You try to run away, but your foe catches you." self.player.die() else: print "You try to run away and are successful... this time." exit(1) player_one = Player("Player 1", 10) computer = Villain("Computer", 10) battleScene = Battle(player_one, computer) battleScene.fight()