Sunday, January 24, 2010

All Hardware Functional!

The Joystick has sound effects (Star Wars & Star Trek sound files on the Waveshield) mapped to the directional axis and some of the buttons. The red button with the flip up cover fires the thrusters (same functionality as the big green button in prior versions) which increases engine temp (as seen on the Engine Degrees gauge) and will cause an overheat alarm if it the temp goes too high.

The Apache Helicopter Data Entry Keyboard now works...the bottom line is for data entry. You get a blinking underline cursor, and the keyboard supports numbers and letters, backspace and enter.

In the future, I'll make it a functional navigation system between Star Wars planets. For now, a little imagination is needed. The three new buttons next to the display are wired, but not mapped to any functionality. I was thinking they would be to select options, with the two black being up & down and the red being enter. Now that the data entry keyboard is functional, I'm not sure what they will be for - but they will find a use!

I seriously underestimated how much wire would be coming into this box. There is a Cat5 cable from the Joystick, two from the Data Entry Keyboard, one from the Left Panel, one from the Center Panel, one from the lid buttons and one from the Liquid crystal. Making the final connections on the Arduino Mega was quite challenging...a much larger box and a Mega screw shield would be much easier...

I also built a 6 volt regulator for the Arduino, which kept all the 12v wiring out of the box. All 12v wiring for the button lamps, siren, and strobe is hidden behind the removable panels.

For the Arduino folks in the crowd...check out this list of pin declarations...I think I used EVERY digital I/O pin on the MEGA - I still have some PWM outputs and some analog inputs remaining...

//WaveShield Pins

//analog outputs on PWM pins
#define GAUGE_ED      8
#define GAUGE_LR      9

//Analog Inputs
#define JOY_UD_POT    8  //WHITE-BLUE
#define JOY_LR_POT    9  //WHITE-GREEN

//DO NOT USE - Reserved for future I2C or interrputs

//digital inputs
#define BUTTON_RED    22 //WHITE-BROWN
#define BUTTON_UP     28 //WHITE-BROWN
#define BUTTON_DOWN   30 //BLUE

//digital outputs
#define LAMP_RED      23 //ORANGE
#define LAMP_GREEN    27 //BLUE

#define SIREN         29 //BROWN
#define STROBE        31 //WHITE-BLUE

//Keypad Col Pins
//....................34 //WHITE-ORANGE
//....................36 //ORANGE
//....................38 //WHITE-GREEN

//Keypad Row Pins
//....................33 //WHITE-BROWN
//....................35 //BROWN
//....................37 //WHITE-BLUE
//....................39 //GREEN
//....................41 //BLUE

// from joystick
#define SHIFT_CLOCK   40  //ORANGE
#define SHIFT_LATCH   42  //GREEN
#define SHIFT_DATA    43  //BLUE

//LCD pins

//WaveShield SPI pins

Thursday, January 21, 2010

Hacking the Helicopter Keypad...

I bought this Hughes Helicopter keypad off eBay in 2007 for my son's "control panel" - at the time it looked cool, but I had no intent of trying to use it as an active device. I thought I might use the rotary switch, but not the keypad.

Now that I have an Arduino and I'm learning more & more, I decided to see if I could get the keypad usable...

I finally got brave and disassembled the keypad...I got lucky. While it had a 20 pin connector, 2 were unused, 8 were for the rotary switch, 2 for power + ground for the lamps and that left 8 pins for the key matrix - 3 columns and 5 rows.

I traced the circuit and documented all the pins. My son helped me test my pin assignments by continuity testing :)

Last night, I decided I wanted to try to get the keypad working with the Arduino and the keypad library.

I could have put a fancy jack on all that wiring, but why not use solder :)

I used this little board to hold all 20 connections and soldered a piece of cat 5 to the matrix rows & columns.

The keypad library was easy to test, but I got a 0 in between each valid button press. I fought it for an hour before removing the keypad connector - sure enough, there was continuity on the row & column for zero - without the button being pushed. After removing the 20! screws, I determined that the pressure from the back screws was activating the zero button. Put back all 20 screws, and no more false zeros. Unfortunately, no more number one either. Remove all 20 screws again - opps, I guess the #1 button had fallen out the last time and I'd put it in sideways. Reinstall all 20 screws - works GREAT!

