BruControl: Brewery control & automation software

Homebrew Talk - Beer, Wine, Mead, & Cider Brewing Discussion Forum

Help Support Homebrew Talk - Beer, Wine, Mead, & Cider Brewing Discussion Forum:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.
Nice tip! I noticed on my amplifiers it reads "431"


Are you recommending to use manipulate the linear offset calibration or the resistance calibration?
Thats what I did with the same pt100 probe tested on all four of my amplifier boards. Its been a while but I recall I have to adjust some and some read correctly, not much but I remember having to use something like 429.5 or 430.5.
I have two different brands of boards. after doing this I plugged in my other probes and if one read out of spec from the others I simply adjusted the offset to correct it so it measured correctly at boiling. I probably did it wrong but its working.
 
Nice tip! I noticed on my amplifiers it reads "431"

431 is just different notation... read it as "43 with 1 zero after it".

430 == 431
4300 == 432 (edit, this value is for a PT1000 I think adafruit has good images)


As for calibrations in BC, you can do linear and/or offset... think of that Y=mX+b equation stuff they said you would never use... m is the linear multiplier, and b is the offset...
 
Last edited:
Will do. I'm looking at the BC EMI schematic. It shows the diode near the relay coil. In my case this is the Salon Board (that controls 24v solenoid valves)....should this be wired close to the coils on salon board?

Speaking of DC 24v circuitry and relays, is it best to switch DC+? Can i jumper all the DC+ on salon board or will I need a distribution block for this?

The diode should be as close to the offending inductor as possible. So if it is a solenoid valve, wire it across its leads or terminals (as close to it as possible). The relay coils are also inductive loads, but pretty much all vendors, including ES, includes diodes on board so you don't need to sweat those.

You can switch 24VDC or ground - at the end of the day both make their way out to the end user (e.g. valve). I would say switch +24V since it will be off when the relay is off.
 
Thankyou for the PM, I got the firmware flashed.

Thankyou. I am able to connect to interface via network, no issues. Still having issues with serial port, it connects and then loses connection over and over..
Replace the USB cord. Make sure you are on Firmware 45c as I think there were some issues with 45 that were fixed in 45c.
 
Feature Request: I have been building my workspace with tons of elements, many that are stacked and using the visibility property to control. It would be nice for any element to have an individual "lock" property that only affects the move hotspot and the grip icon. The workspace lock would work as it does now. I keep moving elements accidentally and once in the proper place , I would like to "lock" the position and size of the Element.
 
Feature Request: I have been building my workspace with tons of elements, many that are stacked and using the visibility property to control. It would be nice for any element to have an individual "lock" property that only affects the move hotspot and the grip icon. The workspace lock would work as it does now. I keep moving elements accidentally and once in the proper place , I would like to "lock" the position and size of the Element.
I could see use for this as well since I have to leave everything unlocked to be able to enable and disable cooling and heating for my fermenters and also to switch between pid and manual duty cycle on my boil kettle... I have messed up placement of things on my touchscreen accidentally many times. In my case the ability to have an "enable/ disable button within the workspace would be nice however I assume there may be a way to write a script for this? At least to alternate between the duty cycle and pid mode for the bk?
 
I could see use for this as well since I have to leave everything unlocked to be able to enable and disable cooling and heating for my fermenters and also to switch between pid and manual duty cycle on my boil kettle... I have messed up placement of things on my touchscreen accidentally many times. In my case the ability to have an "enable/ disable button within the workspace would be nice however I assume there may be a way to write a script for this? At least to alternate between the duty cycle and pid mode for the bk?
I would create an element switch and write a script that reads the switch state and toggles between PID and duty cycle.
 
I would create an element switch and write a script that reads the switch state and toggles between PID and duty cycle.

Couldn't you set the PID to say 250F then just scale your max output?

Dumb question as well, why is there a need for both PWM and Duty Cycle? (my setup is just using standard SSR)
 
Couldn't you set the PID to say 250F then just scale your max output?

Dumb question as well, why is there a need for both PWM and Duty Cycle? (my setup is just using standard SSR)
well I dont know if it can easily be done that way in brucontrol without additional hardware but most of the time a variable ssr is needed.
most pids have to switch from pid to manual mode also. at least any pid ive ever used as well as the ezboil.
 
