Christina Elizabeth Hall

PComp Final- Dating Stories: An Interactive Film

Dec
22

My final project for Physical Computing and Intro to Computational Media was an interactive film that I worked on with Jina Jung called Dating Stories.

We are handing over the reins in the medium of storytelling to the observer by asking them to choose the direction of a first date.  – Creators

Description

This interactive film is a comedic, ‘choose your own adventure’-style narrative directed towards adults. The lead actress in the film, Christine, has two choices from her search on a popular dating app: will she go on a date with Douglas or Jared? Ultimately the individual observer gets to decide. By using the physical, interactive board, the observer has the ability to choose what path the date goes on in the film by moving the wooden piece from node to node. Their choices and full narrative are executed on the screen.

Process

Final Project Proposal

Build of Materials

Circuitry

What I learned from user testing:

We didn’t initially have a signal for the ‘start’ state on the board. This confused some people because they didn’t know if their action had an effect when they put the wooden piece on the board.  Originally, the first video started playing when the individual put the wooden piece on start, but there was no response on the actual board informing the individuals that they were doing to correct interaction.  So after the user testing, a week before the project was due, we implementing a pulsing glow of the two LEDs around the start node that disappeared when you placed the wooden piece on start.  We also cut the first scene down so that the first choice happens almost immediately after the user puts the wooden piece on start so that they understand from the first second how they are to interact with the board.

When the user is to choose a path, on the screen there is a split screen of the two options, and the two paths light up indicating that the film and board are waiting for their selection.  This feature was very successful in user testung and really informed the user as to when they were to interact.

Final Code hosted on Github

Here are some visuals from how we created the project:

Building the board

This was my original rough sketch of how I thought the board might look like (without images)

 

img_2689-1

With the image in mind above, Jina created this map for our board to be printed on acrylic

15311397_1110670792379387_2059597852_o

img_2791

We ended up cutting two acrylic surfaces: 1) to hold the magnetic sensors and neopixel LED strips and one board that would go on top as a face plate.  Are first attempt at laser cutting the board didn’t work, so we used it as the board to hold the sensors

15368889_1110670872379379_718949700_o

We had to also add some wood to support this sensor plate
15354152_1110670722379394_2038761544_o

We decide to velcro the arduino and board to the bottom of the acrylic sensor plate.  This below image is that plate flipped over

15399044_1113388685440931_1831360145_o

This is what the sensor plate looks like from above, with the magnetic sensors.  This was before we added the LED strips. They would go on top of where the paths are shown here.  The holes helped to direct where each LED should be so that they can be seen in the top plate.

kakaotalk_photo_2016-12-04-23-47-24_15

We put at magnet in the base of the wooden piece so that when it was placed on a node, the sensor would send the signal via serial communication to p5.js.

741b0012

 

Shooting the film

Here are the short boards I wrote for the film:

Image + Storyboard for Jared Scenario

Image + Storyboard for Douglas Scenario

We shot the entire film, which included seven different endings in an 8 hour shoot. Here are some stills from the day:

2b2-douglas-movie-good-00_00_27_13-still001 1-jared-setup-00_00_40_29-still002 s_m_choiceimage

Programming the board and the media in the browser

Here is my ICM post that talks a little bit more about my experience with the coding side of the project.

There was serial communication from the arduino to p5.js and back to the arduino which was something I haven’t done before. I learned a lot of new things while creating this project. Including how to think through and break down the code into small chunks to be able to create your desired effect.  This isn’t something we really go over in class, so I am happy that I am starting to get an intuition for this.

15369748_1114341565345643_265496125_o

We submitted our project to ITP’s Winter Show.

On the second day of the show, I was interested in seeing some of the statistics of what path people decided on more often.  I attached Mixpanel, an analytics platform and a company I used to work for, to see what paths viewers most often took. On the second day, the Winter Show was a four hour event. We had 80 people watch the film (according to the analytics). Below describes what paths were the most popular:

analytics

With 20%, the most popular ending was when Jared forgets his wallet and Christine has the pick up the tab after he drinks more than his fair share of beers.

Jared: Oh shoot… I think I forgot my wallet. Do you think they take Venmo?

Christine: You forgot your wallet? Don’t worry, I got it. <she walks away with the check>

Jared: I can Venmo you?

<Christine continues to walk away, not acknowledging his comment>

vid11-mp4-00_00_07_06-still001

Final Project: ICM

Dec
17
Dating Stories: An Interactive Film

For my final ICM project, I decided to combine my PComp and ICM finals to create an interactive, nonlinear film.

Dating Stories: An Interactive film is a comedic, ‘choose your own adventure’-style narrative created for adults. The lead actress in the film, Christine, has two choices from her search on a popular dating app: will she go on a date with Douglas or Jared? Ultimately the individual observer gets to decide. By using the physical, interactive board, the observer has the ability to choose what path the date goes on in the film by moving the wooden piece from node to node. Their choices and full narrative are executed on the screen in p5.js.

Here is what the physical board looks like:

741b0012

And here are some stills from the film:

1-jared-setup-00_00_40_29-still002 2b2-douglas-movie-good-00_00_27_13-still001

At certain points in the film, the viewer will see a split screen that gives them the opportunity to decide what the direction of the film goes in

s_m_choiceimage

This project comprised of filming the media, fabricating the board, programming the arduino from the physical interactions, and coding the the responsive media in p5.js.

