- Semester, Year
- Fall, 2017
- Meeting Times
- Friday 9am-12pm
- Meeting Location
- MacLean 401
- Instructor
- Christopher Baker
- Teaching Assistant
- Paul Perez
Instructor Bio
Christopher Baker is an artist whose work engages the rich collection of social, technological and ideological networks present in the urban landscape. He creates artifacts and situations that reveal and generate relationships within and between these networks. Christopher’s work has been presented worldwide and he contributes to the open source community at https://github.com/bakercp.
Course Description
Experimental Media introduces graduate students to the basic strategies and techniques associated with using experimental media such as robotics, microcontrollers, networked objects, and basic interactivity.
Course Goals
In concert with the Grad Digital Media Seminar, this course aims to equip new graduate students with foundational tools, techniques and technologies essential to a successful graduate career in Art and Technology Studies. In addition to school fabrication resources, students will be introduced to a variety of contemporary techniques, practices and creative methodologies.
Key goals include:
- Working knowledge of contemporary creative coding tools, with intermediate skills in one or more
- Working knowledge of contemporary creative hardware tools, with intermediate skills in one or more
- Working knowledge of and hands-on exposure to the school’s various fabrication facilities
- Working knowledge of popular online resources for:
- Materials
- Electronics
- Hardware
- Working knowledge of contemporary artists and groups addressing issues related to art and technology
- Working knowledge of intermediate linux/unix OS features (scripting, terminal, automation, etc)
- Building camaraderie between first year students and their classmates.
Methodology
Using individual in-lab and home assignments, class presentations, lectures, discussions, assigned readings, group and individual desk critiques, students will experience multiple aspects of interactive design. Visiting artists / faculty may enhance the experience and offer additional perspectives.
Assignments
The course may include workshops and several small projects, relevant technical and theoretical reading, written online responses, technical research and outings.
Recommended Texts
- ofBook
- Getting Started with Arduino, Second Edition, By Massimo Banzi (aka GSA)
Note: O’Reilly books are available in DRM-free eBook form from http://oreilly.com/. Steep discounts are available: http://www.google.com/?q=coupon+oreilly.com.
Reading and other Resources
Posted on the course website.
Materials
Provided by the student as needed.
Attendance
- Students are best served by attending all classes.
- Missing three classes will result in a class failure. This is strictly enforced.
- Six or more unexcused late arrivals or early departures will result in class failure.
Tip: If you are going to be absent, late to class, or need to depart early, please contact me BEFORE class starts. This is so I can make sure you have what you need to succeed!
Wait Lists
Students wait-listed for classes will be admitted on a space available basis determined by instructor’s discretion (in consultation with the department chair).
Grading Procedure/Criteria
Grades are credit / no-credit for this course. Credit for the course is given when all assignments are completed.
Writing Assistance
Writing Center
Special Needs
Disability and Learning Resource Center
Course Schedule
(subject to change based on incoming skills and experience)
Week 00
- Introduction to course
- How does this fit in with other courses?
- History of course?
- What does it mean for us?
- Introduction to each other, generate reference to project of interest.
- Survey of Contemporary Creative Coding Platforms
- Very Incomplete History of Processing / openFrameworks
- Contemporary Tooling Options w/ Examples
- Non-visual Programming Frameworks
- Visual Programming Frameworks
- Hybrid Programming Frameworks
- A nice comprehensive list
Week 01
- Survey of Creative Hardware Hacking Platforms
- First, what is the difference between a microcontroller (e.g. Arduino) and a Personal Computer (e.g. Laptop, Raspberry Pi, etc?)
- “Real Time” Is precise timing extremely important? (e.g. a CNC machine or a Balancing Robot)
- Single Task / Capability vs. Multiple Tasks / Capabilities
- Cost (?)
- Size (?)
- Some PCs are purpose built to have some micro-controller-like capabilities (e.g. real-time control with a parallel port, RTOS, etc)
-
Some microcontrollers are purpose built to have PC-like capabilities (e.g. Wifi, Multimedia, screens, etc)
- Recent History
- PIC
- Closed source toolchain, development tools.
- Complicated.
- Cheap hardware!
- Basic Stamp
- Closed source toolchain, development tools.
- Much easier!
- Very expensive.
- Contemporary Options with Examples
- Very Incomplete and Disputed History of Wiring / Arduino
- Interaction Design Institute Ivrea (IDII) in Ivrea, Italy
- Hernando Barragán creates Wiring as an Masters Thesis
- ~2003 Massimo Banzi, David Mellis, David Cuartielles, added support for the cheaper ATmega8 and started Arduino but didn’t invite Barragán.
- Arduino (in all of its forms, clones, etc)
- Oh Arduino.
- Now they are back together
- Anyway, recent favorites …
- Mobile phones and similar devices
- Arm Devices
- The future?
- So what are we going to focus on?
- Software
- Hardware
- Personal Computers
- Desktop / Laptop
- ARM Computers, e.g. Raspberry Pi
- Arduino-compatible Microcontrollers
- Introduction to the command line.
- Introduction to C++ with the command line.
- Introduction to openFrameworks.
Week 02
- How do I approach a programming problem?
- Can you explain it in words?
- If not in words, can you draw it in pictures?
- For installations with a finite number of “states”, you might use a “Finite State Machine”?
- Finite State Machines are composed of:
- … a finite number of “states”.
- … a valid set of transitions between “states”.
- … conditions that allow change the transitions between “states”.
- Traffic light example and diagram.
- Continue Finite State Machine code to include traffic light.
- Talk about homework of including a button with an additional state.
- Representing “reality” with computers.
- Digital vs. Analog circuits, audio, communication, etc.
- Analog to Digital Conversion (ADC)
- Sampling - Discretely Digitizing an Continuously Analog
- How do we turn a sample of a signal into a number?
- How do we represent a number with “switches” (aka binary)?
- Why switches? Why 1s and 0s?
- Binary representation can thought of as a “state machine”, with each binary digit.
- Least Significant Bit (LSB) vs. Most Significant Bit (MSB)
- Big Endian vs. Little Endian
- Bit, nibble, byte, word (architecture-specific).
- bool, byte, long, unsigned long, etc.
-
- Lots of tutorials on binary math and how it
- Arduino
bitRead()
, bitWrite()
, bitClear()
, bitSet()
, etc.
- Aliasing - When sampled signals can’t be differentiated.
- Digital to Analog Conversion (DAC) - There’s no “half way” for binary.
- Approaches
- Pulse Width Modulation (PWM)
- Duty Cycle - describes the percentage of time the signal is “on”.
- Pulse frequency is independent of duty cycle.
- Dedicated DAC
- They are described as having X-bit DAC.
- They often have an analog smoothing filter.
- Example: https://www.sparkfun.com/products/12918
- Microcontrollers
- Digital Input
- Pull up resistor.
- Pull down resistor.
- Digital Output
Week 03
- Microcontrollers
- Analog Input
- ADC “bit depth” - Arduino UNO - 10 bit ADC
- AREF pin for reference voltage.
- Voltage Divider
- [https://cdn.sparkfun.com/assets/4/0/3/a/e/511948ffce395f7f47000000.png]
- [https://cdn.sparkfun.com/r/400-400/assets/6/3/e/5/e/511ac8f5ce395f5846000000.png]
- [https://cdn.sparkfun.com/assets/7/2/a/7/5/511acd39ce395f6746000000.png]
- Vout = Vin * (R2 / (R1 + R2))
- Analog “Output”
Week 04
- Communication
- Hardware Hardware Communication
- I2C aka IIC (Inter-Integrated Circuit)
- SPI (Serial Peripheral Interface)
- Basic Serial Communication
- What is UART (Universal Asynchronous Receiver / Transmitter)?
- What are bauds?
- 1 baud != 1 bit / second
- 9600 baud
- 1200 bytes / second = 1.2 kilobytes / second
- In natural language we often say a kilobyte is 1024 bytes (2^10), when it should be 10^3 or 1000 kilobytes
- Kilobytes (1000 bytes) vs. kibibytes (1024 bytes)
- kibi-, mebi-, gibi-, tebi-, pebi
- What are data bits?
- Usually 8 because that matches the size of an 8-bit byte in modern computing.
- What are parity bits?
- These can be used to detect transmission errors. They generally aren’t used.
- What are stop bits (aka stop periods)?
- These mark the end of a character and are used to synchronize sender and receiver.
- Asynchronous vs. Synchronous Serial communication.
- Other ways
- http://www.benripley.com/diy/arduino/three-ways-to-read-a-pwm-signal-with-arduino/
- Serial on the Computer
- DB9 Connector
- USB to DB9 connector
Week 05
Week 06
- Object-Oriented-Programming (OOP) vs. ?
ofDrawRectctangle
vs. ofRectangle
- What is a
class
? (what is a struct
?)
- What is a member variable?
- What is a member function?
- What is static data?
- What are static member functions?
- How do member functions differ from “global” functions?
- How do static member functions differ from “global” functions?
- Syntax
.
::
virtual
const
mutable
- Member functions
- Inheritance
public
, protected
, private
- Review Collections
- “Raw” arrays
- Memory management
- Review functions / methods
- Passing by value
- Passing by reference
- Passing by pointer
- Returning by value
- Returning by reference
- Returning by pointer
- What is “const”?
- Variables in openFrameworks+Arduino:
- data types
- variables
- math
- mapping and scaling
- repetition
- randomness
Week 07
- Advanced Programming Theory / Syntax
- openFrameworks/Arduino
- Functions
- OOP (Object oriented programming), Classes, Objects
- Arrays
Week 08
- Intermediate I/O
- openFrameworks:
- Audio I/O
- Video I/O
- Arduino:
- Intermediate sensors (gyro, accelerometer, GPS, capacitive touch, etc)
- Audio/Video on the Arduino (Survey)
Week 09
- Intermediate I/O (continued)
Week 10
- Advanced I/O (Input/Output)
- openFrameworks:
- Live Network feeds (push and pull)
- Data persistence (saving data and preferences)
- Database interface (MySQL, sqLite, XML, PHP/Web)
- Arduino:
- Wired/Wireless Networking (hardware vs. USB proxy)
- Software serial (RS-232) talking to other Arduinos
- Advanced sensor/device communication SPI
- Advance IC interfacing / Bitbanging (bitwise operators)
Week 11
- Advanced Topics and Integration
- “The circle of life” agile digital fabrication and advanced output scan, modify, print, repeat
- Topics include:
- advanced 2D output (vector/svg for laser cutter/CNC)
- 3D in openFrameworks (opengl)
- advanced 3D output (DXF, Collada) for 3D printer
- Creative 3D design with sensor data (arduino)
- sensor data to 3D object
- Introduction to 3D tools
- Meshlab
-
Blender |
|
Sketchup |
|
Rhino |
|
Solidworks |
|
Fusion 360? |
Week 12
- Kinetic Output
- Motors
- AC / DC Motors
- Gear Motors
- Stepper Motors
- Servos
- Hybrid Steppers
- Solenoids
- Controlling big signals with small signals.
- Relays
- AC Relay Dongles
- DC Relays
- Solid-state vs. Mechanical
- Transistors
- Ultimately allow small signals to control big ones.
- This means they can act as switches or as an amplifier (amplifying the effect of the small signal)
- Computers / Integrated Chips use millions / billions of transistors to create complex logic.
- Types
- Low power (small signals)
- High power (large current / voltage)
- Previously Vacuum tubes
- Expensive
- Hot
- Short-lived
- How does it actually work? https://www.youtube.com/watch?v=IcrBqCFLHIY
- Intro to using one: https://www.youtube.com/watch?v=-td7YT-Pums
Week 13
- Advanced Topics and Integration (continued)