Self-leveling maze-Leon Chen-Professor Gottfried Haider

Context and significance:

My project was influenced by a book called “The Maze Runner”, where the maze in it can change its own structure. The maze in the book was designed for trapping and testing the protagonists, but viewing from another point, it can also be of great fun playing it. Besides, in my group project, the cleaning machine was intended to be more automatic, but ended up activated mannually, however, the performance turned out to be satisfying. Therefore, it gave me an idea that interaction should include the pyhsical movement of users. Inspired by the two thoughts above I came up with the maze that alters its level according to the time player uses for level 1.

I remembered playing a kind of maze that requires users to tilt to control the ball. My design can automatically change its level, so that users won’t be bored at it. I intend to warn people who are so busy working, studying or doing anything that forget to enjoy the pure fun. The sincere joy is especially vital for them.

Conception and design:

In my understanding, user have to actually touch the artifact to interact with it, so I design the maze to enable the user to hold and play with it, so the maze doesn’t need to be very big.

As for the maze, we had the idea of changing the walls of the maze to alter the leve, which is closer to the maze in the book. But this meant that more servo motors and programming were required, so instead, we decided to make a gate for directing users to different route.

The body of the maze can be made through cardboard. As for the sensors, we considered using pressure sensor, but we were afraid that the ball may be to light to be detected. After discussion with professor, we finally targeted light sensor, because it can be hide in the hole under the cheching point and changes its routes according to the ohms given. However, it was not the best option, because magnetic sensor can be more accurate, since the light sensor is easily affected by lights from surroundings. In the absence of a magnetic ball, we had to gave up magnetic sensor.

Fabrication and production:

During the process, my partner was responsible for the code, and my job was to build the maze. First, I had to carefully design the maze. Level 1 is rather easy, but since Level 2 has three routes, I had to balance the difficulty. The third route is a bonus route, which is open when your time is at a certain number. Designing was far from enough, measurement was inevitable when applying theory to practice, meaning that all the length of the walls needed reexamine. This was the most significant step. Because my work was doubled when I found out the thickness of the cardboard should also took into account, which meant that some of the original design wouldn’t work. What’s more, it turned out that I had to pinch them so as to make them thiner.

the original design looks much more difficult
the last edition

After finishing building, we assembled and tested the maze together——whether the ball could go through all the tunnels, and whether the checking point could send the ball into different routes.  The latter one took us a long time, since the servo motors can only rotate 180 degrees, so for each route the degree rotated must be modified. In this phase, I told my partner the angle of the servo motor, then he modified the code. But it was still not enough for three routes, we struggled for a long time, then I came up with the idea of using two servo motors, so that one motor for the bonus route and one for the other two.

there was only one servo motor at first
we added the second one later

During the user testing, we had to manually block the sensor to activate the gate, due to the lack of fabricating time. We recieved suggestions on the sensor, the start and end, and the reward when finished. To solve the problems, we hide the sensor in the hole of the checking points, which are sticked to the back of the maze. We wrote some words to indicate the start and the end. To signal one has finished the game, we added a buzzer to it. These adaptationsa are very effective, because their purpose is to make the experience smoother, so that the maze automatically operates.

The bonus route was not in my original idea, but I added it later. The reason is that I want the game to be more exciting. You see, I put in a second servo motor just because of it. In this perspective, I  can say I really accomplish my goal.

Conclusion:

My project goal is to let users play with my maze and have fun. I once defined interaction as a conversation between two individuals (man or objects) that conveys messages with each other without limitation. In fact, I think in playing the maze, the users are pyhsically engaged in it. Many users during the user testing and final presentation played the maze and explored different routes. I think they get my message of having fun. Besides, they also interact with the maze, because it changes their route according to their time. Therefore, there is certainly interaction in it. 

To improve the maze, I can make the walls more smooth by using other materails. Decoration can be considered to improve the outlook. More importantly is the start and the end, because I found most of the time users are unable to identify them.

In conclusion, the midterm project may be the most difficult and most insightful project I ever made. But the ultimate question returns to “So what?” and “Why should anybody care?”. To answering these questions, I also want to go back to the goal of my project——having fun. In this busy era, everyone is in a big competition with those around, which is a tendency called involution. But we all gradually forget the real fun of taking a rest and relaxing. I want to send out the message to those who play my maze.

Annex:

#include <Servo.h>

Servo myservo;
Servo yourservo;
int sensorValue1;
int sensorValue2;
int state=1;

