Jeff Feddersen Fall 2022

Welcome

Welcome! I’m very excited to be teaching Physical Computing again this year. It’s material I love and use a lot. I created and teach two other courses in the Physical Computing Area: Energy and Time. I’m curious about every aspect of how things are made – how materials can be shaped into useful and beautiful forms, how sensors can perceive the world, how code can be crafted to run on processors and affect the world.

Gif from last years intro video.
Me in my workshop surrounded by pcomp stuff.

Recently there’s been an explosion in tools available to beginners for embedding computation into just about any project imaginable. It can be a bit overwhelming – electronics! programming! so many boards to choose from! – but this course lays a foundation for you to build amazing things now and continue developing creative and technical skills over a lifetime.

Class Times

Wednesday 12:10pm – 2:40pm

The introductory class is our chance to meet each other, and covers the overall course goals; the syllabus and class structure; and the parts and tools we’ll be using.

Contacting Me

My NYU office hours calendar. You’ll need to sign in with your NYU login to see it. I will schedule regular office hour appointment slots which you can book automatically once the semester starts.

My email: jeff@fddrsn.net, jf543@nyu.edu

Outside of office hours, email me and we can discuss issues and find a time to connect if necessary. Even before covid I did the majority of my office hours via video or over email. That said, I don’t work full time at NYU, and try to keep “normal” business hours balanced with other work and life.

Useful links

Pin out for the Nano 33 IoT
Pin out for the Nano 33 IoT

A note on how to use this site

There’s a lot, lot! of information at itp.nyu.edu/physcomp. Then there’s the whole rest of the internet, starting with Arduino HQ, going on to great sites like learn.adafruit.com and learn.sparkfun.com, not to mention infinite how-tos on YouTube (even Vimeo), data sheets for every component ever made, etc… It can get overwhelming.

With the ITP site, we’ve tried to do two things:

  1. Provide a week-by-week syllabus for the semester that takes you through the physical computing material in a logical progression. Each week has clear tasks, assignments for the following week, and links to labs, write-ups, and videos that support or explain the current material. Follow along here and you’ll be fine.
  2. Provide an organized set of materials covering the core physical computing topics, to serve as a first resource for any questions you may have as you study the subject. These live under the TopicsVideosResources, and Labs tabs. These materials are also linked to from the syllabus, but here they’re organized by subject matter, whereas the week-by-week syllabus is chronological.

Class Documentation

You’ll keep a blog online with documentation of your work for the class. This will include midterm and final documentation, responses to specific prompts in the syllabus, and periodic updates on lab work. While you’re not strictly required to post an update every single week, it is very helpful to post regularly so I can keep track of how you’re doing in the class. If I see an issue come up for multiple students we can make time to address it in the class.

When you’ve set up your blog, add the URL to the shared class spreadsheet (log in with your NYU account).

I’ll post a list of class blogs here:

KatKitayhttps://kkitay.notion.site/PCOMP-d6849975cb28461294eaad9dccd08c84
AthenaZhouhttps://www.notion.so/Physical-Computing-e830f4acab604fb6ba2da8c3159bcc19
DanielWaihttps://rough-buffer-c0b.notion.site/Physical-Computing-de1959a224ae4eecb1bac5cf570473c9
YiChunLanhttps://yichunlan.com/P-Comp_Week-List
NimaNiazihttps://nphyscomp.netlify.app/
RongshanLiuhttps://quilt-peripheral-c4d.notion.site/IPC-2aac64520b66470f8c6b01447b614983
SackonaFittshttps://sf3710.wixsite.com/my-site
KittyGuonagikoriizayoi614157203.wordpress.com/category/pcom/
HankHsuhttps://hank.super.site/physical-computing/week-1
LevitiaSinurathttps://lvtss.notion.site/0c0450c3e4514f50a37eea2b8f50ac83?v=bc8b3428ea7d4528855ecc6fb4afdb63
CarlaGuzmanhttps://cg4057icm.myportfolio.com
AlizaHabibhttps://alizasyed.notion.site/ITP-Physical-Computing-0a5abe879c8f46dbbeeff831e211f136
RannaAdhikarihttps://roasted-witch-26d.notion.site/PHYSICAL-COMPUTING-WEEK-1-2-174330f0bd3940fb984252075066b51f
KarinaChowhttps://shrub-gauge-55f.notion.site/ddc383db0f0c496fb53ec2da88f20a2a?v=c76975d31bef457d919cce941a4d0c00
ZeyBenbrahimhttps://www.notion.so/Physical-computing-1251b2b3bace4f7489a05f62e16bd31a
Your class documentation