I need to put resistors on the rotary switch outputs so I can read them all with a single analog input. I have plenty of analog inputs left, so it seemed better than a shift, although if I chained 2 shifts, I could also pickup the 5 row pins...tempting :)

More later as I reinstall the keypad AND get it to work with the rest of the code on the Mega.

I found a new way to make the "Control Panel" even more interactive.

Last weekend we started hacking the helicopter keypad and once I knew it would work, I asked my son "what can you do in a spaceship with a keypad?" We brainstormed for a while and we came up with the idea of using the keypad for the "nav computer". You type in where you want to go, select the speed, etc.

I started thinking of finding / making some nature of star chart with a coordinate system so that he could see his current location, chart a course, etc.

As I went digging on the net, I found this...

It is a grid-based map of the Star Wars galaxy! It even has zoomed maps of the dense areas...

And an index page!

Original maps here:

Now I get the fun of building a basic navigation system on the Arduino...although probably not right away.

I want to think about it for a little while to let the idea evolve. Send me any comments or ideas you have on the topic!

Tuesday, January 19, 2010

Big Milestone!

Houston, we have a CASE!

Something about getting the project into a case makes it feel very real to me. So without further ado, a picture!

I'm made the liquid crystal wiring long enough so that when its mounted on the Control Panel, I can open the lid, move it up, and refasten it so the display is visible and not hanging.

I added the buttons by the LCD to do some basic menu work using the LCD if I choose - up / down / enter will be their likely functionality.

The wiring from the panel will come though the hole between the two top "modules". You can see that better in this picture.

The edge of the Arduino was NOT exposed, since power will come in from the back AND I didn't want the kids pulling out the SD card.

I've also "defragmented" my pin use on the Mega so that I can free some contiguous pins for the 3 new buttons AND something else that is coming soon which I think needs 8 digital pins.

Thanks to my buddy Lou who used his new dremel to cut the openings AND to build some standoffs for the boards.

Sunday, January 17, 2010

Wow, I'm building a Simulator - Part 2...

Once I'd integrated the WaveShield code, the liquid crystal code and the joystick code in with the existing Control Panel code I could really get fancy. My son had picked some sound effects from Clone Wars, and I'd found a few sounds online. The startup sequence was now accompanied by a rocket engine startup sound and joystick buttons were mapped to various sounds. I also mapped a "flyby" sound to the joystick axis. I had to give that one some thought since I only wanted to hear the sound once as the joystick heads off axis. I wait for it to recenter before playing the sound again.

I really wish the WaveShield supported simultaneous playback of multiple sounds, but for now, this will do nicely.

I made the liquid crystal display some startup text and also display when there was a red alert or an engine overheat alarm.

I remembered that there was a Star Wars A-Wing starfighter and since my son's name starts with A and its powered by an Arduino that A-Wing would be interesting. I also gave it a version number. I'm not sure why, but I was on version 3 of my Control Panel software, so I made it version 3.0. When I showed my son, he was most impressed by the version number. I still can't figure that out.

About 3 hours later, we are eating lunch and out of the blue he exclaims, "I GET IT!" He'd realized the A in A-Wing was from the A in his name. When I also pointed out that Arduino starts with A he liked it even more.

Now its official - I'm building an A-Wing simulator!

As for that "Scan Frequency" on the liquid crystal - its that random number being fed to the leak rate gauge once per second - but I have a special use for it coming soon. Stay Tuned!
Integrating the components...

Up to this point, I've been working on individual smaller prototypes.
I'd built a WaveShield + Mega prototype, a Liquid Crystal + Duemilanove prototype and I'd built my "modules" for the Control Panel output circuits for the lighted buttons and gauges that had been running on the Duemilanove for days. I also had the board that was shoved into the joystick that would need to be connected along with the analog axis pots.

It was time to integrate it all - both hardware and software.

The integration of the hardware was easy. I'm getting really fast at wiring these things up. Integrating the code took a bit longer, but I had to remap lots of i/o pins over to the Mega AND I documented them all.

Once I had it together, the audio started skipping. Great.

I started commenting out sections of code to determine what was causing the skipping. As soon as I commented out the read code, the audio stopped skipping.

I dug into the code and found a delaymicroseconds() call. This call disables interrupts which are used by the WaveShield. I was hoping the code wasn't timing sensitive, so I changed the call to delay(1) instead AND IT WORKED!

That was the only real integration trouble. The code is getting messy and I suspect I'll be doing some cleanup soon. I'd like to use interrupts & timers more, but I'll save that for later.
Moving past the breadboard...

I wanted to get the Control Panel off the breadboard at some point and kept trying different layouts on a big pcb. Then I realized that the project is likely to change over time, so why not build smaller "modules" that I could  reuse if I went a different direction with the Control Panel.

I built the transistor output module first. It contains 5 simple TIP-120 transistor circuits and I added LEDs at the last moment on the input side. The input side is always at 5v, so it was really easy to pick a resistor voltage for the LEDs and not worry about it.

I then built a small module with the pots for the Liquid Crystal contrast and the analog gauge calibration.

I'm using LEDs here to test since the gauges are mounted in the Control Panel at this point.
M1 Abrams Tank Joystick

Last weekend I asked my son "want to hack that joystick today?"

He turned off the tv and came over to see what I was doing. This Control Panel father + son thing might be working after all!

We spent a few hours removing panels, testing continuity and determining the function of all the wires.

The trigger & thumb switches were easy, but the axis were a bit confusing.

Here is a pic of the device that measures axis motion

They are labeled:


A quick trip to google discovered the Servo Instrument Corp in Baraboo, WI. Unfortunately they don't have any product information online. There is one of these devices for up / down and another for left / right. I emailed them for information, but they didn't return my email.

After playing with the multimeter for a while, I determined that I can read resistance from them - the resistance is 0 at the axis center and goes up to 2.5k ohm at the far deflection. So I can tell how far the stick is off center, but I can't determine which direction. 

If anyone reading this has ideas on how to work with these devices, please leave a comment!

Given the sheer quantity of output wires and a nice big space in the back of the joystick, I decided to build a quick input shift register circuit (I had experience too!). This lets me get all the signals from the joystick to the Control Panel on a single cat5 cable.

I didn't get outputs from the 4 way hat control, so I left room on the PCB to add another shift register if needed. This board and extra cable were shoved in the back of the joystick.

We took the joystick to Home Depot to determine some type of mounting. I felt like this would be a long adventure but wanted to get it solved.

I was thinking of using a pipe flange with an olympic weight as a base. We hit the plumbing isle and started looking for flanges. Lou picks up a toilet flange. I scoffed, but then gave it more thought. We bought some 5" PVC and two all plastic toilet flanges.

We then headed over to find some mounting brackets...I wasn't finding a thing, but Lou found this one bracket that seemed feasible. We looked for another one for 20 minutes, then realized that it was a roof truss tie in the wrong section. Once we found the rest of the ties, we found an even better bracket. 

On the way home I started thinking about cutting the wood base. I hate cutting circles, and I remembered I had an IKEA lazy susan I'd bought for a project and not used. It turned out to be PERFECT. A little time with the bench grinder and the drill press and I had it mounted. 

This pic shows the mounting brackets (with all the corners rounded) and the height compared to the bed. I think he will be sitting on the bed using it, and its a good height if he's standing. I might put some weight in the bottom of the PVC to reduce the topple possibility even further.

You can also see the cat5 hanging out the back. I thought about putting some nature of jack on the back of the joystick, but for now, its just a length of cable.

Lying in bed that night I told my wife that I had NEVER had a project come together as easily as mounting that joystick. I thought it would be a multi-day adventure and it was done in less than 3 hours INCLUDING the trip to Home Depot. 

The WaveShield arrived from AdaFruit and I promptly assembled it. It was an easy assembly, especially since I've been getting lots of soldering practice.

I had some trouble getting it working, but it wasn't my soldering, it was the SD Card that I scrounged out of my desk. It was a minisd card out of an old cell phone, but apparently minisd and microsd aren't required to implement the electrical interface used by the WaveShield. One I stole a microsd out of an older camera, everything worked great.

My son wanted his Control Panel to make sounds like the ships in Star Wars Clone Wars. I got some major amazement looks when I showed him how I could rip sound off a DVD. We picked a few and I made them play with button presses on the Lab breadboard setup.

I'd already read that the WaveShield needs to be modified to run with the Arduino Mega, so I quickly set out to make that modification. The modifications are simple and documented here.

I received the WaveShield with a broken audio volume pot I didn't realize it until it was installed and I tried to use it. I emailed AdaFruit that night - They replied quickly and immediately put another one in the mail. It was a big of work to remove / resolder, but an easy fix overall.
Building a Voltage Regulator

I'd used 78** series voltage regulators in the past, but never built a filtered power supply. I ran across a tutorial at sparkfun and decided to build it. I knew I'd need a 5v supply at some point for the Control Panel and it would be good soldering practice...

Wow, I'm building a simulator...

As I added capabilities through hardware, I kept discussing functionality with my son. He understood the concept of "you push a button and something happens", but he really hadn't grasped the concept of having program logic. The more he and I brainstormed about the functionality, I realized...Wow, I'm building a simulator.

When the board was in the first prototype stage in his room (pic below), I grabbed the laptop and asked him a simple question, "What should it do when it first powers up?" His eyes lit up - "OOOH, the gauges should go all the way to the right, really fast, then come back down slowly. Can you do that?" "WE can do that right now," I answered. This was going to be fun I thought - and it was.

He watched me writing the Arduino code and gave me instant feedback. "That's REALLY cool!"

Then I asked him, "How about the lighted buttons - should I make them light up or flash while the spaceship is starting?" He loved the idea, and I went to implement it. This took longer than I thought because now I needed two time dependent things running at once. I knew I needed a better solution, but knocked it out by adjusting the loop timing to handle both the gauges and the lamps.

Once the startup worked well, we began to discuss how the panel would work after it was started.

 I suggested that the large lit green button would be the "thrusters" and they would make the engine heat up when they were firing. Since we have a gauge called "engine degrees" this made sense to him.

I coded an engine temperature routine - it "warms up" to a set temperature, heats up when the thrusters are firing, then cools down when they are done firing. Again I needed timing code, and I knew I couldn't do this all with hand adjusted timing loops. I found the millis() function and built a block of code that runs once every second and a block of code that runs 10 times a second. I figured there were lower level ways to do this, but my method was good enough for now.

I read the buttons every 10th of a second, and updated engine degrees every second.

Once this routine was functional, I asked him to pick a temperature where the engines would overheat. I figured out the integer that mapped to that number on the gauge and built an alert system for an engine overheat. Once the engine overheated, the strobe light (and piezo siren once I connected it to the same transistor as the strobe) would activate. Along the way we also turned off the thruster button light when the engines are overheating. As the engine cooled off, the alarm would turn off once the threshold was crossed.

I had another gauge labeled "Leak Rate" sitting there doing nothing, so once a second I generated a random number between 0 and 255 and set the gauge to that number. It made the gauge very active which he liked. I found it annoying because it didn't seem to be a part of a simulation, but I knew we'd find a good use for it later.

After a day of playing with it in this configuration, we both wanted an alarm cancel button. He also wanted a "red alert" button to sound the alarm anytime. The red button was obvious for "red alert" so the yellow button became alarm cancel.

I coded separate logic to track a red alert from an engine overheat and to cancel them by using the yellow button.

I left it this way for a week. Sometimes he would unplug it at night, other nights I'd go in to tuck him in and the red and green buttons would be lit with that leak rate gauge bopping around randomly. I realized that Arduinos make REALLY expensive night lights...
Control Panel - First working Prototype

As I was learning, I'd already built the 4 transistor circuits, the 3 switch input circuits and the 2 analog gauge control circuits all on the Radio Shack breadboard. I decided it was time to see this thing in action and let my son play with it for a few days. I wired up the gauges and used some cat5 from each access panel to get the connections out the panel and up to the breadboard.

My son now knows the word "prototype".

Shift In

As I mentioned previously, the shift examples were intriguing and everything was just working, so I thought I'd give it a go.

I built it on the lab, using the 3 momentary switches to test. It worked great, so I decided to make myself a small pcb version since I find it a pain to connect so much stuff on a breadboard. I also needed some construction practice before I built the board for the Control Panel, so why not.

