Or how I try to create an exact mechanical (and functioning) replica of the Apollo Guidance Computer DSKY
To make the experience fit your profile, pick a username and tell us what interests you.
Here's a small video I made yesterday about this project:
To sum it up, here's what I got done in this first version:
There are still a few things that didn't go as planned, and that I'd like to improve:
I think it's worth taking the time to describe the emulator's structure. As a picture is worth a thousand words, here's the general working diagram.
Inside the main housing is a Raspberry Pi running Raspbian. On top of it, an instance of yaAGC is executed at startup. This emulator usually runs Comanche 55, the original CM guidance software for Apollo 11. The emulator usually connects to yaDSKY, a virtual DSKY emulator through a TCP connection on port 19798. However, Ron Burkley and Mike Steward worked on a small python script that can send the keypresses and recover the display data. I slightly modified that script to output the display data through a serial link. I'll upload everything to my GitHub once I'm home :)
There are still some quirks though. Due to the many interfacing layers, the Nextion display often lags behind yaAGC and skips some registers. Same thing happens with the status lights, some of them stay on or off when they shouldn't. In the future, I'll bypass that Arduino Nano entirely and directly connect the Nextion display/alarm indicators to the Rpi's GPIO.
Another Arduino was used to light up the status/alarm lights.
Pictures are coming! My DSKY is currently halfway across Europe, so this is all coming from the pictures I took on my phone.
I chose to use a Nextion LCD for the display. A custom GUI was created, to display the three registers, noun, verb and prog numbers.
With this serial line connected to the ATMEGA328, I still had enough lines to connect each status light to a pin of the controller. I wrote a simple piece of code that parses a serial text line which contains the status light information, the registers, verb, noun and program name.
When I started designing this project, I quickly though about Cherry MX switches (or clones): they're cheap and widespread. The blue ones also have a nice cliky feeling that I like.
As for the wiring, I settled for a simple matrix with diodes to avoid ghosting. An ATMEGA32u4 scans the matrix and acts as a keyboard to send the matching keypresses. I based my design on the infos found here.
No time for a PCB for the first iteration, everything was hand-wired.
Don't mind the yellow print, it was a trial run. Next picture shows the later grey version.
All wired and working. I'm not really 100% happy about the keycap/cherry MX interface... I'll redo them at some point.
It was time to print everything and dry-fit the parts. Some mistakes were made, bed adhesion was an issue: some parts didn't stick enough to the bed, others were so stuck I slipped and stabbed my hand with the spatula...
As I didn't have access to a CNC mill (and it's been a long time since I used one), creating a replica out of aluminium was out of the question for now. Using a 3D printer seemed like a good option, as I could also test-fit my parts. Mistakes will also be much cheaper.
I also want the replica to be fully functional. While the external features could absolutely not be touched, I had to modify the internals to accommodate my keypad and indicator design. The main housing's internals could also be heavily simplified as only a Raspberry Pi and a handful of components were going to be used.
A plate had to be designed to hold the cherry MX switches, and the non-functional model of the indicators were "carved out" for my electronics.
The mounting plate hole size were also modified to press-fit threaded inserts.
Solidworks was the software used for this entire project. STEP files have been added to the VirtualAGC's repo, an each model has an accompanying .md file describing the eventual differences between the plans and the models, if any. If you need the original Solidworks files, send me a PM.
Reading American plans was a challenge for me, as I was trained and learned to create European plans. While the imperial units required little time to get adjusted to, the biggest change of conventions was how the faces were laid out. In Europe, we use the First Angle Projection (ISO standard), while US adopted the Third Angle Projection used on those plans. There's an interesting article on this matter here.
I started with this part, which will set most of the external dimensions for the front part of the DSKY. Several versions of the same plan existed in the NARA SW scans, which allowed to lift 99% of the uncertainties over some dimensions (overlapping traces due to the quality of some scans). For me, the most interesting face is the back one, with all the pockets to make this part as light as possible, while keeping maximum structural integrity. No expenses spared here!
This is also a beautiful part. Stiffening ribs all over.
This housing holds the front parts of the DSKY: indicators plate, keypad, cover. It is pretty intricate, with a bunch of pockets and fillets that took me some time to figure out. I had to print several iterations of this plan to lift a few ambiguities.
It holds the two indicator modules and carries the pins for both connectors. This part was probably much easier to mill...
I didn't understand what this part was all about until I read a bit more about the DSKY. After the Apollo 1 disaster and the whole "pure oxygen" issue, the Command Module and LEM designers had to switch to a nitrogen/oxygen mix inside the vessels. In order to limit the risk even further, a bunch of the electronic modules (I don't exactly know which ones) were pressurized with 100% nitrogen. The DSKY was one of them. You can still remove the front cover and indicator modules without breaking the seal, hence those heavy gaskets.
Nothing too special about those. They're both very similar, only difference resides in the bottom blanking part. The LM version of the alarm cover has a taller opening as more status lights were used. Those parts mate with the respective modules with shouldered screws and C-clips.
This is where it got tricky: I couldn't find much on those displays apart from the external dimensions. Those are thus dimensional models.
This is a behemoth. It holds the display driver, the keypad controller, the interface with the main AGC module.
The drawings are extremely hard to read, features constantly overlap and I only found a couple of schematics. This is why only the external features are finished for now. The internal features still have to be tackled with. I'll work on this someday, as for me this is vital to get a complete and accurate model for preservation purposes.
As for my replica, what I have here is plenty enough.
EDIT: I finally got around to finishing this thing. Took me 5 extra hours to get everything right.
There are 19 variants of this part, each for every key. It snaps onto the lower part of the switch assembly.
A few parts have not been described here: the connector plates for the indicators, screws, etc. Some of them have been modeled, others haven't. I'll update this section when (if) I...Read more »
Now that we had a good source for the mechanical dimensions, I could start making the 3D models...
Not so fast. The DSKY had many iterations, different versions, each one using older and newer parts, and getting through this whole structure can be a bit overwhelming at first. Thankfully, Ron over at the VirtualAGC website created a nice way of exploring the numerous parts that make a complete AGC/DSKY.
The AGC has a complex history, but it can be roughly summarized to :
Once again, I cannot recommend the VirtualAGC website enough, it goes in much greater detail into the story of this machine.
Ron mentioned that people seemed to be interested in 3D CAD models based on the actual mechanical drawings. At first, I just wanted to use the external dimensions from the MIT plans for an accurate 3D printed replica,... However, I could go the extra mile and pitch into the effort of preserving a part of the space exploration history. Creating an exact 3D model is a much greater challenge than just keeping the internal dimensions, but much more rewarding.
I could then create a copy of the model if I ever needed to adapt some features for 3D printing.
First thing was select which version to work on. The Block II DSKY is much more recognizable than the Block I, and there was much documentation available... For some reason, I decided to base all my models on the latest iteration: Skylab 4 (CSM-118).
Digging though the Assembly Diagram reveals the essential parts for this project:
2003994-121: AGC DSKY ASSEMBLY
In bold are the individual parts that need to be modeled to create the assembly.
When I started the project, I looked at various designs of DSKY replicas, including:
I found other builds back then, but I can't remember which ones. One thing I could do was start from photographic models and try to match the features as much as possible, while making calculated guesses.
One day, while browsing the VirtualAGC website and incredible details on the internals of the AGC and the DSKY, I came across the "Electrical and Mechanical" section. Thanks to the efforts that Ron (and his team) put into this, a lot of NARA (National Archives) SW Aperture Cards were scanned, which included the original MIT plans: mechanical dimensions, assembling diagrams, etc... For the most important parts of the DSKY! Eureka! I now have accurate dimensions.
...Which are in 2D. Off to create CAD models out of those!
Print all the STL files available on the Github Repository. I highly recommend starting by the front housing 2004968E, as it is the one you'll have to work on the most (cleanup and inserts). Some parts will require using supports. A brim is very helpful too!
Use your preferred method to get all those inserts in. Don't forget to add support to the backside of the part if you're press-fitting the inserts.
Push all the Cherry MX keys in, then solder them in the following matrix arrangement (you can wire it in other patterns, but you'll have to change the Arduino code).
Become a member to follow this project and never miss any updates