Cool A.F. (Austin Fisk) Seats

Turning the “meh” ventilated seats in my 2023 RAV4 into actually-cold seats by reverse-engineering the OEM PWM control and inserting an LPC5536-based controller in-line with the blower signal.

Problem & Goal

The RAV4’s ventilated seats only run the fan at full speed when the HVAC fan is on high and blowing out the top vents. I wanted the seat to blast at “max chill” whenever I asked for it – independent of the cabin fan – without breaking any OEM features.

  • Read the OEM control signal going to the seat blower.
  • Understand how the three seat levels map to PWM duty cycle.
  • Insert my own controller that safely reads the OEM signal and drives the blower harder.
  • Keep everything plug-and-play and reversible.
The OEM “High” was about 28% duty cycle. With my module, “High” becomes 50%.

Finding the Right Wires

I started with the Toyota wiring diagrams to locate the seat climate control connectors, power feeds, and the mysterious control line that changes with the ventilated seat levels.

Seat wiring diagram
HVAC / seat harness diagram with the seat blower path traced.
Passenger seat connector pinout MS1
Passenger seat connector pinout (MS1).
Climate seat wiring diagram close-up
Zoomed-in view of the climate seat and seat back blower circuit.
Driver seat connector pinout NT1
Driver seat connector pinout (NT1).
On the seat connector I found:
  • Pin 1 – Ground
  • Pin 4 – Ignition-switched +12 V
  • Pin 5 – Constant +12 V
  • Pin 12 – Single line that changed with seat fan level (the PWM control)

Reverse-Engineering the OEM PWM Signal

With the wiring identified, I tapped into the control line and used a Saleae logic analyzer to see what the seat controller was actually doing.

Saleae connected to seat
Capturing the blower control line with a Saleae while cycling seat levels.

Measured OEM PWM behavior

At the seat’s three levels (with normal HVAC settings), the duty cycle looked like:

  • Low: ~10% duty cycle
  • Medium: ~19% duty cycle
  • High: ~28% duty cycle

When the cabin HVAC fan was on max and pointed at the head, the same “High” seat setting jumped up to about 53% duty cycle.

2 ms period Low-side PWM Single control line
PWM trace low speed
Low-speed trace – narrow pulses (~10% duty).
PWM trace high speed
High-speed trace – longer pulses, up to ~53% duty in the “bonus” HVAC mode.

Controller Design & Firmware

Stock ventilated seat - Reading in the PWM signal as high, med, low, off.

I first proved this out on an Adafruit board, then migrated everything to an LPC5536-based board I’d previously designed. The module sits inline between the OEM controller and the seat blower.

Timing Budget Check

Before committing, I verified the LPC5536 microcontroller could comfortably keep up with the incoming PWM while also generating a new one.

Adafruit GPIO timing on Saleae
GPIO test on the prototype: ~76 µs period, <40 µs high time – much faster than the 2 ms OEM PWM period, so polling is plenty.

Final LPC5536 Module

I repurposed an LPC5536 board, adding a MOSFET on a PWM pin to sink the blower ground. The OEM control line feeds an input with an internal pull-up so the firmware can read the PWM while still emulating the OEM load.

  • Reads OEM PWM and calculates duty cycle.
  • Maps seat level to new, more aggressive duty cycles:
  • Low → 17%
  • Medium → 36%
  • High → 50%

If the OEM ever tries to drive above 50% (e.g., head-blaster HVAC mode), the module just passes the original PWM through.

Cool A.F. board close-up
Modified LPC5536 board used as the heart of the Cool A.F. module.
Cable assembly on desk
Assembly in progress: board and harness together.

Enclosure & Harness

To keep things OEM-like, I designed a small enclosure and a plug-and-play harness that sits between the factory seat connector and the car harness – no wires cut.

Case top model
Case top with a relief cut for the MOSFET and connector clearance.
Case bottom model
Case bottom with channels for the harness to sit in.
Full cable assembly with case
Full harness with module installed, ready to drop between seat and harness.

Installation

The module tucks under the driver’s seat and rides along with the factory harness. The seat still moves freely and everything remains serviceable.

Module installed under seat highlighted
Module location under the seat (highlighted).
Zoomed-out view of under-seat area
Zoomed-out view: nothing hanging down, OEM is preserved.

Trash-Bag Test: Stock vs Cool A.F.

To visualize the difference, I put a trash bag over the seat perforations and timed how long it took to suck the bag flat with and without the module installed.

Cool A.F. module installed – noticeably faster bag collapse.

Measured improvement

  • Stock seat: ~10 seconds to evacuate the bag.
  • Cool A.F. module: ~6–7 seconds.

That’s roughly a 30–40% reduction in time, which matches the duty-cycle changes and absolutely feels better on real drives.

Results & Daily Use

The module has been working reliably in daily driving. The OEM controls still work exactly as before – I just get “the better version” of the ventilated seats without needing the HVAC blasting at my face.

Overall, the Cool A.F. Seats project was a fun mix of automotive wiring research, signal analysis, real-time firmware, man in the middle, and a little bit of comfort-focused over-engineering.