mr_wibble
Beer Odd
G'day,
Finally finished my brewing controller.
It's designed to drive my HLT and HERMS-HX mash-tun.
There are many like it, but this one is mine.
It's based around an Arduino Nano. I wanted to push the nano as far as it would go.
I couldn't quite get the kitchen sink in there, but it does everything on my list.
I like programming on the Arduino nano, because they're cheap, small, and I get a bit of a nostalgic joy - it's not a whole lot different to our old 32k Microbee that I used when I was a kid. Actually the killer-feature is those bloody screw-terminal boards - makes it so easy to attach sensors and daughter-boards.
So the main criteria were:
- Set and keep the HLT temperature (PID controlled)
- Set and maintain the mash heat-exchange temperature (PID controlled)
- Allow easy setting of HLT & mash temperatures
- Allow calibration of sensors
- Allow for a real-time delayed start of HLT heating (well, the whole system)
- Allow for the HLT and Mash to run independently
- A simple to use User Interface (UI/GUI).
The whole thing is housed in a splash-proof box (which was IP66 rated until I drilled a hole for the knob, and added audio-plug sockets for the temperature sensors).
I did have to make some compromises. I wanted some nice sockets on the bottom instead of those short leads. But the HLT heater is 20A, and 20A sockets do not come in a wide range. Maybe someone in the trade would know of something, but I don't. The short-leads are a cost effective solution. Much cheaper than a 20A HPM socket.
The Arduino libraries I used take up quite a bit of space, literally 99.7% of the Arduino is full.
Using a rotary-encoder as the only user input device works well. Clicking (push down) or turning the knob is enough for all input.
To change a value, the user rotates the knob to select the input field, clicks to go into edit-mode, rotates the knob until the desired value, then clicks a last time to go back.
I did (perhaps still do) have problems with the DS18B20 temperature sensors "locking" to the same reading. The symptoms of this is that the sensors never reports a new reading is ready, constantly reporting (say) 35.6C, meanwhile the PID using the value to heat your water way past the set-point. I read to fix this a 0.1uF capacitor right near the sensor helps, but my sensors are sealed in s.steel housings on a 3m cable. So I had to settle with a capacitor at their attachment points. Also watching for the lack of a sensor result, and re-requesting seems to fix it.
I wanted to add a little bluetooth module. This would allow the arduino to continually broadcast all the vital statistics (set temps, actual temps, mash-schedule, start-time, etc. etc.). Any sort of logging and monitoring app could read this data, and do what it wants - like plot temp Vs time graphs. But it's at the point where the additional 1.5k of RAM needed for the serial library is just too much. I had already re-factored the code several times to reduce it's memory footprint. I had to give up on this feature.
(I'll add some GUI photos in the next post)
Finally finished my brewing controller.
It's designed to drive my HLT and HERMS-HX mash-tun.
There are many like it, but this one is mine.
It's based around an Arduino Nano. I wanted to push the nano as far as it would go.
I couldn't quite get the kitchen sink in there, but it does everything on my list.
I like programming on the Arduino nano, because they're cheap, small, and I get a bit of a nostalgic joy - it's not a whole lot different to our old 32k Microbee that I used when I was a kid. Actually the killer-feature is those bloody screw-terminal boards - makes it so easy to attach sensors and daughter-boards.
So the main criteria were:
- Set and keep the HLT temperature (PID controlled)
- Set and maintain the mash heat-exchange temperature (PID controlled)
- Allow easy setting of HLT & mash temperatures
- Allow calibration of sensors
- Allow for a real-time delayed start of HLT heating (well, the whole system)
- Allow for the HLT and Mash to run independently
- A simple to use User Interface (UI/GUI).
The whole thing is housed in a splash-proof box (which was IP66 rated until I drilled a hole for the knob, and added audio-plug sockets for the temperature sensors).
I did have to make some compromises. I wanted some nice sockets on the bottom instead of those short leads. But the HLT heater is 20A, and 20A sockets do not come in a wide range. Maybe someone in the trade would know of something, but I don't. The short-leads are a cost effective solution. Much cheaper than a 20A HPM socket.
The Arduino libraries I used take up quite a bit of space, literally 99.7% of the Arduino is full.
Using a rotary-encoder as the only user input device works well. Clicking (push down) or turning the knob is enough for all input.
To change a value, the user rotates the knob to select the input field, clicks to go into edit-mode, rotates the knob until the desired value, then clicks a last time to go back.
I did (perhaps still do) have problems with the DS18B20 temperature sensors "locking" to the same reading. The symptoms of this is that the sensors never reports a new reading is ready, constantly reporting (say) 35.6C, meanwhile the PID using the value to heat your water way past the set-point. I read to fix this a 0.1uF capacitor right near the sensor helps, but my sensors are sealed in s.steel housings on a 3m cable. So I had to settle with a capacitor at their attachment points. Also watching for the lack of a sensor result, and re-requesting seems to fix it.
I wanted to add a little bluetooth module. This would allow the arduino to continually broadcast all the vital statistics (set temps, actual temps, mash-schedule, start-time, etc. etc.). Any sort of logging and monitoring app could read this data, and do what it wants - like plot temp Vs time graphs. But it's at the point where the additional 1.5k of RAM needed for the serial library is just too much. I had already re-factored the code several times to reduce it's memory footprint. I had to give up on this feature.
(I'll add some GUI photos in the next post)