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.
We found and based on your interests.
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).
Create an account to leave a comment. Already have an account? Log In.
Question for you,
I am stuck on the Arduino code for the display. I keep getting an error that says
'class Nextion' has no member named 'init'.
I think there is an issue with the Nextion.h library not having the command "myNextion.init()". is there an old version of the Nextion library that was used? any help would be appreciated.
first off: Thx a lot for this amazing work!
I'm in the process of building the DSKY cause it's cool and later on I'd like to control a robot-arm that I've build a while ago, using the DSKY. However, right now I'm having a rather trivial problem: I can't find the "2004699(000 and 001): alarm and display covers" STL files anywhere. Not on the github repo nor elsewhere. Am I too blind??? Can somebody point me to it?
I am currently on the keycaps, some have little isles in the letters in them. In your logs you have this pic https://cdn.hackaday.io/images/1161821598701090888.jpg
How exactly do you do there? Is this some kind of glue tape?
Are those keys hollow when you stick them together like this?
Hey, I'm pretty far along and am working on attaching the raspberry pi to the displays + keyboard, do you mind sharing your modified pyDSKY2.py script? It's not in the github repo unfortunately. Thanks for all your help!
Plus here's how my version looks so far ;^) https://i.imgur.com/yxO7qVI.jpg
It looks amazing! My script is up now, on Github :)
Yep, I just pushed everything on the Github :)
I am pretty far now in the project. Would it be possible if you upload the keycaps? Then I could try to print them with FDM.
Thanks again for this AWESOME project.
Hi! Congrats on moving along in the project! I'm still far from home and far from my personal computer (where the solidworks files are stores), but I'm coming back home tomorrow... You'll have them by the week-end!
Hi, can you give some details of how you "talk" to the virtual AGC? You mentioned some phyton scripts that you modified.
I would like to try that approach. I basically have the DSKY, the nextion and the indicator panel running and would like to connect it to a raspberry pi instead of creating my own, fake AGC on an esp32 running micropython...
Hey Bernd, I used the stock VirtualAGC program, with a slightly modified pyDSKY2.py python script (found in the VirtualAGC repository https://github.com/virtualagc/virtualagc/blob/master/piPeripheral/piDSKY2.py ). This scripts acts as yaDSKY, and connects to virtualAGC via a TCP port, parsing the display's content and sending the keypresses back.
I added a routine that writes to a serial port (where I connected the Arduino managing the display and indicator lights)... I don't have my main PC here sadly, I can't send it over to you right now. Even if I could, I strongly suggest using a more streamlined approach (e.g. connecting the nextion directly to the Rpi, and the status lights on the GPIOs). That will require a bit more work on the python script to talk to the display and manage the LEDs, but it'll be much faster.
I have too started building a DSKY unit and I want to follow your advice and use the RPi instead of Arduino for a more streamlined approach. I modified your UI for the 272x480 display of the 4.3" display and would like to ask you for advice on modifying the piDSKY2.py file to write to the Nextion display. I know the script parses the data from the VirtualAGC so it's just a matter of sending that data to the display. I have the RPi talking to the display and after reading the piDSKY2.py file a few times I have a better grasp on what it does. In your opinion, what is the best approach into passing the values of the virtual display over to the Nextion? Should I go into all the methods in piDSKY2.py and edit them so when a change is made to the virtual display it passes that to the Nextion or is there a better way? Any advice you can give me I will greatly appreciate.
Hey, I'm looking to print this out, but I noticed that your github is missing a few files, notably the back case shell and the button keys. Is there any way you can update those missing files(even if I do have to edit the stp files!) so that I can fully print and assemble this for a scientific showcase for a school? Thanks a ton for all the work you've already put into it!
Hi! Glad you like the project! I don't know how I managed to forget such important parts... The back case is on the Github now.
Regarding the keyboard, I can upload the keycaps, but I strongly suggest you look at @Stefan Köhler 's design which is much cleaner.
Please take some pictures of your version! I'd love to see it :)
Thank you! I've actually already designed my own keycaps, and hope they'll print out fine once I get to that point of printing everything out. I've also redesigned a bit of it for ease of assembly + closer appearance to the original, hopefully it'll all work well :)
I'll gladly send over pics once I finish this up!
I'm still working on the actual electronics/writing up my changes into a project on here, but here's the outside pretty much finished up as a sneak peak ;^) : https://i.imgur.com/yxO7qVI.jpg
If you‘re looking for a font for the indicators: https://github.com/dakotafelder/open-gorton, and then I‘ve laminated the printout for a finer „finish“....
Thanks! I used the fonts from this repo: https://github.com/ehdorrii/dsky-fonts and they're pretty realistic :)
What a cool project... started „my“ DSKY already... maybe (as a complete newbee :surely! ) I‘ll come up with some questions sooner or later... For the time beeing any additional documentation is highly welcome... BR from Germany!
Enjoy! If you have any questions, feel free to ask them. I don't have much more to write about now, but you'll see it here when I will :)
Hi, may be an easy one: I bought the Nextion 4.3" Display Bildschirm 4,3 Zoll LCD Modul NX4827T043 TFT Touch Panel 480x272 and its far too big for the housing. Can you tell me which exact display model you have used?
My bad, I made a mistake in the description! I bought the 4.3" version at first, but got to the same conclusion... I had to switch to the NX4832T035
Hi, It would be nice if you give some "insight" in the indicator setup. Maybe a photo from the inside? Have you, and if yes how, mounted the LED's? And also: Maybe I'm blind but I am missing the KeyCap File in GitHub.. Any idea where it could hide? Thx for your support!
Hi Stefan, sadly I don't have access to it right now. But the LEDs are soldered to a basic perfboard, along with dropping resistors. The cables run through the back opening and are soldered to one of the Arduino Nanos. To avoid "bleed through" from the LEDs, I added the "Led_splitter" part (you can find it on the Github repo). Hope it helps!
Hi Manoel, thx for the reply about the mounting of the LED‘s , yet another art I‘ll have to master ;-) My project is now already looking like a DSKY... I‘ve redesigned the Frontplate for the Nextion in Fusion 360 (first time worked with it) since in my printout the gaps between the DSKY Front and the Display are too big. After I‘ve done that I appreciate your effort even more! Any news on the keycap-file?
Hi Manoel, just created a project here https://hackaday.io/project/176363-rebuilding-mechanically-accurate-apollo-dsky ... Having lots of fun and thanks again for sharing your stuff!
Hi Manoel, here is another question: What library for the nextion.h do you use in the dsky_display.ino. I‘m struggeling to get the code compiled in VisualStudioCode and suspect a problem with the library there. And since I’m thinking about on an alternative keyboard: Could you please put the „non-modified“ files for 2004968 also on Github? Thx in advance for your help.
I am in the process of building this.
It would really help if you could make a model of all pieces attached to each other and if this should be in grey or black PLA. You could write this in the file name. What are your print settings? Do you have some special infill like honeycombs?
I bought some cheap threaded insert hakko adapters on amazon that work great.
If you don't find a good replacements for the keys, I have access to a good lasercutter and a cheap CNC called MPCNC so I could send you some parts. Also I could make gerber files for the PCBs if there isn't any better solution.
I also have access to a big industrial tormach cnc, but using this is not cheap.
Really love your work. I want to make this as a gift for someone and would help you with the documentation.
Hey, glad to know you're making it! I also really appreciate your offer! If you want, you can add documentation on the GitHub and make a PR, I'll gladly accept it :)
I have an assembly file somewhere, I'll dig it up
The file name follow a convention we set during the first steps of 3D modelling, and for the sake of having a coherent naming scheme (related to the original parts), I can't rename it... However, the color scheme is straightforward: I printed everything in Grey (ICE Filament's "Gentle Grey"), apart from the main housing, keys and LCD bezel which are in black. Print settings aren't that special: I tried to avoid supports as much as I could, square infill.
I'll look into the insert adapters, I'll probably find one for my Weller, thanks for the tip! (pun intended)
Thank you for the offer about the keys! I might have found a way to print it by making a white base, pausing the print then switching the filament. Still got a few tries to make it right, the backlighting is still getting through the rest of the frame, not only through the white parts.
100% infill or less?
I used 50% or less. To be honest, some parts are so thin that it doesn't really matter at this point
Here is my approach to the DSKY Keys:
That's really cool! I almost made the same design, I'll try to send a few pics tonight :)
BTW, how did you make the display?
The Display is a nextion 4.3". I had to modify the casing for that. I shared the design Files with Stefan Köhler. It is a Fusion 360 Project.
Hi, very impressive: any chance you share your design files? And I‘m also curious about your Display...
Hi, I would love to print this.
However, I can only find
in your github repo. Could you tell me where I could find the rest?
Thank you :)
Hey, my bad, forgot some files... You should all find them now on the Github repo :)
Two words: Fran Blanche ;)
Her videos actually helped me figure out how some of the parts went together ;)
You ought to contact her and see if she can tell you the proper color of the LCD ;) I gather it's not the same as modern EL nightlight stuff, never mind the usual green LEDs... I kind of want to know myself.
She didn't turn on the DSKY she tore down. However, the exact color of the display is referenced by Specification Control Drawing 1006315 (see https://archive.org/stream/apertureCardBox439Part2NARASW_images#page/n222/mode/1up ). The light output wavelength is referenced at 5300 Angstroms, which is a lime-ish green.
However, I did reach out to her for close-up pictures of the buttons, but she didn't have any other pics :)
An Apollo DSKY with Cherry MX Blue switches is one of those things I'd never even considered before...but now must have if my life is ever to be complete.
The clickyness is pretty nice... But I'm now working on replicating the exact switch used inside the original. It uses a microswitch, along with a small EL panel to illuminate the "keycap". An engineering marvel!
Would you be willing to release your print file for the keyswitch plate? I've been poking at a DSKY using box jade switches but haven't been able to get it right...
Hey! My bad, I forgot to upload this file to my Github, it's going to be fixed in a few minutes :)
This is very cool! Nice job!
Thank you! I'm very happy with the first version, but I hope to revisit it this yearè
Become a member to follow this project and never miss any updates
Hi im curious as to what connector you used? Im currently in the planning phase and would like to set up a BOM.