well I dont know if it can easily be done that way in brucontrol without additional hardware but most of the time a variable ssr is needed.
most pids have to switch from pid to manual mode also. at least any pid ive ever used as well as the ezboil.

All the PIDs I have used for temp control, work and hobby, use duty cycle. PWM seems kind of cool, you could essentially regulate your output wattage.
 
Couldn't you set the PID to say 250F then just scale your max output?

Dumb question as well, why is there a need for both PWM and Duty Cycle? (my setup is just using standard SSR)

The terms 'PWM' and 'Duty Cycle' are fairly similar and interchangable, with a mental image of Duty Cycle just being slower

I have 4-20mA(2-10v) proportional valves that I have both PID and PWM device types created for, since they are the same GPIO, only one can be active at a time, enabling one disables the other, this can be configured to follow a button or a switch in a script, or you can just manually enable one and the other will become disabled.

Somewhat related, I have a similar button action(I used an unwired Digital Output) for switching between a Chiller and a Heat Exchanger named "Cooling Mode":
Digital Output --> Appearance --> Value --> 'Off Text' = HX and 'ON Text' = Chiller
Then the script just checks for:
if "Cooling Mode" State == on

Anyone have a thought on how to make a button 'tri-state'? Off-PWM(manual)-PID(auto) I guess it may be similar to the H-O-A switches in the physical world...
 
All the PIDs I have used for temp control, work and hobby, use duty cycle. PWM seems kind of cool, you could essentially regulate your output wattage.
The terms 'PWM' and 'Duty Cycle' are fairly similar and interchangable, with a mental image of Duty Cycle just being slower

I have 4-20mA(2-10v) proportional valves that I have both PID and PWM device types created for, since they are the same GPIO, only one can be active at a time, enabling one disables the other, this can be configured to follow a button or a switch in a script, or you can just manually enable one and the other will become disabled.

Somewhat related, I have a similar button action(I used an unwired Digital Output) for switching between a Chiller and a Heat Exchanger named "Cooling Mode":
Digital Output --> Appearance --> Value --> 'Off Text' = HX and 'ON Text' = Chiller
Then the script just checks for:
if "Cooling Mode" State == on

Anyone have a thought on how to make a button 'tri-state'? Off-PWM(manual)-PID(auto) I guess it may be similar to the H-O-A switches in the physical world...

Yeah, I figured using a standard SSR you would use a PID output configured for Duty Cycle, as defined in the BruControl Manual. PWM would be for a variable SSR.

Also, an implementation of a 3-Position switch would be great.
 
Yeah, I figured using a standard SSR you would use a PID output configured for Duty Cycle, as defined in the BruControl Manual. PWM would be for a variable SSR.

@BrunDog has put a great description in the v1.1 manual on page 45, it is very clear and concise on the differences between duty cycle and PWM... previous users of things like BCS might be tempted to use PWM on a SSR... because BCS was 10hz or something like that, arduino is 1000hz...
 
@BrunDog has put a great description in the v1.1 manual on page 45, it is very clear and concise on the differences between duty cycle and PWM... previous users of things like BCS might be tempted to use PWM on a SSR... because BCS was 10hz or something like that, arduino is 1000hz...
I just gave that section a re-read! Awesome thank you!
 
Couldn't you set the PID to say 250F then just scale your max output?

Dumb question as well, why is there a need for both PWM and Duty Cycle? (my setup is just using standard SSR)

You can have both PID and a Duty Cycle elements address the same port/pin. Enabling one will disable the other, so you can always switch between the two by enabling the one you want.

As noted PWM is fast and Duty Cycle gives you freedoms of changing the cycle length.
 
Replace the USB cord. Make sure you are on Firmware 45c as I think there were some issues with 45 that were fixed in 45c.
will do thanks

The diode should be as close to the offending inductor as possible. So if it is a solenoid valve, wire it across its leads or terminals (as close to it as possible). The relay coils are also inductive loads, but pretty much all vendors, including ES, includes diodes on board so you don't need to sweat those.

