Lecture and Demo Videos¶
All video content for the course is posted on the Creative Kinetic Systems YouTube channel. The following guide is intended to help you locate content on individual topics. It is organized by topic, but approximately follows presentation order.
Please note that specific videos may cater more to novices or to students with prior experience, so some will be assigned for everyone to study and some will be optional.
Playlists¶
Day 1 videos: course introduction
Day 2 videos: electrical theory, Tinkercad
Day 3 videos: Arduino programming essentials
Day 4 videos: tones, tables, functions, polling, melody exercise
Day 5 videos: hobby servo exercise
Day 6 videos: polling event loops, state machines, game exercise
Day 7 videos: game exercise
Day 8 videos: Fusion 360
Day 9 videos: marble run exercise, part 1
Day 10 videos: marble run exercise, part 2
Day 11 videos: Arduino IDE
Day 12 videos: sonar range sensor, photointerruptor proximity sensor, tilt ball switch and passive buzzer
Day 14 videos: kit mechanical components, bearing structures, micro servo mounting
Course Overview¶
Creative Kinetic Systems Channel Trailer. A brief hello.
Welcome to Creative Kinetic Systems. Course introduction, IDeATe introduction, brief summary of scope and outcomes, intended audience, fundamental learning goals.
CKS Style and Structure. Learning approach, synopsis (‘systems thinking’), semester schedule outline, remote learning, course kits.
CKS Course Web Site.Main course site, daily agenda pages, Canvas, student WordPress site, Piazza.
CKS Course Policies. Syllabus overview, mandatory participation, deadlines, safety, academic integrity, self-care.
Tinkercad Circuits¶
Tour of Tinkercad Circuits. Orientation for the Autodesk Tinkercad Circuits simulator. LED-battery circuit, Arduino component, visual ‘block’ programming, Arduino C++ text programming.
Tinkercad Breadboarding. Introduction to the solderless breadboard via Tinkercad. Circuit with battery, resistor, LED.
Exercise: Resistive Circuits in Tinkercad. Companion video for the assigned exercise Exercise: Resistive Circuits in Tinkercad. Conversational walkthrough of electrical theory for seven sample circuits.
Tinkercad Arduino Switch Input. Demonstration of Arduino input circuit using switch and pullup resistor on breadboard, Arduino program with conditional logic and LED output.
Exercise: Servo Motion in Tinkercad. Walkthrough of Exercise: Servo Motion in Tinkercad. Discussion of servo command signal format, simple harmonic oscillators, and structuring programs around motion primitive functions.
Exercise: Handheld Game in Tinkercad. Walkthrough of Exercise: Handheld Game in Tinkercad. Demonstration of the sample solution, discussion of creative possibilities for making a simulation of a handheld electronic game.
Exercise: Handheld Game: Vocabulary. An optional addendum to the walkthrough of Exercise: Handheld Game in Tinkercad to explain some of the jargon from the exercise description in more detail.
Electronics¶
Electrical Theory Introduction. Current, voltage, resistance, Amperes, Volts, Ohms, circuits as graphs.
Kirchhoff’s Laws, Ohm’s Law. Kirchhoff’s current law, Ohm’s Law, Kirchhoff’s voltage law, tools for elementary circuit analysis.
Resistors and Voltage Dividers. Physical resistors, divider circuits, resistance ratios.
Switch and LED Circuits. Switch input circuits, pull-up and pull-down resistors, LED output circuits, ballast resistors.
Ultrasonic Range Sensor [9:24]. Demonstration of a HC-SR04 ultrasonic range sensor (sonar) with an Arduino.
Reflective Photointerruptor [5:57]. Demonstration of a LTH-1550 reflective photointerruptor using an Arduino.
Tilt Ball Switch [2:59]. Demonstration of a tilt ball switch and passive buzzer using an Arduino.
planned: electronic component show and tell: breadboard, wires, etc.
planned: Arduino board show and tell: board, connectors, switches, chips, cautions
planned: physical breadboard layout and wiring
planned: hobby servos: internal components, block diagram, feedback, wiring, mounting, power considerations, pulse code signals
planned: electronics lab safety: static risk, chemical risk, voltage risk, eye safety
planned: reading electronics data sheets
planned: digital sensors: switches of all forms
planned: analog sensors: photocells, microphones, accelerometers
Arduino Programming¶
Introduction to the Arduino. Brief history of the Arduino, basic specifications, range of applications.
Arduino Language Overview. Orientation to the Arduino dialect of C++.
Arduino Essential Program Structures. Arduino setup(), loop() iteration, if-then, while iteration, for iteration.
Arduino Digital I/O. Semantics of digital signals, Arduino digitalRead(), digitalWrite().
Arduino Analog I/O. Arduino analogRead(), resolution, precision, analogWrite() and PWM.
Arduino Time Measurement. Arduino timekeeping, clock resolution, millis(), micros(), and delay().
Arduino Integrated Development Environment [10:06]. A tour of the software we use to program an Arduino.
Sample Code Walkthroughs¶
Code Walkthroughs: Tones. Arduino tone production and musical tuning systems. Walks through lecture samples tones.ino, bit-bang-two-tone.ino, and scale.ino.
Code Walkthroughs: Tones and Tables. Frequency and note tables in Arduino C++. Walks through lecture samples melody.ino and note-table.ino.
Code Walkthroughs: Tones and Functions. Writing and using functions in Arduino C++. Walks through lecture sample arpeggio.ino.
Code Walkthroughs: Processing Input while Waiting. Polling input while waiting in Arduino C++. Walks through lecture sample responsive-delay.ino.
Code Walkthroughs: RockPaperScissors Event Loop. Polling loop structure for simultaneous processing asynchronous events from user input, game state transitions, and output animations. For code see RockPaperScissors Arduino Sketch.
Code Walkthroughs: RockPaperScissors State Machines. Two programming idioms for specifying state machines. Walks through RockPaperScissors.ino example, shows the state variables, timing system, transition rules, and side effects. Introduces switch-case notation, enum notation, and state graph notation. For code see RockPaperScissors Arduino Sketch.
Programming Concepts¶
possible: formal syntax versus programming idioms
possible: control flow
possible: data, operations, and variables
possible: functions
possible: conditionals, blocks
possible: iteration
Arduino C++¶
planned: C++ notation: functions, arguments, declarations
planned: C++ data: numeric types, arrays
planned: in depth: comparison with Python
planned: serial data communication
planned: in depth: walkthrough of compilation process
planned: in depth: tour of the firmware source
planned: in depth: tour of the ATMega328 architecture
Arduino IDE Application Software¶
planned: launching, editing, compiling, reading documentation
planned: syntax highlighting
planned: downloading code, physically observing it run, resetting and restarting
planned: using the Serial Monitor
Fusion 360¶
Autodesk Fusion 360 Orientation. Brief overview of the Autodesk Fusion 360 3D modeling interface. Discusses the definitions of team, project, folder, file, browser, design history.
Introduction to Parametric Design. Conceptual introduction to parametric 3D design in the context of Fusion 360. Discusses the ideas of design intent, design history, associative features, constructive solid geometry, designs, components, sketches, and joints.
Parametric Part Design. Walkthrough of the parametric design of a plate and spacer in Fusion 360, focusing on the vocabulary and thought process of sketch constraint and feature association.
Exercise: Marble Run in Fusion 360: Part 1 [26:55]. Walkthrough of part 1 of Exercise: Marble Run in Fusion 360, talking through drawing a sample design, with an emphasis on the thought process of parametric design as opposed to CAD software operation. Some time points in the video:
00:00 objectives of the exercise
01:05 whiteboard drawing of the sample device
03:38 starting a new Fusion 360 design with sketches at top level
06:26 beginning the playfield component by constructing a plane
07:17 creating the playfield component
09:20 detailing the strut slots
12:30 detailing the first edge barrier slots
16:28 mirroring the first edge barrier slots
17:21 filleting the playfield corners
17:51 naming and modifying parameters with the Change Parameters dialog
21:20 detailing the dowel pin holes
24:08 fixing the position of the struct slots
25:44 summary and recap of the exercise objectives
Exercise: Marble Run in Fusion 360: Part 2A [28:57]. Part 1 of 3 discussing the second phase of Exercise: Marble Run in Fusion 360 by continuing the sample design. Please note that several mistakes are included which are fixed later in the process. Some time points in the video:
01:18 creating the foot component
01:28 using isolate to hide parts
02:45 using a long click to select hidden features
04:00 adding slots for tabs
07:13 creating the central vertical strut
07:40 using a midline sketch plane for a symmetrically extruded part
08:38 roughly drawing the contour
09:30 adding constraints to locate the contour
11:25 associatively locating the tabs using projected geometry
12:10 dimensioning a press-fit wedge tab in laser-cut plywood
13:23 drawing parts with deliberate overlap to represent press-fits
14:12 jump cut after detailing three more tabs
15:04 extruding strut symmetrically around drawing plane
15:55 beginning the side barrier part
16:15 creating the sketch plane, somewhat incorrectly (later replaced)
16:44 creating the barrier component
18:44 drawing the contour with lines and arcs
20:09 projecting the tab center lines, at which point I fail to notice a perpendicularity problem (later fixed)
22:55 extruding the barrier part
23:32 considering the need for a cross-brace, but postponing creation
24:40 adding a section view
25:19 tab section view, at which point I fail to notice an parallelism inconsistency (later fixed)
27:05 recap and summary
27:41 demonstration of associative changes as parameters are changed
Exercise: Marble Run in Fusion 360: Part 2B [18:33]. Part 2 of 3 discussing the second phase of Exercise: Marble Run in Fusion 360 by continuing the sample design. Some time points in the video:
00:08 version control comments during file save
00:32 correcting the sketch plane for the barrier part
01:54 adding a midplane reference plane
03:08 deleting the incorrect plane and replacing the sketch plane
04:15 patching up the barrier part sketch
04:38 invalid projected geometry marked in green
05:33 jump cut after repairing the barrier sketch
06:52 discussion of the cross-brace design options
08:08 creating a sketch plane for the cross-brace
09:12 creating the cross-brace component
10:10 jump cut after false start drawing the contour
10:40 drawing a half-lap joint
12:35 symmetric extrusion of the cross brace
13:04 jump cut to adding a notch the strut for the half-lap
14:50 drawing the notch contour using referenced geometry
16:44 adding a second notch to the strut right below the playfield
18:17 saving a new version
Exercise: Marble Run in Fusion 360: Part 2C [26:05]. Part 3 of 3 discussing the second phase of Exercise: Marble Run in Fusion 360 by continuing the sample design. The process demonstrates several alternatives for joining two parts, several of which which are not correctly associative and so fail to adapt to parametric changes. Some time points in the video:
00:10 resuming with all fabricated parts designed
00:30 plan for part duplication, relocation, and creating a joint
01:00 copying the cross-brace to the upper position
02:27 using the align operation to position a part
03:51 demonstration of the non-associativity of a captured position
04:35 trying an as-built rigid joint to location the upper brace
05:45 demonstration of the non-associativity of the as-built joint
06:28 using a regular rigid joint to associatively locate the upper brace
07:36 first try at joint including an offset error (using wrong snap point on strut slot)
08:03 demonstration of the associativity of the rigid joint
08:26 fixing the joint snap point for correct alignment
09:09 demonstration that Fusion 360 rigid joints are five DOF associative, not six DOF
09:45 final demonstration that the cross-brace is associatively joined
10:19 discovery of constraint instability in barrier part sketches
10:48 jump cut after barrier part sketch fixes, commentary on sketch constraint
12:02 copying the barrier part to the opposite side
13:01 creating auxiliary sketches to create points and axes usable for defining joints
14:24 jump cut further into the auxiliary sketch process
15:46 jump cut to the correct solution for defining the barrier part rigid joint
18:10 demonstration of full associativity of the parts and joints under parameter changes
19:20 adding the course kit wooden dowel pins imported from McMaster-Carr
21:07 copying the wooden dowel and using a joint to fix it at second location
22:30 exporting a laser-cuttable DXF file of the playfield geometry
24:36 opening and previewing the DXF file using a different program
25:15 recap and summary
Mechanical Design¶
Bearing Components [14:50]. Visual walkthrough of the bearing components from the F20 Course Kit.
00:06 shoulder screws
00:42 sleeve bushing bearing
01:42 ball bearings
03:33 nylon spacers or bushings
04:01 washers
04:26 using bearings in pairs
05:12 kit inventory pages on course site
06:30 related tools: hex driver, wrench
07:42 inch-sized vs metric
08:12 measuring bearings with calipers
09:34 typical shaft and bearing assemblies
10:15 bushing pair on shoulder screw
11:14 cantilevered shaft
11:50 radial load versus thrust load
13:09 ball bearing pair on shoulder screw
14:09 nylon bushings on shoulder screw
14:36 recap and summary
Laser-Cut Kit Parts [7:34]. Visual walkthrough of the laser-cut parts from the Course Kit Visual Guide.
00:06 overview of the designs
00:36 visual guide on course site
01:06 Arduino mounting plate, nylon screws
01:48 servo mounting plate
02:12 tab and slot fit
02:40 disc or wheel plate
03:22 breadboarding parts,
03:30 self-tapping blunt sheet metal screws
03:50 tab and slot structure
04:07 tabbed side plates, with bushing and motor hole patterns
04:49 example assembled bearing clevis structures
06:30 example tube structure
06:53 recap and summary
Rotational Bearing Forces [12:15]. Analysis of the forces and moment exerted by rotational bearings supporting a shaft.
00:05 physical parts
00:19 shaft and bearing diagram
00:53 general definition of a bearing
01:30 degrees of freedom and force support required
02:07 shaft force and moment diagram
03:18 diagram of radial components supporting the shaft moment
04:48 formula for radial load and implications
06:30 diagram of forces on a single bushing
07:37 diagram of a clevis structure supporting a pair of bearings
08:25 discussion of door hinge
08:54 discussion of clevis self-collision
09:36 diagram of a cantilevered shaft
10:25 moments created by cantilevered radial loads
11:33 recap and summary
Micro Servo Mounting [6:58]. Design considerations for panel-mounting a micro-servo and coupling it to a mechanism via a tie-rod four-bar linkage.
00:10 overview of the included servo parts
00:25 spline shaft and servo horn installation
01:30 mounting tabs and self-tapping screws
01:52 CAD view of servo mounting plate
02:17 physical installation in mounting plate
03:23 servo horn tie rod features and limits
04:02 CAD view of tie rod construction and linkage operation
05:38 loads are decoupled with a parallel axis structure
06:16 recap and summary
Fabrication at Home¶
planned: course kit show and tell
planned: making structures from air-dry clay
planned: making pivots using embedded bushings
planned: making wire linkages
planned: attaching hobby servos
Signal Processing¶
Arduino Filter Demos [26:15]. Walkthrough of several examples of single-channel signal processing on an Arduino using the ref:FilterDemos-sketch.
00:52 FilterDemos Arduino sketch
01:24 Arduino compatibility meant for cut and paste
02:29 top-level demo sketch
02:50 statistics.h for central measures of average and variance
03:57 linear.ino with floating-point linear mapping
04:30 hysteresis.ino with hysteresis thresholding, value suppression, and debouncing
05:54 static variables within the functions
06:47 mistake: showing suppress_value() while discussing debounce()
07:27 corrected explanation of suppress_value()
07:52 smoothing.ino with a first-order smoothing filter
09:12 median.ino with a short three-sample median for suppressing outliers
10:07 lowpass.ino with a linear IIR discrete-time smoothing filter
11:32 low-pass transfer function plot
11:59 chirp response of the low-pass filter
12:50 return to transfer plot
13:08 walk through the lowpass() function
14:29 flow chart of the digital biquad filter
15:41 filter order and rolloff
16:28 bandpass.ino with a band-pass filter to pass a range of frequencies
17:11 chirp response of the band-pass filter
18:17 generating fixed-filter code using SciPy
19:05 bandstop.ino with a filter that suppresses a range of frequencies
19:33 ring_buffer.ino with a history buffer
20:23 ring buffer differentiator
21:07 ring_median.ino with a longer median filter window
21:59 trajfit.ino with a quadratic fitting filter to estimate position, velocity, and acceleration
24:42 learning to apply this algorithms with offline testing
25:38 tools and libraries
26:02 summary and wrapup
Arduino Classifier Demo [17:22]. Walkthrough of an Arduino binary decision tree classifier in :ref`ClassifierDemo-sketch`, generated using scikit-learn from labeled sonar data.
00:14 ClassifierDemo Arduino Sketch
00:27 classification and labeling
00:58 machine learning as data-based modeling
01:22 signal workflow overview
02:11 training set, labeled set of position and velocity pairs
03:00 classifier tree plotted as points and regions
03:51 classify() function generated by classify_gen.py
04:33 hand-drawn planar segmentation representing a binary tree
06:05 returning to plot of points and regions
07:34 scikit-learn, SciPy, NumPy, and matplotlib
08:15 sample code overview
08:48 walk through sensor filtering pipeline
10:20 sensor scaling and integer underflow concerns
10:37 lowpass() smoothing filter
11:06 quadratic fitting filter
11:46 data collection, labeling, and merging into training set
13:00 debouncing the classifier output
13:37 plot of live data with classifier output
15:00 higher-dimensional data from multiple sensors or filters