void setup() {

Serial.begin(9600);
myservo.attach(9);
yourservo.attach(8);
Serial.println(“Game starts, LET’S GO!!!!”);

}
void loop() {
if (state==1){
state1();
} else if (state==2){
state2();
} else if (state==3){
state3();
} else if (state==4){
state4();
} else if (state==5){
state5();
}

}

void state1() {
int sensorValue1= analogRead(A0);

//Serial.println(sensorValue1);
myservo.write(120);
yourservo.write(60);
delay (500);
if (sensorValue1<70){

if (millis()<8000){
state=2;
} else if (millis()>8000 && millis()<9000){
state=3;
} else if (millis()>9000){
state=4;
}
}
}

void state2() {
Serial.print(“First round finished, you spent “);
Serial.print(millis()/1000.0);
Serial.println(“s, Go to Level 1”) ;
myservo.write (0);
delay(1000);
//yourservo.write(170);
delay(1000);
state=5;
}
void state3() {
Serial.println(“Surprise! You’ve triggered a bonus scene, just go all the way to the end”);
myservo.write (30);
delay(500);
yourservo.write(170);
delay(1000);
state=5;
}
void state4() {
Serial.print(“First round finished, you spent “);
Serial.print(millis()/1000.0);
Serial.println(“s, Go to Level 2”) ;
myservo.write (180);
delay(1000);
state=5;
}
void state5() {
int sensorValue2= analogRead(A1);
//Serial.println(sensorValue2);
if (sensorValue2<65) {
Serial.print(“Yeah, you’ve finished, you spent “);
Serial.print(millis()/1000.0);
Serial.println(“s”) ;
//Serial.println(sensorValue2);
tone(10,440);
delay(1000);
noTone(10);
state=1;
}

}

state2() {

Serial.print(“First round finished, you spent “);
Serial.print(millis()/1000.0);
Serial.println(“s, Go to Level 1”) ;
myservo.write (0);
delay(1000);
//yourservo.write(170);
delay(1000);
state=5;
}
void state3() {
Serial.println(“Surprise! You’ve triggered a bonus scene, just go all the way to the end”);
myservo.write (30);
delay(500);
yourservo.write(170);
delay(1000);
state=5;
}
void state4() {
Serial.print(“First round finished, you spent “);
Serial.print(millis()/1000.0);
Serial.println(“s, Go to Level 2”) ;
myservo.write (180);
delay(1000);
state=5;
}
void state5() {
int sensorValue2= analogRead(A1);
//Serial.println(sensorValue2);
if (sensorValue2<65) {
Serial.print(“Yeah, you’ve finished, you spent “);
Serial.print(millis()/1000.0);
Serial.println(“s”) ;
//Serial.println(sensorValue2);
tone(10,440);
delay(1000);
noTone(10);
state=1;
}

}

IMA Recitation 4: Actuators and Mechanisms

Recitation4 requires us to build a circuit and mechanism with our partners.

Task1:

First, a circuit must be done to test the motor. Besides, a USB protector was used to protect our computers from possible damage.

According to the diagram above, we connected the parts together rapidly.

I suppose it is because we have got used to building circuits that we are able to finish the task in a short time without any error.

The video above shows how the circuit works.

Task2:

Before building the cardboard mechanism, we needed to cut the parts from a cardboard with template glued to it.

 

Some parts required a small hole for rivelts, since we forgot to bring our soldering irons, so we tried to pierce it with the box cutter, but, apparently, it was not suitable for this task. At last, we had to borrow a soldering iron from another group. The template indicated the usage of each part, so it was not hard to build the mechanism. By using a hot glue gun, those parts could be easily assembled.

The movement of the mechanism looks like this.

Task3:

Adding a small cardboard plane on top of the mechanism, it seemed that the plane was flying in the air.

Additional questions:

1.The Autotelematic Spider created by Ken Rinaldo and Matt Howard is a community of bionic robots that mimic the behavior of ants and spiders. They learn from the interactions with each other, communicating the recharge ports, which are their food. Apart from the mechanism I built in the recitation, this robot also requires sensors and communication units. In order to manifest the idea of interaction, the artist had to choose whether to interact with the audience of interact among the machines themselves. Apparently, Ken and Matt chose the latter one.

2.My midterm project is a self-leveling maze, in which I will use servo motors to build the mechanism. The maze changes it level according to the time used in Level1, through which the user is involved in an interaction between he/she and the project, experiencing the fun of various routes. Different from using an animation on a digital screen, the motor with a mechanism is more direct and allows the user to test and explore the project.