You can switch 24VDC or ground - at the end of the day both make their way out to the end user (e.g. valve). I would say switch +24V since it will be off when the relay is off.
on order and ill wire as you suggest.

Making some headway on panel. Just waiting on my M12 connectors and din mount distribution block (to replace the one at the top of the panel). Ill paint this enclosure black with stainless trim on outside.

The 110v AC in is fused at 6amp and I have a few DIN fuse holders. Should I wire in fuses to any of the boards? Maybe a .5amp on the Mega?

thumbnail_IMG_0020.jpg


thumbnail_IMG_0022.jpg
 
Writing my code!

First real question:

Why does this throw an error?

"gBrewStatus" value += 1
08:06:22.910 [ERROR: '+=' is not a valid operator]

but this does not:

new value gBS
gBS = "gBrewStatus" value
gBS += 1
"gBrewStatus" value = gBS
delete gBS
 
Last edited:
I think the only answer is that's how they wrote the script interpreter. I mentioned earlier similar odd behavior with math for time. It would be nice if all the supported math worked consistently regardless of the types of data (hard coded values, variables, device element values).
Writing my code!

First real question:

Why does this throw an error?

"gBrewStatus" value += 1
08:06:22.910 [ERROR: '+=' is not a valid operator]

but this does not:

new value gBS
gBS = "gBrewStatus" value
gBS += 1
"gBrewStatus" value = gBS
delete gBS
 
So as I start to wire the DC side. I plan to wire the 5V power supply '-' to my incoming neutral GND, and to the GND on the MEGA.

The MEGA is running off USB for the time being, so I assume the Vin pin should be left empty so I don't buck 5V from the PSU to the USB 5V?

Once I switch over to a wifi hat, I just add the 5V wiring from my power supply to the HAT and MEGA?

Is this all correct?
 
Last edited:
That page says "24 VAC/VDC". You're not getting either directly from any Arduino board.
There are 5V piezo buzzers, fwiw. I have a few running directly off Uno and Mega digital IO pins, no problems...

Cheers!
 
That page says "24 VAC/VDC". You're not getting either directly from any Arduino board.
There are 5V piezo buzzers, fwiw. I have a few running directly off Uno and Mega digital IO pins, no problems...

Cheers!

Ah yes, I forgot the mega was 5v! Thanks
 
Can the Mega interface supply ample power for a piezoelectric alarm or will i need a relay?
https://www.automationdirect.com/ad...buzzers_(22.5mm_panel_mount,_80db)/ecx2070-24

As stated, that is not 5 vdc. Regardless:

Use an external 5vdc whenever possible if you have it for any external 5 vdc widget. While it may not take much power, it does take some.

An Alarm Element can give you both a visual and Audio Alarm. In addition, you can have different wav files for your Alarm. I have a piezo alarm but found it to low to hear with pumps and stuff running. In addition, you use one of your Ports to control the piezo alarm. We no longer use piezo alarms. I do have a Rotating Light that has a small piezo in it that we cannot hear. It does get our attention when needed visually. It does need a Port ,an SSR and associated wiring. It is mounted on the ceiling. We use this in addition to an Alarm Element.

https://www.amazon.com/uxcell-Rotat...g+red+led+light+110v+ac&qid=1570109388&sr=8-5

We also have a siren that is on the same 110 circuit, but it has a manual switch so it can be "off" as it is way too loud if you are in the Brewery. We use it when we are cleaning kegs and want to know when it is time to change kegs when we are out of the Brewery doing other things (15 minutes between kegs)

https://www.amazon.com/Industrial-1...?keywords=siren+110v+ac&qid=1570109708&sr=8-1
 
I have several Globals that are string types and am having an issue with one:

"DisplayAllSwitchButton" value = "Fill Vessels"
08:55:59.756 [ERROR: Object reference not set to an instance of an object.]

I have renamed the Global Element. Deleted and created a new one under a different name.

Is there a limit to the number of Globals or something? All of my other Globals work fine.


global instance.png
 
Never :oops::oops::oops::oops::oops:mind! o_O:rolleyes: I had a Switch Element named "Fill Vessels". I renamed that switch and all is fine.


