This project implements the software component of a wine cellar cooling system.
This system uses a domestic freezer filled with chilled mass (water bottles, or possibly scrap aluminum or heat sinks) as a reservoir of cold; the control system intermittently draws chilled air into the cellar to maintain temperature stability.
About the machinery:
We're using a 3.5 cu ft top-loading chest freezer and the room being cooled is a closet of about 75 cu ft.
The top of the freezer is replaced with 2" insulating board, with two ports in the top, connected by insulated duct to the wine closet.
The freezer will need defrosting from time to time. The plan is to swap the ducts from the freezer to an ice chest (filled with dry ice and heat sinks?) for the day or so that it will take to defrost the freezer.
A possible problem with this approach is that the freezer is frosting up at a remarkable rate. It might need defrosting on a monthly or even more frequent basis! Working on some mitigation strategies: better cellar insulation; baffles to close off the ducting while the fan is off; better seal of the foam freezer lid.
An Arduino reads a DHT22 temperature sensor, turns a fan on/off to maintain temperature, and sends log information to the serial port.
A laptop captures the log information from the Arduino, aggregates it, and records the log information in a Google Sheets spreadsheet.
TO DO: The data in the spreadsheet is summarized and archived periodically by a time-based Apps Script trigger.
The spreadsheet graphs the data as shown below. For each time period (typically 10 minutes), the display shows min/max/average temperatures and the fan duty cycle.
The Arduino code is contained in cellar_handler.ino
The laptop code runs in Python 2.7, and is contained in the following files:
- report_temps.py -- The serial receiving, basic counters, logic, and message formatting code.
- logtemps.py -- Connects to Google Sheets API.
The laptop keeps adding rows to the Google Sheets spreadsheet. To keep the spreadsheet from growing too large, the following Apps Script code does some archiving and cleanup; the code is launched by a time-based trigger set in the Apps Script project.
❏ General code health cleanup.
✔ Google Apps Script periodic trigger to clean up spreadsheet and archive data summaries.
✔ Adaptive goal temperature to relax constraints when fan duty cycle exceeds a defined threshold. (Allow the cellar to warm slightly during heat wave, rather than melt the freezer.)
❏ Provide serial comms from the laptop down to the Arduino to change configurations without re-flashing.
❏ Alert generation and processing. Events include: adapt up, adapt down, door open, door close