Introduction: Device Art Final: Turntable for Night Owls

1. [Rotating a turntable] Prepare laser-cut wood pieces (2 rectangles, 2 squares, 1 circle)

Step 1:

2. Mark the center point of one rectangle panel and drill it, large enough to fit a servo motor’s circle

Step 2:

3. Attach a part of servo motor on a circle panel with a tape

Step 3:

4. Connect the circle panel right on the center of the rectangle panel.

Step 4:

5. [Pulse sensor and MP3 speaker on a breadboard] Before making a circuit, make sure to download MP3 files in micro SD card and put it in a MP3 sensor.

Step 5:

6. Make the same circuit as above for connecting a MP3 player and a pulse sensor.

Step 6:

7. Complete attaching a servo motor — a circle panel and the motor itself.

Step 7:

8. Put all the circuits within the box and enclose it with another rectangle panel.

Step 8:

9. Copy and paste the codes below into Arduino Uno.

#include

#include "SoftwareSerial.h"

SoftwareSerial mySerial(10, 11);

# define Start_Byte 0x7E

# define Version_Byte 0xFF

# define Command_Length 0x06

# define End_Byte 0xEF

# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]

# define ACTIVATED LOW

int buttonNext = 2;

int buttonPause = 3;

int buttonPrevious = 4;

boolean isPlaying = false;

Servo servo_9;

#include

const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution

// for your motor

// initialize the stepper library on pins 8 through 11:

Stepper myStepper(stepsPerRevolution, 5, 6, 7, 8);

#define USE_ARDUINO_INTERRUPTS true // Set-up low-level interrupts for most acurate BPM math.

#include // Includes the PulseSensorPlayground Library.

// Variables

const int PulseWire = 0; // PulseSensor PURPLE WIRE connected to ANALOG PIN 0

const int LED13 = 13; // The on-board Arduino LED, close to PIN 13.

int Threshold = 550;

PulseSensorPlayground pulseSensor;

void setup () {

Serial.begin(9600);

servo_9.attach(9);

pulseSensor.analogInput(PulseWire);

pulseSensor.blinkOnPulse(LED13); //auto-magically blink Arduino's LED with heartbeat.

pulseSensor.setThreshold(Threshold);

// Double-check the "pulseSensor" object was created and "began" seeing a signal.

if (pulseSensor.begin()) {

Serial.println("We created a pulseSensor Object !"); //This prints one time at Arduino power-up, or on Arduino reset.

}

pinMode(buttonPause, INPUT);

digitalWrite(buttonPause,HIGH);

pinMode(buttonNext, INPUT);

digitalWrite(buttonNext,HIGH);

pinMode(buttonPrevious, INPUT);

digitalWrite(buttonPrevious,HIGH);

mySerial.begin (9600);

delay(1000);

//playFirst();

//isPlaying = true;

pause();

}

void loop () {

myStepper.setSpeed(100);

// step 1/100 of a revolution:

myStepper.step(stepsPerRevolution/

100 );

int myBPM = pulseSensor.getBeatsPerMinute(); // Calls function on our pulseSensor object that returns BPM as an "int".

//// delay(5000) ; // "myBPM" hold this BPM value now.

/

/if (pulseSensor.sawStartOfBeat()) { // Constantly test to see if "a beat happened".

// Serial.println("♥ A HeartBeat Happened ! "); // If test is "true", print a message "a heartbeat happened".

// Serial.print("BPM: "); // Print phrase "BPM: "

Serial.println(myBPM); // Print the value inside of myBPM.

//}

/

/

//

if(myBPM<120){

isPlaying = true;

play();

servo_9.write(180);

}

else if(myBPM>170){

// pause();

playNext();

// servo_9.write(0);

}

// if(myBPM>140){

// playNext();

// }

}

// if (digitalRead(buttonPause) == ACTIVATED)

// {

// if(isPlaying)

// {

// pause();

// isPlaying = false;

// }else

// {

// isPlaying = true;

// play();

// }

// }

/

/ if (digitalRead(buttonNext) == ACTIVATED)

// {

// if(isPlaying)

// {

// playNext();

// }

// }

/

/ if (digitalRead(buttonPrevious) == ACTIVATED)

// {

// if(isPlaying)

// {

// playPrevious();

// }

// }

void playFirst()

{

execute_CMD(0x3F, 0, 0);

delay(500);

setVolume(20);

delay(500);

execute_CMD(0x11,0,1);

delay(500);

}

void pause()

{

execute_CMD(0x0E,0,0);

delay(500);

}

void play()

{

execute_CMD(0x0D,0,1);

delay(500);

}

void playNext()

{

execute_CMD(0x01,0,1);

delay(500);

}

void playPrevious()

{

execute_CMD(0x02,0,1);

delay(500);

}

void setVolume(int volume)

{

execute_CMD(0x06, 0, volume); // Set the volume (0x00~0x30)

delay(2000);

}

void execute_CMD(byte CMD, byte Par1, byte Par2)

// Excecute the command and parameters

{

// Calculate the checksum (2 bytes)

word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);

// Build the command line

byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge,

Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte};

//Send the command line to the module

for (byte k=0; k<10; k++)

{

mySerial.write( Command_line[k]);

}

}

Step 9:

10. It starts playing music and rotating a turntable depending on your heart rate :)