Introduction: HRV (Home Air Exchanger) Arduino Controller With Air Economizer

HRV Arduino Controller with Air Economizer

So my history with this project is I live in Minnesota and my circuit board fried on my LifeBreath 155Max HRV. I didn't want to pay the $200 for a new one.

I always wanted something with an air economizer since our springs and falls here are perfect times to take in cool low humidity outside air and condition the house rather than turning on the air conditioner or opening windows. This is where this project fits in.

I wrote up a detailed description of operation for all the modes, setpoint control, etc can be found here "HRV Control Narrative.docx"

All source code, photos, wiring schematics and documentation can be found on my GitHub page.


(1) Arduino ESP32 - Used due to the amount of GPIO required for this project. ESP8266 just wasn't enough GPIO.

(1) 120V to 5V step down power supply - Don't use the cheap power supply PCB's. I went through two other types before I found out that this was the most stable.

(2) DHT 22 temperature sensors - Inside sensor & Outside Remote Sensor. Measure inside and outside temperature and humidity.

(1) 0.96" OLED display for local indication of the mode it is operating and for temp/humidity indication. Be sure you desolder and solder pins so that board is configured for I2C communication. Instructions for SPI and I2C can be found here.

(1) 8-Channel SSR 5 Volt High Level trigger relay board

(1) LM1117 Linear Voltage regulator to power ESP32 at 3.3V

(1) Rotary Encoder KY-040 & Knob used as a push button. Future functionality to include a menu and be able to select modes of operation and control setpoints.

(1) Enclosure to house the OLED display and encloder. Get the large one. Dimensions are 100mmx68mmx50mm.

Step 2: Principal of Operation

The way this HRV is programmed is in 4 modes.

Off - Self explanatory

Continuous- On 20 / Off 40 with variable run times.

High Occupancy - 100% blower speed for a timed off delay setpoint. Imagine thanksgiving dinner with 20 guests.

Air Economizer - When air is cooler and more desirable outside then pull it in to the house. You control the indoor temperature/humidity set points for only when it is safe based on a outdoor/indoor conditions.


Blynk App for iOS is used to control and monitor the status of the HRV.

The arduino writes the temps, humidity and equipment running status to blynk and reads the setpoints and run commands from the blynk server. All you need to do is sign up for an account and get an auth token. There are plenty of tutorials online how to do this.

Once you have your auth token for your project scan this QR code from your phone in the blynk app and it will download the project already configured and ready for your arduino.


Source code can be found here.

Special Libraries you need to install:

Blynk by Volodymyr Shymanskyy (v 0.4.10) -- uses BlynkSimpleEsp32.h for reading and writing data to their iOS app.

Adafruit SSD1306 by AdaFruit Version 1.1.2 -- uses Adafruit_SSD1306.h, SPI.h & Wire.h for the OLED local display

ArduinoOTA by Ivan Grokhotkov and Miguel Ajo version 1.0.0 -- uses ArduinoOTA.h, mDNS.h, WiFiClient.h & WiFiUdp.h for over the air updates.

When uploading code the successful settings i used are as follows:

Board: NodeMCU-32S

Upload Speed: 512000

Flash: 40MHz


1.) Since you are using OTA libraries the serial monitor in the arduino ide will not be supported.

Step 5: Demo

Unplug the HRV power cord so you are not working on it hot. Take plenty of close up photos as a backup while you are removing wires as you will find them useful later.

Keypad remove the keypad and ribbon cable from the exterior of the HRV and throw away.

PCB Disconnect all the ribbon cables to remove the board and throw away.

Auto-transformer has 6 wires. YOU NEED THIS PART. This is controls the speed of the 120 volt blower motor. Low speed is 73 volts and high speed is 120 volts and taps in between. Clip off the connector wasting as minimal amount of wire length as possible. YOU WILL NEED THE LENGTH!!!. Document the colors now or later. You can use a multi-meter later to pin-out the transformer taps to get the voltage for the fan speeds. See my wiring diagram.

Fan Motor has just two leads that will wire to the new SSR board. 120 volt motor.

Solenoid for damper has 3 wires (120 volts - Common, Open, Close). Clip the close to connector and will wire to the new SSR board.

NOTE: If you do not have an auto-transformer type HRV and one of the newer units they use ECM motors then you will need to control the motor differently and my code/wiring will not work for your HRV system.

Step 6: Wiring

The wiring diagram can be found here.

The general principal is I have all the 120v power inside of the HRV and a ribbon cable connecting to the remote OLED display.

HRV enclosure contains the 5v power supply, auto transformer (existing), SSR relay board, fuses and breakout board. I used breakout boards for an easy way to disconnect my ribbon cable in case I needed to service anything.

OLED Enclosure contains the arduino controller, OLED and encoder button.

All of these components, pinouts and how the breakout boards are wired are clearly identified on the wiring diagram.

Step 7: Closing

I hope this helps. It took me 2 years of on/off time to complete this project just finding the time and initiative to do this project. I hope you enjoyed reading this and perhaps inspired to try this.

Things I would have done differently or future improvements.

  • Include a weather API in lieu of the outdoor temperature sensor. Right now it has a sampling period that would not be needed. See control description.
  • Use the blynk bridging functionality and put the inside temperature transmitter inside the house somewhere. Use a ESP-01 over wifi. Ribbon cables were a mess and would have made project simpler. See the Blynk API documentation on Bridging two devices.
  • I wanted to add a menu library to the OLED display. Change setpoints locally and view all the debug information fromm the OLED display. That would have been a time commitment but I still would like to do that some day.
  • Clean up code a bit. A lot of debug lines still exist but are not hurting anything for operation.