Note: “codebook” entries below are verbatim pasting of all of the code we used in class. It’s possible they may not compile (i.e. may have errors) if we left things unresolved, or were writing pseudocode, etc.

Class 1, Wednesday 1/17/18: intro

  • Introduction to course content, policy, and housekeeping (with reference to the course website’s home page)
  • Go around sharing names, pronouns, things people have built
  • Quick overview of the Phys Comp Lab space (electronics, tools, resources, storage)
  • Arduino Uno board tour (pins, components, ports, LED indicators)
  • Navigating the Arduino IDE (Integrated Development Environment)
  • Writing and uploading our first blinking sketch

Homework 1 assigned, due at start of class 2

Our first blinking sketch:

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(500); // half second delay
  digitalWrite(13, LOW);
  delay(100);
}

// S = dit dit dit
// O = dah dah dah

Class 2, Monday 1/22/18: volts that jolts

  • Quick review of submissions of interesting/intriguing Arduino projects at student work site
  • First foray into electronics: drawing schematic elements
    • wire (a.k.a. trace)
    • node
    • switch
    • resistor
    • LED
    • diode
    • motor
    • photocell
    • battery
    • ground
    • potentiometer
  • Volts are pressure that push amps along a conductor
  • Conceptualizing electrical flow in a simple circuit with schematics
    • Power supplies may be drawn as one unit (common with batteries), or broken into separate halves
    • There are often multiple “topologically equivalent” ways to draw a circuit, all of which will describe the same electrical flow
  • Building AND and OR gates in hardware (circuit stick activity)
  • How to use a breadboard and jumper wires (these, along with storage bins, are handed out)
  • Always maintain sufficient resistance between 5V and GND.
  • Add more than one LED output to our blink sketch
  • Add a potentiometer input and read it via Serial feedback

codebook: simple analogRead()

void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(A0, INPUT);
  Serial.begin(9600);
}

void loop() {
  int potVal = 0;
  potVal = analogRead(A0);
  Serial.println(potVal);
  delay(50);
}

Class 3, Wednesday 1/24/18: more volts, more jolts

  • Housekeeping
    • establishing lab hours
    • general policy: help your neighbors!
    • weekly time expectation for the course is ~10 hours
    • materials available with class budget from Lending
  • Analyzing the electricity flow in a potentiometer
    • Voltage falls across a resistor
    • Current into any node equals current out (unless the electrons find another place to run to)
  • The Arduino has practical limits as to how much current it can supply: aim for ~20mA per digital pin (maximum of 40mA), and ~400mA total across all of the I/O pins. The 5V pin can supply ~400mA when the Arduino is running on USB power, or up to ~900mA when it’s running from an external 7V power source. (Or so says Stack Exchange.)
  • Care and feeding of V=IR
  • analogRead() data (via Serial) and DMM (digital multimeter) activity, subtitled The Arduino is a Volt Meter
    • While we’re there, learning how to use the continuity setting on the DMM
  • Wiring up a switch (students get SPDT slide switches from electronics drawer)
    • Don’t leave that input floating, and
    • don’t run 5V into ground either.
    • Instead, build a voltage divider with a pull-up or pull-down resistor. (students get 10kΩ resistors from drawer)
    • digitalRead() will tell you the switch’s state. Capture its value with an int or boolean variable, and then use that variable to drive an if statement or whatever other logic you’d like.
  • Homework technical assignment for Monday briefly reviewed (“flipped classroom” explanation of time expectation)
  • Sunday morning (10am–noon) lab hours with Zach this week

Assignment of Project 1: Surprise, and project partners announced

Homework 2 assigned, due at Class 4

codebook: a simple digitalRead() with Serial feedback

void setup() {
  pinMode(7, INPUT);
  Serial.begin(9600);
}

void loop() {
  int switchRead = 0;
  int potRead = 0;
  switchRead = digitalRead(7);
  Serial.print("potRead = ");
  Serial.print(potRead);
  Serial.print(" switchRead = ");
  Serial.println(switchRead);
  delay(50);
}