Self-leveling Maze-Ruiyang Chen-Professor Gottfried Haider

Inspired by a book called “The Maze Runner” where the maze in it actually changes its own structure, the self-leveling maze is a game that detects the time used for Level1, then directs the player to different routes in Level2 accordingly. In the book, the characters are trapped in the maze due to its self-changing ability, then, thinking in another angle, by utilizing the self-changing function, a single maze can offer the player countless experiences. It is a fun game suitable for players of all ages, where,players can indulge himself/herself in exploring various routes, interacting with himself/herself.

IMA group project

In the first meeting of group 4, we allocated all the ideas on the three fiction stories and came up with one that was applicable, which was the cleaning machine. In order to fulfill the criteria, we focused on how to make the machine as imaginative as possible. The washing machine for cars was a suitable prototype, so we added more on it’s basis, for example, the machine was supposed to contain more funtions rather than washing, disinfectioning and drying, but functions like putting minirobots into patient’s body would add up to our work, so we gave up.

We decided that one member needed to write a script about the project, and three people built the different parts of the machine. To be specific, I wrote the script, Wendy, Nomun and Daniel were assigned the later role. Furthermore, I was the doctor in the story, Jim was the patient and narrator, Wendy, Nomun and Daniel were the machine.

 

sketch of our design
shower head
Ultraviolet lamp
drier

This mahcine can be more interactive than we performed. I defined interation as “a conversation between two individuals (man or objects) that conveys messages with each other without limimtation” in the first step of group project. This machine involves interaction between patients and doctors——patients tell their health contidition to doctors before and after cleaning. Since we decide to make the machine a more general cleaning machine, patients don’t necessarily have to tell which disease they have.

Of course, this artifact we built has many flaws. One of the failures was that we intended to build a gate for the machine, but ended up using our own bodies to imitate the door, which looked really stupid. However, it turned out to be a good idea, because we could make the machine looked like as if it had AI in it, so thinking from another angle, it might also be one of the successes. We also failed to build more parts of the machine, limiting it to only three basic processes. But performing to much may be unacceptale for the audience, so it seems a wise choice.

The roles we need to play were determined after the script came out. No need to mention, I was the doctor in the story. Until the last second before performance, I was still fixing the script according to their suggestions. To be specific, we rehearsed the first draft together, which, from time to time, was interrupted by new ideas come from group members. For example, the part that I tested the positivity of the patients before and after cleaning wasn’t in the original test, actually, Wendy suggested I add it into the performance to make it more natural. 

controller of the machine
thermometer

To demonstrate this, I attached the controller and the thermometer built just before our performance.

This is how we worked together, from deciding the artifact to performing.

 

Below is the script, though we may have some improvisation, the overall plot is correct.

In the future, the plague that can turn human into stone swept the world. Among all the infected areas, section 11 is the worst. The Emergency Management headquarters try to gather all possible infected patients and test positivity, but first they need to go through a machine……
Staff: Good morning doc.
Doctor: Good morning. Have you organized today’s schedule.
Staff (pass the schedule): Sure, we have a few possible infected patients from section 11.
Doctor (looking at the schedule): Section 11…… A place of death. How did they possibly survive the plague?
Staff: Luck, I suppose.
Doctor: That make sense, but I believe in science. All right, bring them in.
(Operator1,2,3 starting the machine, patients in)
Patient: Hi, doc.d
Doctor: Hi, welcome to the front gate of Emergency Management headquarters, let me first test your positivity.
Doctor: Apparently, positive. Now you just need to go through the machine.
Patient: Can you save us doctor?
Doctor: Yes, and no. Why not ask yourself?
Patient: What do you mean?
Doctor: Don’t tell me you have no idea about section 11.
(Patient silence)
Doctor: Now hurry up and get the hell into that machine!
(Operators push patients into the machine)
(Patients slowly go through the gates)
(Patients perform to show how the machine works, use performance not words, but he can say like “I feel water coming down” to indicate the purpose of each gadget.)
Staff: All the procedures are finished, doc.
Doctor: Well, let’s test again.
Doctor: Congratulations, you are negative now.
Doctor: Excellent, bring the next crew in. We still got a lot to do.

Analysis on group6:

