Environmental Control Chamber

Overview:

I work at the Nordness Group at Columbia, an Earth and Environmental Engineering lab, and I started working in the summer of 2025. I was tasked with automating humidity and temperature control in the environmental control chamber shown below. The chamber is used for atmospheric water harvesting research where we characterize the absorption and desorption performance of novel hygroscopic materials across different temperature and humidity ranges. I was able to achieve temperature control to within ± 0.5 ℃ at a range of 30 ℃ to 65 ℃, and humidity control to within ± 2% relative humidity (RH) across a range of 20% RH to 70% RH. 


The previous setup used a hot plate at the bottom of the box to heat the box up; this method was slow, and controlling the temperature was very difficult. For humidity control, we connected a pressure regulator to a central air line, stepping the pressure down to 1 bar. Downstream of the regulator is a needle valve, the line then splits into 2 and connects to a bubbler and an air dryer, each of which connects to its own needle valve, flowing dry or humid air into the chamber. Controlling the humidity manually with the needle valves was difficult and required constant watching and tuning while running an experiment.


Experimental Chamber

I used an Arduino Nano for this project. For temperature and humidity sensing, I used two AM2315C temperature and humidity probes mounted in opposing corners in the box; as samples were hung about two inches below the top of the box, the temperature and humidity conditions near the top of the box were the most relevant for experiments, so I elected not to mount extra sensors near the bottom of the box.

Temperature control: 

I mounted two 110 ℃ PTC heaters and two 150 ℃ PTC heaters on opposing walls of the box and connected them in parallel to a solid-state relay, which was connected to a wall outlet. It might have been beneficial to have four of the same type of heater, but the two of each was what I had on hand, and they worked well. From initial testing, I found that it took too long for the box to heat up, and there was a temperature difference of up to 6 ℃ in opposing corners of the setup. To promote greater convection and fix the temperature gradient problem, I mounted two 40 mm fans with custom laser-cut acrylic mounts near the bottom of the box. 


PTC heaters operate in a binary way, so for the control logic, I utilized a time-proportional PID control scheme. A cycle time of 10s was chosen, and the Arduino computed a PID output that corresponded to how long within each cycle time the heaters should be switched on. Additionally, I used dynamic gains, with different sets of gains for the temperature ranges of [30 ℃,45 ℃), [45 ℃, 55 ℃), and [55 ℃, 65 ℃]. After tuning, the controller could reach a steady state within ± 0.5 ℃ for the range of 30 ℃ to 65 ℃. 


Inside the chamber

Here are two graphs showing the performance of the controller at 50°C and 60°C:

Humidity control: 

I used a stepper motor on each of the needle valves on the humid and dry air lines. I 

designed a stand for the motors and an adapter for the shaft to the valve handle in CAD and 3D printed them. I drove the motors at 1A each with A4988 drivers, and microstepped the motors to 3600 steps/revolution. The microstepping gave the advantage of significantly quieter operation alongside the increased resolution (although 3600 steps/revolution was much more than necessary). 

For the control logic, I programmed the PID output to correspond to incremental step changes with a max step increment of 50 every 200 ms, which helped ensure that there was no ‘jerky’ motion in the motors. Initially, I tried to have the PID move both valves synchronously, but found that all I really needed was for the PID output to control how open the humid air line was. For the dry air line, I programmed the motor to move to a fixed position dependent on the humidity setpoint. For lower humidity setpoints (30-40% RH), I opened the dry air line half a revolution and kept it there. For higher humidity setpoints, I had the motors open the line to a quarter of a turn. Having a fixed amount of dry air going in with a variable amount of humid air was more than enough to achieve good steady states. Additionally, I drove the humid air valve to preset positions based on setpoint humidity prior to starting active control.

CAD of motor and valve mount

Early testing

Here is a graph of the humidity controller maintaining a 60% relative humidity in the chamber:

Electronics:

Here is a list of all major electronics components and sensors used:

  • Arduino Nano

  • AM2315C temperature + humidity sensor

  • 1.5A NEMA17 Stepper Motors (I drove them at .8A each)

  • A4988 Stepper motor driver

  • TCA9548A Multiplexer

  • SSD1306 OLED Display

  • DC to AC Solid State Relay

I soldered all the electronics onto a perforated circuit board and mounted it onto a laser-cut acrylic base for a permanent electronics setup. I used a small OLED screen to output current humidity and temperature values.

Here is the electronics schematic of the whole setup: 

Presentation:

I presented this project at the American Institute of Chemical Engineers(AIChE) 2025 Student Conference’s undergraduate poster competition. There, I won 1st place in the Environmental 2 group (they split each category into groups), and 3rd place overall in the Environmental category. Here is the poster I presented!