GPS Random Scoring Machine–Jennifer & Raphael — Instructor: Eric
Ⅰ. CONTEXT AND SIGNIFICANCE
This project of ours is quite different compared to my previous group assignment. In the previous project, we tried to make our project fit into the user’s daily life and interact with the user. We also used this theory in my midterm project as a GPS randomizer, which can be adequately used as an everyday machine. There are certain scenarios of use. When I reflected on my previous project, I felt that it was not very interactive and interesting, relying more on the story than on the project itself, so I avoided this problem in this project by making it both practical and interactive and interesting at the same time.
Our project is a combination of a simple pinball game and Rube Goldberg Machines, and is not simply a replica of either game. In the YouTube video, Rube Goldberg Machines is more of a display piece for the user, whereas in our project, we incorporate a more interactive component where there is uncertainty, where the same track can lead to two different outcomes, and the difference in the outcomes will have an impact on the user. While it’s true that our machine won’t really be adopted by professors at GPS (probably), it’s more of an entertainment machine for students to experience the thrill of this randomly generated outcome.
Ⅱ. CONCEPTION AND DESIGN
The interaction between our project and the user is very clear: the user sends out a bouncing ball, which passes through different paths in the machine and gets different conclusions, i.e. GPS scores, which are presented to the user through an LCD screen.
Our draft
During our initial discussions, we thought about other ways of doing this. For example, letting a ball roll naturally into the Rube Goldberg Machines, and then adding different sensors to trigger the ball as it passes through. However, I think this method is too weak in terms of interactivity, the user doesn’t actually receive much feedback from the device in relation to his actions, and the result is too monotonous and meaningless, which is not in line with my definition of interaction. So we finally chose such a randomized operation that enhances the interactivity.
In terms of material selection, we not only used cardboard, but also added wood and acrylic boards. Comparatively speaking, the support of cardboard is still too weak for our design, and the stability is too poor. Wooden board can make the whole structure relatively stable, so we used wooden board in the production of the surrounding columns and some key organs, such as the two interlocking levers and wheel slides. And the unique feature of the acrylic board is the transparency, which allows the user to see the running of the small ball inside the device from different angles, making the whole process more interesting. That’s why we have utilized acrylic on some of the large baffles. As for the topmost pinball platform, in order to increase the stability of the whole device, the top can’t be too heavy, plus the quality of our ball is not very big, so we chose the lightest and thinnest cardboard to make it.
III. FABRICATION AND PRODUCTION
The most important and difficult part for our project was the production of the Rube Goldberg Machine in the middle. The whole production process was much more difficult than we had imagined. We needed to make the counterweights on both sides of the skate, consider the acceleration of the ball, and design the angle of the track to prevent the ball from getting stuck in the middle. …. We didn’t think so carefully about the design so we needed to keep fine-tuning it as we made it.
In the group, I was more in charge of building the device and the circuit. In the early stages, I conceptualized a few general structures and paths and eventually implemented them. My partner and I worked together most of the time during the fabrication process. Whether it was sketching, cutting materials, assembling, or debugging, the two of us made it together. Some of the details in the middle, such as the making and design of the two interlocking levers were all done by me, including the use of the Galton board and the inclusion of the wheelie were also my designs. In terms of code, I didn’t contribute much in connecting the lcd screen, but I was involved in writing the code in connecting the Ultrasonic sensors.
Laser cutting
Drilling Platform
Documentation of the production process
Initially we wanted to use press sensors to detect the fall of the final ball, but as soon as we came up with the idea, PROFESSOR Eric dismissed our IDEA because the ball was too light. At first we tried to use a 3d printer to make a denser ball, but after our tests we still couldn’t detect the data. I went back to the sensor slides and thought that the Ultrasonic sensor, which is used to detect the distance, could also be used to detect whether the ball is on the ground or not. After several tests, my idea was confirmed to be feasible, so we used this sensor in this project.
3d printer
We had some problems with the track. The wire we used was too soft and easily deformed; and the height of our Galton board was too high, so that the ball would often fail to cross the board and fall into the gap between them. I found that the ball, though not able to cross the board, must be able to touch it, so I proposed to pre-position a small ball close to the board, and by the impact of the original ball, let the ball fall into the gap. After testing this, it was found that this proposal of mine was very effective.
During the result of user testing, people gave us a lot of valuable suggestions. It was obvious to us that the spring in our launcher was too tight, making it difficult for users to pull it. This affected the whole experience of using the device. We thus tried to improve the principle of the launcher (since we couldn’t find a looser spring) by using a long rod to push the ball directly. Although this method is still not perfect, it is a bit more stable than the original method.
Additionally, on our Galton knocked boards, a user suggested that we add another stopper to keep the ball from rolling off the board. We have taken this suggestion and added a block around it to keep the ball from rolling out. This method is very effective and doesn’t make the whole process any worse.
Before improvement
After improvement
On the roller skating side, a user also suggested trying to have a good counterweight on both sides, so that when the ball lands on one side of the frame, it naturally falls down a slope, so that when the ball rolls out of the frame, the weight on the other side is enough to allow the empty frame to rise up again automatically. We used this suggestion as well, but since our roller skates aren’t terribly stable, the setup didn’t work 100% smoothly, but there were a few successes.
Regarding the circuitry and code, we didn’t spend as much time as we did building the unit, but we did run into quite a few problems.
The first was the sensor connection. We wanted to test if we could represent the results of multiple sensors by controlling multiple different outputs from the same Arduino. Instead of using an lcd screen, we initially used a small led light for testing. However, the code at the beginning was not able to match the two small lights with the two ultrasonic sensors.
Later on we changed to a new way of writing the code and finally got it to work.
#include <NewPing.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // select the pins used on the LCD panel
#define TRIGGER_PIN_1 3
#define ECHO_PIN_1 11
#define TRIGGER_PIN_2 13
#define ECHO_PIN_2 12
#define MAX_DISTANCE_1 400 // Maximum distance we want to measure (in centimeters).
#define MAX_DISTANCE_2 400 // Maximum distance we want to measure (in centimeters).
NewPing sonar1(TRIGGER_PIN_1, ECHO_PIN_1, MAX_DISTANCE_1); // NewPing setup of pins and maximum distance.
NewPing sonar2(TRIGGER_PIN_2, ECHO_PIN_2, MAX_DISTANCE_2); // NewPing setup of pins and maximum distance.
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
int distance1 = sonar1.ping_cm(); // Send ping, get distance in cm and print result (0 = outside set distance range)
int distance2 = sonar2.ping_cm(); // Send ping, get distance in cm and print result (0 = outside set distance range)
Serial.print(“Distance1: “);
Serial.print(distance1);
Serial.println(“cm”);
Serial.print(“Distance2: “);
Serial.print(distance2);
Serial.println(“cm”);
if (distance1 < 2 && distance2 > 2) {
lcd.print(“You get C “);
}
if (distance2 < 2 && distance1 > 2) {
lcd.print(“You get B “);
}
if (distance2 > 2 && distance1 > 2) {
lcd.print(” “);
}
}
Our final version of the code
Another big problem was the lcd screen, we hadn’t used it before, so we didn’t know how to connect it to sensors, especially to multiple sensors. The first problem was that we didn’t know how to connect it to uno’s Arduino board, and after eric reminded me of this, I scanned the QR code on the box to get to its website, and eventually found out how to connect it on a picture in the connection instructions. The next thing we realized was that one lcd could only connect to a maximum of three sensors, and we needed to connect to four sensors. we ended up having to present the results on two separate lcd boards.
IV. CONCLUSIONS
The goal of our project is to make a fun and randomized pinball game installation with a theme that can be integrated into the user’s daily life. It fits my definition of interaction: the user and the device transmit information to each other, and there is not only one outcome of receiving and transmitting information.
Based on user testing and the final user experience, the usage of our device is very simple and obvious. The feedback we received from our users was generally good, with people recognizing the interactivity and fun of our overall project, but were not very satisfied with the feeling of using the launcher.
Due to time constraints, the debugging of our device was not yet perfected, resulting in some features not being available for the final presentation. If we had more time, let’s start with the physical device, first of all we would have improved our launcher. The professors gave us suggestions to learn from the other two groups that made pinball machines and use rubber bands instead of springs, which are relatively easier to launch. Or we would purchase a new spring. Secondly, due to a mistake in measuring at the very beginning, we did not account for the height of the supporting part underneath when we made the acrylic shell, which caused the overall device to be unstable. We will remake the four pieces of acrylic housing to increase the stability of the whole unit. In addition, there is also the part of the track, the metal wire we used is too soft, and it is easy to be deformed after a few tests. Therefore we would like to add more horizontal wire under the track to stabilize the width of the track.
In the overall function as well as the code, we may add more mechanical devices, such as using some motor to make an autonomous conveyor belt, so that the ball can automatically reset to the initial position, so as to make a complete game machine.
I learned a lot from this project. First of all, it is very important to have a complete structural diagram before you build. It is very important to have a complete structural drawing before making the game. You can’t perfect it while you are making it, and it is very easy to have structural problems in the end. (For example, the size of our acrylic shell) and in the production must be accurately measured the size of the whole device, to prevent the operation of the size of the problem caused by the stuttering. For example, we didn’t consider the overall height when we made the center unit at the beginning, which resulted in the track getting stuck on the top plate if it was too high, and not being able to get into the center unit if it was too low. So a rigorous start is very important.
Secondly, you cannot underestimate the difficulty of mastering unfamiliar parts. We thought the connection of the LCD screen and the writing of the code was too simple at the beginning, thinking that there was not much difference with the code we usually learned, so we only arranged one hour to complete the code and the circuit, and the result was that it took a total of half a day to complete it, which led to the extension of the time for us to produce the whole project. This was a wake-up call to not underestimate the difficulty of any part of the project.
Of course there were things we did well. Throughout the project, we tried various new things, such as 3d printing, laser cutting, etc., to improve the structure and appearance of our whole device. Moreover, we successfully learned how to connect the LCD screen and write the code on the internet, and how to learn how to apply what we have learned.
Overall, the project was quite successful and I gained a lot from it. 🥰