I used a small board from Radio Shack and gave it a go. My layout turned out to be a pain and my soldering was a real mess. After I'd soldered it, I continuity tested everything and was amazed to not have any accidental solder bridges. More on that in a minute...

I wired the circuit up to the Lab buttons and got a whole lot o' nuthin. After tracing it for a while I realized I had created a nice row of grounds, but hadn't actually connected that row TO ground. Duh.

I heated the iron back up and "fixed" the circuit. I reconnected it...Button one worked. Button two worked. Button 3 killed power to the Arduino. Oops. Unplug USB, plug it back in...nothing. Oops. Sure enough, "fixing" the ground had created a solder bridge and a nice short.

I now had a dead Arduino.It wasn't even a week old. Oops.

I pulled the Arduino out of the circuit and tried another USB port. It powered up. Ok, so its a dead USB port on my laptop. Lovely. For giggles I rebooted the laptop and power came back on that port. Thank goodness for protection circuits.

Lesson learned - I'd tested the first time, but not after I'd "fixed" the circuit.

Once I'd shown my son the prototype with the lit buttons and the analog gauges, I was excited to push the project forward. At this point, I still needed to finish the center panel and mount the gauges, etc. We got out the woodworking equipment and the chrome spray paint and made it happen!

He and I were both getting more excited by the day. The project was really coming together and we were both dreaming up new ways for the Control Panel to operate.

The more I thought about the Control Panel and the more I learned about the Arduino, the more I wanted to try. This new confidence was cool and I wanted to keep going.

I bought some additional parts that week:

  1. Arduino Mega - I quickly realized that all the devices I wanted to connect wouldn't work on a straight Arduino AND I knew that I'd want to do other projects so I'd need another board. Luckily I had a $50 Amazon gift cert that HAD to be spent!

  2. He wanted the panel to make sounds - and I knew just the device to make it happen. I ordered a WaveShield from AdaFruit, but I knew it would take a while to arrive due to the holidays.

  3. I made a trip to Skycraft and found some ICs that would let me try the and shift.out examples. I'd ordered the Mega and it had tons of I/O, so I didn't think I'd need them in my final design - they still seemed pretty complex given my experience, but I wanted to try them.

  4. PCB construction parts - I few more trips to Radio Shack and I had flux, braid, some small circuitboards, hook up wire, etc. I was ready to move OFF the breadboard, but knew I'd need some soldering & circuit board design experience before I could build something complex.

I also tried some other example projects. I've always been fascinated with RGB LEDs, so I build a color changing circuit. I'm using a water bottle cap sitting on two LEDs as a diffuser :)

The day after Christmas I headed right back to the Arduino with a burst of both enthusiasm and confidence. It had to be a good day - after all Radio Shack was open!

I got one of the analog gauges and returned to the link that got me excited about Arduino originally - "Arduino Analog Gauge"

A few minutes later, I was controlling the "Leak Rate" analog gauge from the Control Panel.

I then moved to how to control the lamps in the lighted switches, the piezo siren and the strobe. I found an online example showing the use of TIP-120 transistors. After a quick trip to Radio Shack, I had some TIP-120s. A few minutes later, I could turn the button lamps on / off and even dim them using PWM.

I was hooked. All this time I wanted to increase my electronics knowledge, but I'd never played with microcontrollers. Suddenly I realized that the microcontroller does all the logic and I just needed to build basic connection circuits to switches, sensors and output devices. Suddenly all my plans for world domination were possible! Ok, no real plans for world domination, but so many of my ideas from the past were now feasible.

I started thinking of how to demonstrate all this to my son. I built the left side access panel with the 3 lit buttons, and the strobe. I built a breadboard circuit (another trip to Radio Shack to get a standalone breadboard) with 4 TIP-120s (3 button lamps and the strobe), and used two trim pots to "calibrate" the gauges. The three buttons and 10k pot on the Lab were used as inputs.

The code read the input pot and used that to determine the rate used to flash the buttons AND the value displayed on the Leak Rate gauge. If the value went above the midpoint of the gauge, the green button would light and the strobe would activate. Each of the input buttons was given a value and the values of pushed buttons were summed and displayed on the Engine Degrees gauge. It made no sense, but it gave me a way to debug that I was reading the switches properly  and it would show my son the concept of inputs + logic = outputs. About this same time I was getting really annoyed that I couldn't easily debug my code - then I found the serial output commands and the serial monitor in the IDE. What an AWESOME feature.

