{ "cells": [ { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/CBE32338/02.10-TCLab-Lab-2-Model-Indentification-Solutions.html)", "section": "" } }, "source": [ "\n", "*This notebook contains material from [CBE32338](https://jckantor.github.io/CBE32338);\n", "content is available [on Github](https://github.com/jckantor/CBE32338.git).*\n" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/CBE32338/02.10-TCLab-Lab-2-Model-Indentification-Solutions.html)", "section": "" } }, "source": [ "\n", "< [2.6 Four State Model](https://jckantor.github.io/CBE32338/02.06-Four-State-Model.html) | [Contents](toc.html) | [2.10 TCLab Lab 2: Model Identification](https://jckantor.github.io/CBE32338/02.10-TCLab-Lab-2-Model-Indentification.html) >
"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# IMPORT DATA FILES USED BY THIS NOTEBOOK\n",
"import os, requests\n",
"\n",
"file_links = [(\"data/tclab-data.csv\", \"https://jckantor.github.io/CBE32338/data/tclab-data.csv\")]\n",
"\n",
"# This cell has been added by nbpages. Run this cell to download data files required for this notebook.\n",
"\n",
"for filepath, fileurl in file_links:\n",
" stem, filename = os.path.split(filepath)\n",
" if stem:\n",
" if not os.path.exists(stem):\n",
" os.mkdir(stem)\n",
" if not os.path.isfile(filepath):\n",
" with open(filepath, 'wb') as f:\n",
" response = requests.get(fileurl)\n",
" f.write(response.content)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[2.10 TCLab Lab 2: Model Identification](https://jckantor.github.io/CBE32338/02.10-TCLab-Lab-2-Model-Indentification-Solutions.html#2.10-TCLab-Lab-2:-Model-Identification)",
"section": "2.10 TCLab Lab 2: Model Identification"
}
},
"source": [
"# 2.10 TCLab Lab 2: Model Identification"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[2.10 TCLab Lab 2: Model Identification](https://jckantor.github.io/CBE32338/02.10-TCLab-Lab-2-Model-Indentification-Solutions.html#2.10-TCLab-Lab-2:-Model-Identification)",
"section": "2.10 TCLab Lab 2: Model Identification"
}
},
"source": [
"For this laboratory session you will collect data from a step test experiment, then fit the data to models derived from first-principles energy balances. Fitting models to data is an engineering skill that links between the real world of engineering systems to the theory you've been learning in the classroom."
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[2.10.1 Procedures](https://jckantor.github.io/CBE32338/02.10-TCLab-Lab-2-Model-Indentification-Solutions.html#2.10.1-Procedures)",
"section": "2.10.1 Procedures"
}
},
"source": [
"## 2.10.1 Procedures"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[2.10.1 Procedures](https://jckantor.github.io/CBE32338/02.10-TCLab-Lab-2-Model-Indentification-Solutions.html#2.10.1-Procedures)",
"section": "2.10.1 Procedures"
}
},
"source": [
"1. Please work in groups of two.\n",
"\n",
"2. Check out a TCLab kit. The kit consists of\n",
" * plastic container\n",
" * Arduino device with the TCLab shield installed\n",
" * 5 watt USB power supply\n",
" * USB power cable\n",
" * USB data cable\n",
" * equipment log sheet\n",
" \n",
" Before going further, sign and date the equipment log sheet. \n",
"\n",
"3. Download a copy of this notebook to your laptop, and complete the exercises shown below. Under each exercise heading, add as many text and code cells as needed to complete the exercise. The results should be embedded in the notebook. Be sure to 'save-as-you-go' to avoid losing your work.\n",
"\n",
"4. Add any relevant notes to the equipment log and return the kit to equipment at the front of the lab. **Return any malfunctioning kit to the instructor for repair.**\n",
"\n",
"5. Submit your completed lab notebook via Sakai. The notebook should contain the name of both lab partners. Both partners should submit a copy of the notebook."
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[2.10.2 Exercise 1. Verify operation of the temperature control lab.](https://jckantor.github.io/CBE32338/02.10-TCLab-Lab-2-Model-Indentification-Solutions.html#2.10.2-Exercise-1.-Verify-operation-of-the-temperature-control-lab.)",
"section": "2.10.2 Exercise 1. Verify operation of the temperature control lab."
}
},
"source": [
"## 2.10.2 Exercise 1. Verify operation of the temperature control lab.\n",
"\n",
"Execute the following cell to verify that you have a working connection to the temperature control lab hardware. This will test for installation of TCLab.py, connection to the Arduino device, and working firmware within the Arduino."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"nbpages": {
"level": 2,
"link": "[2.10.2 Exercise 1. Verify operation of the temperature control lab.](https://jckantor.github.io/CBE32338/02.10-TCLab-Lab-2-Model-Indentification-Solutions.html#2.10.2-Exercise-1.-Verify-operation-of-the-temperature-control-lab.)",
"section": "2.10.2 Exercise 1. Verify operation of the temperature control lab."
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"TCLab version 0.4.9\n",
"Arduino Leonardo connected on port /dev/cu.usbmodemWUART1 at 115200 baud.\n",
"TCLab Firmware 1.3.0 Arduino Leonardo/Micro.\n",
"TCLab Temperatures: 23.81 23.48\n",
"TCLab disconnected successfully.\n"
]
}
],
"source": [
"from tclab import TCLab, clock, Historian, Plotter\n",
"\n",
"lab = TCLab()\n",
"print(\"TCLab Temperatures:\", lab.T1, lab.T2)\n",
"lab.close()"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[2.10.3 Exercise 2. Check for steady state](https://jckantor.github.io/CBE32338/02.10-TCLab-Lab-2-Model-Indentification-Solutions.html#2.10.3-Exercise-2.-Check-for-steady-state)",
"section": "2.10.3 Exercise 2. Check for steady state"
}
},
"source": [
"## 2.10.3 Exercise 2. Check for steady state\n",
"\n",
"As discussed in class, for good model fitting it is essential for the TCLab hardware to be at steady state before proceeding with the step test. Run the following code to verify that the heaters are off and that the temperatures are at a steady ambient temperature."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"nbpages": {
"level": 2,
"link": "[2.10.3 Exercise 2. Check for steady state](https://jckantor.github.io/CBE32338/02.10-TCLab-Lab-2-Model-Indentification-Solutions.html#2.10.3-Exercise-2.-Check-for-steady-state)",
"section": "2.10.3 Exercise 2. Check for steady state"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 4
}