Part Selection/Electronics Guidance - Arduino in a Vehicle

Hello all!
First, I am a beginner in electronics (most I have done is hack apart and fix a few things).
But I do know how to defend myself mechanically and I have done a lot of installs in vehicles (car alarms, remote starters, etc).
But that is not enough so I am killing myself as I read "Practical Electronics for Inventors", but I have more than half of the book left to read.

And so, I arrive here:

Currently working on a car project in which I use an Arduino as a controller for aftermarket heated seats.
My car has plenty of the wiring already in it and I switched my auto a/c panel for one with the heat controls (my car did not come with heated seats).

The heat kit is a rostra: (250-1872 - Universal Kit. Double thumb-dial Switch).
The Rostra has been installed, tested to work properly, and used for about a month, then partially removed for this part of the project.

Essentially, I would like to use my stock heat controls with the rostra aftermarket kit, which is where the Arduino comes in.

As a quick note, I have already posted in a separate part of this forum, in relation to this project, but that post is in regards to actual programming of the Arduino. This post is about the electronics that drive it along with the Arduino.

First, here is a diagram of the relevant wiring of the vehicle.
Note that the OEM route would be $500+ in parts to accomplish this.

My vehicle is ground-based (ground-chassi) and most of the wiring is activated when grounded.
The LEDs I need to activate for HIGH, MID and LOW turn on when the respective wires are grounded to the chassi.
On the driver side, Brown/White is High, Gray/Red is Medium and Brown/Black is Low.
The passenger side is the same as the driver side since my passenger seat is not powered.

The one exception to this is the button used to select the heat level.
A +12v signal is sent via the Brown wire when the button is pushed.

--

As for the rostra kit, I have taken the control unit apart; this image is of the driver side.
This one
is driver side, but with a component out of the way, and this one is of the passenger side.
The knobs essentially ground all three lines together, but as I do not need any of the leds to function, I only need to ground the outermost line (the one that is broken up) with the middle line.
10 steps in total but I will only need 3 at a minimum (more if I were to introduce heat levels between high, medium and low).
I am planning on using relays to close this part of the circuit as it is +12v but if you guys have an alternative solution on how to approach selection without relays, I am all ears.

--

And so, I am planning on having the Arduino count the number of presses of the heat button on the a/c panel, while switching the LEDs from HIGH, MID and LOW, and setting the appropriate relay which in turn, turns on the heat for that respective level.
As mentioned, I am planning on using relays to control the heat on the rostra unit, but if you guys see a better way I am listening.

Where I am having the most trouble is when it comes to grounding the respective wire to turn on the LEDs and being able to sense the button itself (this is a +12v signal).
I have seen a few diagrams and some solutions mention using a potential divider circuit to accomplish this (this +12v line should not be very noisy, but the ground in vehicles always is).

As for grounding, there is a 10v - 12v (+12v -> resistor(unknown value) -> LED -> activation wire(ground to activate)) signal that I cannot connect directly to the Arduino (who knows what damage that will do).
So I am thinking some sort of transistor can accomplish this, but I have no idea where to even start looking for the appropriate transistor.
This is where I need help the most.

--

I hope I explained what I am trying to accomplish well and ask for any help (bowing head and all).
Any of your time will be deeply appreciated!

I'd drive the LEDs with a ULN2003, dirt cheap components that everyone should have a bin of.

Yup, a pair of resistors as a voltage divider is how to deal with the higher input voltage.

Oh, and you might need a pulldown on the switches - depending on how they did it, the switches might well float when off.

For communicating with the controls - the knob isn't carrying any current, it's being used to drive that solid state switch (probably a monster mosfet). You could definitely use relay - there might be more graceful ways, but you'd need to figure out how the controller worked.

I found this document, is that the one?
So a NPN transistor, or better yet, a set of transistors will do the job to trigger the LEDs.

Testing and inspecting the A/C Auto Panel Circuit on those switches, it seems that they are wired right, at least from what my equipment is telling me. From what I have measured they don't float (I believe the Arduino's IO Pins are very sensitive so any variation on those circuits could trigger it), but I'll add resistors in there just in case.
I will be taking another look at the A/C Panel later and put a diagram (schematic) together and post it here.

The controls on the Rostra send a +12v signal across the knobs (+12v gets bridged across to select heat level), so would it be possible to use something similar to the uln2003a instead of relays?

You can use the ULN2003 with 12v on the input. You just need to use a current limiting resistor on the input (or use the ULN2004 which has a suitable resistor internally).