Here is some of my early Arduino code for the above prototype

#define POT_DELAY 0
#define GAUGE_LR 3
#define GAUGE_ED 5

#define LAMP_RED 6 //PWM pin
#define LAMP_GREEN 8 //NOT PWM

#define STROBE 10

#define BUTTON_RED 2
#define BUTTON_GREEN 12

int potValue = 0; // value returned from the potentiometer

void setup() {
// set the transistor pin as output:

Serial.begin(9600); // set up Serial library at 9600 bps

Serial.println("Hello world!"); // prints hello with ending line break



void switchOff()
analogWrite (GAUGE_ED,0);
analogWrite (GAUGE_LR,0);
analogWrite (LAMP_GREEN,0); //switch to digital?
analogWrite (LAMP_YELLOW,0); //switch to digital?
analogWrite (LAMP_RED,0);
analogWrite (STROBE,0); //digital?


void loop() {
// read the potentiometer, convert it to 0 - 255:
potValue = analogRead(POT_DELAY);
int leakRate = 255-(potValue/4);

int buttonRedValue = digitalRead(BUTTON_RED)*32;
int buttonYellowValue = digitalRead(BUTTON_YELLOW)*64;
int buttonGreenValue = digitalRead(BUTTON_GREEN)*128;

analogWrite(GAUGE_LR, 255-(potValue/4));

analogWrite(GAUGE_ED, buttonRedValue+buttonYellowValue+buttonGreenValue);
analogWrite(LAMP_RED, 255);
analogWrite(LAMP_YELLOW, 0);
if (leakRate > 128)
analogWrite(LAMP_GREEN, 255);
analogWrite(STROBE, 255);

analogWrite(LAMP_GREEN, 0);
analogWrite(STROBE, 0);

delay (potValue);

analogWrite(LAMP_RED, 0);
analogWrite(LAMP_YELLOW, 255);
//analogWrite(LAMP_GREEN, 255);


Arduino 101

Christmas day I showed my dedication to learning the Arduino by cleaning off my desk to make room for it. For a starter kit, I had an Arduino Duemilanove (That's the Arduino 2009 in Italian...took me a while to realize that...), a 20x4 Liquid Crystal displayjumper wires, and 3 RGB LEDs. I also had the "Getting Started with Arduino" book, and my past knowledge to get started.

A little background on my electronics knowledge and experience:

I've always been interested in electronics. My grandfather bought me the Radio Shack "All-in-one" kids when I was young, and I would sit for hours and build basic circuits. I've done lots of basic AC and DC stuff including car wiring, car audio, home theater, etc. I can do basic switch and relay circuits, use a multi-meter, etc. If you have a car or home wiring problem, I can solve it :)

On the other end of the spectrum, I have a computer science degree and have taken classes in microprocessor design that included logic gates, etc. I've coded in BASIC, Visual Basic, C, C++, Java and SQL. 

In the middle however is this big gaping hole in my experience. I've built some basic 555 timer IC projects, but never got into logic, amplifiers, etc. I always felt I SHOULD know how to build complex circuits, but never took the time to learn.

A few years ago, I received the Radio Shack Electronics Learning Lab as a present from my in-laws. I knew it had a breadboard, some LEDs, switches and pots, so I dug it out of the closet. It is a PERFECT way to learn the Arduino.  The breadboard connections are oriented different than normal, but once I figured that out, I was prototyping the Arduino examples in no time.

This pic shows me learning basic transistor control using the breadboard on the Lab

I started with the "Getting Started with Arduino" book, but was quickly disappointed in the amount of material. I later found "The Complete Beginner's Guide to the Arduino" and wished I'd had it on day one. 

On Christmas day I did the Blinking LED example, I'd read a potentiometer on the lab to control an LED brightness, I created a countdown timer using the 7 Segment LED on the Lab, I built  the Liquid Crystal example and then customized it.

 I could not believe how easy I was learning the Arduino platform. Everything was just working. My son saw the 7 segment and liquid crystal projects in the pic above, and I could see him trying to grasp how Dad made those things work. He told me the Arduino was "really cool", and all in all it was one of the best Christmas days ever.
Sometime between Thanksgiving 2009 and Christmas 2009 I started thinking about how the "Control Panel" would work electrically.

Originally I'd planned to do it all electrically, but really had a "jump off that bridge when I get to it" thought process.

I wanted to do something cool with the analog gauges, but wasn't sure what to do.

A trip to google turned up this link - Arduino Analog Gauge

It sounded pretty easy. I was unfamiliar with the Arduino board (I've been in the MBA cave tooooooo long!), but a quick trip to the Arduino website had me hooked. A microcontroller seemed the PERFECT way to make the Control Panel come to life. I'd also found a joystick controller from an M1 Abrams Tank at Skycraft (gotta love that place) and hoped that I'd be able to interface it as well.

Fast forward to Christmas day... Dad + Son receive the Arduino from Mom as a Christmas Present and the Son receives the Tank joystick. Given new parts and the MBA holiday break, amazing things are about to happen!

Over the Thanksgiving holiday my son's cousins were in town, so he had little interest in working on the Control Panel with me. I changed gears and worked on the Firebird. My younger son and I took the car to the Turkey Run car show in Daytona. It was a great week...

Thanks to my buddy Lou who pulled a late night with me on the car prep, riding over with us and for taking these pics.

I've been working on a project "off and on" since September of 2007 - way more "off" than "on".

Here's the background:

We did a large remodel on our house in 2005 / 2006. We didn't remodel the kids rooms and they felt left out. In 2007, we gave them the option to design a theme for their room. My youngest wanted his room to have a "Cars" theme, and the oldest wanted a "Spaceship" theme.

The car themed room was easy - we put down alternating color garage floor tiles, used a toolbox for a dresser, hung an anodized red shoplight, etc. We also did an entire wall with magnetic chalkboard paint (won't EVER do that again!) He was happy and he gets LOTS of compliments on his room.

The spaceship theme was much harder. We also used plastic floor tile, gray in the center and a black border. I put some caged lights up and used exposed conduit to start the mechanical theme. As we were prepping the room, we noticed some drywall damage under the window. I removed all the drywall, but before I replaced it, I asked him if he wanted to put a bunch of lights & gauges on the wall so that it would look like the spaceship's "control panel". He loved the idea.

We headed to Skycraft and proceeded to purchase $300 of misc gear including some analog gauges, timers, LEDs, lighted buttons, a warning strobe, etc. I should have known this was just the starting point. I also bought a Hughes Helicopter keypad off eBay and an old school desk microphone.

 I created a concept panel in MDF which consisted of a custom windowsill, a shallow u-shaped panel that covered the entire opening and pulled the panel out from the wall about 4 inches. I cut large openings in the main structural panel and then build "access panels" that were larger than the opening and would bolt on from the outside. This let me make it modular, so if I made a mistake, I could pull just that panel or if we had a new idea, replace a single panel.

This picture shows the a panel opening and how the "access panel" is oversized in front of that opening. It also show my creative process at work - pretty disorganized!

Unfortunately the project sat in this state for almost 2 years. My kid had exposed insulation  in his room all that time and didn't really complain about it. In summer of 2009, I got motivated again and dedicated more time to the project.

This picture shows the main back panel (the side piece for the back panel hasn't been attached and is the strip in the middle of the image. You can also see the right side "access panel" and the center "access panel". At this stage (late summer 2009), I'm laying out components before I started cutting.

This picture (still late summer) shows the back panel and right access panel painted, and I've started mounting all the components. The large square hole will have a cool old circuit board from the Hughes Helicopter with a piece of plexi over it. At this point, I still was thinking this would be a an electric / basic electronic panel with no intelligence, so the circuit board would look like the "brains" of the panel.

 By the time my MBA program restarted at the end of summer 2009, I'd mounted the back panel and the right side panel in his room, and the black covered switch turned on & off the caged lights. The red switch activated the AC fan at the bottom of the panel (no real purpose, but it makes noise...) and the key switch turned on a multicolor patterned LED mounted behind the fan.

My son thought it was pretty cool just in this form (and the cage lights were finally active after being on the wall for 2 years).

I focused on school, with the intent to finish it over the Thanksgiving break. I thought I was "almost done" - I had no idea...