Hippity Hoppity Final Project Conclusion

The project was fun to make and it was something I have never done before.

Working with LED lights is a fun activity and I am planning on furthering my studies on that, as well as on projection mapping.

Next time, I will try to sync the LED lights with the projections to add more of the wow factor to the project. Perhaps, interactivity is also going to be the next step.

There were problems with syphon library in Processing, but it got resolved. The processing part was fairly easy to make, but the next step for me is going to be syncing all three parts (leds, processing, and the clip) together.

All steps of the project see here (INSTRUCTABLES)

Bandmachine

 

 

 

Bandmachine: Any Household Object Can Be An Instrument

The Bandmachine uses vibrating motors (but can be fitted with other components such as solenoids) that can be put in on or attached to household objects such as boxes, bottles and cans, to transform them into musical instruments. Along with the Arduino device, a Processing visualizer accompanies and follows along with the rhythm of the Bandmachine.

DSC_0286

Rhythm controllers: Potentiometers

DSC_0288

Instruments: Vibrators
DSC_0287DSC_0289

The only components required are:

  1. -Arduino Uno
  2. -potentiometers
  3. -vibrators (or other sound making components)
    BandMachinePrototype_bb

Arduino code:

int potA = A0;
int potB = A1;
//int potC = A2;
//int potD = A3;
int potAVal = 0;
int potBVal = 0;
//int potCVal = 0;
//int potDVal = 0;

int ledA = 13;
int ledB = 12;
//int ledC = 11;
//int ledD = 10;

boolean AOn;
boolean BOn;

long startTimeA;
long startTimeB;
//long startTimeC;
//long startTimeD;

void setup() {

Serial.begin(9600);
// initialize digital pin 13 as an output.
pinMode(ledA, OUTPUT);
pinMode(ledB, OUTPUT);
//pinMode(ledC, OUTPUT);
//pinMode(ledD, OUTPUT);
startTimeA = millis();
startTimeB = millis();
//startTimeC = millis();
//startTimeD = millis();
}

// the loop function runs over and over again forever
void loop() {

int potAVal = analogRead(potA);
int potBVal = analogRead(potB);
//int potCVal = analogRead(potC);
//int potDVal = analogRead(potD);
Serial.print(potAVal);
Serial.print(“;”);
Serial.print(potBVal);
//Serial.print(“;”);
//Serial.print(potCVal);
//Serial.print(“;”);
//Serial.print(potDVal);
Serial.println(“”);
if (millis() – startTimeA > potAVal) {
AOn = !AOn;
digitalWrite(ledA, AOn);
startTimeA = millis();
}

if (millis() – startTimeB > potBVal) {
BOn = !BOn;
digitalWrite(ledB, BOn);
startTimeB = millis();
}
/*
if (millis() – startTimeC > potCVal) {
BOn = !BOn;
digitalWrite(ledC, BOn);
startTimeC = millis();
}

if (millis() – startTimeD > potDVal) {
BOn = !BOn;
digitalWrite(ledD, BOn);
startTimeD = millis();
}
*/
delay(45);

}

Processing visualizer code:

import processing.serial.*;

float vizMinSize = 50;
float vizSize = vizMinSize;

int vizMinDet = (int)2;
int vizDet = (int)vizMinDet;

int vizMaxFill = 230;
int vizFill = vizMaxFill;

float bgMinFill = 0;
float bgFill = bgMinFill;

Serial port;
int serialVal;

int val0, val1, val2, val3;
int timeVS, timeVD, timeVF, timeBGF;
void setup() {
size(1920, 1080, P3D);
frameRate(25);
println(Serial.list());
port = new Serial(this, “COM4”, 9600);
}

public void draw() {
readValues();

shapeMode(CENTER);

background(bgFill);
strokeWeight(10);
strokeJoin(ROUND);
strokeCap(ROUND);
stroke(0, 50);
translate(width/2, height/2, 0);
fill(vizFill);
sphereDetail(vizDet);
sphere(vizSize);

//decrements
//sphere size
if (vizSize > vizMinSize) {
vizSize = vizSize – 10;
}
//sphere detail
if (vizDet > vizMinDet) {
vizDet–;
delay(65);
}
//sphere color
if (vizFill < vizMaxFill) {
vizFill = vizFill + 5;
}
//background color
if (bgFill > bgMinFill) {
bgFill = bgFill – 5;
}

if (val0 >=5) {
if (millis() – timeVS >= val0) { // Increased size
vizSize += 75;
timeVS = millis();
}
}

if (val1 >=5) {
if (millis() – timeVD >= val1) { // Increased detail
vizDet += 4;
timeVD = millis();
}
}

if (val2 >=5 && vizFill>=0 && vizFill<=255) {
if (millis() – timeVF >= val0) { // Increased sphere color
vizFill -= 25;
timeVF = millis();
}
}

if (val3 >=5 && bgFill>=0 && bgFill<=255) {
if (millis() – timeBGF >= val1) { // Increased background color
bgFill += 25;
timeBGF = millis();
}
}
}

public void readValues() {
if (port.available() > 0) { // If data is available,
String val = port.readStringUntil(‘\n’); // read it and store it in val

if (val != null) {
// Split info (received as ie: 125;255)
println(val);
val = trim(val);
String[] values = val.split(“;”);
println(values.length);
if (values.length == 2) {
println(values[0], “/”, values[1]);//, “/”, values[2], “/”, values[3]);
val0 = Integer.parseInt(values[0]); //sphere size
val1 = Integer.parseInt(values[1]); //sphere detail
//val2 = Integer.parseInt(values[2]); //sphere color
//val3 = Integer.parseInt(values[3]); //background color
}
}
}
}