Assignment 1: Analog and Digital Input and Output

The first assignment is a way for you to show that you understand the basics of digital and analog input and output and how to write a basic Arduino sketch.  It’s also an introduction to coming up with an idea, planning it, implementing it, then documenting your project.  There’s no content requirement, we’re saving that for later classes after everyone is good with the fundamentals of physical computing.

First, come up with an idea and a plan. “Use three switches to turn on three different LEDs and a photoresistor to change the intensity of a fourth LED.”  Based on that idea, create a circuit diagram, draw it on paper or use Fritzing.  Now build the circuit, write the code, and make it happen!

The requirements for this assignment are to take digital and analog input and create outputs for LEDs or the digital vibrators we handed out today in class.  You’re free to use other outputs or make your own switches, there’s also the collection of components in A10.

Document your entire process, from your first idea, the circuits that didn’t work, the changes you made, and what was the final result.   In your documentation, ask yourself what you learned, what went wrong, what you’d do differently if you did it a second time.

To submit your project, post a reply with the documentation.  Attach a zip file to that post containing your Arduino sketch, a photo of your finished breadboard circuit, and anything else you think is relevant.  I’m working on how we can post video to the blog, but for now you could post it to your AFS account and link to that from your submission.

Due 23:59, Monday.  Let me know ASAP if you have a conflict and will be submitting late, if you talked to me after class please send me email as a reminder.

04 – class notes, 7 Sep 2017 — Arduino Analog

04 – class notes, 7 Sep 2017 — Arduino Analog

Boring Bits

My office hours are noon to 3 this Friday (8 Sep) but I can come in at 11 if that works around a time conflict, just drop me email.

Arduino Documentation

The Arduino tutorial pages are a great resource.  In the Arduino IDE, go to File->Examples and you’ll find example sketches for, well, almost everything in Arduino.

Analog vs. Digital

In the previous class we talked about analog vs digital.  Digital only has to states: on or off, open or closed, or in the Arduino, 0 volts or 5 volts. We use pull-down resistors to force digital inputs to be 0 if they are not 5 volts.

Analog has a range between the states of digital.  A door can be half-open, a class can have final grades instead of being pass/fail, a party can range from quiet to loud depending on the people and the music.

Reading Analog Signals

Arduino Uno has six analog input pins labeled A0 to A5 that can read voltages between 0 and 5V.  Use analogRead() to read a pin, it will return a value between 0 (for no voltage) and 1023 (for around 5V).

The Arduino documentation has good circuit diagrams for setting up a potentiometer (or “pot”) and a photoresistor to be read on an analog input.  For now, only read analog signals powered by the Arduino 5V pin, outside signals might release the magic smoke from your Arduino.

To test your hardware, use the smallest sketch possible to read the analog input and write the information to the console:

// "const" is short for "constant" and means we can never change
// the value of dialPin. It's not something we would want to change,
// but making it "const" prevents us from doing it by accident

const int dialPin = 0;