What I learned from this project
  • How to use a development server
  • How to correctly work with the P5 IDE & git
  • How to effectively use the developer console. CMD + OPT + J all day

I really enjoyed having the opportunity to combine my final project for both ICM and Pcomp. Having the opportunity to use the tools form both of these classes really helped to pull this idea together.

I am hosting the p5.js and Arduino code on Github. Here is the location for the Dating Stories code.

Assignment 6: Mounting Motors

Dec
15

In our last class we reviewed the importance of correctly mounting motors on a project.

For this week’s assignment, we are asked to create something that involves a motor and the correct mounting of that motor.

Working with the Motor

As per Ben’s suggestion, immediately after class I headed over to the junk shelf to pick up an old CD-ROM component to strip it of it’s stepper motor.

Here is what the CD-ROM looked like after removing the case and many metal layers

img_2814

I extracted the motor, but wasn’t able to find any information about how much voltage it would take to power it online.  The only information on the motor were the numbers 010209. I took the motor to the floor, soldered a positive and negative lead on the motor and used a power source to determine that the motor can be efficiently powered with 5 volts.

The black piece below is the piece that held down the motor and I am surely keeping so that I can properly mount my motor

img_2819

Here is the motor remounted

img_2820

I’m interested in using the moving part for my project

Once I found out that this motor was actually a DC motor and not a stepper motor, I decided to scratch using it because it was too hard to slow down and I only wanted small movements in my project.


Project

I am really interested in using a motor to work with a Reveal the Message print. I wanted to ultimately use a motor that could easily be controlled with fine movements. With this said,  I ended up using a Servo since I already had one in my toolbox.

With my servo in hand, I just needed to find a mount for the motor.  At Tinkersphere I found this pan and tilt bracket:

img_2839

I got the servo working in the behavior desired with the following Arduino code:

#include <Servo.h>
Servo myservo;
int potpin = 0;
int val;
void setup()
{
 myservo.attach(9);
}
void loop()
{
 val = analogRead(potpin);


 val = map(val, 0, 1023, 0, 179);


 myservo.write(val);

delay(15);
}

I decided that I would use a box I already had instead of going and purchasing something additional.
img_2846

I drilled the mount and servo onto a wooden wall

img_2844

And mounted the wooden wall to the box.

I then added the Arduino to control the servo and breadboard in the box.  I also drilled a hole to insert the USB cable to power the Arduino

img_2848

img_2849

I used a hole punch to make the hole for the potentiometer and cut a whole for the top of the servo to punch through to spin the component. I went searching at the junk shelf for a knob to make the top of the potentiometer look more polished and I found this one that fit my potentiometer perfectly:

img_2842img_2850

Here is the image that I created and printed to reveal to the message.  I decided that a great way to use the servo in this reveal would be to use a CD with a red vinyl strip that would allow you to read the message when it was over top of it

img_2856

Here is the disc I had from a previous project. I simply added the red vinyl, the white, laser cut topper, and the servo mounting horn:

img_2855img_2857

I then simply attached the CD and made sure that when the potentiometer was turned that the words were revealed.

 

img_2865

 

Exploring Unity – 3D graphics used in gaming and VR/AR

Dec
12

For our last assignment, we were required to create a 3D character, use C# programming language to control the character, and put that them in an environment.

We used Adobe Fuse for character creation and Mixamo to apply pre-made animations.

This is my character, Jess at Burning Man in the year 3000, when the event will inevitably be hosted on the moon.

screen-shot-2016-12-12-at-4-25-58-pm

Jess can be controlled with the following key presses:

  • walk forward [ up arrow ]
  • walk backward [ back arrow ]
  • walk forward diagonally [ up arrow + left arrow, up arrow + right arrow ]
  • air-guitar playing animation [ key 1 ]
  • robot dance animation [ key 2 ]
  • fall flat animation [ mouse click ]
  • wait animation (randomly picks between two different options) [ key 5 ]

Here is the C# code for controlling the animations above:

using UnityEngine;
using System.Collections;

public class player : MonoBehaviour {
    

    public Animator anim;
    public Rigidbody rbody;

    private float inputH;
    private float inputV;
    // Use this for initialization
    void Start () {
        anim = GetComponent<Animator>();
        rbody = GetComponent<Rigidbody> ();

    
    }
    
    // Update is called once per frame
    void Update () {
        if(Input.GetKeyDown (1)) { 
            anim.Play (guitar_playing, 1, 0f);
        }
        if (Input.GetKeyDown (2)) { 
            anim.Play (robot_hip_hop_dance, 1, 0f);
        }
        if (Input.GetMouseButtonDown (0)) {
            anim.Play (fall_flat);
        }
        if (Input.GetKeyDown (5)) {
            int n = Random.Range(0, 2);
             
            if (n == 0) {
                anim.Play(WAIT01, 1, 0f);
            }
            else {
                anim.Play(WAIT03, 1, 0f);    
            }
        
        }

        inputH = Input.GetAxis (Horizontal);
        inputV = Input.GetAxis (Vertical);

        anim.SetFloat (inputH, inputH);
        anim.SetFloat (inputV, inputV); 

        float moveX = inputH * 20f * Time.deltaTime;
        float moveZ = inputV * 50f * Time.deltaTime;

        if (moveZ <= 0f) {
            moveX = 0f;
        }

        rbody.velocity = new Vector3 (moveX, 0f, moveZ);
    }
}