DIY CO2 Incubator - Design and Build
Updated: Aug 17, 2021
An example parts list is here. You can find all sorts of similar items for free or cheap if you look hard. I did not buy all of these items, I found most of them. The list is only provided as a reference.
First you need a box of some sort. I found a Styrofoam box in the garbage one that is commonly used to ship stuff to labs. You could also consider using an old cooler/fridge or even buying a Styrofoam box from any hardware store. The box was initially lined with a space blanket I got after finishing a marathon. However, there are easier ways to acquire this material by going to any camping/outdoors/building supply store (get something like radiant thermal insulation). This material is nice because it reflects heat and can be wiped down. It also forms a barrier between the heating pads and the Styrofoam. I also considered cutting up some old cookie tins or air ducts (might still do this at some point). I then sealed any seams with foil tape (the silver foil for ducts, you can get it at any hardware store). This isn’t really “functional” it just makes everything look like its from space which is always worth doing.
I pulled a 12V DC fan (to move air around the incubator) and some heatsinks from an old desktop computer and a dead amplifier. At the top of the box I mounted the fan with screws. A nice bonus was that by mounting the heatsinks on the walls of the box they can do double duty as mounts for shelving. I used kapton tape to attach some cheap flexible heaters to the backside of the heatsinks (so you cant really see the heaters in the pictures). The heatsinks (and heaters) were mounted to the walls with cable ties. Heaters were wired in parallel with 18 AWG wire (this is important because they draw a lot of current and thin wire will not cut it). I also found some scrap metal that was the right size for shelves. Since the shelves are metal, they conduct the heat from the heatsinks very well. Finally, I got myself some 1-wire DS18B20 digital temperature sensors. You can find cheaper temperature sensors but these are nice because they are addressable, can be daisy chained and only use one pin on the Arduino. I chose to attach my sensors to the underside of each shelf in order to measure the temperature as close to the cells as possible.
 Thermal insulation glued to inside of styrofoam box.  12V DC fan from old desktop computer.  Heatsink with unseen flexible heater fixed to the underside (between heat sink and thermal insulation). The heatsink is mounted with cable ties that run through the walls and are tightened from the outside.  Scrap metal shelving.  DS18B20 temperature sensor (1 of 2), fixed to underside of shelf with Kapton tape.  GC-0017 CO2 sensor.
Finally CO2. There is a very common and cheap MG811 CO2 sensor on the market. I bought this without looking closely at the specs and found out it only goes up to 1% (10000ppm). So its not useful for our purposes. After spending a lot of time looking around, I settled on a company in the US (CO2Meter.com). They sell a sensor that works really well with Arduino (G-0017 0-20% SprintIR) for ~$230. This is the most expensive part of the incubator. I was not able to find an equivalent sensor cheaper anywhere else, or reverse engineer this one.
For the CO2 source – I have successfully utilized 60L CO2 tanks from SodaStream. After buying your first tank they are ~$20 to refill. I also considered larger Paintball tanks but never tried them. One might also acquire a large tank from a commercial source, but these can represent a significant safety risk and you should be prepared to take appropriate precautions (lots of instructions can be found online). If you use a SodaStream/Paintball tank you will need an appropriate adaptor to put on an easily acquired 2-stage CO2 regulator. I found an old one lying around in the building I’m working in. I used the regulator to ensure an outlet pressure of ~15kPa. And last but not least, I decided to just use a 12V solenoid to turn on/off the flow of CO2 to the incubator.
I have found my SodaStream tank to last ~1.5 weeks under normal use. From the CO2 canister I ran tubing to a syringe filter, then to the solenoid and finally to a flow meter. From the flow meter I ran more tubing into the incubator at a point as far as possible from the CO2 sensor. You can always give yourself an excess length of tubing to have flexibility for placing the outlet wherever you like inside the box.
 60L SodaStream CO2 Canister.  CO2 Regulator.  12V Solenoid Valve.  Tubing and 0.2um filter.
Flow valve mounted to the side of the incubator. This is used to maintain a slow bleed of CO2 into the box.
Hint: A visit to a local aquarium shop/forum, or a shop/forum for home beer brewing, might be worthwhile. They should have advice on all sorts of CO2 equipment, tubing, regulators and solenoids.
All the wires were passed through a small hole in the back of the box I cut out with a utility knife (keep the piece you cut out in order to fill the hole afterwards!). After passing the wires, I wedged the Styrofoam back into the hole and used the foil tape to seal it up inside/outside the box.
Making the incubator airtight is a good idea. You use much less CO2 and your SodaStream lasts longer. I found that Blue Tak was a great way to seal up small holes (from the outside) in the Styrofoam which were created to run wires, tubing and cable ties. In my setup, I found observed a CO2 consumption of ~0.2L/hr when the door remains closed.
Blu-tak worked really well to plug up small holes in order to make the incubator more air tight.  CO2 into the incubator.  Wiring from sensors, fan and heaters running out to the Arduino control.
In the back of the incubator I placed a small reservoir of water to keep the environment humid in order to minimize evaporation of cell culture media. To prevent condensation you really want to insulate the box as much as possible, especially around any openings (like the door!). I used some velcro in order to to pull the door tight.