void setup() {
pinMode(dialPin, INPUT);
// set up the serial console that we used in class


void loop() {
lightValue = analogRead(dialPin);

Writing Analog

When we read analog we get values from 0 to 1023 from pins A0 thru A5, however when we write analog we can only write from 0 to 255 and we can only use certain pins for output, which pin varies by the type of Arduino board.

const int ledPin = 6;
int ledValue = 0;

void setup() {
pinMode (ledPin, OUTPUT);

void loop() {

ledValue = ledValue + 1;

// a good example of using an if statement.
// the max value for analogWrite is 255, so if ledValue
// is over 255, reset it to 0
if (ledValue > 255) {
ledValue = 0;

analogWrite(ledPin, ledValue );

// the delay() statement can cause real problems in your actual script. While
// the delay is happening, the arduino does nothing, it's like hitting "pause"
// on a music player.

Exercise 2: Physical Computing as Foundation

First review the slides related to reaction and interaction.  (Slight correction: light switches can be interactive if they have the context of entertainment.)

Find and analyze an example of physical computing with a goal that is artistic or design based, less than a page and with links to the original.  It should only take 30-60min. Youtube is a great place to start, so are NYU ITP and IDeATe.  Due noon 7 September so I have time to review them before class.

If a project is an exercise or etude  for class it doesn’t qualify for this exercise.  What you’re looking for has to do something with interaction, preferably vaguely interesting, even if it’s just playing/entertainment.   Sandnoisedevice meets plenty of engineering requirements but it doesn’t hold long term interest as it’s more about the technology than the interaction experience or functionality.  If I could add something to this, it would a game where you generate music, something like Rez.  Or perhaps add a second device and use the two as consoles in a music competition game like DDR.

A sample format:

  1. basic description, elaborate on a title or use
  2. what is it supposed to do?
  3. how does it do this?
  4. does it work?
  5. how would you change it?

03 – class notes, 5 Sep 2017 — Arduino 1

03 – class notes, 5 Sep 2017 — Arduino 1

Boring Stuff

If you are required to go to the Tue/Thu presentations for School of Art, email me with the dates you’ll miss.  If it’s planned as a class lab day and there’s a presentation you want to attend, just let me know in advance.

School of Art party (7 Sep,2 017) is a class lecture/assignment day.  I’d advise attending class as we’re introducing analog inputs and outputs and the first real physcomp assignment.

My office hours are noon to 3 this Friday (8 Sep) but I can come in at 11 if that works around a time conflict, just drop me email.

Class Notes

Introduction to Arduino and digital sketches.

simple digital schematic

The code we used in class with extra comments:

// -*-c++-*-
The MIT License (MIT)

Copyright (c) 2014 J. Eric Townsend

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.



read and display status of two switches
0 == LOW == off
1 == HIGH == on

// a line that starts with "//"
/* or text that starts and ends with slash-star and star-slash */
// are called "comment" lines and are ignored by the Arduino

// First, we set up some "variables" that we will use to talk to the
// external hardware.

// A variable is a way of storing information in the Arduino
// that is easy for humans to understand.

// In this sketch we will also use a "const" variable. A const can never
// be changed in the program, but can be changed before you build
// a sketch. A "const var" is used for pin assignments and other things that
// rarely need to change, but it makes it easy to change them all in one
// line of code

// left switch on the PDF
const int switchPin = 2;
const int led1Pin = 3;

// right switch on the PDF
const int momentarySwitchPin = 4;
const int led2Pin = 5;

// now we start the sketch with setup()
// setup() only runs once. it's where we put all the code we only
// want to run once when the sketch starts.

// a pin can be either "INPUT" or "OUTPUT" and we define that in
// setup() because it will never change while the sketch is running
// (you'll see complex scripts on the Internet that do this in other
// places, but those are written by experienced or crazy Arduino people.)

void setup() {
pinMode (switchPin, INPUT);
pinMode (led1Pin, OUTPUT);

pinMode (momentarySwitchPin, INPUT);
pinMode (led2Pin, OUTPUT);

// loop() is where our sketch actually does something. The loop()
// repeats itself from start to finish as long as the Arduino is
// turned on.

void loop() {

// use digitalRead(pin) to find out if the input pins are on
// or off. We use the terms HIGH and LOW because we're
// actually measuring the amount of electricity reaching
// the pin, but for digital, consider it the same as ON and OFF.
// HIGH: pin is ON
// a switch is ON or we want turn ON a LED
// LOW: pin is off
// a switch is OFF or we want to turn OFF a LED

digitalWrite(led2Pin, LOW);

if (digitalRead(momentarySwitchPin) == HIGH) {
digitalWrite(led2Pin, HIGH);

if (digitalRead(switchPin) == HIGH) {
digitalWrite(led1Pin, HIGH);
else {
digitalWrite(led1Pin, LOW);


Exercise 1: Artist’s Statement

Due Midnight, Monday, 4 September 2017.   Submit your statement as a response to this post.  If you can’t submit a response, email me your statement at jtownsen@andrew and let me know you are having problems with the blog.

Work with your partner(s) to write a three or four paragraph artist’s statement about you, what you like, and what you’ve done.  Include your experience with electronics projects, art projects, or activities outside your major that reflect who you are as a person.

Golan Levin and Hiroshi Ishii have good summaries of complex, massive careers.

A good guide to writing statements.

Here’s a one-paragraph statement I use on my resume:

“I am a designer, maker, and arts-engineer, with a professional interest in using, designing and evangelizing new tools for creativity. I have more than 20 years’ experience developing projects with DIY technologies and other arts-engineering workflows, including software development, electronics design, computer-aided design, and digital fabrication. For the past eight years, I have directed a small consultancy in Pittsburgh, Functional Prototype, which creates proof-of-concept models, working prototypes, and customized physical interaction devices. My personal and professional projects range from industrial design products and open-source software to art-cars and music performance. I run a clean, well-organized studio; I have a very healthy respect for safety; and I love to empower people by teaching them how to create their own circuits, software, clothing, and costuming accessories.”

02 – class notes, 31 Aug 2017 – Circuits 101

Class Notes, 31 Aug 2017 – Circuits 101

Boring Stuff

jet’s office hours:  Fridays, 1-4, IDeATe Lab.

Class Notes

Basics of circuit drawings and making circuits.  There’s an excellent reference at Sparkfun.  Print out this graphic: and put it on the inside cover of your sketch book:







01 – notes 29 Aug 2017

ASSIGNMENT:   We skipped this very important topic in class because of networking issues.  Please read our code of conduct.  If you are not a CFA student please ask me in class or in person if you have any questions or concerns about this policy.


Golan’s TED talk

Class Notes, 29 Aug 2017

Boring half

Review the class syllabus including rules for attendance and grading.

We will add students to the blog on Thursday so you can ask questions or comment on notes or projects.

What is physical computing?

From simple to complex:

  1. light switch – simple circuit: power, switch, light
  2. electric alarm clock – shows the time, one can set the time with switches
  3. toaster oven – thermistor detects temperature, knob selects desired temperature, electric coils heat the interior
  4. DDR / game controllers – complex switches with visual or haptic/tactile feedback (vibrations)
  5. automated audio mixing board – ignore the music slang and look at the interaction between control knobs and sliders and how the board can rearrange them based on a recording
  6. メカ

Where/why does physical computing matter?

Physical computing has support in places like the Exploratorium.

Art and design + engineering and robotics ==> physical computing projects.

Golan’s Double-Taker


Daniel Rozin’s interactive mirrors.

Haptics class demo of a new product.

We will go over the artist’s statement assignment in detail on Thursday.