Class 4, Monday 1/29/18: hardware party

  • Share out homework solutions (hardware and software)
  • Using data gathered by a sensor to drive behavior: first read the world, then formulate a response, then execute it. Write this in comments first, then code second. (Thanks to Jet for that suggestion.)
  • Review: we have covered analogRead(), digitalRead(), and digitalWrite(). The missing one, which we now cover: analogWrite() and PWM.
  • Using global const int variables for pin numbers is a good habit
  • Using a hobby servomotor (tutorial) (servo motors handed out)
  • Driving that servomotor with potentiometer input and map() function
  • Reading resistor values from their colored bands
  • Parts handed out:
    • hobby servomotor
    • ultrasonic ranger
    • ADXL335 accelerometer
    • ULN2803 transistor

Class 5, Wednesday 1/31/18: work day

  • Inventower comes to show off the inventory search system ideate.inventower.com
  • Documentation requirements review
  • Quick soldering lesson
  • Quick handsaw demonstration
  • Work day! Project 1 is due the following class.

Class 6, Monday 2/5/18: Project 1 crit

  • Note: RZ will not hold office hours today (2/5) or next Monday (2/12)
  • Project 1 presentations and crit

Homework 3 assigned, due 10pm Tuesday, Feb. 6th

Details available at Homework 3 page

Class 7, Wednesday 2/7/18: DSLR photography and guest speaker Laura Poskin

  • WordPress submission permissions note
  • First half of class: DSLR photography tutorial
  • Second half of class: guest speakers Laura Poskin MPSG and Shayna Gleason from Age-Friendly Greater Pittsburgh

Class 8, Monday 2/12/18: odds and ends

  • Follow-up discussion from Laura Poskin’s visit
  • We have established our JCC field trip days, as posted on the main course calendar. We will plan to meet at 9am on these days so that we can walk together to the 61A/B/C/D bus stop and travel together to the JCC, have a session there 9:30–11am, and then get back to campus by 11:20.
    • Wednesday, Feb. 21st
    • Wednesday, Apr. 11th
    • Wednesday, May 2nd
  • Since our first visit is in a week and a half, let’s be sure not to destroy/deactivate Project 1 pieces any more than needed so we can bring them along to show off
  • Journey through the datasheet (Joseph helps explain some transistor basics)
  • Separating high voltages from 5V on a breadboard
  • Building a few circuits “in hardware” and then following up in “software” with a different assignment
    • Review: button schematic

Homework 4 assigned (basic logic in software)

Class 9, Wednesday ♥ 2/14/18: juggling timing without delay() and mechanical exploration

  • Please update your WordPress posts so the images are the right size
  • Reviewing Homework 4 outcomes, then using the voting machines to do some quick classroom opinion polling
  • Managing multiple simultaneous routines; event loops (Blink Without Blocking); millis() and not delay()
  • Mechanics lesson: toy dissection!

Homework 5 assigned, due at start of Class 10 (Monday, Feb. 19th)

Project 2 assigned, due at start of Class 14 (Monday, Mar. 5th)

codebook: running an event on a schedule

(note: the below code is what we wrote together in class; there is further guidance and explanation at the “Blink without blocking” Code bite)

unsigned long timer = 0;

void setup() {}

void loop() {
  // something I want to run every second
  if (millis() - timer >= 1000){    // greater than or equal!
    // this happens once per second
    timer = millis();
  }
}

Class 10, Monday 2/19/18: overall documentation feedback and Project 2 discussion

  • Quick review of exemplary aspects of Project 1 documentation
  • Grades and comments for Project 1 to be emailed after class.
  • Common problems:
    • schematics not clear enough, or had errors (switches not drawn properly, unlabeled voltage on a power supply, many others)
    • code wasn’t formatted correctly, or would not compile due to HTML errors (documentation instructions worked fine for me on Mac and PC…)
  • Review Homework 5 quickly; students who need help should come to office hours!
  • Prep for Wednesday field trip to JCC:
    • get to class at 9:00am because we’re walking out the door at 9:05am. Later than 9:05am, you’re tardy and need to figure out your own transportation up the hill
    • Let’s aim to bring at least 3 or 4 projects—who wants to volunteer?
  • Voting on due date for Project 2. Two options:
    • Project 2 is due Wednesday, Feb. 28th; documentation due Monday Mar. 5th which is also a review day; practicum exam on Wednesday, Mar. 7th.
    • (winning option by vote) Project 2 is due Monday, Mar. 5th; no specific review prior to practicum exam on Wednesday, Mar. 7th; and documentation due Saturday Mar. 10th at noon.
  • Individual Project 2 ideation discussion one-on-ones with Zach and Joseph

