Circa early 2018, I was able to stitch together enough Arduino example code to get an ESP32 program that did the following:
- connected to Wi-Fi
- set the time via NTP
- read two DHT22 temperature/humidity sensor
- publish temperature, humidity, and time of the reading over MQTT
- toggle a pin when heat got hotter than a threshold, and again when it got cooler than a threshold
That sounds like it’s in the realm of an incubator. It can’t adjust the humidity itself, but it can at least relay that information. By varying the size of container of water inside the incubator, an operator could theoretically get pretty close to a controlled humidity level experimentally.
This was profoundly exciting for me. I was checking off all sorts of stuff: I started completely confounded, figured out some tiny piece, and repeated:
- I had figured out how to flash a microcontroller
- I’d learned very high level concepts around embedded program design
- I figured out how to get the CURRENT time on a microcontroller
- it’s so much harder than it sounds, and it’s nothing I’ve ever had to do before
- I’d learned about MQTT, Eclipse Mosquitto
- some GPIO stuff was starting to make a little bit of sense, but not really
- I was getting a very rough idea about voltage and current
- is 50mA a lot? Of course not, that’s a tiny amount of current! Oh, from a GPIO pin? Yeah, that’s WAY too much
- I had learned the difference between 3.3V logic and 5V logic, and practically speaking what that means
- a common ground is obvious in retrospect, but not if you don’t know anything!
- I’d also learned how to control a transistor to act as a digital switch
Sensing that I was close to accomplishing my dream of building an incubator, I starting the hardware build. Build 0 was a “Tuff Store” tub. It was < 5$ at Walmart, and I already had it in the house, so it fit the bill.
I literally dangled two DHT22 sensors off their leads and added a light bulb in a socket harvested from a broken flood light. This was attached to an ESP8266 board sitting on top, with a transistor to control a mechanical relay to turn the light bulb on and off.
As you can notice, there’s no real mount for that light bulb socket. Also it looks as though there’s some discoloration on the one side of the socket. This will become relevant shortly.
As far as boxes that are warmer than room temperature goes, this one was absolutely crushing it. The occasional “tick” of the mechanical relay became reassuring background noise that everything was working as intended. Actually… that may be a bit boastful – it was alright. There were a few areas for improvement:
- incandescent light bulbs (the ones that get hot) are hard to come by these days!
- mounting anything to smooth plastic is tough. The options are generally drill permanent holes, use an adhesive that barely works, or use an adhesive that is permanent
- the thin walls provided very little insulation, so heat transferred out of the box pretty readily
That said, it worked. The Arduino program was:
- connect to Wi-Fi
- if it had been long enough, sync the time with NTP
- read the temperature and humidity from the DHT22
- post temperature and humidity to an MQTT broker
- if above a threshold temperature, turn lightbulb off. If below a threshold temperature, turn lightbulb on
It worked pretty much as intended. I didn’t have any way of persisting the readings, so it was hard to profile how it performed, but watching the temperature come in on an MQTT subscriber things looked pretty solid. I gradually let it sit for longer and longer. Being keenly aware of how little I know about electronics, and how shoddily my build was put together, I was cautious to not let it sit completely unattended. This ended up being prudent.
My very rudimentary Arduino program blocked while connecting to Wi-Fi. What I didn’t anticipate was that Wi-Fi wasn’t 100% guaranteed to be accessible all the time. One day, our Wi-Fi went out. The “incubator” had been in a heating state, and the program was effectively stalled because it was waiting for Wi-Fi. This meant the heater (light bulb) stayed on way longer than intended, deformed the really sub-par mount I had rested the light bulb socket on (to keep it away from the side of the container), and melted clear through the side of the plastic tub. This resulted in a bunch of burned plastic, and a light bulb shaped hole in the container.
With that, build 0 ended in catastrophic disaster. The maximum consecutive run time was around 16 hours – far short of the required 21 days. Roughly 6$ down the drain (5$ tub and 1$ light bulb). Lessons learned:
- hobby electronics can turn into a house fire horrifyingly easily
- even though the focus of the project was on the electronics, I couldn’t take for granted that the software would still be significant
- “bad” decisions are okay, as long as they’re deliberate and not made recklessly
- it’s valuable to be honest with yourself about how bad you are at things, so you can mitigate the impact of those things going horrifically wrong