- CONCEPTION AND DESIGN:
Our project is an extension of the midterm project “Fluffy the Shoveler”. In this project, we transformed the storyline where Fluffy now acts as a delivery man. Its objective is to deliver takeaway items, represented by differently colored and fluffy balls in the delivery cart, to the correct households in the “Go Hi” neighborhood. Throughout the delivery process, Fluffy encounters the risk of delivering to the wrong address. In other words, it must approach each household, receive confirmation from the residents regarding the delivery, and then decide whether to unload the packages from the cart or not. If it is the wrong house, Fluffy moves on to the next household and repeats the process.
Our preparatory research and the insights gained from the essay led to the formation of this concept. Understanding how users would interact with our project informed several design decisions. For instance, we incorporated a joystick control system for users to navigate Fluffy, allowing for intuitive interaction within a limited time. Additionally, we implemented buttons to load fluffy balls onto Fluffy and unload them at the correct doorstep, enhancing user engagement and control over the delivery process.
During the User Testing Session, we observed various user interactions and received feedback on usability and functionality. These feedbacks influenced several design decisions. For instance, we refined the original houses into doors on the walls, which were in box-like shapes and were put in a line. In this case, What’s more, we remade the cart with more space to install the servo and carry more balls. Our users reported increased satisfaction on the presentation day with the clarity of instructions and ease of interaction, showing the positive impact of our refinements.
- FABRICATION AND PRODUCTION:
The core of fabrication in this project consists of three main components: two servos and a joystick forming the wheels, two buttons controlling load and unload functions along with servos, and the central control box.
- Wheel Servos & Joystick: In the initial construction of the shoveler’s cart, I made some improvements based on previous versions. I used 3mm wooden boards to construct the body of the cart, with 5mm wooden boards for the wheels. Inside the cart body, besides assembling two wheel servos, there is also a load servo and a shovel made of 3mm wooden boards.
However, after user testing, I found that the cart made of 3mm wooden boards was too light and struggled to pull the cables behind the cart. Additionally, the cart had limited space for both holding enough balls and the action of shoveling movement, leading to a stuck. Therefore, considering this issue, I decided to reconstruct a larger capacity and more stable cart using 5mm wooden boards, which also resulted in changes to the layout of the project. To accommodate the size of the cart and provide users with more space to control, I decided to change the original layout of houses arranged in a row to a block with 4 doors. These doors are placed in different areas, with light sensors embedded in the ground in front of each door to provide feedback when the shoveler triggers the light sensors.
- Load/Unload Servos & Buttons:
-
- Load Servos: The idea of creating a station for the shoveler to load packages was a suggestion I got during user testing, which inspired us to make the overall user experience of our project more complete: loading – transportation – unloading – loading cargo – transportation – unloading, and so on. Therefore, I made a station using 5mm wooden boards. I left a circular hole at the top, with a small box for placing balls on top and the load servo carrying a small circular wooden board underneath. When the user presses the load button, the servo rotates 90 degrees, causing the small balls to fall from the exposed circular hole into the cart.
-
- Unload Servos: When the user presses the unload button, the load servo inside the cart rotates to shovel out the balls from the cart.
-
- Central Control Box: All control buttons, joystick, and start button are centralized in the control box, which makes it convenient for users to use different functions in the same location. Designing the positions and sizes of the buttons and indicators was time-consuming since most of the examples on cuttle.xyz are not editable. Therefore I designed my own box, including the assembly parts, so that I could more flexibly modify the dimensions of each detail as needed.
- Code:
- joystick:
#include <Servo.h>Servo myservo1;Servo myservo2;int val;int joystickXVal;int joystickYVal;void setup() {myservo1.attach(9);myservo2.attach(5);Serial.begin(9600);}void loop() {joystickXVal = analogRead(A1);joystickYVal = analogRead(A0);//Serial.print(joystickXVal);//Serial.print(“,”);//Serial.println(joystickYVal);delay(20);if (joystickYVal < 100) {Serial.println(“Going forward”);myservo1.write(110);myservo2.write(70);} else if (joystickYVal > 900) {Serial.println(“Going backward”);myservo1.write(70);myservo2.write(110);} else if (joystickXVal < 100) {Serial.println(“Going left”);myservo1.write(-130);myservo2.write(-90);} else if (joystickXVal > 900) {Serial.println(“Going right”);myservo1.write(130);myservo2.write(90);} else {Serial.println(“Stopping”);myservo1.write(90);myservo2.write(90);}}
- Two servos for unload and load:
#include <Servo.h>const int servoPin1 = 9;const int buttonPin1 = 2; //blueconst int servoPin2 = 11;const int buttonPin2 = 3; //yellowServo myServo1;Servo myServo2;int servoPos1 = 0;int prevButtonState1;int servoPos2 = 0;int prevButtonState2;void setup() {Serial.begin(9600);myServo1.attach(servoPin1);myServo2.attach(servoPin2);pinMode(buttonPin1, INPUT_PULLUP);pinMode(buttonPin2, INPUT_PULLUP);}void loop() {int buttonState1 = digitalRead(buttonPin1); // blue buttonint buttonState2 = digitalRead(buttonPin2); //yellow button// myServo1.write(90);// delay(1000);// myServo1.write(-90);// delay(1000);// myServo2.write(90);// delay(1000);// myServo2.write(-90);// delay(1000);if(prevButtonState1 == LOW && buttonState1 == HIGH){Serial.println(“just pressed blue”);if(servoPos1 == 0){myServo1.write(90);servoPos1 = 90;}else if(servoPos1 == 90){myServo1.write(-90);servoPos1 = 0;}}prevButtonState1 = buttonState1;if(prevButtonState2 == LOW && buttonState2 == HIGH){Serial.println(“just pressed yellow”);if(servoPos2 == 0){myServo2.write(90);servoPos2 = 90;}else if(servoPos2 == 90){myServo2.write(-90);servoPos2 = 0;}}prevButtonState2 = buttonState2;// if (buttonState1 == LOW && prevButtonState == HIGH) {// Serial.println(“released”);// if (servoPos == 0) {// // If servo position is 0, move it to 90 degrees// myServo1.write(90);// servoPos = 90;// } else {// // If servo position is 90, move it to 0 degrees// myServo1.write(0);// servoPos = 0;// }// delay(200); // Debouncing delay}
- start button, timekeeping, light sensors, responding audio: https://docs.google.com/document/d/1xZJfEfu-y8XTY6Q-X946hRUte1VBZTVg6sZt9gPKUAQ/edit
- joystick:
- CONCLUSIONS:
We started with a lot of different ideas and were struggling with them, however, restating the goals of our project, we finally aimed to extend our midterm project to an interactive shoveler capable of loading and unloading balls depending on random feedback, providing an engaging user experience.
In evaluating the project against its goals, we find that it largely achieved what we set out to accomplish. Users interacted with the shoveler through straightforward controls, engaging with the loading/unloading process.
The audience’s response was generally positive and we received some feedback about the concept itself. Given more time, there are several areas we would improve. For example, decorating the project in a cute style may not match the audios that are aggressive. What’s more, the wheels are not stable because the overlapping-5mm-wooden-board-made wheels are too heavy for the servos. Additionally, we would be refining the stability and efficiency of the loading and unloading mechanisms, ensuring smoother operation.
From setbacks and failures, we have learned valuable lessons in resilience and problem-solving. Each obstacle, especially the tough before user-testing presented an opportunity for growth, prompting me to reflect on our designs and refine our approach. These experiences have reinforced the importance of thorough planning and adaptability in the face of challenges.
- Video
https://drive.google.com/file/d/16JIqAtp6JWKKpryOSkdRkxOgDNzhlxP4/view?usp=sharing
DISASSEMBLY:
The box:
https://cuttle.xyz/@qx639/Untitled-Project-5mwZJROK6HuI