AUTO-320 · Lesson 12 of 12 · 23 min

Capstone: diagnosing a no-cool and a heater complaint

Kiran's climate control term ends with two jobs that Marty assigns to her alone, with the rule he uses for every capstone: he will answer questions, but she must plan each diagnosis, write down what she expects to find before every test, and write the repair order herself. The first job arrives in July, on the hottest day of the year: courier van 3, R-1234yf, with a note from its driver that reads "A/C blows cold for a minute then warm. Worse in traffic. Fine on the highway sometimes." The second arrives the following January, on a −8 °F morning: Gord Haney's pickup, R-134a, with Gord's own description: "Heater's barely warm at idle, I hear water gurgling behind the dash, and the low coolant light came on twice this week."

This lesson follows both diagnoses from the interview to the verified repair, using everything in the course: the comfort checks of Lesson 1, the pressure-temperature reasoning of Lesson 2, the compressor controls of Lesson 5, superheat and subcooling from Lesson 6, the heater measurements of Lesson 7, the service procedure of Lesson 11 and the rules of Lesson 4. Each job ends in a repair order written as complaint, cause and correction.

Job one: the plan

Before she touches the van, Kiran talks to the driver, Priyanka, on the phone. The air conditioning cools for a minute or two after a cold start, then blows warm; on the highway it sometimes recovers, in traffic it never does; there is no unusual noise and no warning light. Kiran writes her plan in the order the course taught her: verify the complaint with a performance test and the scan tool recording; inspect the cabin air filter, the condenser and the cooling fan; read the high-side and low-side pressures and convert them to temperatures; and check the compressor's command and any reason the module is holding it off. She also writes down her expectation. A system that cools briefly and then quits in traffic suggests a high-side pressure that climbs until the compressor is switched off: a condenser airflow problem or an overcharge, rather than a low charge, which would usually cool poorly from the start.

The cabin air filter was changed at the last service and is clean. The condenser face and the gap behind it are clean; the van's route is paved. With the engine running and the air conditioning on, she watches the front of the van and sees the problem in thirty seconds: the electric cooling fan does not turn.

Job one: the measurements

Kiran connects the R-1234yf service machine's gauges and records the pressures every 15 seconds at idle with the air conditioning on maximum, alongside the scan tool's high-side pressure sensor, the compressor command and the fan command. The low side settles normally. The high side climbs steadily. After about a minute and a half, the engine control module switches the compressor off with the reason "high-side pressure", the high side falls, and two minutes later the compressor is allowed back on and the cycle starts again. Throughout, the module commands the fan to 100 percent.

def sat_temp(p_abs, table):
    for (t1, p1), (t2, p2) in zip(table, table[1:]):
        if p1 <= p_abs <= p2:
            return t1 + (t2 - t1) * (p_abs - p1) / (p2 - p1)
    raise ValueError("outside table")
table = [(14, 32.1), (23, 38.4), (32, 45.8), (41, 54.2), (50, 63.6), (59, 74.2), (68, 85.8), (77, 99.0), (86, 113.5), (95, 129.5), (104, 147.6), (113, 167.2), (122, 188.9), (131, 212.5), (140, 238.1), (149, 265.9), (158, 296.1), (167, 328.7)]             # R-1234yf saturation (temperature, absolute pressure), rounded
atm = 12.1               # Ridgeline's altitude
ambient = 93
cutout = 282             # gauge pressure at which the module switches the compressor off (illustrative)
log = [(0, 171), (15, 202), (30, 226), (45, 248), (60, 265), (75, 277), (90, 283)]
for t, gauge in log:
    cond = sat_temp(gauge + atm, table)
    flag = "  compressor switched off" if gauge >= cutout else ""
    print(f"{t:3} s: high side {gauge:4} psi, condensing {cond:5.1f} F, {cond - ambient:4.1f} F above ambient{flag}")
Output
  0 s: high side  171 psi, condensing 119.6 F, 26.6 F above ambient
 15 s: high side  202 psi, condensing 131.6 F, 38.6 F above ambient
 30 s: high side  226 psi, condensing 140.0 F, 47.0 F above ambient
 45 s: high side  248 psi, condensing 147.1 F, 54.1 F above ambient
 60 s: high side  265 psi, condensing 152.3 F, 59.3 F above ambient
 75 s: high side  277 psi, condensing 155.9 F, 62.9 F above ambient
 90 s: high side  283 psi, condensing 157.7 F, 64.7 F above ambient  compressor switched off

The data says exactly what she expected. The refrigerant is condensing ever further above the outside air because nothing is moving air through the condenser at idle, until the high-side pressure reaches the module's limit. On the highway, ram air does the fan's job, which is why the system "sometimes recovers". The module is protecting the system correctly, and the charge is not the problem; adding refrigerant would only have made the pressure climb faster. The fan is commanded on and not turning, so the fault is in the fan, its power, or its control.

