Vinyl & controller setups are large and expensive.

 

 

Two audio track crossfade without beat/tempo match.

 

 

interactive textile interface – acrylic and silver-nano inks on polyester substrate.

 

 

Bluno Nano and CapSense arduino library.

Bluno can easily connect arduino sensors to Android & iOS. Although, this project is not serially connected to Unity on Android, the example code connects to an app created in Android Studio and the Bluno connects to Unity on iOS.

This program uses an initialization stage to calculate a baseline for each screen
printed touch sensor, then uses a multiplier to calculate a touch threshold. To
increasethe correctness of the sensor data, I will implement a touch calibration
step into the setup sequence.

#include 

// infinEight Driver
// Ty Van de Zande 2018

/*
 * CapitiveSense Library Demo Sketch
 * Paul Badger 2008
 * Uses a high value resistor e.g. 10M between send pin and receive pin
 * Resistor effects sensitivity, experiment with values, 50K - 50M. Larger resistor values yield larger sensor values.
 * Receive pin is the sensor pin - try different amounts of foil/metal on this pin
 */


// Arcitecture
// TBD

static int IN1 = 18;
static int IN2 = 17;
static int IN3 = 16;

static int ledGROUND = 23;
static int ledONE    = 21;
static int ledTWO    = 20;
static int ledTHREE  = 19;


int SENSE1;
int SENSE2;
int SENSE3;

long THRESH1;
long THRESH2;
long THRESH3;

float mult = 1.7;



void setup()                    
{
   pinMode(ledONE, OUTPUT);
   pinMode(ledTWO, OUTPUT);
   pinMode(ledTHREE, OUTPUT);
   pinMode(ledGROUND, OUTPUT);
   
   
   Serial.begin(9600);
   Serial.println("Prepping");
   initializeSensors();
}

void loop()                    
{
  updateSensors();
  //printSensors();
  digitalWrite(ledONE, LOW);
  digitalWrite(ledTWO, LOW);
  digitalWrite(ledTHREE, LOW);
  areWeTouched();     
  delay(10);                    
}

void  areWeTouched()
{
  if(SENSE1 > THRESH1 || SENSE1 == -2){
//    printSensors();
    digitalWrite(ledONE, HIGH);
      Serial.println("3");
  };
  if(SENSE2 > THRESH2 || SENSE2 == -2){
//    printSensors();
      digitalWrite(ledTWO, HIGH);
      Serial.println("2");
  };
  if(SENSE3 > THRESH3  || SENSE3 == -2){
//    printSensors();
      digitalWrite(ledTHREE, HIGH);
      Serial.println("1");
  };
}



void printThresh(int one, int two, int three)
{
  Serial.print(one);
  Serial.print(" . ");
  Serial.print(two);
  Serial.print(" . ");
  Serial.print(three);
  Serial.println(" ");
  
}



void updateSensors()
{
    SENSE1 = touchRead(IN1);
    SENSE2 = touchRead(IN2);
    SENSE3 = touchRead(IN3);
    // Array not working???
//     int SENSESTATES[] = {SENSE1, SENSE2, SENSE3, SENSE4};
//     int lisLEN = sizeof(SENSESTATES);
//     for(int i = 0; i < lisLEN; i++){
//        Serial.print(i);
//        Serial.print(":  ");
//        Serial.print(SENSESTATES[i]);      
//     }
}

void printSensors()
{
    Serial.print(SENSE1);
    Serial.print(" . ");
    Serial.print(SENSE2);
    Serial.print(" . ");
    Serial.print(SENSE3);
    Serial.println(" ");
}


void initializeSensors()
{
  int cts = 104;
  //int mult = 20;
  
  long temp1 = 0;
  long temp2 = 0;
  long temp3 = 0;

  for(int i = 0; i < 20; i++){
    updateSensors();
    //printSensors();
  }
  
  Serial.println("Collecting Summer Readings");
  for(int i = 0; i < cts; i++){
    if (i % 4 == 0) { Serial.print("|"); }
    updateSensors();
    temp1 += SENSE1;
    temp2 += SENSE2;
    temp3 += SENSE3;
  }

  Serial.println(" ");
  Serial.println("Averaging thresholds");
  THRESH1 =  mult * (temp1 / cts);
  THRESH2 =  mult * (temp2 / cts);
  THRESH3 =  mult * (temp3 / cts);
  printThresh(THRESH1, THRESH2, THRESH3);
  printThresh(THRESH1/mult, THRESH2/mult, THRESH3/mult);
  Serial.println(" ");
  digitalWrite(ledONE, HIGH);
  delay(80);
  digitalWrite(ledTWO, HIGH);
  delay(80);
  digitalWrite(ledTHREE, HIGH);
  delay(80);
  Serial.println("Ready!");
  
}


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Thank you to people who helped, and others!!!!
Golan Levin
Claire Hentschker
Zachary Rapaport
Gray Crawford
Daiki Itoh
Lucas Ochoa
Lucy Yu
Jake Scherlis
Imin Yeh
Jesse Klein
Dan Lockton
FRFAF
URO-SURF

Proposal

Title: InfinEight

Summary: An interactive rollup phone case that can be used to mix and mashup music.

Descriptive paragraph

The goal of this project is to design a fabric-based user interface that controls media on a phone. A phone is an incredibly fast processor and has access to millions of songs, but the screen is small and not usable for actions that incorporate a persons’ whole body. I will be designing an interactive electrical sensor system, boolean capacitive sensing to receive input. The interactions will be sent to my phone using a bluetooth chip to control a Unity Application.

YouR PLAN

How are you going to complete this project?  It can be an outline.

  1. Write a program for the Bluno Nano to send boolean capacitive values to my phone.
  2. Finalize interface design, and screen print conductive ink
  3. Unity visual of capacitive buttons being touched
  4. Use Unity to control music playback.
  5. If Unity does not work, I will use p5.js to write a program.

Materials Needed

Bluno Nano is the main additional component. I will additionally be screen printing the design.

Deliverables for Show

I will need the product, my computer, and my phone. Additional speakers would be nice, but are not necessary.

MEDIA for Show

Poster describing interaction, so people can play with the design!

Sketchbook Color Sliders

This sketch uses conductive silver ink to create capacitive sliders on paper. Three sliders can control Hue, Saturation, and Value to help a designer tactfully choose colors. The interface features a “tap in/tap out” button, so the user lifting their finger on the slider doesnt affect the color reading.

 

This interface is a sketch at bringing digital decisions, like RGB color,
into the physical world through tangible interaction.

The project features teensy 3.2’s touchRead() function for capacitive input.


As an attempt to reduce interference noise in the sensor system, a swatch of conductive fabric was added to the opposite side of the page; it was grounded to the the teensy. Sensor signal smoothing still needs works.

 

 

Assignment 2

This project is supposed to be an embodiment of Steve Reich’s Clapping Music. The code for this project has two versions. The first version works unreliably because it uses the delay function to time the LEDs. The second uses a helper function to time and illuminate the LEDs using millis(). This program does not even finish compiling though. It probably just needs debugging, but I am not sure. With the original program, the interrupt does not reliably switch the case. To continue this project, I will use solenoids to make a percussive sound.

 

vandezandeStateMachineInterrupt

 

Assignment 1 – Smoothing

 

 

For the software, my main goal is to modulize the requests or organization for information into separate functions. One function receives the current value from the sensor. A second function calls the initial function, and places the value into an array for the number of times, variable sampleSize. A third function iterates through the array and returns the mean of all values. The different function can be called to view the sample value in an organized table.
Code:

dataSmoothing-jan23

//Ty Van de Zande
//Simple Data Average
static const int sampleSize = 160;
int readings[sampleSize];
int sampleIndex = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
//straightData();
//buildArray();
//printArray();
meanArray();
delay(10);
}
// Averages samples array to output mean
int meanArray(){
int mean = buildArray();
mean = mean / sampleSize;
Serial.print("Mean: ");
Serial.println(mean);
return mean;
}
// Prints readings array in a nice format
void printArray(){
buildArray();
for(int i = 0; i&lt;sampleSize; i++){
Serial.print("||");
Serial.print(readings[i]);
}
Serial.println();
}
// Fills readings array with data from the sensor
int buildArray() {
int sum = 0;
for (int i = 0; i &lt; sampleSize; i++){
readings[i] = straightData();
sum += readings[i];
}
return sum;
}
// Live feed of data from sensor
int straightData(){
int tempIn = analogRead(A6);
//Serial.println(tempIn);
return tempIn;
}