Monday, May 31, 2010

May 31: The boys and I have a new project.

We have a 1968 Firebird that needs a new wiring harness. I could put in a cheap aftermarket one for $500ish, a really nice aftermarket one for $700, or the new fancy ISIS Power microcontroller-based harness for ~$1500.

I was ready to spend the money on the ISIS system when I realized that while you can buy the "programmer" it just uploads code that you get from the manufacturer. Want to change the operation of the system - you call them, ask nicely and wait for them to send you a .hex file. That is a deal-breaker for me. In the true DIY spirit, I thought - I can build that system! Fundamentally it is the same concept as the "Control Panel" we built before, it just adds the concept of networked microcontrollers to split the output circuits by location in the car.

To get started, I've purchased 3 Gator + boards from

They are "hardened" arduino-compatible microcontrollers. Since there are life-safety considerations involved with this adventure I wanted to get boards that were the least likely to fail (or be damaged by me along the way!).

I've got the Arduino development environment loaded & I've uploaded my first simple program to a gator+. Over the coming weeks, the plan is to:

1) Build a reliable wired communication network (I2C?) between 3 nodes (the gator+ boards).

2) Determine the bandwidth of the network so that I can ensure I don't have a delay on a brake light activation for example.

Update - June 1: 

I built a 3 node I2C network last night using the wire library examples. I can send hundreds of short (8 byte) messages per second to both nodes. Right now the limiting factor is my serial output of the messages for debugging. This is one-way communication from one master to two slaves. 

Next I will try two way communication so that both nodes can send and receive. At a minimum I can use this capability for returning status or warning information to the master. If it worked really well, I could do data logging from all boards. 

Update - June 5: Network fully functional - see my newer post...

3) Develop a terse communication protocol and control structure between the nodes.

Update - June 3:
Design considerations floating in my head...

Does the master send "events" and the slaves respond to events OR does the master process the events and send "commands" to the slaves?

What events exist?

  • External inputs:
    • Ignition: On / Off
    • Input: On / Off (Do I need to handle expected momentary different than expected latching to keep protocol terse? Don't need to resend stuff over & over)
    • Analog Input: Value  (Will I have analog inputs for things like interior light brightness, fan temps, or am I sticking with digital?) 

  • System Events:
    • Warning
    • Error / Problem
    • Critical Failure
    • Heartbeat

What are the "commands" needed? 

  • Standard Outputs
    • ON (Output, Max Duration)
    • OFF 
    • BLINK (Brightness, Rate)
  • PWM Outputs
    • FADE (Start Brightness, End Brightness, Rate) 
    • PULSE (Start Brightness, End Brightness, Rate, Delay)
  • RGB LED (Likely commands are going to separate microcontroller(s) via I2C)
    • LED_ON (R, G, B)
    • LED_FADE (Can get complicated...)
    • LED_PULSE (Can get complicated...)
    • LED_CYCLE (Color cycling...very complicated)

4) Design / construct a fused output module capable of 20+ amp loads at 12v. I haven't found an output board that fits the bill, so it looks like I will be designing one. The Parallax Digital IO board is the closest I've found, but isn't rated for enough current.

Update - June 4:
I still can't find a ganged power output board that meets my needs, and I think I want to custom design it anyway to be able to have the automotive fuse holders on the board, detect blown fuses, open circuits, overtemp on the mosfets, etc. I'll prototype everything on hand-soldered perf board, and if it works well, I may have some boards professionally made :)

MOSFET selection: I'm ordering the IRLZ44N, based on this arduino forum article. They are technically capable of 47A, but I'm thinking heat management in the TO-220 case will be the actually limiter. I think the failure testing part of the project will be FUN!

5) Build a benchtop test car with all circuits present. Benchtop testing will save LOTS of headaches later.

The boys will be learning all about the electrical system of a car including switches, relays, lamps, etc. I think they will LOVE building a working benchtop car model. I'll probably leave it intact as a testing platform and just order more gator+ boards as needed :)

Update June 4:
I will be building the test "car" using a top view of the Firebird printed on paper and glued to peg board. I have an enclosure design for the pegboard that gives me two layers of pegboard - the car picture, all indicator lights & switches will be on the top board which will be hinged to allow access to the bottom board. The bottom board will have the microcontrollers & output boards. I plan to make it run from a 12v jumpstarter style battery. I think the boys are going to LOVE building this thing and playing with it. I have it sketched out - I'll get it in diagram form to share soon.

Stay tuned!