ITTT Ely Diop - Off the Hook Mini Concert
315 Views, 5 Favorites, 0 Comments
ITTT Ely Diop - Off the Hook Mini Concert
Hello, I'm Ely, and for our school project I made an interactive miniature concert for Pearl and Marina from Splatoon 2! With the DJ booth you can make them dance and light up the stage, and the lights will blink correctly if you hit it to the beat of their song!
Since this was my first time using arduino and even hearing of its existence, I wanted to incorporate something I was already familiar with. That's why I decided to create a sort of rythm game based on my favorite characters. Even though it was quite confused multiple times during the process, each time something did work I was really happy. I also quite enjoyed making the stage itself along with the decorations, and i want to try making something in a 3D space more from now on.
At first I tried to create a rythm game mixing Arduino and Unity, but sadly that didn't work out as I had hoped. My idea before was more focussed on the Unity part and for the interaction i just wanted to use buttons, but since I couldn't really advance there I decided to focus more on the physical input and fun. I then thought about the characters from Off the Hook, since the game is heavily based in music I thought "why not make a rythm game out of that". The characters in the game also use a DJ booth with discs that spin around, and that game me the inspiration to use that as input. The spinning motion then reminded me of a sort of dance and I knew I wanted to combine the two.
If you're recreating this, you can do it with any characters or song you like. I chose splatoon because it's one of my favorite game series right now, and i already had the Amiibo's (figurines). You make this yourself with yout own figurines, plushies or self made characters.
Supplies
Arduino parts I used in final design:
- 2 servo's (7-8 wires per servo)
- servo extensions for stability
- 2 potentio meters (7-8 potentio meter)
- 2 or more LED lights (3 wires per light)
- 2 or more 220 ohm resistors
Soldering
- dubble sided soldering plates
- soldering iron
- sponge
- soldering station
- scissors
Extra
- 2 or more characters that arent too big/heavy
- 2 empty or unwanted cd's
- foamboard
- hot glue gun
- double sided tape
- acryllic paint in the color of your choice
- shiny paper
- stanley knife
- printer
Start by making a sketch of what you have in mind. Its also important to think about how big you want your dancing stage to be, and you have to keep the size of your character in mind.
Then you can go on to prototyping with your breadboard.
Testing and prototyping is important, because you can find things you might not have thought about prevviously like I did with the DJ booth idea. I experimented using potentiometers to create the spinning motion. At first youwould just turn the potentiometer around, but after testing it with an empty CD I found it worked quite well and controlled smoothly if you attach it right.
Soldering
After making your idea concrete, it's time to solder it together. Be sure to test thoroughly inbetween the steps.
I went in this order:
I started by soldering the servo's and the potmeters to their own plates. The big plate has two lines that act as power and ground for both of them, these lines are connected to the 5V and GND in the arduino respectively. Inbetween the two plates are two wires to give energy to the potmeters. Both the servos and the potmeters also have an additional cable that goes to the arduino. The servo's go in the digital output 8 and 9, and the potmeters go into the analog input A0 and A1.
The lights are seperate from the two plates, however if you use a lot of lights it would be reccomended to use a plate. The light has one long and one short side underneath. The long sides should be soldered to wires that go into the Digital outputs 6 and 7. Then the short side has a resistor, which is connected to a wire. I put the two wires from the two lights together, and they also go in the GND.
I had barely ever soldered before, and I was very afraid of it at first. It is very time confusing and can be quite frustrating because of how small everything is and you might be scared to do it wrong. Something I didnt wxpect was that I actually understood the circuits and stuff pretty well, you just ahd to look into it. I was so scared of it that I procrastinated on doing it, but it turned out to be okay.
Building
I then built the stand I made a sketch of earlier. I noticed that while making it, it was actually better to keep it to a smaller size, because you also have to think about where you will put the wires and how far they can reach. Also, if you have a huge podium but a small character, players will like like somethings missing.
I made 2 boxes out of foamboard, one with and angle. I cut out panels of the foamboard with a stanley knife, and thn glued them together with a hot glue gun. Depending on how strong you material is, you can also make the inside stronger and more stable by adding triangles in the corner. This will make it sturdier and it wont fall down or break easily. The stage should be taller but not as wide as the DJ table, so the player can get a good look at the characters that are dancing.
The top pannel of the stage box should have two holes in it slighty bigger than the characters, so they can moce without getting stuck. You can glue them to the "roof" of the box, so all the glue and technical components are hidden. The other box should be slightly slanted, so the player can more easily spin the discs around. You can make two very small holes with a stanley knife or scissors, and poke the potentiometers through. Like with the servo, you should glue it to the bottom. I painted to CD's black with one layer, so it still has a bit of the shiny effect. Then I attacked them to the Potentiometer with hot glue and a small piece of foamboard. You want it to be strongly attached, or a player might push too hard and break it (it happened to me right before the examination lol).
For the spinning characters, I cut out a small part of the foamboard and stuck it under the stand with double sided tape. I dont reccomend using glue, as this may ruin the underside of your figurine.
You can choose whatever decorations you find fitting for your characters. I choose to use in game sprites to sell the ideaof it being an actual product. I printed and cut them out on paper and then used a hard back to keep it stable. I also drew a white line on the disc, so the player can tell when they hit the beat.
Code
I have very little experience or skill in coding, but I was glad some of my protoypes ended up working. Earlier on the code was a big struggle for me, but now I;ve decided to take things on at my level and not try complicated or hard to read code right at the beginning.
CODE:
#include <Servo.h>
Servo myServo1; // create a servo object
Servo myServo2;
int const potPin1 = A0;
int const potPin2 = A1; // two analog pins used to connect the potentiometer
int potVal1; // variable to read the value from the analog pin
int angle1;
int potVal2;
int angle2; // variable to hold the angle for the servo motor
int pearlbeat = 0; // counts the amount of times the player hits the beat
int marinabeat = 0;
void setup() {
myServo1.attach(9); // attaches the servo on pin 9 to the servo object
myServo2.attach(8); // attaches the servo on pin 8 to the servo object
Serial.begin(9600); // open a serial connection to your computer
pinMode(6, OUTPUT); //connects the LED lights to pin 6
pinMode(7, OUTPUT); //connects the LED lights to pin 6
}
void loop() {
// VOOR SERVO 1
potVal1 = analogRead(potPin1); // read the value of the potentiometer
// print out the value to the Serial Monitor
Serial.print("potVal1: ");
Serial.print(potVal1);
// scale the numbers from the pot
angle1 = map(potVal1, 0, 1023, 0, 179);
// print out the angle for the servo motor
Serial.print(", angle1: ");
Serial.println(angle1);
// set the servo position
myServo1.write(angle1);
// wait for the servo to get there
delay(15);
// VOOR SERVO 2
potVal2 = analogRead(potPin2); // read the value of the potentiometer
// print out the value to the Serial Monitor
Serial.print("potVal2: ");
Serial.print(potVal2);
// scale the numbers from the pot
angle2 = map(potVal2, 0, 1023, 0, 179);
// print out the angle for the servo motor
Serial.print(", angle2: ");
Serial.println(angle2);
// set the servo position
myServo2.write(angle2);
// wait for the servo to get there
delay(15);
//herkansing code
if (angle1 > 95 & angle1 < 115){
//light single blink code
digitalWrite(7, HIGH);
pearlbeat + 1; }
else{
digitalWrite(7, LOW);
}
if (angle2 > 95 & angle2 < 115){ //angle is exactly where the arrows on the disc are
//light single blink code
digitalWrite(6, HIGH);
marinabeat + 1; }
else {
digitalWrite(6, LOW);
}
if (pearlbeat == 3 && marinabeat == 3){
digitalWrite(6, HIGH); // turn the LED on (HIGH is the voltage level)
delay(200); // wait for a second
digitalWrite(6, LOW); // turn the LED off by making the voltage LOW
delay(200);
digitalWrite(7, HIGH); // turn the LED on (HIGH is the voltage level)
delay(200); // wait for a second
digitalWrite(7, LOW); // turn the LED off by making the voltage LOW
delay(200);
}
Serial.print(pearlbeat,marinabeat);
}
Conclusion
In the end I am quite happy with how it turned out, even though it was simpler than I originally wanted it to be. Part of what I learned was that I don't always have to overcomplicate it; if I just do or try it in another/an easier way, it'll be better than not continueing because I'm stuck. I noticed this with soldering and code, but it turned out fine in the end. I also learned more about decorating and building with real materials and not just digital.