Something old, something new...
A couple of days ago, while looking for some Epson PX-8 information for the drive emulator project I'm working on, I came across a blog that mentioned the Retrochallenge. I think I may have heard of it before, but had never looked it up. How that happened I don't know, but I had to rectify that!
So it appears this has been going for quite some time. Apparently they are held about twice a year. The idea is that each "competitor" enters the "contest" with a self-defined challenge of something cool to do that deals with retro-computing. It's a rather loose affair, not really a contest. Essentially you challenge yourself and write about it. The challenge lasts for a month. The rules are on the website.
The next challenge is planned for April, 2019. I intend to enter. Knowing that time is my biggest enemy, I have to keep it simple. I have an idea for my project, but I don't want to say much about it yet. One reason is that if I think too much about it I will want to start on it. I'm already having trouble NOT working on it! But I will go ahead and put an entry below for the project. For now it will be blank and I will fill it in when the time comes. If I do more I will list them below as well.
The Retrochallenge 2019/03 was announced today. Since time is my enemy and since this is my first retrochallenge, I plan to keep my project fairly simple.
In 1982 or '83 I upgraded computers from a Sinclair ZX-81 (NOT a Timex Sinclair!) to the wonderful Commodore VIC-20 with color and 5K of RAM! I had dreams of creating all sorts of gadgets to attach to the user port and expansion port. Alas, none of those things have happened (yet!) I recently pulled the VIC out and started doing some work with it, including building a robot chassis. So for this retrochallenge I will build a small robot arm.
I haven't done any design work yet (that would be cheating) but I have put a little thought into it. I will most likely connect to the user port and the arm will probably use stepper motors. The goal is for it to have a reach of around 8 to 12 inches (about 20 to 30 cm) and be able to lift around 4 ounces or so (400 to 500 grams.) We'll see how it turns out.
Time to start. Here is what I plan/hope to accomplish:
Build a robot arm. To accomplish this in the time allowed, the arm needs to be simple and small. I plan for it to have four degrees of freedom. It will rotate on it's base, have two joints that raise and lower and extend the two segments of the arm, and a gripper to grasp objects. I plan for it to be able to lift about four ounces when fully extended. The maximum reach should be around twelve inches. It will probably use stepper motors for all motion except the gripper. I have some MakeBlock grippers that already have a motor in them. I'm going to try to use styrofoam to actually build most of the arm.
Interface to the VIC 20. My first thoughts were to interface to the "User Port" on the VIC. But it only has about 8 dedicated outputs and I'm going to need something like 14 to 16. I can multiplex the data, but that will slow things down more. I've been planning an I/O board for the expansion bus, so I might just build that instead of the hardware needed to multiplex the User Port. We'll postpone that decision for now. But we'll need maybe 16 outputs and a few inputs for limit switches and such.
Some code. This part will influence the choice of ports to use. It seems I don't have any mass storage device for the VIC. Well, I do. I actually have a 1541 disk drive, but I've never used it. No idea if it even works. And that 5K of RAM will be rather cramped. The I/O board I've been planning will have 32K of battery-backed RAM, too. If I build that instead of some hardware for multiplexing on the User Port, I could keep the program(s) in the battery-backed RAM. Hmmmm. The programs will mostly be in BASIC, which I haven't really used in, uh, a few years.
That's the plan and the goals. I think I will start building the arm itself while I contemplate the other parts. I also have a lot of other things going on this month that will be distractors. It should be interesting.
March is a busy month. All three of the other people who live in my house have birthdays this month. My wedding anniversary is on the third of April, so I have to prep for that. This past Friday was my daughter's birthday and also her last day of classes before spring break. I had to take a vacation day and spend 13 hours driving to go pick her up. Next weekend I get to take her back. Those things definitely cut into my RetroChallenge time. Nevertheless, I did make some progress.
I originally intended to completely build the robot arm from scratch, but early on in the process I realized that wasn't going to work. I fell back on using MakeBlock parts for most of the construction. If you want to build robots and other mechanical thingies I highly recommend MakeBlock parts and kits. They are very versatile and strong, with lots of different and useful parts. They are also reasonably priced. They aren't perfect, but I don't know of any better system of parts.
I will get some pictures up as soon as I can, but for now I will just describe what I've done. I have most of the arm constructed. It consists of a MakeBlock gripper and some beams, shafts, pulleys, and bearings, with a few other MakeBlock parts thrown in. I made a small, round, plastic base to mount the arm on that will eventually be mounted to a larger base so that it can rotate. MakeBlock has some really nice gearmotors, but I wanted the simplicity of control that steppers give so I dug out some that I had recovered from various places. I had to fabricate some custom pulleys for those. I used some nylon bushings. The arm has two degrees of freedom, not counting the gripper or the rotating base. The motors for both those degrees of freedom are mounted on the base and will be linked to the joints by nylon cords. That keeps the weight of the motors from having to be lifted. The gripper has a small DC motor built in and the base will have the motor that rotates it placed on the stationary part. Right now I am at the stage of mounting and linking the two motors.
For the control electronics I will likely use the ULN2803 darlington drivers. The steppers are all unipolar so they are easy enough to drive. I will probably need one H-Bridge driver for the gripper. To find the position of the segments I will need to add some limit switches. The total I/O requirements will be three steppers X 4 bits each, two bits for the gripper drive, and three or four limit switches. The total will be 17 or 18 bits. I still have to decide exactly how to interface that to the VIC 20.
The user port on the VIC doesn't have that many pins available. Some fairly simple circuits could multiplex pins, but that will be rather slow, especially if programmed from BASIC. And even though it's fairly simple, it will still take quite a bit of soldering. I could put a single 6522 VIA chip on the expansion bus with about the same amount of soldering and that should work better as well as leave the user port for other things. That decision doesn't have to be made just yet.
So that's all for now. I'll get some pictures up soon. Stay tuned!
As promised, here are a couple of pictures. I apologize for the messy
Since today is my wife's birthday, I won't have much time for updates today. But I will try to give a little bit.
The arm is about 6 1/2 inches (160 mm) from the base to the center of the first joint. From that joint to the center of the gripper is about 11 inches (275 mm.) The two stepper motors in the picture are recovered from old disk drives. As you can guess, they are rather large and heavy. It wouldn't be good to mount them on the arm itself where the weight of one has to be lifted by the other. As a rule, I really dislike most arms that do it that way -- it isn't necessary. The white plastic base you see in the picture is the top half. It will rotate on the lower half once I build the lower half. There will be a stepper on the lower half to rotate it.
Mounting the motors on the base does present a little challenge; how do you link it to the joint it needs to move? There are several ways to do that. The one I have chosen is to use a cord that can bend around corners. But a slight difficulty with that is making sure the needed cord length doesn't change as the joint rotates. Or, to have some way to compensate for the length change. I will address that in the next update.