Inspiration I live right next to Northern Virginia, which hosts about 70% of the world's internet traffic. Everyone always talks about how much electricity data centers use, but nobody ever talks about water.
Cooling towers in data centers literally evaporate millions of gallons of drinking water every single day from our local rivers just to keep AI chips from overheating. When I looked into how existing "green" cloud schedulers work, I realized they only track carbon. They schedule huge AI jobs in the middle of the day because solar power is peaking, but that's also when it's 95°F outside and cooling towers have to chug water like crazy. Over 60% of the time, the cleanest hour for electricity is actually the thirstiest hour for water. I wanted to build something that fixes this disconnect.
What it does WETBULB is a workload scheduler that runs heavy, flexible AI jobs (like model training, fine-tuning, or batch jobs) when the outdoor air is cool and dry enough to cool servers naturally without burning water.
Instead of just checking a standard thermometer, it calculates wet-bulb temperature—which is the temperature air actually cools down to when water evaporates. When the wet-bulb drops below 10°C, data centers can open outside dampers and use 100% free-air cooling with zero evaporative water. WETBULB predicts these windows and balances them against grid carbon so you save water without spiking emissions.
To prove it works in real life, I also built a physical hardware digital twin: an Arduino Uno running a temp/humidity sensor and a cooling fan that reacts live to your breath, paired with a real-time web dashboard over Web Serial.
How we built it Hardware: An Arduino Uno R3 wired to a DHT11 temperature/humidity sensor on pin D7 and a ULN2003 driver running a DC cooling fan on PWM pin D9. Physics: Embedded the Roland Stull psychrometric equation into both the Arduino firmware and the web app to calculate wet-bulb temperature in real time from raw air readings: $$T_{wb} = T \cdot \arctan\left(0.151977 \sqrt{\text{RH} + 8.313659}\right) + \arctan(T + \text{RH}) - \arctan(\text{RH} - 1.676331) + 0.00391838 \cdot \text{RH}^{1.5} \arctan(0.023101 \cdot \text{RH}) - 4.686035$$ Software Dashboard: Built with vanilla HTML, CSS, and JavaScript. It talks directly to the Arduino using the browser's Web Serial API at 115200 baud, featuring a live tachometer, speed slider, and diagnostic screens. Backtesting: Ran the algorithm through 1,016 real days (over 24,000 hours) of Virginia weather and PJM grid emissions data to test the results. Challenges we ran into The motor driver gave me a lot of trouble at first. The ULN2003 chip has about a 1.2V voltage drop, so on a standard 5V USB connection the motor only got around 3.8V and kept stalling whenever I tried to run it at lower speeds. I solved this in the firmware by giving the motor an automated 80ms kick at full voltage to break static friction before settling into the target speed, along with setting a minimum torque floor.
Getting the Web Serial API to stream cleanly without chopping data packets in half also took some work, but writing a simple circular buffer in JavaScript fixed it completely.
Accomplishments that we're proud of 24.3% Water Saved: Over 1,016 real days of historical data, WETBULB cut cooling water consumption by nearly a quarter while still keeping carbon emissions lower than baseline. 190 Million Gallons at Scale: If just 15% of flexible AI workloads in Virginia's 4 GW data center corridor use this scheduling, it saves roughly 190 million gallons of Potomac River water every year with zero new hardware needed. Working Physical Demo: You can breathe on the sensor, watch humidity and wet-bulb jump on the screen, and immediately hear and watch the physical fan spin up to cool it down. What we learned I learned a lot about psychrometrics and how cooling towers actually work—specifically why normal dry-bulb thermometers are misleading, and why wet-bulb temperature is what physically determines cooling limits. I also got great hands-on experience with PWM motor control, transistor voltage drops, and bidirectional serial communication straight from a web browser.
What's next for WETBULB Kubernetes Plugin: Turning the scheduler into a native Kubernetes plugin so DevOps engineers can just add an annotation like wetbulb.io/deadline: 12h to batch AI jobs. Multi-Region Shifting: Routing workloads across different cloud regions (e.g., shifting jobs from Virginia to Ohio or Oregon) when local wet-bulb temperatures are too hot. Direct BMS Control: Hooking the software into commercial cooling tower systems using BACnet/Modbus to automate fan speeds and water valves directly.
Built With
- arduino
- c++
- cleantech
- cloud-computing
- css3
- data-analysis
- dht11
- distributed-systems
- embedded-systems
- energy
- hardware
- html5
- iot
- javascript
- kubernetes
- meteorology
- microcontroller
- open-meteo
- pwm
- python
- sustainability
- svg
- thermodynamics
- web-serial-api
Log in or sign up for Devpost to join the conversation.