I've figured out how to hook up the thermistor, but what pin are you connecting the flow meter too?
When I'm brewing, after the timeframe is over, I hold temperature while I'm doing an iodine test, if it's complete, I crank the temperature up to 170. I don't mash unattended. Even if the heat goes off, I dont think that too big of a deal because the wort goes in the kettle and is sanitized when boiled. I still havent got my arduino wired up for testing, summer is a busy time of year, but I do have all the parts now.
Error compiling...
RIMS\utility\PID_v1mod.cpp.o: In function `PID::Compute()':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:53: multiple definition of `PID::Compute()'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:47: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID::SetTunings(double, double, double)':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:88: multiple definition of `PID::SetTunings(double, double, double)'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:83: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID::SetSampleTime(int)':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:110: multiple definition of `PID::SetSampleTime(int)'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:105: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID::SetOutputLimits(double, double)':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:135: multiple definition of `PID::SetOutputLimits(double, double)'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:125: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID::SetMode(int)':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:156: multiple definition of `PID::SetMode(int)'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:146: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID::Initialize()':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:170: multiple definition of `PID::Initialize()'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:160: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID::SetControllerDirection(int)':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:184: multiple definition of `PID::SetControllerDirection(int)'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:174: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID::GetKp()':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:200: multiple definition of `PID::GetKp()'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:190: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID::GetKi()':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:201: multiple definition of `PID::GetKi()'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:191: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID::GetKd()':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:202: multiple definition of `PID::GetKd()'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:192: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID::GetMode()':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:203: multiple definition of `PID::GetMode()'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:193: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID::GetDirection()':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:204: multiple definition of `PID::GetDirection()'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:194: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:21: multiple definition of `PID:ID(double*, double*, double*, double, double, double, int)'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:21: first defined here
RIMS\utility\PID_v1mod.cpp.o: In function `PID':
C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1mod.cpp:21: multiple definition of `PID:ID(double*, double*, double*, double, double, double, int)'
RIMS\utility\PID_v1.cpp.o:C:\Program Files (x86)\Arduino\libraries\RIMS\utility/PID_v1.cpp:21: first defined here
Thanks for posting your code, I am working on my own arduino controlled RIMs setup and this has been an excellent resource. I have a few questions after I read through the code.
1) You ask for the mash water volume but that doesn't appear to be taken into any of the calculations. Is this correct or am I missing it?
2) Did you determine the PID coefficients experimentally? Or was there a process you used?
3) You never ask for the water heater element wattage. Isn't this required? It seems like the PID equation should be based on the total energy in x liters of water at y temperature and then you use the element to add energy at a certain rate.
I am an electrical engineer but I did not take a controls class so maybe there is a gap in my understanding here. I will continue to do more research but I thought you might be able to help point me in the right direction.
Do you remember what coefficients you got for your setup?
I have my rims tube working and I am doing some test runs with water. I based my arduino code off of your library and I am attempting to tune using the Ziegler-Nichols method. From what I am seeing I need a Kp in the 100s maybe even 1000s range in order to get to temperature within a reasonable amount of time. Most of the examples I see have tuning values in the 1s range so this looks odd to me. I think the cause for the higher coefficients is that the output of the PID is based on the relay refresh rate (0-5000) so maybe it is acceptable in this case. I just want to make sure I am on the right order of magnitude here or maybe this method of tuning isn't appropriate for this system.
// myRims.setTuningPID(Kc,Ki
// Kd,Tf,
// BatchVol);
// ======= Batch 10L ========
myRims.setTuningPID(3210.9,7.8,
-61903.2,19.8,
10);
// ======= Batch 15L =======
myRims.setTuningPID(1776.6,5.6,
-126240.3,71.7,
15);
// ======= Batch 20L ========
myRims.setTuningPID(1977.0,5.4,
-161641.9,82.4,
20);
// ======= Batch 25L ========
myRims.setTuningPID(1965.2,8.2,
-178142.8,91.3,
25);
can you post a picture of your set up?
I keep getting this error?
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
In file included from identRimsBasic.ino:1:
C:\Users\*****\Documents\Arduino\libraries\utility/PID_v1mod.h:76: error: 'boolean' does not name a type
I know this is a dumb question but I am very new to the Arduino programing game I have all the parts listed he running your examples my question is what pins do I connect my SSR and temp probe to? Thanks for any help in advance.
Rims myRims(uiRims,[B]analogPinTherm[/B],[B]ssrPin[/B],currentTemp,ssrControl,settedTemp );
Rims myRims(&myUI,1,2,¤tTemp,&ssrControl,&settedTemp);
#include "SPI.h"
#include "LiquidCrystal.h"
#include "Rims.h"
double currentTemp, ssrControl, settedTemp;
LiquidCrystal lcd(8,9,4,5,6,7);
UIRims myUI(&lcd,0,10,A2);
Rims myRims(&myUI,1,2,¤tTemp,&ssrControl,&settedTemp);
void setup() {
Serial.begin(115200);
float steinhartCoefs3[4] = {
0.000589069548362047 , 0.000290548864959669 ,
-0.00000689275259178226 , 0.000000327407829856038
};
myRims.setThermistor(steinhartCoefs3,10000.0);
//// ======= Batch 10L ========
// IDENTIFICATION 27 juillet 2013
//myRims.setTuningPID(3210.92876199084,7.81175564705165,
// -61903.235901029,19.802399,
// 10);
// ======= Batch 15L =======
// IDENTIFICATION 27 juillet 2013
myRims.setTuningPID(1776.59319370528,5.59579138695867,
-126240.344468662,71.669624,
15);
// ======= Batch 20L ========
// IDENTIFICATION 27 juillet 2013
myRims.setTuningPID(1977.01174903309,5.41411153663579,
-161641.862192303,82.372805,
20);
// ======= Batch 25L ========
// IDENTIFICATION 27 juillet 2013
myRims.setTuningPID(1965.19601947099,8.15669081962428,
-178142.782628963,91.337376,
25);
// ======= Batch 50L ========
// IDENTIFICATION 13 juillet 2014
//// Th = 120 secondes
myRims.setTuningPID(1298.87128704241, 26.9755895844458,
-86808.4120791142,66.833729365733802,
50);
myRims.setPinLED(A3);
myRims.setHeaterPowerDetect(A4);
myRims.setInterruptFlow(1,6.0,8.0,100.0,true); pinMode(3,INPUT_PULLUP);
myRims.setMemCSPin(A5);
myRims.checkMemAccessMode();
}
void loop() {
myRims.run();
}
Enter your email address to join: