For this project, we worked in pairs, and I collaborated with my classmate Emmanuel. Initially, our research focused on designing a music machine that would emit sounds and function like a piano. Our main idea was to shift the concept of traditional musical instruments by using recycled materials, highlighting the pollution caused by the industry. However, based on our professor’s suggestion, we transformed our idea into a pinball machine. We wanted to maintain a similar interaction with sound but needed to reconfigure the design. Our first sketch depicted a piano-shaped box.
Sketch 1 by Emmanuel
As we developed this new concept, we conducted additional research since the shape of our project changed drastically. We watched videos and blogs of people creating pinball machines, ranging from simple to complex designs, which inspired us in crafting our project. We decided to divide the tasks, with each of us taking on responsibilities for coding and prototyping. I was in charge of building the flippers and ball launcher. Our new design maintained the focus on interactivity while introducing a unique twist: a drop-the-ball mechanism instead of the traditional spring launcher. This choice not only differentiates our project from existing pinball machines but also offers a fresh take on user engagement, requiring players to actively participate in initiating the game.
Sketch 2 by Domenica
To enhance user experience, we decided to create a compact design that would be easy to handle since players would need to hold the machine after activating the electromagnet to start the game. Our project is intended for a wide audience, including both young gamers and adults who appreciate nostalgic arcade experiences. The significance lies in its blend of fun and sustainability, as we used recycled materials throughout the design.
We aimed for an intuitive interface that would make it easy for players to engage with the pinball machine. This led us to implement a drop-the-ball mechanism instead of a traditional spring launcher. We wanted players to drop the ball by pushing a button that encourages active participation. Another key decision was the compact design of the machine. We recognized that users would need to hold and maneuver the device easily during gameplay. By minimizing its size and weight, we ensured that players could comfortably interact with the machine.
Prototype 1 by Emmanuel
In terms of materials, we primarily used recycled cardboard components. We selected these materials for their sustainability and availability at the IMA Lab. This material aligned well with our project’s focus on fun and sustainability, making them more suitable than new materials, which would contribute to environmental waste.
I would like to mention that this project was definitely challenging, with many setbacks on my part throughout the process. However, the outcome of my section turned out to be what I had expected in terms of functionality. From this point on, everything I discuss regarding the fabrication and production of the artifact pertains to my part of the project.
At the start, I focused on determining how I wanted the flippers to operate. I knew that I needed two servos to mimic the movement of a pinball machine, inspired by a video I had watched. Initially, I thought I could make both flippers move simultaneously by operating a single button. I used one of the large buttons from the IMA lab, which already had two legs with cables attached. I was unsure how to connect them to the breadboard and Arduino, so Professor Weil helped by sketching a diagram of the connections. Once I had made the connections, I moved on to get the system working. Here is a picture of the setup: you can see a blue button on the right side of the artifact, which needed to be held down for the flippers to move up and down.
Prototype 2 by Domenica and Emmanuel
After that, I focused on configuring the electromagnet, which was also activated by the same button to release the ball. However, I quickly realized that this setup wasn’t very convenient for the user, as it didn’t allow for individual control of each flipper or the electromagnet itself. I decided to leave the mechanism as is for the user testing phase. During testing, the flippers stopped working simultaneously, though I’m not entirely sure why this happened. I suspect it was because both functions were controlled by the same button. In this process professor Garcia suggested that the operation of the flippers could be more smooth and have individual buttons with individual functions.
Honestly, it was a bit frustrating that the flippers weren’t working as expected, especially since I had put in a lot of effort to get them right. After multiple failed attempts, I decided to disassemble the flippers and electromagnet from the prototype to troubleshoot them individually. I started with the flippers and focused on coding them to move in a 90-degree motion, which was a simpler and more controlled movement to start with. This allowed me to isolate the problem and ensure the servos were working properly before integrating them back into the full system. Once I had everything working as expected, I recorded a video showing the flippers moving at the desired angle, which confirmed that the basic motion was functioning correctly.
When I reassembled the prototype, I made some adjustments to improve the overall design. One key change was repositioning the flippers to be closer to the obstacles and vibration sensors that Emmanuel was working on. To help improve the accuracy of the interactions between the flippers and the obstacles, making the gameplay experience more seamless. Additionally, since the electromagnetic ball was fairly heavy, it required a bit more force to launch it further. This led us to decide to change the interaction mode of the game to make it more intuitive and responsive. Instead of just holding down the button to activate the flippers, we adjusted the mechanics so that the ball could be moved around by shifting the button left or right, giving the player more control and making the game feel more dynamic.
Setup rearrange (final one)
To simplify the wiring and make the connections more stable, I also replaced the large button with a smaller push button that had an inner resistor. This made it easier to integrate the button into the circuit and reduced potential issues with inconsistent connections, which had been a concern with the larger button. The push button worked smoothly, and I could see that the design was starting to take shape.
Next, I turned my attention to the electromagnet. Initially, I had some doubts about whether the sensor was working correctly, as I hadn’t been able to test it in isolation yet. But once I uploaded the code and activated it, I was relieved to see that the electromagnet was working more than fine. It responded to the code as expected, activating when triggered by the push button. I recorded a video showing the electromagnet in action as well, which confirmed its functionality. To connect the electromagnet, I used the same type of push button with an inner resistor, which again made the connections more stable and reliable. The success of the electromagnet provided another key piece to the puzzle and helped ensure that the game mechanics were functioning as intended.
At this stage, I felt like I was making good progress. The flippers were moving correctly, the electromagnet was working, and the overall interaction was much smoother and more responsive. However, I knew that more fine-tuning would be needed, especially once all components were integrated back into the full system. But for now, I was satisfied with the progress and the adjustments I’d made. Here is a video the testing process.
At the end, we planned to integrate our individual parts into one final artifact; however, we encountered some issues during this process. We tried using Emmanuel’s code for the vibration sensor to connect with the buzzer. Although the Arduino IDE’s serial monitor showed that the code was running and the sensor was reading, the output was null. Upon reflection, I identified the primary issue with our project: inadequate time management and a lack of close collaboration throughout the process. We mainly worked together toward the end when time was running short, which contributed to the difficulties we faced.
My code:
#include <Servo.h>
Servo servo1; // first Servo
Servo servo2; // second Servo
const int buttonPin1 = 2; // control servo
const int buttonPin2 = 3; // control servo
const int magnetButtonPin = 5; // control Electromagnet
const int magnetPin = 4; // electromagnet
int buttonState1 = 0; // first button state
int buttonState2 = 0; // second button state
int magnetButtonState; //= digitalRead(magnetButtonPin); // magnet button state
void setup() {
servo1.attach(9); // first servo to pin 9
servo2.attach(10); // second servo to pin 10
pinMode(buttonPin1, INPUT_PULLUP); // Set button1 with internal resistor
pinMode(buttonPin2, INPUT_PULLUP); // Set button2 with internal resistor
pinMode(magnetButtonPin, INPUT); // Set magnet button pin with internal resistor
pinMode(magnetPin, OUTPUT); // Set magnet pin as output
digitalWrite(magnetPin, LOW);
Serial.begin(9600);
}
void loop() {
buttonState1 = digitalRead(buttonPin1); // Read the first button state
buttonState2 = digitalRead(buttonPin2); // Read the second button state
magnetButtonState = digitalRead(magnetButtonPin); //Read the magnet button state
// Check if either button is pressed
if(buttonState1 == HIGH){
// move in opposite directions
servo1.write(90);
}else{
servo1.write(0);
//servo2.write(0);
}
if(buttonState2 == HIGH){
// move in opposite directions
servo2.write(0);
}else{
servo2.write(90);
//servo2.write(0);
}
if(magnetButtonState == HIGH){ // Button is pressed (LOW state)
digitalWrite(magnetPin, LOW); // Turn on the electromagnet
}else{
digitalWrite(magnetPin, HIGH); // Turn off the electromagnet
}
Serial.println(magnetButtonState);
}
The controls two servos and an electromagnet using three buttons. Each button is associated with a specific function: pressing one button moves a servo to a predetermined position, while a third button toggles the electromagnet on or off. The program uses pull-up resistors for the buttons and continuously reads their states in the `loop()` function to monitor button presses. It also outputs debugging information for the magnet control button. The servos and electromagnet are operated independently, allowing the user to interact with each component through its respective button. The servo is set so that pressing a button moves the corresponding servo to a specific position, while the magnet’s state is toggled by the magnet button.
Disassembly: