In the following tutorial, directions are given for creating a single node for the DoHas (Distributed Optical Harvard Architecture System). After constructing two of these nodes, a small distributed computer can be implemented which uses one node for sending instructions, mimicking input and the instruction set to manage it, and another node which will act as memory.

One unique feature about this system is that although it does separate the instruction and memory, it also has an important feature that is shared with the Von Neumann architecture, in that since both nodes are identical physically, they are both capable of fulfilling either role, depending on the state that either machine is in at the time of transmission.

This platform was designed by Marty Miller and William Tolley, two students at Berea College, and it should be pretty easily extensible. Have fun writing your own programs to be executed by our DoHas system.

Step 1: Acquiring Materials

For each node, you will need:

- Arduino
- Breadboard
- Infrared Emitter
- Infrared Receiver
- (3) 1,000 ohm resistor
- (3) LED
- solid core hookup wire

Additionally, you may want a blank PCB board to create a permanent machine, as shown in the first photograph.

This project has been designed for individuals interest in creating small programming projects with the Arduino platform that may not necessarily have any background in creating circuits or following circuit diagrams. If this doesn't apply to you, however, and you would rather simply follow a schematic of the project, one has been provided in addition to the step-by-step instructions.
Can you have more than 2 of these units? I am wondering about having one that acts like a central hub feeding information out to several subsidiary units?
Yes, we originally planned to have a three node system, where one node acted as an input device and the other two functioned as the memory and processor of the system. That's about as far as we got with the thinking for that, but one thing to consider is interference between the different devices or a node incorrectly taking as input what was meant for another. One idea to fight this kind of interference would be to have each node only act on data that had a certain attribute. For instance, the data being sent in the test file determines which of the LEDs the other node lights up. We did this by sending a series of data, with a few of the characters (functioning like bits in a CPU instruction) being 0 or 1 depending on which LED is to be lit. You could extend the "instruction set" we created and add in a "bit" to account for which node the data is intended for. So, a device would take in the data and check to see if the appropriate "bit" is set for it to execute the instruction. After I've written that though, I see a possible problem still if data is being sent to multiple devices or from multiple devices simultaneously. The data might simply be missed while a node is processing whether or not it should execute another instruction it has received. You could also physically arrange them in a way that would reduce interference. Whatever works, the main point with this is that it creates a platform that can be built upon, so I think that yes you can have more than two nodes, and I think it would be awesome. Post back and let us know what you come up with or if you run into any issues.
The files seem to have been removed from media fire.. Is there a mirror of them anywhere?
Thanks for letting me know about this, joshumax. We never expected to get a fraction of the traffic that we have received. <br> <br>I have added a mirror at Sourceforge in the tutorial: https://sourceforge.net/projects/dohas/files/DoHasTest.zip <br> <br>I will add more soon if it is needed. <br> <br>Thanks again.
Schematics would have been so much easier to follow than the connect here, connect there instructions. Could you upload the schematic?
Thanks for the suggestion, sspence! I will include a schematic shortly, hopefully before the weekend is over. <br> <br>We had thought about including a schematic initially, but since the primary intent of this particular instructable was to provide a simple platform on which many systems could be created with a minimal amount programming for those less familiar with hardware and electronic configurations, we decided to give the unintimidating, step by step instructions found here. <br> <br>I was honestly surprised that it got so much attention in such a short amount of time, and that other people were interested in it, since the device is essentially just 4 LEDs and a 3-pin Infrared Receiver. <br> <br>I thought that the system was simple enough that anyone familiar with electronics would probably laugh at our schematic, and that it would only serve to intimidate the intended audience that has little to no experience with electronics, as I myself have been when searching through the different projects on this website, among others. <br> <br>Thanks again for the feedback, it is helpful to know that there are people of all different skill levels that need to be accounted for, and we will attempt to make our current and future project accessible to amateur and pro alike, as we continue to learn through all of the positive, constructive comments that we received here and in our inboxes.
this was very well documented <br>
This is so cool!!!

About This Instructable




Bio: I am currently an undergraduate Computer Science and Philosophy student at Berea College in Berea, Kentucky.
More by tolleyw:A Study in Non-Standard Distributed Computer Architecture 
Add instructable to: