Introduction: Mega Vinyl Player
Mega vinyl player (by Dries, Laurens & Sven) - Interaction Design @ Mad-Faculty (Genk)
Arduino-powered project.
This large vinyl player powered by Arduino plays sounds depending on the higher / lower parts on the 'vinyl' (wooden plank). The difference in height is measured by a potentiometer. You're free to tweak the project as you wish.
IMPORTANT: This project was a matter of trial-and-error. Not everything might be perfect and it's more of an experiment. Feel free to change the process/code as you please. Follow your intuition! :)
Video:
http://www.youtube.com/watch?v=neUZw9xFHv4&feature=youtu.be
Materials required:
- Tape
- Arduino jumper wires (quite a few)
- Enough wooden planks to work with
Tools required:
- Illustrator
- Arduino (+ Processing)
- Tools to solder
- Milling machine
- Lastercutter
Process:
1. Start with making a design for your vinyl player. In Illustrator you can design a circle with tracks in it. In our project, we've chosen for two tracks. In these tracks, you design higher/lower parts. Don't forget to cut a circle in the middle - Here you can place a pipe which gives the support to make your box with the potentiometers turn around the mega vinyl player.
2. After you've made your flat 2D design, use a large milling machine to cut out your mega vinyl player. To give you an idea of an size: We used 120x120 centimeters.
3. Okay, now a difficult part: Design a way to make your box with potentiometer turn around the mega vinyl player and support itself. For example: We used a beam which is put around the pipe. At the end of the beam we glued a wheel.
4. Measure the length between your two tracks. This amount gives you an idea how to place your potentiometers, and how large your box will be. Now design a box with your two potentiometers sticking out of the box. In the box you have the Arduino and your jumper wires, together with a motor shield and your USB-cable. We use the motor shield to make the box together with beam move of course.
5. Bring it all together! When you've glued your potentiometer in the box, connect a piece of wood to it and add some weight on it, so that it always drops when there's a difference in height (see the pictures). You can use the lasercutter to make your box, piece of wood, ...
6. When you think you've got everything. Time to program!
Code:
Note: The code has been tweaked constantly. So there are a lot of stuff in the comments. Feel free to play around with it! ^_^
ARDUINO:
---------------
const int
PWM_A = 3,
DIR_A = 12,
BRAKE_A = 9,
SNS_A = A0;
boolean flag = false;
boolean flag1 = false;
void setup() {
// Configure the A output
pinMode(BRAKE_A, OUTPUT); // Brake pin on channel A
pinMode(DIR_A, OUTPUT); // Direction pin on channel A
// Open Serial communication
Serial.begin(9600);
}
void loop() {
// Set the outputs to run the motor forward
digitalWrite(BRAKE_A, LOW); // setting brake LOW disable motor brake
digitalWrite(DIR_A, LOW); // setting direction to HIGH the motor will spin forward
analogWrite(PWM_A, 255); // Set the speed of the motor, 255 is the maximum value
// read the input on analog pin 0:
int sensorValue = analogRead(A4);
int sensorValue2 = analogRead(A5);
// Serial.println(sensorValue);
if(sensorValue > 700 && flag == false){
Serial.print("1");
flag = true;
}
if(sensorValue < 700){
flag = false;
}
if(sensorValue2 > 160 && flag1 == false){
Serial.print("2");
flag1 = true;
}
if(sensorValue2 < 160){
flag1 = false;
}
// int sensorValue2 = analogRead(A4);
// print out the value you read:
/* Serial.print(sensorValue);
Serial.print(" + "); */
//Serial.print(sensorValue);
//Serial.print(',');
//Serial.print(sensorValue2);
//Serial.println();
}
PROCESSING:
---------------------
import processing.serial.*;
import ddf.minim.*;
import themidibus.*; //Import the library
MidiBus myBus; // The MidiBus
AudioPlayer[] music=new AudioPlayer[20];
int[] numbers = new int[20];
Minim minim;
int i = 0;
int a = 0;
int b = 0;
boolean play = false;
int teller =0;
int teller2 =0;
Serial myPort;
int test;
Boolean firstContact = false;
void setup() {
println(Serial.list());
myPort = new Serial(this, Serial.list()[4], 9600);
MidiBus.list();
numbers[0] = 67;
numbers[1] = 71;
numbers[2] = 62;
numbers[3] = 67;
numbers[4] = 62;
numbers[5] = 71;
numbers[6] = 71;
numbers[7] = 62;
numbers[8] = 83;
numbers[9] = 67;
numbers[10] = 67;
numbers[11] = 83;
numbers[12] = 72;
numbers[13] = 83;
numbers[14] = 67;
numbers[15] = 67;
numbers[16] = 83;
numbers[17] = 81;
numbers[18] = 81;
numbers[19] = 67;
/* int pitch = int(67);
int pitch = int(71);
int pitch = int(62);
int pitch = int(67);
int pitch = int(62);
int pitch = int(71);
int pitch = int(71);
int pitch = int(62);
int pitch = int(83);
int pitch = int(67);*/
minim=new Minim(this);
music[0]=minim.loadFile("1.mp3", 1024);
music[1]=minim.loadFile("2.mp3", 1024);
music[2]=minim.loadFile("3.mp3", 1024);
music[3]=minim.loadFile("4.mp3", 1024);
music[4]=minim.loadFile("5.mp3", 1024);
music[5]=minim.loadFile("6.mp3", 1024);
music[6]=minim.loadFile("7.mp3", 1024);
music[7]=minim.loadFile("8.mp3", 1024);
music[8]=minim.loadFile("9.mp3", 1024);
music[9]=minim.loadFile("10.mp3", 1024);
music[10]=minim.loadFile("11.mp3", 1024);
music[11]=minim.loadFile("12.mp3", 1024);
music[12]=minim.loadFile("13.mp3", 1024);
music[13]=minim.loadFile("14.mp3", 1024);
music[14]=minim.loadFile("15.mp3", 1024);
music[15]=minim.loadFile("16.mp3", 1024);
music[16]=minim.loadFile("17.mp3", 1024);
music[17]=minim.loadFile("18.mp3", 1024);
music[18]=minim.loadFile("19.mp3", 1024);
music[19]=minim.loadFile("20.mp3", 1024);
myBus = new MidiBus(this, -1, "Java Sound Synthesizer"); // Create a new MidiBus with no input device and the default Java Sound Synthesizer as the output device.
}
void draw() {
int channel = 0;
int test = numbers[teller];
int pitch = int(test);
int velocity = 127;
while (myPort.available() > 0) {
int inByte = myPort.read();
println(inByte);
if(inByte == 50){
println("test");
myBus.sendNoteOn(channel, pitch, velocity); // Send a Midi noteOn
delay(200);
myBus.sendNoteOff(channel, pitch, velocity);
teller++;
}
if(teller == 9){
teller =0;
}
if(inByte == 49){
println(teller2);
myBus.sendNoteOn(channel, pitch, velocity); // Send a Midi noteOn
delay(200);
myBus.sendNoteOff(channel, pitch, velocity);
teller2++;
}
if(teller2 == 7){
teller2 =0;
}
}
}
//void serialEvent(Serial myPort){
// String myString = myPort.readStringUntil('\n');
// if(myString != null){
//
// myString = trim(myString);
//
// int sensors[] = int (split (myString, ','));
//
// int a = sensors[0];
// int b = sensors[1];
//print(a);
//print(" ");
//print(b);
//print(" ");
//print(play);
//println();
//
//
// if (a > 695 && play == false){
// music[i].play();
// i++;
//
// play = true;
//
// }
//
//
// if (a < 700){
// play = false;
// }
//
//
// }
//
//}
//
void noteOn(int channel, int pitch, int velocity) {
// Receive a noteOn
println();
println("Note On:");
println("--------");
println("Channel:"+channel);
println("Pitch:"+pitch);
println("Velocity:"+velocity);
}
void noteOff(int channel, int pitch, int velocity) {
// Receive a noteOff
println();
println("Note Off:");
println("--------");
println("Channel:"+channel);
println("Pitch:"+pitch);
println("Velocity:"+velocity);
}
void delay(int time) {
int current = millis();
while(millis() < current+time) Thread.yield();
}
Arduino-powered project.
This large vinyl player powered by Arduino plays sounds depending on the higher / lower parts on the 'vinyl' (wooden plank). The difference in height is measured by a potentiometer. You're free to tweak the project as you wish.
IMPORTANT: This project was a matter of trial-and-error. Not everything might be perfect and it's more of an experiment. Feel free to change the process/code as you please. Follow your intuition! :)
Video:
http://www.youtube.com/watch?v=neUZw9xFHv4&feature=youtu.be
Materials required:
- Tape
- Arduino jumper wires (quite a few)
- Enough wooden planks to work with
Tools required:
- Illustrator
- Arduino (+ Processing)
- Tools to solder
- Milling machine
- Lastercutter
Process:
1. Start with making a design for your vinyl player. In Illustrator you can design a circle with tracks in it. In our project, we've chosen for two tracks. In these tracks, you design higher/lower parts. Don't forget to cut a circle in the middle - Here you can place a pipe which gives the support to make your box with the potentiometers turn around the mega vinyl player.
2. After you've made your flat 2D design, use a large milling machine to cut out your mega vinyl player. To give you an idea of an size: We used 120x120 centimeters.
3. Okay, now a difficult part: Design a way to make your box with potentiometer turn around the mega vinyl player and support itself. For example: We used a beam which is put around the pipe. At the end of the beam we glued a wheel.
4. Measure the length between your two tracks. This amount gives you an idea how to place your potentiometers, and how large your box will be. Now design a box with your two potentiometers sticking out of the box. In the box you have the Arduino and your jumper wires, together with a motor shield and your USB-cable. We use the motor shield to make the box together with beam move of course.
5. Bring it all together! When you've glued your potentiometer in the box, connect a piece of wood to it and add some weight on it, so that it always drops when there's a difference in height (see the pictures). You can use the lasercutter to make your box, piece of wood, ...
6. When you think you've got everything. Time to program!
Code:
Note: The code has been tweaked constantly. So there are a lot of stuff in the comments. Feel free to play around with it! ^_^
ARDUINO:
---------------
const int
PWM_A = 3,
DIR_A = 12,
BRAKE_A = 9,
SNS_A = A0;
boolean flag = false;
boolean flag1 = false;
void setup() {
// Configure the A output
pinMode(BRAKE_A, OUTPUT); // Brake pin on channel A
pinMode(DIR_A, OUTPUT); // Direction pin on channel A
// Open Serial communication
Serial.begin(9600);
}
void loop() {
// Set the outputs to run the motor forward
digitalWrite(BRAKE_A, LOW); // setting brake LOW disable motor brake
digitalWrite(DIR_A, LOW); // setting direction to HIGH the motor will spin forward
analogWrite(PWM_A, 255); // Set the speed of the motor, 255 is the maximum value
// read the input on analog pin 0:
int sensorValue = analogRead(A4);
int sensorValue2 = analogRead(A5);
// Serial.println(sensorValue);
if(sensorValue > 700 && flag == false){
Serial.print("1");
flag = true;
}
if(sensorValue < 700){
flag = false;
}
if(sensorValue2 > 160 && flag1 == false){
Serial.print("2");
flag1 = true;
}
if(sensorValue2 < 160){
flag1 = false;
}
// int sensorValue2 = analogRead(A4);
// print out the value you read:
/* Serial.print(sensorValue);
Serial.print(" + "); */
//Serial.print(sensorValue);
//Serial.print(',');
//Serial.print(sensorValue2);
//Serial.println();
}
PROCESSING:
---------------------
import processing.serial.*;
import ddf.minim.*;
import themidibus.*; //Import the library
MidiBus myBus; // The MidiBus
AudioPlayer[] music=new AudioPlayer[20];
int[] numbers = new int[20];
Minim minim;
int i = 0;
int a = 0;
int b = 0;
boolean play = false;
int teller =0;
int teller2 =0;
Serial myPort;
int test;
Boolean firstContact = false;
void setup() {
println(Serial.list());
myPort = new Serial(this, Serial.list()[4], 9600);
MidiBus.list();
numbers[0] = 67;
numbers[1] = 71;
numbers[2] = 62;
numbers[3] = 67;
numbers[4] = 62;
numbers[5] = 71;
numbers[6] = 71;
numbers[7] = 62;
numbers[8] = 83;
numbers[9] = 67;
numbers[10] = 67;
numbers[11] = 83;
numbers[12] = 72;
numbers[13] = 83;
numbers[14] = 67;
numbers[15] = 67;
numbers[16] = 83;
numbers[17] = 81;
numbers[18] = 81;
numbers[19] = 67;
/* int pitch = int(67);
int pitch = int(71);
int pitch = int(62);
int pitch = int(67);
int pitch = int(62);
int pitch = int(71);
int pitch = int(71);
int pitch = int(62);
int pitch = int(83);
int pitch = int(67);*/
minim=new Minim(this);
music[0]=minim.loadFile("1.mp3", 1024);
music[1]=minim.loadFile("2.mp3", 1024);
music[2]=minim.loadFile("3.mp3", 1024);
music[3]=minim.loadFile("4.mp3", 1024);
music[4]=minim.loadFile("5.mp3", 1024);
music[5]=minim.loadFile("6.mp3", 1024);
music[6]=minim.loadFile("7.mp3", 1024);
music[7]=minim.loadFile("8.mp3", 1024);
music[8]=minim.loadFile("9.mp3", 1024);
music[9]=minim.loadFile("10.mp3", 1024);
music[10]=minim.loadFile("11.mp3", 1024);
music[11]=minim.loadFile("12.mp3", 1024);
music[12]=minim.loadFile("13.mp3", 1024);
music[13]=minim.loadFile("14.mp3", 1024);
music[14]=minim.loadFile("15.mp3", 1024);
music[15]=minim.loadFile("16.mp3", 1024);
music[16]=minim.loadFile("17.mp3", 1024);
music[17]=minim.loadFile("18.mp3", 1024);
music[18]=minim.loadFile("19.mp3", 1024);
music[19]=minim.loadFile("20.mp3", 1024);
myBus = new MidiBus(this, -1, "Java Sound Synthesizer"); // Create a new MidiBus with no input device and the default Java Sound Synthesizer as the output device.
}
void draw() {
int channel = 0;
int test = numbers[teller];
int pitch = int(test);
int velocity = 127;
while (myPort.available() > 0) {
int inByte = myPort.read();
println(inByte);
if(inByte == 50){
println("test");
myBus.sendNoteOn(channel, pitch, velocity); // Send a Midi noteOn
delay(200);
myBus.sendNoteOff(channel, pitch, velocity);
teller++;
}
if(teller == 9){
teller =0;
}
if(inByte == 49){
println(teller2);
myBus.sendNoteOn(channel, pitch, velocity); // Send a Midi noteOn
delay(200);
myBus.sendNoteOff(channel, pitch, velocity);
teller2++;
}
if(teller2 == 7){
teller2 =0;
}
}
}
//void serialEvent(Serial myPort){
// String myString = myPort.readStringUntil('\n');
// if(myString != null){
//
// myString = trim(myString);
//
// int sensors[] = int (split (myString, ','));
//
// int a = sensors[0];
// int b = sensors[1];
//print(a);
//print(" ");
//print(b);
//print(" ");
//print(play);
//println();
//
//
// if (a > 695 && play == false){
// music[i].play();
// i++;
//
// play = true;
//
// }
//
//
// if (a < 700){
// play = false;
// }
//
//
// }
//
//}
//
void noteOn(int channel, int pitch, int velocity) {
// Receive a noteOn
println();
println("Note On:");
println("--------");
println("Channel:"+channel);
println("Pitch:"+pitch);
println("Velocity:"+velocity);
}
void noteOff(int channel, int pitch, int velocity) {
// Receive a noteOff
println();
println("Note Off:");
println("--------");
println("Channel:"+channel);
println("Pitch:"+pitch);
println("Velocity:"+velocity);
}
void delay(int time) {
int current = millis();
while(millis() < current+time) Thread.yield();
}