MIDTERM PROJECT REPORT

HUNGRY PACMAN – RENNA – ANDY

CONTEXT AND SIGNIFICANCE

We learned how to use servo and motor in the previous cclass, and I think they are two devices that are very important for the midterm project. One of the art installations I analyzed was the Rain Room, Rain Room is an immersive installation where visitors can walk through a simulated rain shower without getting wet. Visitors can actively interact with the installation through their movements, such as walking or running, and see how the rain responds to their actions.
I think of interaction as the device responding differently to different actions of the user. It emphasizes the importance of both parties contribute and respond to each other’s actions. Just as in a conversation. Good interaction relies on attentive listening, thoughtful understanding, and meaningful communication.

CONCEPTION AND DESIGN

I like to play all kinds of games(both physical and vedio), so I want to make a tabletop game device. We came up with a lot of ways to play it, but some of them were hard to implement. For example, push a button to launch a ball. Connect servo to a stick and swing it back and forth to act as an obstacle. But the device has very little playability. After looking at many devices on the Internet, we wanted to make the body of the device out of cardstock and use a step motor to pull the rope to connect the container with the ball. By adjusting the height of the two ropes, the ball is transported to the top hole without falling from anywhere else. This device is very playable and can be implemented with Arduino.

Also,I think pacman is a classic vedio game which we can use as our concept:players need to send the “food” into the hungry pacman’s mouth.     

FABRICATION AND PRODUCTION

The first step was to draw the level on cardboard and cut it out. It turned out that our level was too difficult to beat. And the cardboard cut too much, resulting in the cardboard joint is too narrow, easy to bend. Andy suggested that we should draw rather than cut, simulate whether we can clear the level without traps, and then cut the cardboard.
As for how to fix the rope and stretch it, we came up with the idea of fixing the bent part of the straw to the two corners of the cardboard with hot glue, and then threading the rope in, so that the rope is not easy to wear.
To make the whole thing more stable, we cut out two side panels and a bottom plate and hot-glue them together.
As for the device that holds the ball, you need something that holds the ball and has weight. Andy gave us V-shaped planks, which fit perfectly. We join the two ropes and the board together, and the whole device is complete.
According to feedback from user testing, the pellets need to be recovered regardless of whether the level is cleared or not. So we built in a bevel, and we dug a hole in the front for the ball to drop and roll back into. Similarly, this bevel can also cover the circuit and play a beautifying role. You can see the mess behind you through the hole. In addition, if the ball lands, we need to give the player feedback, so we connected the buzzer to the vibration sensor to play the sound when the value is greater than 50.

CONCLUSIONS

The difficulties we encountered were:
1  We can not fix the step motor, if the step motor is not strong, can not raise the board. Andy gave us two carpenter’s fixtures, which solved the problem perfectly.
2 Because the corner of the board is sharp, and the rope fixing point is constantly changing, the sharp corner of the board will get stuck in the hole, resulting in the entire board starting to flip, affecting the game experience. I replaced it with nylon cable ties, smoothed the sharp corners, and used hot glue to secure the nylon ties so that the force on the rope was fixed and the template wouldn’t get stuck.
This midterm project has trained our innovation ability and cultivated my ability to solve problems when I encounter them. In my opinion, there are two points that can be improved in our project: 1. Give different feedback to players when they succeed and fail, set up a sensor at the end point, and play other music or give other feedback when the ball is detected to fall from the end point. 2, reset the length of the rope, regardless of failure or success, automatically restore the device to the initial state. But because of the time and the arduino wire, the sensitivity of the sensor and so on we couldn’t make it better.
All in all, we are very satisfied with this project. I had a great time working with calista, too.

DISASSEMBLY:

APPENDIX

CODE:

// based on ConstantSpeed example
#include <AccelStepper.h>
#include “pitches.h”
int DIR_PIN = 2;
int STEP_PIN = 3;
int EN_PIN = 4;
int value;
int press;
// Define a stepper and the pins it will use
// AccelStepper::DRIVER means a stepper driver (with step and direction pins)
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
// notes in the melody:
int melody[] = {
  NOTE_C3, NOTE_C4, NOTE_G3, NOTE_E3, NOTE_C4, NOTE_G3, NOTE_E3, 0, NOTE_CS3, NOTE_CS4, NOTE_GS3, NOTE_F3, NOTE_CS4, NOTE_GS3, NOTE_F3, 0, NOTE_C3, NOTE_C4, NOTE_G3, NOTE_E3, NOTE_C4, NOTE_G3, NOTE_E3, 0, NOTE_C3, NOTE_D3, NOTE_E3, NOTE_F3, NOTE_G3, NOTE_A3, NOTE_B3, NOTE_C4,NOTE_C4
};
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  4, 4, 4, 4, 4, 4, 4, 4,
  4, 4, 4, 4, 4, 4, 4, 4,
  4, 4, 4, 4, 4, 4, 4, 4,
  8,8,8,8,8,8,4,1,1,
};
void setup() {
  // Enable the stepper driver by setting the
  // EN pin to LOW
  pinMode(EN_PIN, OUTPUT);
  digitalWrite(EN_PIN, LOW);
  // The run() function will accelerate up to
  // the speed set here
  stepper.setMaxSpeed(1000);
  Serial.begin(9600);
}
void loop() {
  value = analogRead(A0);
  press = analogRead(A1);
  Serial.println(press);
  if (value > 0 && value < 300) {
    stepper.setSpeed(850);
  } else if (value >= 300 && value < 700) {
    stepper.setSpeed(0);
  } else if (value >= 700 && value < 1023) {
    stepper.setSpeed(-850);
  }
  stepper.runSpeed();
  if (press>50) {
    for (int thisNote = 0; thisNote < 32; thisNote++) {
      // to calculate the note duration, take one second divided by the note type.
      //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
      int noteDuration = 1000 / noteDurations[thisNote];
      tone(8, melody[thisNote], noteDuration);
      // to distinguish the notes, set a minimum time between them.
      // the note’s duration + 30% seems to work well:
      int pauseBetweenNotes = noteDuration * 0.80;
      delay(pauseBetweenNotes);
      // stop the tone playing:
      noTone(8);
    }
  }
}

DIAGRAM

OUR VEDIO

https://drive.google.com/file/d/1GuqhTjHDTz1c7yB3L7aYSALyeBF6RGMi/view?usp=sharing

OUR FILE FOLDER

mid

REFERENCE:

 

1 thought on “MIDTERM PROJECT REPORT

Leave a Reply

Your email address will not be published. Required fields are marked *