Physical Computing

P Comp Final - Sound Tent - Final Documentation

We've finally wrapped everything up for finals and the show, so now I've gotten around to putting all the documentation together. Here's a recap of the Sound Tent at the 2017 ITP Winter Show. Continue reading to see the details of our final results.


Update to P Comp Final - Putting Everything Together

The last couple weeks have been dedicated to taking our breadboard prototype version of the Sound House and turning it into the actual piece. I'll talk about the updated system diagram and BOM, the user testing from last week, and our progress with fabrication.


P Comp Final - Initial Project Plan

The concept for the final project is structure that is inspired by the branching design of a tree and creates sound and lights when the user touches it. Here is the cardboard model Brandon and I are planning to bring to class for play testing.

We are planning on letting the user approach the piece with the instruction to make sound. We will observe what the user expects to happen and how they react to what we designed for this interaction prototype. Read more to see our initial plan for completing the project.


Cube Switch Game Update - Code Is complete

The code and the circuit for the game is complete. We only need to fabricate the cube and run the Arduino wirelessly using Bluetooth. The game starts by hitting the start button all the way on the right. The user must hit the button of the corresponding LED within the allotted time. This amount of time shrinks with each button press until the user loses, at which point all the LEDs will flash.


Cube Switch Game Update - No Timer Yet

An update to the progress of the game we are making for our midterm P Comp project. We currently have the circuit working without any count down timer. In the video below you can see that I am hitting the start button on the far right to activate the game. Next, I am matching the button I press to the LED that is lit up.

You have noticed that the analog pots are now replaced with buttons, and this was done just to simplify. As time allows, we will make some functions to allow us to switch out the buttons for different analog sensors.

Beginning Stages of Cube Switch Game

For the P Comp midterm, Marco Wylie and I are working on a game that is kind of mash-up of bop-it and a fidget cube. The device will be a box with LEDs and various switches/buttons on 5 sides (one side will have a handle and the on/off and start buttons). Our intention for how the user will interact with the game is below.

  • Flip the power switch to on.
  • Press "start" button to activate it.
  • An LED on a random side will light up and the user will have 10 seconds to hit the switch on the corresponding side.
    • If the user successfully hits the switch in time, another random side will light up and the user will have 9 seconds to hit the switch on that side... and so on. The time to hit each switch will decrease by 1 second every time.
    • If the user misses the switch in the allotted time, they lose and all the LEDs will flash. The game is over.
  • Once the game ends, the user can hit the start button to play again. Or turn off the power when he/she is done.

I am currently working on building the basic circuit and Arduino program for this. Here is the circuit that I built. It has pots, buttons, and LEDs that are each connected to the appropriate digital and analog pins.

So far I have set up the code so that I can get the LEDs to light up randomly when a button is pressed. I will need to add to the code so each LED is tied its button and so that it is connect to a timing system. Here is a short video and the code I have so far for the random LEDs lighting up.


Automated Scissors - Updated!

Since this was a catch up week, I worked on fixing up my automated scissors project to reflect my original intent. This means I solved my problem of making my LED blink while the servo was in motion.

It turns out that using code for "blink without delay" solved my problem. However, it still took me an embarrassingly long time to figure out where to slide this piece of code into the rest of my Arduino sketch. I initially had it running outside of my loops to make the servo move and had it run when the "swtichState" variables were HIGH. I think this didn't work because the loop that moves the servo had to completed before doing anything else. I also tried using Tom Igoe's Interval library, which I couldn't make work for only the button press. Finally, I moved the blink without delay code into the right spot and my servo and blinking LED combination works! It needed to start right before the servo begins to move inside of the loop. Here it is working with the code below.


Automated Scissors

To follow up on my previous issue with LED blinking... I decided instead of flashing, the LED should stay on to indicate when the servo is moving. I did explore a few methods for blink without delay using millis(), but I had trouble making it only blink when the button was pressed and only for the duration of the servo's motion. Anyways, I automated a pair of scissors using a servo. It runs at two speeds depending on how fast you want to cut some paper. Here is a gif of it in action.


Working with Servo Motors

I am currently working on this week's project for Physical Computing and I am running into some issues with servo motors. Specifically, how I can do other things while the servo motor is running.

First, I'll go over what I've done so far to check that certain parts of my circuit and code are definitely working. I started by making a circuit to control the servo using a potentiometer. Before putting in a servo, I used an LED to make sure I wired the potentiometer correctly.

Next, I swapped out the LED for my servo and updated my code to use the servo library.

All of this was working great. So I know for this week's project I want to have a servo that will go through its motion and then return to the original position after it completes its travel. I am able to get this working as shown below.

And then because I will have an option (via push buttons) to choose a slow or fast speed, I want the LED to blink either fast or slow accordingly. I added the LED blinking code using delays, but it slows down my servo's motion to a crawl.

I know it's going through the delays each time it loops to move my servo, so I am looking into ways to avoid using delays to get my LED to blink. Or is it only possible stop the slowing down by running one output at a time? I doubt it, so I'm going to keep looking into solutions.

Public Interface Observation - Subway Turnstiles

I observed a some turnstiles where people swipe their Metrocard to enter the 4th Ave/9th Street subway station in the afternoon. This station is not as as high traffic as some stations in Manhattan, so people do not typically queue and crowd around the turnstiles. I think this is reflected in that there are not as many turnstiles, though I would assume that they are designed for efficiency, so people can get through as quickly as possible, and to be foolproof, to ensure fare is paid, without being too inconvenient to use.


Light Level

This week, I worked on using both digital and analog components with my Arduino. I wanted to use a photoresistor, an analog component, but I first started all with digital inputs to make sure I wired and programmed my Arduino correct. I initially forgot to connect my switch to high voltage, which caused the signal from the button switch to be inconsistent. I fixed the issue after noticing my LED not lighting properly. I made this code:

And after fixing my button switch circuit, it worked to light up my LED.

Next, I knew I needed replace the button switch, except I would need to wire it to the analog pins on the Arduino. I wanted more lights to light up based on how much light the photoresistor sensed. If it sensed more light, then more of the LEDs would light up.  Here is what my circuit diagram looks like:

And then this is the code I created:

Which then yielded this:

Lighting Up An LED

This week, I worked on creating some simple circuits with an LED. First I started by setting up my breadboard, using my Arduino to provide 5V power to the board.

I first started by making a circuit with an LED. I knew I drew my circuit diagram first, so I could see how to lay out my components on the board. I used a 220Ω resistor because I knew it would lower the current to 22.7mA using Ohm's Law. I grabbed the LED from the shop, so I'm not sure of what its specs are, but most LEDs seem to have a forward current of 20mA.

I translated this to my breadboard, and the LED lit up!

Next, I added a switch to my circuit diagram.

I used a button switch and it was a success!

What Is Interaction?

Chris Crawford defines interaction as “a cyclic process in which two actors alternately listen, think, and speak” [1]. Bret Victor’s rant on the future of interaction design focuses on how humans might interact with tools by using our hands to interact them physically. I agree with Crawford's idea about physical interaction being cyclical. Humans take the flow of information using our senses (listening), we process it in our brains (thinking), and then we react in some way (speaking). On the other hand a device would be doing the same process except by taking inputs from sensors, following programmed instructions, and then creating an output. This back and forth does make up the physical interaction between the two actors that Crawford talks about.