HAL-9000 Arduino Talking Extension Cord




Introduction: HAL-9000 Arduino Talking Extension Cord

About: I like to read all about the creative ideas everyone has here. I love to make "one of" projects, learn something about doing it and then move on to something new. Hope you like my ideas. email me...

I stumbled on a replica build of HAL online and I thought it was pretty cool, but being the perfectionist I tend to be on projects, I really wanted a better looking lens, LED light and more realistic front panel piece. I also wanted it to be functional for some other purpose so I put an outlet in the back to power USB chargers or other device on my desk at work. I also wanted to push the limits of how realistic I could make it.

Lastly, Iwanted to try something new and higher tech... a project that would teach me Arduino and boy did I pick one! I saw that there was a wave shield that could take .wav files and play them back and the software to do this with a simple pushbutton. So I purchased the kit and started to work on the "internals" of HAL. That is almost an instructable in itself.

Description of HAL....

1. Case is made of MDF, sanded, primed and spray painted with Rustoleum LACQUER gloss black paint. I highly recommend NOT using this paint. Use a standard glass enamel as the Lacquer was very problematic in getting a very even coat or shine as the spray literally dried so fast upon landing on the case it has NO LESS than 12 coats on it. Also, the lacquer is very soft. I am still tempted to take this all apart, sand it and repaint it.

2. The HAL memory key... in the movie 2001 a Space Odyssey" Dave Bowman takes a key to disconnect HAL's memory. That key gets a lot of compliments in itself. So If you do this... take the time and make a great key. Many people do not realize there was a key involved in the movie much less how futuristic it looks.

3. The key serves 3 functions... 1) port one turns HAL's LED eye on and the Arduino. 20 port 2 turns on the red and white leds to light up the memory cards and the port holes. 3) port three is a momentary button that makes HAL talk one of 28 phrases from the movie.

4. The outlet is always powered for a usb or other desk light, etc. etc.

Step 1:

The Key:

I wish I had pictures of this key being made but I didn't think about it until after it was basically done.

Material - 1/2" x 1" x 4" bar of solid brass. and 1/4" brass rod.

Cut out the basic triangular shape on a band saw, disk sand the sides and drill a 1/4" pilot hole in the end to recceive the brass rod.

I then used a small grinding wheel and CAREFULLY held the wheel flat or parallel to the surface and slimmed down the back half of the key on both sides. REMEMBER that you can always take more off but you can't put it back on so go slow... Then I used a round file to radius the slim section the the thick section and a flat file to clean up the slim section. I also used the 4.5" grinder wheel for the cutting of the key. Use a propane torch to solder the rod into the pilot hole and POLISH POLISH POLISH starting with 200 sand paper, 400, then steel wool then polishing compound and a wheel.

Memory Cards & Panel:

Material: 1/2" Acrylicand The black panel is 1/8" black acrylic. Acrylic is EASY to cut and sand smooth. Also easy to polish the edges with increasing smooth sandpaper, then steel wool then a polishing wheel and compound for plastics.

Dimensions were estimated off scenes from the movie as scaled of Bowman's hand. See layout on the black acrylic board. Keep the paper on the plastic as long as possible to prevent scratches. I also used the black plastic for the face of HAL's facia. I sanded it in ONE DIRECTION vertically by using a 1"x 2" wood guide the clamped a sheet of 150 grit sandpaper underneath and held the plastic against the fence/guide. It worked great!

I used acrylic glue and glued the memory cards to another panel of acrylic and backlit the whole assembly with white leds. Also painted the edge as in the movie gloss white.

Aluminum Edging:

This was a bit of a bear! I cut the groove on my table saw with the blade just sticking above the table. The blade dimension from the table to the tip of the cutters was hard to hold as the lock down drifted while running. So my groove depth is a bit inconsistent. A router would be far too dangerous on aluminum. I lived and also had a bear getting the bevels good enough to use. (Miter saw). Also pre-punch your drill holes and use cutting oil on the drill bit and counter sink bits as aluminum really likes to foul cutters.

Material 1" x 1/8" x 36" Aluminum.

Wood Lathe Turnings:

The eye is made of 4 magnifying glass lenses of varying sizes with the larges being 80mm. If you want true realism the movie used a Nikon wide angle lens. If you have $400 for one then go for it! So I drew up a quick sketch to layout how the lenses would stack up in this lens bowl and turned it. Spray painted it flat black and hot melt glued the lenses inside with great care. I used some black felt to conceal the inner lens edges and you can't see a thing as it is too dark and too bright with the LED is on. Turned out great. I also turned the ring from maple wood (no metal lathe --- yet...) :o) It took me two tries to make the ring correct. Spray painted it with primer and a chrome spray paint.... Built up a lot of VERY light layers and it looks metal.

Step 2: The Arduino... UGH.

The internals are the Arduino project I followed from aidafruit.com. I have to say if you never tried arduino before, and I tried a few MINOR projects... this one tested my limits. Their site was a bit cryptic for me but eventually figured it out. I used their program (which had minor typos bugs in it) and finally figured out how the libraries (subroutines) have to be in a very very particular file hierarchy or it won't work. If you try this and have trouble contact me and I can help... (i think).

