{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains course material from [CBE32338](https://jckantor.github.io/CBE32338)\n", "by Jeffrey Kantor (jeff at nd.edu); the content is available [on Github](https://github.com/jckantor/CBE2338.git).\n", "The text is released under the [CC-BY-NC-ND-4.0 license](https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode),\n", "and code is released under the [MIT license](https://opensource.org/licenses/MIT).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [State Estimation](http://nbviewer.jupyter.org/github/jckantor/CBE32338/blob/master/notebooks/03.00-State-Estimation.ipynb) | [Contents](toc.ipynb) | [Feedback Control](http://nbviewer.jupyter.org/github/jckantor/CBE32338/blob/master/notebooks/04.00-Feedback-Control.ipynb) >
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Open and Closed Loop Estimation\n", "\n", "This notebook outlines three experiments to be performed using the TCLab hardware. This first cell imports necessary libraries, defines a relay control as a Python generator, and a temperature setpoint corresponding to a ramp/soak cycle." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "