• Please visit and share your knowledge at our sister communities:
  • If you have not, please join our official Homebrewing Facebook Group!

    Homebrewing Facebook Group

HOWTO - Make a BrewPi Fermentation Controller For Cheap

Homebrew Talk

Help Support Homebrew Talk:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.
Status
Not open for further replies.
I'd need to see the graphs both zoomed out and or zoomed in if the graph is really long(7+days) and squished together to get any idea's.

The only thing that comes to mind is your chamber probe is at the top of your chamber. Heat rises, so it will artifically see slightly higher temps than there really are. Try bringing it to the bottom
 
The beer probe is pressed against the fermenter using a sponge (2), the chamber probe is taped to the wall on the right (you can just see its tip next to the '1'). The heater fan is on the right side of the box, pushing air out of the black vent on the top left of the box.

You really can't have enough insulation for the beer probe if your going to attach it to the side of the vessel.
I'd give a bigger piece of insulation a try. I would also try to get the probe away from the wall a bit. Hanging in free air, rather than taped to the side. The walls of the chamber are going to change temp a lot slower than the air within the chamber. The air is really what you want to be measuring with the chamber probe. It's tight in there, but that may help.

Edited to add: I would try hanging the probe from the temperature control knob so that it doesn't touch any thing. This way it is mid-chamber and not touching anything but open air.
 
I'd suggest either a smaller heater or a larger chamber/smaller fermenter. I feel like all your effectively doing is heating up one bottom corner of your pot. it would work much better to remove the heater from the box and just have the fan in a place where it can just move air. not just hot air, all the air, all the time. Hot air will rise naturally. and since your beer probe and your fridge probe are both located on the exterior of the vessel, you most likely see both rise pretty close to one another. it's not necessary to put the beer probe in a thermowell, but you might just find that it helps.
 
Still, a grab of the BrewPi temperature graph with all channels enabled and showing enough-but-not-too-much could be helpful...

Cheers!
 
Thanks for your replies!