Then connect the output to one of the Arduino pins configured as an input with pull-up enabled. Whenever you apply 12v to the input of the ULN, the Arduino pin will get pulled low and can be used to trigger an output on a different pin.

If you use the ULN2003 with additional input resistors, you can have some inputs driven by 5v (no additional resistor) from the Arduino, and other inputs driven by 12v with a resistor. If you use the ULN2004, it won't work very well (or at all) with only 5v on the input.

Ian.

@Ian, I edited my second post. I noticed a few things were not written clearly (a bit tired today).

I think I understand what you are saying.
I'm planning on using the ULN2003a with the Arduino as its 5v Input trigger to ground six LEDs.
When the Arduino triggers one of the Input pins on the ULN2003a, the ULN2003a should then ground the respective output - I hope I understood that right.

I was planning on using relays to bridge the respective terminals on the rostra unit (the knob works by bridging across several pins, there are 10 steps to this for each side, 20 total). And so I was looking for another way to do this part without having to rely on relays to accomplish this.
Can a ULN2004 be used on this application, or two in total (one for each side).

It really depends on the amount of current needed. Each output on the ULN2004 is rated at 500mA, but you can parallel some of the outputs to increase this if necessary. If it helps, you can also use the ULN2803/2804 which has 8 I/O pins instead of 7.

You could use the ULN2004 to pull each section of the segmented track to ground. As above though, you need to ensure the circuit is not drawing too much current through the ULN. Assuming you're still using the high current parts of the Rostra controllers to drive the heater elements, you should be ok.

Can you measure the current used on the switching side of the controller ?

Ian.

@Ian

I will be measuring the current sometime today on the rostra controller (need to install it back in to test, should only take about 30 minutes).

But I do have some numbers for the LEDs, and as you mentioned, the ULN2003/2004 will do the job:

HIGH LED: 3.880mA
MID LED: 6.197mA
LOW LED: 7.873mA

These numbers are from the LEDs on the driver side, but the circuits are the same on the passenger side so those numbers should be very close.
So technically speaking, even the Arduino could handle the current for these, but not the voltage, and that's why I'm using a ULN2003 right?

Back to the Rostra controller, I like the ULN2803/2804, but what I really need is one in a PNP configuration to be able to switch the positive side on the rostra control unit, since that's how that one is wired.

I will be taking those current measurements as soon as I install it back in.

Quick Edit:

Found these pnp transistor arrays, which are paired with npn transistors as well. I'm wondering if they will work with the rostra control and the arduino switching it on.

Another Edit:

Is this the circuit I am looking for?

Quick update:
It's raining :(
So it will be a bit until I can grab those numbers, will update once I can.

Alright! I'm back on here. It never stopped raining (still raining right now), but I got a handy X-tronic 8080 to supply power just for situations like these (only limitation is the 5A limit).

Anyways, the rostra control unit;

From the way the kit is wired and how the PCB is organized I was able to come up with a few ideas.

Referencing the pictures from the control unit; there are three rails to worry about (lines or connection points, but I'll address them as rails from now on).

The broken up rail is what determines the heat level, they are the outermost rail.
I will be switching to this rail.
The one is the middle is the 12v rail, which is what I will be switching from.
And the innermost rail is essentially an ON trigger, relative to each side (meaning either driver or passenger), that has to receive 12v to actually switch on the whole system; it basically triggers the relay and the rest of the circuitry.

Using my X-tronic and multimeter, these are my readings:

Relay/Heat Circuit - Innermost Rail to Middle Rail:

156.60mA

Outermost Rail (Broken Up Rail) to Middle Rail;
From Low Heat to High Heat:

1: 0.760mA
2: 0.960mA
3: 1.131mA
4: 1.347mA
5: 1.751mA
6: 2.297mA
7: 2.694mA
8: 3.150mA
9: 3.867mA
10: 4.592mA

Essentially, this is what I have to do:

Lets say I select position #2, so 0.960mA is the current.
I have to bridge 12v to that, along with 156.60mA from the innermost rail.

So the worst case scenario is 156.60mA + 4.592mA of current.
Therefore; my plan is very simple:

Look at the 12v rail and the relay as the common part of the circuit (bearing in mind which side) and switch on 12v to my selected heat level, then serial a diode to forward 12v to the inner rail.

That should look something like what I have attached (resistor values and transistor selection not final).
I put that together just to have a general idea as to what I have to do.

What do you guys think?