ERROR: Object reference not set to an instance of an object.]


You have tried to set the value of a string to the same as the name of an Element. You cannot set the value of a string to any Element Name.
 
Never :oops::oops::oops::oops::oops:mind! o_O:rolleyes: I had a Switch Element named "Fill Vessels". I renamed that switch and all is fine.


ERROR: Object reference not set to an instance of an object.]


You have tried to set the value of a string to the same as the name of an Element. You cannot set the value of a string to any Element Name.

Ugh I struggled with something similar a few days ago. I actually just started naming similar things with BTN, TMR, SW, etc appended to the end: something like "Fill Vessels SW"

Glad you got it fixed. Time to relax and have a beer!
 
Ugh I struggled with something similar a few days ago. I actually just started naming similar things with BTN, TMR, SW, etc appended to the end: something like "Fill Vessels SW"

Glad you got it fixed. Time to relax and have a beer!
I am not waiting on the Alias names. I just have a very few switches and have a Global that sits on top that I change the value of.

I have an "AllSwitch" switch element and and an "AllSwitchDisplay" global for the label.

Plan All Switch.png
brew script.png
 
So USB or Ethernet? Is there a way to switch from one to the other? I planned on doing USB and keeping my Intel NUC PC close to the panel
 
So USB or Ethernet? Is there a way to switch from one to the other? I planned on doing USB and keeping my Intel NUC PC close to the panel

With a Mega, the Wiring Diagram is different so you cannot.

Feature Request: Choose the Wiring Map Separately from the connection type. On a Mega, there is one Port difference. I would like to be able to connect via USB or Ethernet and just not use Port 10 Serial connection. Either that or give us a choice of Serial No Port 10 in connection type that is serial but uses ethernet map for a Mega. Does not get rid of elements from change from TCP.
 
I have found that with count down timers

wait "Some Timer" value == 00:00:00

does not work. It never exactly hits 00:00:00 internally.

wait "Some Timer" value <= 00:00:00 works fine.
 
Writing my code!

First real question:

Why does this throw an error?

"gBrewStatus" value += 1
08:06:22.910 [ERROR: '+=' is not a valid operator]

but this does not:

new value gBS
gBS = "gBrewStatus" value
gBS += 1
"gBrewStatus" value = gBS
delete gBS

What is "gBrewStatus"? You need to keep everything in context. If you had an object, and you wanted to perform an action to it, they need to match. For example, if your object was "school" and your action was "eat" - this wouldn't work as you can't eat a school. But if your object were "apple", then it would make sense. In this case, this may be a particular element (we don't know what it is because you didn't say) which does not allow math to take place on it.
 
So as I start to wire the DC side. I plan to wire the 5V power supply '-' to my incoming neutral GND, and to the GND on the MEGA.

The MEGA is running off USB for the time being, so I assume the Vin pin should be left empty so I don't buck 5V from the PSU to the USB 5V?

Once I switch over to a wifi hat, I just add the 5V wiring from my power supply to the HAT and MEGA?

Is this all correct?

I suggest you draft and use a schematic enough! There is risk in interpretation when you discuss lines. You can power Vin with a higher voltage than the USB voltage - it will not be backfed. If you mean shield for "hat", the voltage is directly provided to the shield from the interface - no thinking required.
 
That page says "24 VAC/VDC". You're not getting either directly from any Arduino board.
There are 5V piezo buzzers, fwiw. I have a few running directly off Uno and Mega digital IO pins, no problems...

Cheers!

Agreed, so long as the current doesn't exceed the interface pin limit. The Primo (RIP, sigh) had an onboard beeper which we enabled in FW. Oh well!
 
I have several Globals that are string types and am having an issue with one:

"DisplayAllSwitchButton" value = "Fill Vessels"
08:55:59.756 [ERROR: Object reference not set to an instance of an object.]

I have renamed the Global Element. Deleted and created a new one under a different name.

Is there a limit to the number of Globals or something? All of my other Globals work fine.


View attachment 646628

This works fine... you must have another element with this name.

Edit: I didn't see that you caught it a few posts later.
 
Back
Top