|
153 | 153 | </div>
|
154 | 154 | </div>
|
155 | 155 | <div class = "header ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
|
156 |
| - <span class='container-title'>Peak detection for predictive ON/OFF control</span> |
| 156 | + <span class='container-title'>Predictive ON/OFF and peak detection</span> |
157 | 157 | <button class="cs update-from-arduino">Update control settings</button>
|
158 | 158 | <button class="cv update-from-arduino">Update control variables</button>
|
159 | 159 | <button class="cc update-from-arduino">Update control constants</button>
|
|
243 | 243 | <button class="send-button">Send to Arduino</button>
|
244 | 244 | </div>
|
245 | 245 | <div class="setting-container">
|
246 |
| - <span class="setting-name">Temperature setting minimum</span><input type="text" name="tempSetMin" class="cc tempSetMin"> |
| 246 | + <span class="setting-name">Temperature setting minimum</span> |
247 | 247 | <span class="explanation">The fridge and beer temperatures cannot go below this value.</span>
|
| 248 | + <input type="text" name="tempSetMin" class="cc tempSetMin"> |
248 | 249 | <button class="send-button">Send to Arduino</button>
|
249 | 250 | </div>
|
250 | 251 | <div class="setting-container">
|
251 |
| - <span class="setting-name">Temperature setting maximum</span><input type="text" name="tempSetMax" class="cc tempSetMax"> |
| 252 | + <span class="setting-name">Temperature setting maximum</span> |
252 | 253 | <span class="explanation">The fridge and beer temperatures cannot go above this value.</span>
|
| 254 | + <input type="text" name="tempSetMax" class="cc tempSetMax"> |
253 | 255 | <button class="send-button">Send to Arduino</button>
|
254 | 256 | </div>
|
255 | 257 | <span class="section-explanation">The fridge temperature is controlled with PID. The fridge setting = beer setting + PID.
|
|
258 | 260 | The derivative part is in the opposite direction to the proportional part. This prevents overshoot: it lowers the PID value when there's 'momentum' in the right direction.
|
259 | 261 | </span>
|
260 | 262 | <div class="setting-container">
|
261 |
| - <span class="setting-name">PID: Kp</span><input type="text" name="Kp" class="cc Kp"> |
| 263 | + <span class="setting-name">PID: Kp</span> |
262 | 264 | <span class="explanation">The beer temperature error is multiplied by Kp to give the proportional part of the PID value.</span>
|
| 265 | + <input type="text" name="Kp" class="cc Kp"> |
263 | 266 | <button class="send-button">Send to Arduino</button>
|
264 | 267 | </div>
|
265 | 268 | <div class="setting-container">
|
266 |
| - <span class="setting-name">PID: Ki</span><input type="text" name="Ki" class="cc Ki"> |
| 269 | + <span class="setting-name">PID: Ki</span> |
267 | 270 | <span class="explanation">When the integral is active, the error is added to the integral every 30 seconds. The result is multiplied by Ki to give the integral part.</span>
|
| 271 | + <input type="text" name="Ki" class="cc Ki"> |
268 | 272 | <button class="send-button">Send to Arduino</button>
|
269 | 273 | </div>
|
270 | 274 | <div class="setting-container">
|
271 |
| - <span class="setting-name">PID: Kd</span><input type="text" name="Kd" class="cc Kd"> |
| 275 | + <span class="setting-name">PID: Kd</span> |
272 | 276 | <span class="explanation">The derivative of the beer temperature is multiplied by Kd to give the derivative part of the PID value.</span>
|
| 277 | + <input type="text" name="Kd" class="cc Kd"> |
273 | 278 | <button class="send-button">Send to Arduino</button>
|
274 | 279 | </div>
|
275 | 280 | <div class="setting-container">
|
276 |
| - <span class="setting-name">PID: maximum</span><input type="text" name="pidMax" class="cc pidMax"> |
| 281 | + <span class="setting-name">PID: maximum</span> |
277 | 282 | <span class="explanation">You can define the maximum difference between the beer temp setting and fridge temp setting here. The fridge setting will be clipped to this range.</span>
|
| 283 | + <input type="text" name="pidMax" class="cc pidMax"> |
278 | 284 | <button class="send-button">Send to Arduino</button>
|
279 | 285 | </div>
|
280 | 286 | <div class="setting-container">
|
281 |
| - <span class="setting-name">Integrator: maximum temp error °<?php echo $tempFormat ?></span><input type="text" name="iMaxErr" class="cc iMaxErr"> |
| 287 | + <span class="setting-name">Integrator: maximum temp error °<?php echo $tempFormat ?></span> |
282 | 288 | <span class="explanation">The integral is only active when the temperature is close to the target temperature. This is the maximum error for which the integral is active..</span>
|
| 289 | + <input type="text" name="iMaxErr" class="cc iMaxErr"> |
283 | 290 | <button class="send-button">Send to Arduino</button>
|
284 | 291 | </div>
|
285 | 292 | <div class="setting-container">
|
286 |
| - <span class="setting-name">Temperature idle range top</span><input type="text" name="idleRangeH" class="cc idleRangeH"> |
| 293 | + <span class="setting-name">Temperature idle range top</span> |
287 | 294 | <span class="explanation">When the fridge temperature is within this range, it won't heat or cool, regardless of other settings.</span>
|
| 295 | + <input type="text" name="idleRangeH" class="cc idleRangeH"> |
288 | 296 | <button class="send-button">Send to Arduino</button>
|
289 | 297 | </div>
|
290 | 298 | <div class="setting-container">
|
291 |
| - <span class="setting-name">Temperature idle range bottom</span><input type="text" name="idleRangeL" class="cc idleRangeL"> |
| 299 | + <span class="setting-name">Temperature idle range bottom</span> |
292 | 300 | <span class="explanation">When the fridge temperature is within this range, it won't heat or cool, regardless of other settings.</span>
|
| 301 | + <input type="text" name="idleRangeL" class="cc idleRangeL"> |
293 | 302 | <button class="send-button">Send to Arduino</button>
|
294 | 303 | </div>
|
295 | 304 | <div class="setting-container">
|
296 |
| - <span class="setting-name">Heating target upper bound</span><input type="text" name="heatTargetH" class="cc heatingTargetH"> |
| 305 | + <span class="setting-name">Heating target upper bound</span> |
297 | 306 | <span class="explanation">When the overshoot lands under this value, the peak is within target range and the estimator is not adjusted.</span>
|
| 307 | + <input type="text" name="heatTargetH" class="cc heatingTargetH"> |
298 | 308 | <button class="send-button">Send to Arduino</button>
|
299 | 309 | </div>
|
300 | 310 | <div class="setting-container">
|
301 |
| - <span class="setting-name">Heating target lower bound</span><input type="text" name="heatTargetL" class="cc heatingTargetL"> |
| 311 | + <span class="setting-name">Heating target lower bound</span> |
302 | 312 | <span class="explanation">When the overshoot lands above this value, the peak is within target range and the estimator is not adjusted.</span>
|
| 313 | + <input type="text" name="heatTargetL" class="cc heatingTargetL"> |
303 | 314 | <button class="send-button">Send to Arduino</button>
|
304 | 315 | </div>
|
305 | 316 | <div class="setting-container">
|
306 |
| - <span class="setting-name">Cooling target upper bound</span><input type="text" name="coolTargetH" class="cc coolingTargetH"> |
| 317 | + <span class="setting-name">Cooling target upper bound</span> |
307 | 318 | <span class="explanation">When the overshoot lands under this value, the peak is within target range and the estimator is not adjusted.</span>
|
| 319 | + <input type="text" name="coolTargetH" class="cc coolingTargetH"> |
308 | 320 | <button class="send-button">Send to Arduino</button>
|
309 | 321 | </div>
|
310 | 322 | <div class="setting-container">
|
311 |
| - <span class="setting-name">Cooling target lower bound</span><input type="text" name="coolTargetL" class="cc coolingTargetL"> |
| 323 | + <span class="setting-name">Cooling target lower bound</span> |
312 | 324 | <span class="explanation">When the overshoot lands above this value, the peak is within target range and the estimator is not adjusted.</span>
|
| 325 | + <input type="text" name="coolTargetL" class="cc coolingTargetL"> |
313 | 326 | <button class="send-button">Send to Arduino</button>
|
314 | 327 | </div>
|
315 | 328 | <div class="setting-container">
|
316 |
| - <span class="setting-name">Maximum time in seconds for heating overshoot estimator</span><input type="text" name="maxHeatTimeForEst" class="cc maxHeatTimeForEst"> |
| 329 | + <span class="setting-name">Maximum time in seconds for heating overshoot estimator</span> |
317 | 330 | <span class="explanation">The time the fridge has been heating is used to estimate overshoot. This is the maximum time that is taken into account.</span>
|
| 331 | + <input type="text" name="maxHeatTimeForEst" class="cc maxHeatTimeForEst"> |
318 | 332 | <button class="send-button">Send to Arduino</button>
|
319 | 333 | </div>
|
320 | 334 | <div class="setting-container">
|
321 |
| - <span class="setting-name">Maximum time in seconds for cooling overshoot estimator</span><input type="text" name="maxCoolTimeForEst" class="cc maxCoolTimeForEst"> |
| 335 | + <span class="setting-name">Maximum time in seconds for cooling overshoot estimator</span> |
322 | 336 | <span class="explanation">The time the fridge has been cooling is used to estimate overshoot. This is the maximum time that is taken into account.</span>
|
| 337 | + <input type="text" name="maxCoolTimeForEst" class="cc maxCoolTimeForEst"> |
323 | 338 | <button class="send-button">Send to Arduino</button>
|
324 | 339 | </div>
|
325 | 340 | <div class="setting-container">
|
326 |
| - <span class="setting-name">Beer fast filter delay time</span> <?php echoFilterSelect("beerFastFilt") ?> |
| 341 | + <span class="setting-name">Beer fast filter delay time</span> |
327 | 342 | <span class="explanation">The beer fast filter is used for display and data logging. More filtering give a smoother line, but also more delay.</span>
|
| 343 | + <?php echoFilterSelect("beerFastFilt") ?> |
328 | 344 | <button class="send-button">Send to Arduino</button>
|
329 | 345 | </div>
|
330 | 346 | <div class="setting-container">
|
331 |
| - <span class="setting-name">Beer slow filter delay time</span> <?php echoFilterSelect("beerSlowFilt") ?> |
| 347 | + <span class="setting-name">Beer slow filter delay time</span> |
332 | 348 | <span class="explanation">The beer slow filter is used for the control algorithm. The fridge temperature setting is calculated from this filter.
|
333 | 349 | Because a small difference in beer temperature causes a large adjustment in the fridge temperature, more smoothing is needed.</span>
|
| 350 | + <?php echoFilterSelect("beerSlowFilt") ?> |
334 | 351 | <button class="send-button">Send to Arduino</button>
|
335 | 352 | </div>
|
336 | 353 | <div class="setting-container">
|
337 |
| - <span class="setting-name">Beer slope filter delay time</span> <?php echoSlopeFilterSelect("beerSlopeFilt") ?> |
| 354 | + <span class="setting-name">Beer slope filter delay time</span> |
338 | 355 | <span class="explanation">The slope is calculated every 30 seconds and fed to this filter. More filtering means a smoother fridge setting.</span>
|
| 356 | + <?php echoSlopeFilterSelect("beerSlopeFilt") ?> |
339 | 357 | <button class="send-button">Send to Arduino</button>
|
340 | 358 | </div>
|
341 | 359 | <div class="setting-container">
|
342 |
| - <span class="setting-name">Fridge fast filter delay time</span> <?php echoFilterSelect("fridgeFastFilt") ?> |
| 360 | + <span class="setting-name">Fridge fast filter delay time</span> |
343 | 361 | <span class="explanation">The fridge fast filter is used for on-off control, display and logging. It needs to have a small delay.</span>
|
| 362 | + <?php echoFilterSelect("fridgeFastFilt") ?> |
344 | 363 | <button class="send-button">Send to Arduino</button>
|
345 | 364 | </div>
|
346 | 365 | <div class="setting-container">
|
347 |
| - <span class="setting-name">Fridge slow filter delay time</span> <?php echoFilterSelect("fridgeSlowFilt") ?> |
| 366 | + <span class="setting-name">Fridge slow filter delay time</span> |
348 | 367 | <span class="explanation">The fridge slow filter is used for peak detection to adjust the overshoot estimators. More smoothing is needed to prevent small fluctiations to be recognized as peaks.</span>
|
| 368 | + <?php echoFilterSelect("fridgeSlowFilt") ?> |
349 | 369 | <button class="send-button">Send to Arduino</button>
|
350 | 370 | </div>
|
351 | 371 | <div class="setting-container">
|
352 |
| - <span class="setting-name">Fridge slope filter delay time</span> <?php echoSlopeFilterSelect("fridgeSlopeFilt") ?> |
| 372 | + <span class="setting-name">Fridge slope filter delay time</span> |
353 | 373 | <span class="explanation">The fridge slope filter is not used in the current version.</span>
|
| 374 | + <?php echoSlopeFilterSelect("fridgeSlopeFilt") ?> |
354 | 375 | <button class="send-button">Send to Arduino</button>
|
355 | 376 | </div>
|
356 | 377 | <div class="setting-container">
|
357 |
| - <span class="setting-name">Use light as heater</span><?php echoYesNoSelect("lah") ?> |
| 378 | + <span class="setting-name">Use light as heater</span> |
358 | 379 | <span class="explanation">If this option is set to 'Yes' the light wil be used as a heater..</span>
|
| 380 | + <?php echoYesNoSelect("lah") ?> |
359 | 381 | <button class="send-button">Send to Arduino</button>
|
360 | 382 | </div>
|
361 | 383 | <div class="setting-container">
|
362 |
| - <span class="setting-name">Trigger rotary encoder at every ...</span> <?php echoRotarySelect("hs") ?> |
| 384 | + <span class="setting-name">Trigger rotary encoder at every ...</span> |
363 | 385 | <span class="explanation">When you feel like you have to turn your rotary encoder two steps for every trigger, set this to half step.</span>
|
| 386 | + <?php echoRotarySelect("hs") ?> |
364 | 387 | <button class="send-button">Send to Arduino</button>
|
365 | 388 | </div>
|
366 | 389 | </div>
|
|
0 commit comments