The van's fan is driven by a fan control module mounted on the shroud, powered through a 40 ampere fuse and commanded by the engine control module with a pulse-width modulated signal. Kiran checks the fuse first: it is blown. A blown fuse is a symptom, not a cause; something drew too much current. She turns the fan by hand with the engine off and the key out. It turns, but stiffly, with a rough spot, unlike the free spin of a healthy fan. With a new fuse fitted and a clamp-on ammeter around the fan module's supply, she commands the fan to 100 percent with the scan tool.

# Cooling fan current at full command: compare with the specification (illustrative)
spec_max_a = 28.0             # maximum running current at full speed, from service information
fuse_a = 40
readings = [("first second (starting)", 52.0), ("after 3 s", 41.5), ("after 10 s", 39.8)]
for label, amps in readings:
    note = "over specification" if amps > spec_max_a else "within specification"
    print(f"{label:<24} {amps:5.1f} A: {note}{', near the fuse rating' if amps > 0.9 * fuse_a else ''}")
print("a motor drawing far more than its rating with a rough, stiff shaft has failing bearings: replace the fan and motor assembly")
Output
first second (starting)   52.0 A: over specification, near the fuse rating
after 3 s                 41.5 A: over specification, near the fuse rating
after 10 s                39.8 A: over specification, near the fuse rating
a motor drawing far more than its rating with a rough, stiff shaft has failing bearings: replace the fan and motor assembly

The fan runs, slowly, drawing about 40 amperes against a maximum of 28. Its bearings are failing; the motor struggles, overheats and, on a hot day, draws enough to blow the fuse. The fan control module is not at fault, but Kiran checks its connector and the main ground for heat damage, because a fan drawing that current can burn a connector. Both are clean.

Job one: repair and verification

The repair is a new fan and motor assembly with its shroud, as the parts catalog supplies it, and a new fuse. Because the refrigerant circuit was never opened and the charge was never in doubt, there is no recovery or recharge, which Kiran notes on the repair order so that nobody later wonders whether one was skipped. With the new fan fitted, she repeats the same idle test on the same hot afternoon, then a performance test against the maker's chart.

def sat_temp(p_abs, table):
    for (t1, p1), (t2, p2) in zip(table, table[1:]):
        if p1 <= p_abs <= p2:
            return t1 + (t2 - t1) * (p_abs - p1) / (p2 - p1)
    raise ValueError("outside table")
table = [(14, 32.1), (23, 38.4), (32, 45.8), (41, 54.2), (50, 63.6), (59, 74.2), (68, 85.8), (77, 99.0), (86, 113.5), (95, 129.5), (104, 147.6), (113, 167.2), (122, 188.9), (131, 212.5), (140, 238.1), (149, 265.9), (158, 296.1), (167, 328.7)]
atm = 12.1
ambient = 93
gauge_high, gauge_low = 202, 36
liquid_line, evap_outlet = 117, 48
cond = sat_temp(gauge_high + atm, table)
boil = sat_temp(gauge_low + atm, table)
print(f"high side {gauge_high} psi: condensing {cond:5.1f} F, {cond - ambient:4.1f} F above ambient, subcooling {cond - liquid_line:4.1f} F")
print(f"low side {gauge_low} psi: boiling {boil:4.1f} F, superheat {evap_outlet - boil:4.1f} F")
print("dash vent 46 F at 93 F ambient and 25 % humidity: chart allows 41 to 50 F")
Output
high side 202 psi: condensing 131.6 F, 38.6 F above ambient, subcooling 14.6 F
low side 36 psi: boiling 34.5 F, superheat 13.5 F
dash vent 46 F at 93 F ambient and 25 % humidity: chart allows 41 to 50 F

The high side now settles instead of climbing, the condensing temperature sits a normal margin above the outside air, subcooling and superheat are both normal, and the vent temperature is within the chart. The compressor runs continuously for twenty minutes at idle. Kiran drives the van in traffic for another twenty and confirms that it stays cold.

Job two: the plan

Gord's pickup arrives the next January. Gord's three facts, heat that is barely warm at idle, a gurgling behind the dashboard, and a low coolant warning, point in one direction before any test. Kiran writes her expectation down: coolant is leaking somewhere, the level has fallen, air has entered the system and collected at its highest point, the heater core, and the air pocket blocks flow through the core, worst at idle when the pump turns slowly. Her plan is to confirm the engine reaches normal temperature, measure the heater hose temperatures, find the leak with a pressure test, repair it, refill without air and verify.

The coolant reservoir is below its cold mark. The engine coolant temperature on the scan tool reaches 207 °F in normal time, so the thermostat is working and the engine is warm enough to give good heat. The blend door moves fully to hot, confirmed with the scan tool and by feel, and the blower works on every speed. With the engine warm and the heater on full, she measures the heater hoses at the firewall.

# Heater hoses before the repair: air at the core starves it of coolant (engine warm, full heat, blower high)
engine = 207
for label, inlet, outlet, vent in (("idle", 126, 111, 72), ("2,000 rpm", 158, 142, 104)):
    drop = inlet - outlet
    if inlet < engine - 45:
        verdict = "inlet far below engine temperature: little hot coolant reaching the core (air or low level)"
    elif drop > 27:
        verdict = "restricted core"
    else:
        verdict = "normal"
    print(f"{label:<10} inlet {inlet} F, outlet {outlet} F, vent {vent} F: {verdict}")
Output
idle       inlet 126 F, outlet 111 F, vent 72 F: inlet far below engine temperature: little hot coolant reaching the core (air or low level)
2,000 rpm  inlet 158 F, outlet 142 F, vent 104 F: inlet far below engine temperature: little hot coolant reaching the core (air or low level)

At idle both hoses are only lukewarm, far below the engine's temperature, and the vent air is barely warm: hot coolant is hardly reaching the core. At 2,000 rpm the pump pushes some coolant past the air and the core warms partly, but its inlet is still far below engine temperature. The pattern matches an air pocket, not the restricted core of Lesson 7, where the inlet was hot and the outlet cold.

Job two: finding the leak

With the engine cool, Kiran tops up the reservoir and pressure-tests the cooling system with the hand pump and adapter at the cap's rated pressure. The gauge falls slowly over ten minutes, so there is a leak. She checks the radiator, the hoses, the water pump's weep hole and the heater hose connections with a light and a mirror. At the firewall, the heater core's inlet hose uses a quick-connect fitting, and its O-ring is weeping: there is dried coolant crust around the joint and, with the system under pressure, a drop forms every few seconds. On a cold morning the plastic fitting and its seal shrink, the leak gets worse, and the system pulls in air as it cools overnight. She also tests the cap itself on the adapter; it holds its rated pressure.

Because a slow loss of coolant can also come from inside the engine, she rules that out too: the engine oil shows no sign of coolant, there is no white smoke or sweet smell from the exhaust, and a combustion leak test, a chemical that changes color in the presence of exhaust gas, held over the reservoir with the engine running shows no change. The leak is the quick-connect O-ring.

Job two: repair and verification

The repair is a new O-ring kit for the heater hose quick-connect fittings, both inlet and outlet because they share the same age and design, fitted with the coolant drained below their level. Kiran refills with the maker's specified coolant at the correct mixture for Denver winters, using the shop's vacuum filler so that almost no air remains, then runs the engine to operating temperature with the heater on full and checks for gurgling, the hoses and the level. She repeats the pressure test, which now holds steady for ten minutes, and measures the heater again.

# Heater hoses and output after the repair (engine warm, full heat, blower high, idle)
engine, inlet, outlet, vent, inlet_air = 207, 198, 178, 140, -8
drop = inlet - outlet
print(f"inlet {inlet} F ({engine - inlet} F below engine), outlet {outlet} F, drop {drop} F: flow normal")
print(f"vent {vent} F with {inlet_air} F outside air: a rise of {vent - inlet_air} F")
Output
inlet 198 F (9 F below engine), outlet 178 F, drop 20 F: flow normal
vent 140 F with -8 F outside air: a rise of 148 F

At idle the heater core's inlet is now close to engine temperature, the drop across the core is normal, and the vent air is hot. Kiran asks Gord to watch the coolant level for a week and to call if the warning returns; Simone books a free level check. The warning does not return.

The repair orders

Kiran writes both repair orders in Ridgeline's format: complaint, cause and correction, with the readings that prove each, and the labor and parts. Marty reads them twice. On the van's order, he points out that she recorded that no refrigerant was recovered or charged, and why, which protects the shop. On Gord's, he likes that she recorded the combustion leak test, because it answers the question Gord will be asked at his next service elsewhere.

# Repair order totals (illustrative rates and prices)
rate = 155
jobs = {
    "van 3: diagnose no-cool, replace cooling fan assembly": {"labor_h": 2.1, "parts": 455.0},
    "pickup: diagnose heater, pressure test, heater hose O-rings, vacuum fill": {"labor_h": 1.8, "parts": 104.8},
}
for name, j in jobs.items():
    labor = j["labor_h"] * rate
    parts = j["parts"]
    tax = 0.0915 * parts                   # Denver combined sales tax on parts
    total = labor + parts + tax
    print(f"{name}")
    print(f"  labor {j['labor_h']} h x {rate} = {labor:7.2f}, parts {parts:7.2f}, tax {tax:6.2f}, total {total:8.2f} USD")