Class Notes

Class 1

Class 1 slides:

Class 2

Class 2 slides:

Class 3

Note: We WILL NOT meet at the regular time in two weeks – class 5, October 5th. I will email the class with a plan to make up the material via: zoom meetings and in-person group meetings at ITP during the week the class would have meet. Thank you!

Close up of a bread board shown in class 3 with digital input, digital output, and analog input.
Close up of a board shown in class 3 with digital input, digital output, and analog input.
const int blueButton = 4,  //it's a nice idea to label things semantically. Avoid magic numbers.
          greenButton = 3,
          yellowButton = 2,
          pot = A7,
          fsr = A6,
          blueLED = 5;

void setup() {
  // put your setup code here, to run once:
  pinMode(blueButton, INPUT);
  pinMode(yellowButton, INPUT);
  pinMode(greenButton, INPUT);
  pinMode(blueLED, OUTPUT);
  Serial.begin(9600);

  //flash the LED to show the program is starting
  for (int i=0; i<5; i++) {
    //digitalWrite(blueLED, i%2==0); //Extra credit: what's happening here????
    digitalWrite(blueLED, HIGH);
    delay(100);
    digitalWrite(blueLED, LOW);
    delay(100);
  }  
}

void loop() {
  outputForPlotter();
  delay(50);
}

//Output data in a format that will plot nicely
//New for 2.0 - you can send comma separated list of key value pairs:
//"variable1:value1, variable2:value2..."
void outputForPlotter() {
  Serial.print("B:");
  if (digitalRead(blueButton)) Serial.print("100,");
  else Serial.print("0,");

  Serial.print("G:");
  if (digitalRead(greenButton)) Serial.print("300,");
  else Serial.print("200,");

  Serial.print("Y:");
  if (digitalRead(yellowButton)) Serial.print("500,");
  else Serial.print("400,");

  Serial.print("Pot:");
  int potValue = analogRead(pot);
  if (potValue>512) digitalWrite(blueLED, HIGH);
  else digitalWrite(blueLED, LOW);
  Serial.print(potValue);

  Serial.print(",otherAnalog:");
  Serial.print(analogRead(fsr));
  Serial.println();
}

//Output text in a human-readable format
void outputforMonitor() {
  Serial.print("B:");
  if (digitalRead(blueButton)) Serial.print("1");
  else Serial.print("0");

  Serial.print("\tG:");
  if (digitalRead(greenButton)) Serial.print("1");
  else Serial.print("0");

  Serial.print("\tY:");
  if (digitalRead(yellowButton)) Serial.print("1");
  else Serial.print("0");

  Serial.print("\t");
  Serial.print(analogRead(pot));
  Serial.println();
}

Class 4 Notes

Notes here

A depiction of two types of pseudo-analog output: a pulse width modulation signal and a frequency modulation signal.
A depiction of two types of pseudo-analog output: a pulse width modulation signal and a frequency modulation signal.

Class 5 notes

Important: Updated Class 5 Schedule. We will not meet at the regular time for class 5 on Wednesday October 5th. Instead, I will hold a make up in-person work shop in the Pcomp Lab area on Monday, October 1st, at 3PM (like the Pcomp resident help sessions). I will also be available after my Time class on Thursday, and via TBD drop-in times on Zoom prior to the next Class 6 on October 12th.

Class 8/9 Notes

Serial communication is philosophically interesting because it involves transmitting information between two parties. The signal is just a physical fact – like a voltage changing over time. What the changing voltage means involves an interplay between sender and receiver; between how it is constructed and how it is interpreted.

This is not a painting by Magritte.

Here are my Serial P5 examples: look for the most recent ones for what I’m showing in class!