See the pictures for details...



    • Tiny Home Contest

      Tiny Home Contest
    • Water Contest

      Water Contest
    • Metalworking Contest

      Metalworking Contest

    15 Discussions

    Here is the code I used:

    // Random HAL demo; adapted from PiSpeak sketch. When button
    // on A0 is pressed, plays a random WAV file from a list.

    #include "WaveHC.h";
    #include "WaveUtil.h";

    // These should be at the root level, not in a folder.
    static const char PROGMEM
    file00[] = "0.wav",
    file01[] = "1.wav",
    file02[] = "2.wav",
    file03[] = "3.wav",
    file04[] = "4.wav",
    file05[] = "5.wav",
    file06[] = "6.wav",
    file07[] = "7.wav",
    file08[] = "8.wav",
    file09[] = "9.wav",
    file10[] = "10.wav",
    file11[] = "11.wav",
    file12[] = "12.wav",
    file13[] = "13.wav",
    file14[] = "14.wav",
    file15[] = "15.wav",
    file16[] = "16.wav",
    file17[] = "17.wav",
    file18[] = "18.wav",
    file19[] = "19.wav",
    file20[] = "20.wav",
    file21[] = "21.wav",
    file22[] = "22.wav",
    file23[] = "23.wav",
    file24[] = "24.wav",
    file25[] = "25.wav",
    file26[] = "26.wav",
    file27[] = "27.wav";
    // If adding files above, include corresponding items here:
    static const char * const filename[] PROGMEM = {
    file00, file01, file02, file03, file04,
    file05, file06, file07, file08, file09,
    file10, file11, file12, file13, file14,
    file15, file16, file17, file18, file19,
    file20, file21, file22, file23, file24,
    file25, file26, file27 };
    // Sorry for the sillyness, but this is how PROGMEM string
    // arrays are handled.

    #define error(msg) error_P(PSTR(msg))
    SdReader card;
    FatVolume vol;
    FatReader root;
    FatReader file;
    WaveHC wave;
    uint8_t debounce = 0, // Button debounce counter
    prev = 255; // Index of last sound played

    void setup() {
    if(!card.init()) error("Card init. failed!");
    if(!vol.init(card)) error("No partition!");
    if(!root.openRoot(vol)) error("Couldn't open dir");
    // PgmPrintln("Files found:");
    // root.ls();

    digitalWrite(A0, HIGH); // Enable pullup on button
    randomSeed(analogRead(A1)); // Randomize first sound

    void loop() {
    if(digitalRead(A0) == HIGH) { // Button not pressed
    debounce = 0; // Reset debounce counter
    return; // and nothing else

    if(++debounce = 20) { // Debounced button press
    uint8_t n;
    char name[20];

    do { // Choose a random file...
    n = random(sizeof(filename) / sizeof(filename[0]));
    } while(n == prev); // ...but don't repeat last one

    prev = n; // Save file #
    debounce = 0; // Reset debounce counter
    strcpy_P(name, (char *)pgm_read_word(&filename[n])); // PROGMEM->RAM
    if(wave.isplaying) wave.stop(); // Stop WAV if playing

    if(!file.open(root, name)) {
    PgmPrint("Couldn't open file ");
    if(!wave.create(file)) {
    PgmPrintln("Not a valid WAV");

    wave.play(); // Start playing
    while(wave.isplaying); // Wait for completion
    sdErrorCheck(); // Check for error during play
    while(digitalRead(A0) == LOW); // Wait for button release

    void error_P(const char *str) {
    PgmPrint("Error: ");

    void sdErrorCheck(void) {
    if(!card.errorCode()) return;
    PgmPrint("\r\nSD I/O error: ");
    Serial.print(card.errorCode(), HEX);
    PgmPrint(", ");
    Serial.println(card.errorData(), HEX);


    Love the unit !

    Im in the process of putting a Hal 9000 face plate , with Arduino uno with wavesound board . Do you happen to have a copy of the sketch program , for producing the quotes - when the button is pressed . The one on the adifruit site seems to have issues .


    3 replies

    There are some typo bugs in the Aidafruit code... these are easily seem when you try to compile. However, once those are fixed the likely, more complex errors you may get are likely due to not having your library set up correctly and at the correct levels. This is a very fussy piece of Arduino programming. The wavefiles took a ton of editing from the internet to get them all at the same volume level and clarity. I used an audio editing software I found on the internet which I do not know or have it anymore. As far as the Aidafruit code and the waveforms I used... they are large files, so post your email address here and I'll send you everything.


    Been trying to reply , not sure if they have been getting to you , so I'll try again ... gareth.rees3@sky.com

    All the best


    I'm not sure if my last reply came through - so just in case ... Thanks for reply , my email is - gareth.rees3@sky.com , the build of the unit ( even the adifruit kit) was a breeze compared to getting the link sorted . Here's a photo of my build so far - this is the mk1 , but not happy with the "eye" so have all the parts , including a fisheye lens for a

    Sorry , new to site , on my iPad and the "add image" isn't working , just not my weekend !!

    This is cool, but it's not really an instructionable, is it? It's really more of a "look what a cool thing I made." It is cool, though.

    Where are the plans, dimensions, sound files, schematics, Arduino code, etc?

    1 reply

    I think there is enough here to be an instructable to show what is possible without giving away a cookbook approach to copying. The idea here is for you to take the journey and take the time to develop the answers to your questions through research from the internet. It will be all the more rewarding to learn where the difficult steps are, then realize there are many ways to resolve the issue and you implement a solution what YOU discovered.


    1 year ago

    Great job!

    Hi Dr Chandra... I'm SAL :-) Very nice project!

    Hi Dr Chandra... I'm SAL :-) Very nice project!

    Look great! Congrat' I was thinking I could make a HAL 9000 Intercom!!!

    Look great! Congrat' I was thinking I could make a HAL 9000 Intercom!!!

    I'm sorry Dave, I'm afraid I would just love to do that !!!

    Looks and sounds great!

    Great work! :)