Class 11, Wednesday 2/21/18: field trip!

  • First field trip to Squirrel Hill JCC to meet with our older partners!

Class 12, Monday 2/26/18: odds and ends, and work day

  • Debrief from JCC field trip
  • Leftover tidbit: why use unsigned long variables to store millis()?
  • Software debouncing (alternative: hardware debouncing with an RC filter circuit)
  • Work session for remainder of class

Codebook: a very simple debounce, and a simple latch (runs once on switch push)

const int SWITCHPIN = 3;
int lastRead = 0;

void setup() {
  pinMode(SWITCHPIN, INPUT);
}

void loop() {
  int switchVal = digitalRead(SWITCHPIN);

  // the delay method of debouncing (simple, lazy, mostly works)
  if (switchVal == HIGH){
    delay(3);
    // code that would run when the switch is pushed
  }

  // test for a change (edge detection)
  if (switchVal == HIGH && lastRead == LOW){ // the state changed!
    delay(3);
    // this code only runs upon initial button-push, it doesn't keep running
  }
  // update lastRead appropriately
  lastRead = switchVal;
}

Class 13, Wednesday 2/28/18: work day

  • Project 2 work session

Class 14, Monday 3/5/18: Project 2 crit

  • Project 2 due date and crit

Class 15, Wednesday 3/7/18: midterm exam

  • Midterm practicum exam

Class 16, Monday 3/19/18: …aaaaaaand we’re back!

  • Little fun welcome-back activity (see below)
  • Discuss the midterm exam, the retest, and grades at this point. Reweighting.
    • Why do we test this material in this way? Why the time pressure?
    • Histograms of class performance
    • The test was useful! Showed gaps. Now we can go about filling them.
    • Content: handing back the exams, going over the questions, and doing the math together.
  • Midterm retest scheduled for class 19, Wednesday 3/28, during class time. Available to students who scored below 80 on the first midterm. For those who take it, the retest will be worth 80% of the midterm exam grade, and the old test 20%.
  • Quick class poll: Carnival (booth and/or little zoomy cars) involvement?
  • Groups assigned; we balanced for diversity of experience, gender, and technical/design background as much as possible to make strong, multiskilled groups that will be effective at process, documentation, and technical execution. Posted here on the course student work site.
  • Old project disassembly (especially Project 1): take it apart if we don’t need it anymore! Once it’s well documented, let’s reuse the parts and free up some space.
  • Reminders about project parts:
    • reviewing parts (including a few new arrivals in Phys Comp stock)
    • reminder about what to do if something is out of stock (use the link at the bottom of the Phys Comp Inventory page to request replacement/refilling!)
    • reminder that we have some class budget to buy things—to buy stuff from Lending, simply charge it to the class budget by name, and to request other things, fill out the Course Purchase Request form
  • Overview of the second half of the course:
    • Goal: make a thoughtfully designed prototype that serves a particular person’s particular need, get feedback from that person, and iterate on it!
    • General structure:
      1. Meetings with older people in their home/community/elsewhere (week of March 26th)
      2. Documentation of this meeting (week of April 1st)
      3. Quick development and presentation of a “behaves-like” prototype (April 1st–10th)
      4. Presentation and crit of these prototypes with older friends (April 11th)
      5. Elaboration/improvement/changes/finalization of the final project artifact (April 16th–May 1st)
      6. Final presentations and crits with older friends (May 2nd)
      7. Final documentation (week of May 6th)