I can assure you the heater does a nice job heating the entire chamber, not just the bottom of the fermenter. Also the beer probe does not seem to be affected that much by the chamber temp (it's metal on metal underneath the sponge). The only downside of this setup (compared to say a lightbulb), and probably contributing to my problem, is that the tube does not cool down rapidly when turned off (it gets to about 90ºF). The fan shuts off when the heater is turned off.

As I said, when only cooling it works fine, it cools until it reaches the set temp and then keeps it constant with small corrections, even in summer when it's hot. The temps are accurate (I checked this), the only problem is that the system can't determine when to shut off the heater so I guess this is something that can be remedied by tweaking the settings.

My graph:
Screen_Shot_2017_02_09_at_09_09_40.png
 
The idea of lowering the fridge sensor, is so it is closer to the heat source and will therefore heat up sooner than it currently is, doing so, it will turn off sooner and will prevent the over shoot (to some degree). Also being lower in the fridge the air temp will drop faster triggering the heater, thus preventing the undershoot.

End of the day it looks like your swinging 0.6°C which is around 1°f this is the only product that will get you closer than what you have now but your going to have to do some trial and error with those sensors. And Know you will hit a wall where you wont get improvement until your beer sensor is in a thermowel, your fermenter is plastic and an insulator to some extent between the beer and sensor.

ED punctuation and clarity
 
I think this was mentioned, but I had some similar issues to this and the solution was insulating the beer probe, getting the fridge probe in free air, and positioning a fan. The fan may have to be fiddled with but you want to make sure you have a good circulation and no dead spots. I had a sensor in a corner and that was a dead spot so the temp swings were pretty pronounced.
 
...Also the beer probe does not seem to be affected that much by the chamber temp (it's metal on metal underneath the sponge).

I would argue that the Beer temp fluctuates up and down quite a bit in line with the temperature of the chamber. I still think you need additional insulation from the chamber temp.

In my setup, I use a thermowell in the beer. If my chamber temp increases 5°f, the beer temp increases by less than 0.1°f

...The fan shuts off when the heater is turned off.

In order to maintain more consistent temps throughout and to eliminate the tube heater from creating a hotspot, I would run the fan continously.

the only problem is that the system can't determine when to shut off the heater so I guess this is something that can be remedied by tweaking the setting.

I think that your setup needs to be tweaked, rather than the PID settings.

Also, I still think that you should move the chamber temp probe so that it hangs in open air. Having it taped to the side wall is going to create a lag in the PID peak detection, and mess with the predictive values.

If you want to get a handle on the temp control, I would at least try some of the recommendations from everyone before dismissing them and assuming that it's the settings that need tweaked.
 
Hey everyone, got my BrewPi set up, fermenter is bubbling away happily. I had a look at the graph and noticed some very strange readings - anyone know what the cause is/ if it's a cause for concern?

Cheers

Screen Shot 2017-02-10 at 00.34.20.png
 
Hey everyone, got my BrewPi set up, fermenter is bubbling away happily. I had a look at the graph and noticed some very strange readings - anyone know what the cause is/ if it's a cause for concern?

Cheers
Looks like the time changed on the Pi while it was running.
 
I am getting my parts together for a project box and I want to be able to disconnect the sensors for a clean look. When I use RJ12 panel mounts to get out of the box for the one wire sensors, I just have to ensure that each plug (RJ11) is wired the same on each side so the panel mount "connects" the break in the wire correct?

Thanks and I am sure the question is noob in nature but want to ensure I am not missing something obvious. It always seems when a novice sees something as obvious it is actually wrong.

Jeff
 
I am getting my parts together for a project box and I want to be able to disconnect the sensors for a clean look. When I use RJ12 panel mounts to get out of the box for the one wire sensors, I just have to ensure that each plug (RJ11) is wired the same on each side so the panel mount "connects" the break in the wire correct?

I think I understand your question and I think you've got it wrong. I think what you're saying is that you'd wire the two RJ11 jacks so that they are a mirror image of each other, so when you place them together, face to face, the pins all line up with the same corresponding wire. That would be wrong. The connector crosses the wires internally.

Just wire up the RJ11 jacks both the same way and plug them in to either side of your panel connector.
 
  • Like
Reactions: JDL
Thanks for your replies!

I can assure you the heater does a nice job heating the entire chamber, not just the bottom of the fermenter. Also the beer probe does not seem to be affected that much by the chamber temp (it's metal on metal underneath the sponge). The only downside of this setup (compared to say a lightbulb), and probably contributing to my problem, is that the tube does not cool down rapidly when turned off (it gets to about 90ºF). The fan shuts off when the heater is turned off.

As I said, when only cooling it works fine, it cools until it reaches the set temp and then keeps it constant with small corrections, even in summer when it's hot. The temps are accurate (I checked this), the only problem is that the system can't determine when to shut off the heater so I guess this is something that can be remedied by tweaking the settings.

My graph:
Screen_Shot_2017_02_09_at_09_09_40.png

I can say with very high confidence that your problem is the time lag between the Fridge Setting and Fridge Temp. That lag leads to an instability in the system. As others have already said, the fridge/chamber temp needs to be decoupled from the chamber wall. Also notice how the lag on the leading/heating edge is larger than for the trailing/cooling edge. Once that chamber probe responds more quickly, then your system response will be much improved.
 
I think I understand your question and I think you've got it wrong. I think what you're saying is that you'd wire the two RJ11 jacks so that they are a mirror image of each other, so when you place them together, face to face, the pins all line up with the same corresponding wire. That would be wrong. The connector crosses the wires internally.

Just wire up the RJ11 jacks both the same way and plug them in to either side of your panel connector.

Yet it seems so obvious now that you say it...this is why I determined to ask the question and use the forums great wealth of knowledge.

Thanks again,
Jeff
 
We should have an audiobook of the last 4 years of this forum thread commissioned… that way we could just forward that to all the newcomers so they don't have to read every last page…
 
Sorry but i have tried searching and i know this is going to be a stupid question for someone that is familiar with arduino...

I downloaded the hex and the source code, I can find the appropriate file to edit in the source code folder. But how do i compile that whole folder back into a hex file to load back onto the arduino.

Again sorry for the newb arduino question but my google fu has failed me tonight.

It is in the top of the \app\controller\TempControl.h file, from line 33 and onwards. As you can see, I have modified my cooling constants and set the switch time between heating to 0 seconds. I have not changed my heating constants, because they do not matter to me, as I don't have a heating solution for my conical (I rely on my rooms temperature to do the magic).

Code:
// Set minimum off time to prevent short cycling the compressor in seconds
const uint16_t MIN_COOL_OFF_TIME = 5;
// Use a minimum off time for the heater as well, so it heats in cycles, not lots of short bursts
const uint16_t MIN_HEAT_OFF_TIME = 300;
// Minimum on time for the cooler.
const uint16_t MIN_COOL_ON_TIME = 5;
// Minimum on time for the heater.
const uint16_t MIN_HEAT_ON_TIME = 180;
// Use a large minimum off time in fridge constant mode. No need for very fast cycling.
const uint16_t MIN_COOL_OFF_TIME_FRIDGE_CONSTANT = 5;
// Set a minimum off time between switching between heating and cooling
const uint16_t MIN_SWITCH_TIME = 0;
// Time allowed for peak detection
const uint16_t COOL_PEAK_DETECT_TIME = 1800;
const uint16_t HEAT_PEAK_DETECT_TIME = 900;

I also modified the source code to allow running beer profile mode without the typical beer in carboy in fridge setup. I am currently running beer profile mode with my conical and it seems to be working very well, significantly better than fridge constant mode with long minimum on and off times.
 
After i posted this i went to the brewpi community and found that out haha. Unfortunately even right out of the repository it wont compile as there is an error and warning. I posted over there so hopefully it can get sorted out.

I have a radiator setup with ice water (DIY Glycol on the way) and a PTC heater for heating and im surprised how fast that pc radiator takes the heat down in the chamber even with it just being ice water.
 
It sounds similar to a Son of Fermentation Chiller, which uses frozen bottles of water in a small chamber with a PC fan to cycle air from the main chamber to cool it.
 
After i posted this i went to the brewpi community and found that out haha. Unfortunately even right out of the repository it wont compile as there is an error and warning. I posted over there so hopefully it can get sorted out.

I have a radiator setup with ice water (DIY Glycol on the way) and a PTC heater for heating and im surprised how fast that pc radiator takes the heat down in the chamber even with it just being ice water.


Iirc you have to remove some line in the post processor settings. don't remember much more than that
 
Yep that was it, In the properties area you have to remove the command in the window. Documented in the BrewPi community. It fixed it for the heating but i need to up the max overshoot number for the cooling side to get it to eep the fridge where it needs to be without overshooting. There is alot of thermal mass in the radiator that seems to trip it up, but its probably similar to someone running a jacketed conical where once you cool the jacket down there is alot of carry over.

I have the first beer in the chamber as i have no doubts about it holding temp but after its done i would like to get rid off the cooling overshoot that needs a heat cycle, just more tuning.
 
Okay, I've spent the better part of the last two hours trying to figure out WTF is wrong with my PHP code for the LCD.php when using multiple chambers... I keep getting Internal Server 500 Errors and the log says

PHP Parse error: syntax error, unexpected '<' in /var/www/chamber1/lcd.php on line 59.

Code:
<?php
/* Copyright 2012 BrewPi/Elco Jacobs.
* This file is part of BrewPi.
* BrewPi is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* BrewPi is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with BrewPi.  If not, see <http://www.gnu.org/licenses/>.
*/ 

//load default settings from file
$defaultSettings = file_get_contents('defaultSettings.json');
if($defaultSettings == false){
	die("Cannot open default settings file: defaultSettings.json");
}
$settingsArray = json_decode(prepareJSON($defaultSettings), true);
if(is_null($settingsArray)){
	die("Cannot decode defaultSettings.json");
}
// overwrite default settings with user settings
if(file_exists('userSettings.json'))

	{
	$userSettings = file_get_contents('userSettings.json');
	if($userSettings == false){
		die("Error opening settings file userSettings.json");
	}
	$userSettingsArray = json_decode(prepareJSON($userSettings), true);
	if(is_null($settingsArray)){
		die("Cannot decode userSettings.json");
	}
	foreach ($userSettingsArray as $key => $value)

	{
		$settingsArray[$key] = $userSettingsArray[$key];
	}
}

$beerName = $settingsArray["beerName"];
$tempFormat = $settingsArray["tempFormat"];
$profileName = $settingsArray["profileName"];
$dateTimeFormat = $settingsArray["dateTimeFormat"];
$dateTimeFormatDisplay = $settingsArray["dateTimeFormatDisplay"];

function prepareJSON($input) 

{
    //This will convert ASCII/ISO-8859-1 to UTF-8.
    //Be careful with the third parameter (encoding detect list), because
    //if set wrong, some input encodings will get garbled (including UTF-8!)
    $input = mb_convert_encoding($input, 'UTF-8', 'ASCII,UTF-8,ISO-8859-1');

//Remove UTF-8 BOM if present, json_decode() does not like it.
    if(substr($input, 0, 3) == pack("CCC", 0xEF, 0xBB, 0xBF)) $input = substr($input, 3);</p><p>    return $input;
}

?>
<!DOCTYPE html >
<html>
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<title>BrewPi reporting for duty!</title>
		<link type="text/css" href="css/redmond/jquery-ui-1.10.3.custom.css" rel="stylesheet" />
		<link type="text/css" href="css/style.css" rel="stylesheet"/>
		<link rel="apple-touch-icon" href="touch-icon-iphone.png">
        <link rel="apple-touch-icon" sizes="76x76" href="touch-icon-ipad.png&quoquot;>
        <link rel="apple-touch-icon" sizes="120x120" href="touch-icon-iphone-retina.png">
        <link rel="apple-touch-icon" sizes="152x152" href="touch-icon-ipad-retina.png">
        <meta name="apple-mobile-web-app-title" content="BrewPi">
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <link rel="apple-touch-startup-image" href="splash.png" />
	</head>
	<body>
		
		<div id="lcd" class="lcddisplay"><span class="lcd-text">
		<span class="lcd-line" id="lcd-line-0">Live LCD waiting</span>
		<span class="lcd-line" id="lcd-line-1">for update from</span>
		<span class="lcd-line" id="lcd-line-2">script...</span>
		<span class="lcd-line" id="lcd-line-3"></span></p><p>		

</div>
		<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
		<script type="text/javascript" src="js/jquery-ui-1.10.3.custom.min.js"></script>
		<script type="text/javascript" src="js/jquery-ui-timepicker-addon.js"></script>
		<script type="text/javascript" src="js/spin.js"></script>
		<script type="text/javascript" src="js/dygraph-combined.js"></script>
		<script type="text/javascript">
			// pass parameters to JavaScript
			window.tempFormat = <?php echo "'$tempFormat'" ?>;
			window.beerName = <?php echo "\"$beerName\""?>;
			window.profileName = <?php echo "\"$profileName\""?>;
			window.dateTimeFormat = <?php echo "\"$dateTimeFormat\""?>;
			window.dateTimeFormatDisplay = <?php echo "\"$dateTimeFormatDisplay\""?>;
		</script>
		<script type="text/javascript" src="js/main.js"></script>
		<script type="text/javascript" src="js/device-config.js"></script>
		<script type="text/javascript" src="js/control-panel.js"></script>
		<script type="text/javascript" src="js/maintenance-panel.js"></script>
		<script type="text/javascript" src="js/beer-chart.js"></script>
		<script type="text/javascript" src="js/profile-table.js"></script>
		
	</body>
</html>

Any ideas??? It seems that it hates the closing php tag for some reason, but I really don't know how to resolve this.
 
Okay, I've spent the better part of the last two hours trying to figure out WTF is wrong with my PHP code for the LCD.php when using multiple chambers... I keep getting Internal Server 500 Errors and the log says

PHP Parse error: syntax error, unexpected '<' in /var/www/chamber1/lcd.php on line 59.
How did you get the files?

This is not correct PHP syntax.
Code:
 if(substr($input, 0, 3) == pack("CCC", 0xEF, 0xBB, 0xBF)) $input = substr($input, 3);</p><p>    return $input;
 
Copied directly from this thread! This gives me something to look at though... thanks.

Edit... hmm... not so fast... don't know how those paragraph tags got in there. They are not in my files :(

Edit.. edit... upon further review those tags WERE in my files... no idea how they got there but removing them resolved the issue. Thanks a bunch... it helps to have a second set of eyes spot the obvious error!!!
 
For people with chest freezers, what are you setting your minimum temp to? I am using the default 33.8. Do you set yours any lower than that?
 
Status
Not open for further replies.
Back
Top