The project of group 6 is crime detecting glasses, which will alarm user when it spots a crime. The glasses also includes playback function, by clicking it, a virtual screen that shows how the crime happened will appear. This invention relates to the first fiction story “The Veldt”. In group 6’s clarification, in the story, the glasses can detect what crime the children want to commit, so that the parents won’t end up eaten by lions. I think their project relates to the story, since the backgrouds of it allows many virtual reality devices to exist and their project do make sense in the content. What is pity is that a glasses like that won’t necessarily exist in a normal family. Despite that, the project is also interative, in the way of alarming the user when dectecting a crime.

They imbeded the crime detecting function in glasses, but I may design a more inconspicuous device, like watch or earphone. The reason is that you want to make criminals focus less on it. For example, in group 6’s performance, students suddenly noticed that the teacher was wearing a crime detecting glasses, because he didn’t have myopia before. But if the device is a articles for daily uses, those students may drop their guard.

Nevertheless, they demonstrated how the glasses work compellingly, from the backgroud of the story to how the glasses spot the crime. Especially the part that they display the playback of the crime, I didn’t expect they would make a play window, which was creative and interesting. However, it wasn’t wise to add another character for giving and explaining the glasses, since it would make the plot look unnatural. For improvements, they can her a salesman on the teacher’s way home where he came up with the idea of buying a crime detecting glasses.

IMA recitation3:Sensors

In recitation 3, we build a tilt sensor and complete some workouts with the sensor on.

First, we prepare the tilt sensor, which sense the direction and provides feedback based on it. When you change the orientation from up to down, the tilt transition from HIGH to LOW.  

Piling off the plastic outside, we wrap the wires around the sensor before soldering. This step helped us to solder the wires as stable as possible.

piling off the plastic

 

soldering

The middle green stuff is the tilt sensor, through these steps it can be connected to the circuit. The diagram and our finished circuit are shown below.

 

int SENSOR_PIN = 2;    
int tiltVal;

void setup() {
  pinMode(SENSOR_PIN, INPUT);    // Set sensor pin as an INP
  Serial.begin(9600);
}

void loop() {
  // read the state of the sensor
  tiltVal = digitalRead(SENSOR_PIN);
  Serial.println(tiltVal);
  delay(10);
}

Implementing the code above allows the tilt sensor to give feedback in the serial monitor,  1 when the direction is up and 0 down.

In order to make the Arduino print 1 and 0 when the tilt sensor changes from 0 to 1 and 1 to 0 respectively, we then refined our code.

int SENSOR_PIN = 2;
int tiltVal;
int prevTiltVal;

void setup() {
  pinMode(SENSOR_PIN, INPUT); // Set sensor pin as an INPUT pin
  Serial.begin(9600);
}

void loop() {
  // read the state of the sensor
  tiltVal = digitalRead(SENSOR_PIN);
  // if the tilt sensor value changed, print the new value
  if (tiltVal != prevTiltVal) {
    Serial.println(tiltVal);
    prevTiltVal = tiltVal; 
  }
  delay(10);
}

The if condition restricts when we should print 0 or 1. We then did some workouts wearing the tilt sensor. But first we added a conditional into the code so that it will print a message after a full biceps curl was done. Then we set a limit to the count, so that another message is displayed when we done 8 biceps curl. Finally, we use a buzzer to alarm at the same time we finished.

int SENSOR_PIN = 2;
int tiltVal;
int prevTiltVal;
int count=0;

void setup() {
  pinMode(SENSOR_PIN, INPUT); // Set sensor pin as an INPUT pin
  Serial.begin(9600);
}

void loop() {
  // read the state of the sensor
  tiltVal = digitalRead(SENSOR_PIN);
  // if the tilt sensor value changed, print the new value
  if (tiltVal != prevTiltVal) {
    prevTiltVal = tiltVal;
    count=count+1;
    if (count%2==0){
    Serial.println("You have finished a biceps curl.");
  }
    if (count%16==0) {
    Serial.println("Yay, you have done one set of curls.");
    tone(8,440);
    } else{
    noTone(8);
  }
  }
  delay(10);
}

I also tied the sensor to my thigh and do a few squat, finding the sensor works in this circumstances, because the direction of my thigh changes.

In reflection, the tilt sensor is a useful and interesting gadget. Sometimes, in order to save time and tape, we hold the wires and tilt it, because the sensor only test the direction rather than how the direction is changed. In the coding part, I tried to set the count to 0 every time I finished a full biceps curl and the conditional is “if (count ==2)”, however, this method didn’t apply if I want to display another message when the total times reach 8, so I change my strategy and conditional statement.

The tilt sensor can be used in most workouts, but for those doesn’t include changing of direction, it won’t work.

my funny illustration of how to use it