What we did over break

This zoo is weird. I went to the museum and saw dinosaurs? Then I flew to California where I ate burgers a lot. Then I went to a mountain? I went over to Nebraska where I toured Chicago and I drank milk. Wow! I did an amazing shark.

Class 17, Wednesday 3/21/18: squash that bug

  • General debugging techniques and approaches: test small units, and localize problems!
  • Tiny note: you can pull up an input in software with pinMode(pin, INPUT_PULLUP)
  • Stepper motors (following the stepper tutorial)
  • Preparing for interviews/visits with older friends
    • Reviewing the current instruction suggestions, and modifying it as a class
  • Matching groups to older people! (names picked out of a hat)

Class 18, Monday 3/26/18: meeting/interview prep (optional class)

Class 19, Wednesday 3/28/18: midterm retest

  • Midterm retest offered for students with scores less than 80 points on the original midterm exam. (Class attendance isn’t required for any student not taking the retest.)

Class 20, Monday 4/2/18: group check-ins and beginning to build prototypes

  • Quick group discussion and recap from last week’s meetings with older friends, with reference to everyone’s blog posts
  • Discussion and elaboration of prototyping goals, with reference to this final project assignment section
  • Reiteration that any parts ordering needs to happen early
  • Individual group check-ins with Zach and Joseph, and work day 1 for first round “behaves-like” prototypes

Class 21, Wednesday 4/4/18: work day 2 for prototypes

  • Fun thing for anybody who’s interested: relevant-to-class Innovation Week Event at the Children’s Museum of Pittsburgh today 2–5 p.m.! The event is free of charge.
  • Interested students or groups may present class projects at Meeting of the Minds on May 9th; register here by April 10th and select “IDeATe Presentation” as the presentation type
  • Each team takes ~15 minutes to plan the next six days out on paper
  • Work day 2 for prototypes
  • Keep taking pictures as you go! Too many pictures is not a problem but too few is!

Class 22, Monday 4/9/18: work day 3 for prototypes

  • IDeATe asks that you please fill out this quick survey on informal learning spaces on campus
  • Brief review of presentation expectations for Wednesday
  • Meeting documentation feedback to be emailed out after class today.
  • Keep taking pictures as you go! Too many pictures is not a problem but too few is!

Class 23, Wednesday 4/11/18: formative crit at the JCC

  • 9:30–11 a.m. formative crit with older friends at the JCC
  • Each group presents for 3–5 minutes and gets critique, feedback, and advice from the group as a whole
  • Additionally, each group has meeting time with their older friend to get more direct feedback

Class 24, Monday 4/16/18: JCC debrief and group planning

Class 25, Wednesday 4/18/18: finish planning check-ins and final work day 1

  • all groups finish reviews of their work plans with Joseph and Zach
  • work day 1 with the rest of the day

Class 26, Monday 4/23/18: final work day 2

  • Last day to reasonably order any parts needed for final project

Class 27, Wednesday 4/25/18: final work day 3

  • Keep taking pictures as you go!

Class 28, Monday 4/30/18: final work day 4

  • Keep taking pictures as you go!
  • Office hours: RZ on Monday 4/30 4:30–6:30 p.m. as usual; Joseph Tuesday 4/31 4:30–6:30 p.m. as usual; RZ immediately following Joseph’s, 6:30–9:30 p.m. for last-minute help
  • Final presentations will be rotating around, with lots of time for writing comments, which you’ll get afterwards; your final documentation will include a section where you responding to some of these comments.
  • Tuesday, May 8, 5:30–7 p.m. in Phys Comp: collective IDeATe class public shows with Profs. Byrne and Townsend’s classes. At least one member per group should attend.
  • Parts still being shipped (primarily power supplies) should arrive today; RZ will email out when the parts come in.

Class 29, Wednesday 5/2/18: final presentation and crit

  • final presentations with older friends and invited guests at the Squirrel Hill JCC 9:30–11 a.m. in the Katz Auditorium in the Robinson Building (entrance on Darlington Rd.)