2020/11/01 - A/C Protection
I've finished up the Arduino A/C Protection system.
Apparently, in a "real" car, the PCM (or other part) controls the A/C compressor clutch. It knows when very high RPMs are happening, as well as detects a WOT (Wide Open Throttle) status. With WOT, you prooobbbably want/need maximum power available - so the computer disengages the compressor clutch and removes that load from the engine. More catastrophically, very high RPMs can kill (and even explode) a compressor, so you definitely don't want that to happen.
Fig 1. RPM window switch I used https://www.jegs.com/i/JEGS/555/40826/10002/-1
Fig 2. Installation of window switch and Arduino board (and relay)
I tried reading the RPM signal from the ECU directly using the tach wire, but that wasn't working out. So, I used a window switch and outsourced the RPM cutout feature. If RPM reaches a (manually settable) specific RPM, it will STOP sending a signal to the Arduino. The Arduino, in turn, will STOP sending a signal to the relay (more on that later).
The WOT is easier, there's an output on the crate engine bulkhead harness, 0-5V signal. If the Arduino sees a signal greater than a programmed voltage (4.3V? haven't settled on it yet), the Arduino will also STOP sending a signal to the relay.
The Arduino I'm using is also a bit more rugged than a usual board, check out https://www.rugged-circuits.com/ruggeduino-1. It can withstand high temps, higher voltages, and is generally more tolerant of abuse.
So, back to relays and why things stop sending signals on a "bad" condition. People throw out the word "failsafe" a lot this days in common vernacular. But engineered systems, where safety or damage could occur, need to truly Fail Safe(ly). There's a "WOT" signal wire on the Vintage Air A/C ECM that takes a +12V signal when you have a WOT condition. I have a relay set to NC (normally closed), providing that +12V signal at all times and preventing the A/C from functioning - unless the relay gets a signal from the Arduino. The Arduino, by default, is always sending that signal to the relay, which opens the +12V WOT circuit, which allows the A/C to function.
So, normal operation without a Bad Condition, the Arduino is sending a signal, opening the relay circuit, no +12V received by the A/C ECU, and everything works.
Bad condition: RPM > 4600, throttle sensor voltage > 4.6V
If either Bad Condition happens, the Arduino sends a +12V signal, A/C ECU disengages compressor clutch, nothing explodes (and car gets full power), and everyone is happy.
What if a component fails? Well, that's why almost all devices are set to "NC". If the RPM window switch stops working, it no longer sends a signal. To the Arduino, it seems like we're always in a "Bad Condition", and things are safe. If the relay coil doesn't engage when it receives a signal from the Arduino, A/C ECU still gets +12V, and things are safe. If the Arduino board craps out, the relay doesn't receive a signal, A/C ECU still gets +12V, and things are safe. The only real risk is to the WOT signal. If there's no signal (wire cut, Arduino input fried, etc.), but we have a WOT status, the A/C wouldn't cut out. I've been robbed of some power there, but no real safety concern. (As I type this, I figure that I could set a minimum voltage reading threshold - assuming that coasting isn't 0V.) I can safely assume that the voltage reading is always accurate - or rather, if the throttle voltage has issues, I have MUCH, MUCH larger problems to deal with than my A/C compressor, since the ECU is using that voltage to run the engine.
Fig 3. Arduino wiring diagram used