Output
van 3: diagnose no-cool, replace cooling fan assembly
  labor 2.1 h x 155 =  325.50, parts  455.00, tax  41.63, total   822.13 USD
pickup: diagnose heater, pressure test, heater hose O-rings, vacuum fill
  labor 1.8 h x 155 =  279.00, parts  104.80, tax   9.59, total   393.39 USD
The two capstone repair orders, written as complaint, cause and correction.
LineComplaintCauseCorrection
Van 3A/C cold briefly, then warm; worse in trafficCooling fan bearings failing; fan drawing about 40 A against 28 A maximum, blowing its 40 A fuse; high side rising to cut-out at idleReplaced fan and motor assembly and fuse; checked connector and ground; no refrigerant recovered or charged; verified pressures, subcooling, superheat and vent temperature against the chart
PickupHeater barely warm at idle, gurgling, low coolant warningHeater hose quick-connect O-ring leaking at the firewall; low level let air collect at the heater coreReplaced both quick-connect O-rings; refilled with specified coolant by vacuum fill; pressure test holds; combustion leak test negative; heater hose drop and vent temperature normal

On her last day of the climate term, Bev asks Kiran the question she asks every apprentice at the end of a term: what would she tell a new apprentice about climate control? Kiran thinks about the summer and the winter: Gord's fluff-packed condenser, Theo's slipping clutch, Harold's contaminated cans and his loose aspirator hose, the Lindqvists' clicking door and blocked rear valve, Marcus's fogged windshield, the vans' plugged heater core and failing fan, Dr. Singh's honest heat pump. "Turn every pressure into a temperature," she says, "and never add refrigerant until you know where it went. Most of the time it didn't go anywhere."

Worked problem

Same symptom, different cause

Another van cools briefly and then blows warm in traffic, like van 3, but its fan runs normally and its condenser is clean. The high side climbs to the cut-out, and subcooling is very high. What might be the cause?

Show solution
  1. High subcooling with high head pressure suggests too much refrigerant in the condenser.
  2. An overcharge, often from a top-up by pressure rather than by weight, fits the pattern.
  3. A restriction downstream of the condenser can also hold liquid back; check for a temperature drop or frost at a component.
  4. Recover and weigh the charge: if it is well over the label, evacuate and charge by weight.

Answer: An overcharge or a high-side restriction; recovering and weighing the charge separates them.

Common mistakes

  • MistakeAdding refrigerant to a system that cuts out on high pressure.

    InsteadFind out why the pressure climbs: airflow, fan, condenser or overcharge.

  • MistakeReplacing a blown fan fuse without finding why it blew.

    InsteadMeasure the fan's current and check its bearings and wiring.

  • MistakeTopping up coolant without finding the leak.

    InsteadPressure-test the cooling system and find the leak.

  • MistakeRefilling a cooling system without removing the air.

    InsteadVacuum-fill or bleed as specified, then verify the heater hose temperatures.

  • MistakeWriting a vague repair order.

    InsteadRecord complaint, cause and correction with the readings that prove them.

Summary and key terms

  • Plan each diagnosis and write down the expected result before testing.
  • Brief cooling followed by warm air in traffic points to high-side pressure reaching the cut-out.
  • Convert pressures to temperatures and compare them with ambient to find heat-rejection problems.
  • A fan commanded on but not turning: check its fuse, current, bearings, power and ground.
  • Lukewarm heater hoses at idle with gurgling point to air in the system from a leak.
  • Pressure-test the cooling system, rule out combustion leaks, repair, vacuum-fill and verify.
  • Record each repair as complaint, cause and correction, including what was not done and why.
High-pressure cut-out
The point at which the module switches the compressor off to protect the system.
Fan control module
An electronic module that drives the cooling fan motor at a commanded speed.
Cooling system pressure test
Pressurizing the cooling system with a hand pump to find leaks.
Combustion leak test
A chemical test that detects exhaust gas in the coolant.
Quick-connect fitting
A push-on hose connection sealed with an O-ring.
Verification
Repeating the original test conditions after a repair to prove the fix.

Practice problems

Work each problem on paper first, then reveal the answer to check.

  1. Why did adding refrigerant not suit van 3?

    Show answer

    The charge was fine; the pressure climbed because the fan was not moving air, and more refrigerant would raise it faster.

  2. Why was the fan's current measured instead of just replacing the fuse?

    Show answer

    A blown fuse shows excess current; the current showed the motor itself was at fault.

  3. What distinguished Gord's air pocket from the restricted core in Lesson 7?

    Show answer

    Both hoses were lukewarm and far below engine temperature, instead of a hot inlet and cold outlet.

  4. Why did Kiran run a combustion leak test?

    Show answer

    To rule out a head gasket leak as the source of the coolant loss and the air.

Lesson quiz · 5 questions

Score 60% or more to complete this lesson.

Take the quiz