Final Project Documentation: The Matrix: Are you the One?

My Place of Inspiration:

From the falling codes to the flying super human, the theme of my whole project is based on the movie The Matrix. When I was planning out my final project, I thought that I would include so many aspects of this movie to my project like the falling codes, the using of red and blue pill as a way for the users to continue or not continue with the game, and so many more. As I started working on my final project, I came to realize that some aspects were not possible to be integrated into the project under the provided time. And some aspects would take so much of my time, but would not be a necessary feature at all. For example, I initially wanted to create a candy box that uses two servo motors to pump out candy to the users. When I was working, I realized that it would take a lot of time, and I was not sure whether it would work the way I intended it to be. In addition, it would not play an importance role in the overall project at all. Thus, although I had so many ideas from my place of inspiration, I learned that at some point,  I need to go away ideas that would hinder the flow of my overall project.

My Project’s Journey:

I started my project by coding the falling matrix codes in processing. Although I saw many examples of falling codes that were inspired from the movie, I did not find any examples that used processing to create the falling codes. I was not sure where to start, so I kept on watching the video of the falling codes again and again to know exactly where to start. As I watched, I noticed patterns that could help me put them into codes. For instance, the length of each string of falling codes are different and each column of falling codes has only one string. These realizations gave me a starting point.

When I started coding, I had another minor issue, which was not knowing what characters to use for the falling codes. When I did some research on the falling codes from The Matrix, I found out that they used the flipped versions of the Japanese characters. I was tempted to do the same, but I was worried that it would take so much dealing with what I had no knowledge about. Then, a great idea came to me. What if I used the alphabets from my country? Just like the flipped Japanese letters, no one will know what characters, which will create the magical effect like the matrix. And it’s something I could show my friends and family when I go back for the winter. This idea really boosted me up to continue coding. Below  are my native language alphabets. I did not include all of them in my falling codes because not all of them have the same size.

After finishing the first main part of my project, I started working on the second part, which was using the falling letters to create the outline of the person standing of the camera. This part unbelievably took a long time because I approached this problem by using the changes in frame of the captured video, so I needed to deal with pixels. However, to display each character, it requires more than on pixel, so I figure out the number of pixels that I should provide for each character, so the outline of the person is understandable and the characters are big enough for the users to realize that they are characters also. If each character takes too many pixels, they will form unrecognizable outline of the person, but if I made each character too small to fix the pixel, the users would not see that those characters are letters at all. Thus, it took me quite a while to get the tuning correct.

These first two parts of the project both required a lot of time and stressed me out. It required me to be patient and test many ideas. Sometimes I felt that I did not know what I was doing, but after several testing, I got things to work the way I wanted it to be or in a way that was unexpectedly satisfying. I guessed that was the source of my energy to keep coding and finishing my project. In addition, my joy in coding kept me coding for a long time until I got certain parts of my code to function properly.

Second Part of My Project’s Journey:

Although I got my falling codes and my image manipulation to work, I still felt that it was not enough to be interactive. Of course, the users might have an enjoyable seeing the outlines of themselves in falling characters, but their attention would be kept there for a long time. For less than 30 seconds, they will lose interest and move to something else. Thus, I needed to include something else they the users can play with. And this was the reason why I decided to include a game in my project. After the users were satisfied with looking themselves on the screen, they could play a challenging game.

The game was quite simple: the users need to control the person in the game to fly, so he would not crash into buildings. When I was making this game, I kept in mind that I should make it as interactive as possible. I thought that means that I needed to include as many ways as possible to get inputs from the users, so I thought of using four switches, each for left, right, up, and down. However, when I let my friends test my game, I noticed that using four controls in this case seemed so rigid and easy for the player because the users would have full control.Thus, I changed to one switch instead, in which the users can move the character in the game up by pressing the button. As it turned out, the game became more challenging as the users tried to maintain a balance between letting the character fall into buildings or flying up too high into buildings.

Below is a demonstration of my project:

Here is a picture of the button control:

My codes:

  • Arduino code:

 

  • Processing code

 

I have attached a zip file of my codes and images  here.

Reflections on My Project:

+ Problems:

  •  Because I used so many characters and keeping through them to update their x and       y values, my laptop was lagging so much, especially when I connected to the big monitor screen. To fix this, I did not use the falling codes as the background of my game but instead use a photo of the falling codes instead. In addition, I reduced the scaled resolution of the monitor.
  • The game was quite challenging for the users because the space between the buildings were too close to each other and they got only one hit. With this, I learned the lesson that it’s a good idea to create challenging games, but not too challenging to the point where users cannot get high score. Still, some people enjoyed the challenged and were able to score really high. I fixed this problem by increasing the space between buildings, so the game became less challenging for the users.
  • I broke my Arduino one hour before the show started because I was forcing the shield onto it when I was testing the control button. I was not so worried, however, because I had back up control, which was the up key on my laptop keyboard. I learned from my midterm project that you should always have a back up plan in case something goes wrong. At the end, I got the button to work by checking out an Arduino from the IM lab.

Further Improvements

My project would be even more enjoyable if I added sound to it. I was trying to add background music to it, but I received a null exception problem. I later found out that it had to do with using mp3 file as audio file. In addition, I think there should be a better way to do the falling codes without taking so much processing power from the laptop. Without the lagging from the falling codes, I could add many more features along side my game and make them run smoothly along side each other.

In addition, it would have been better if I flipped the captured image because the camera took in the mirror image of the objects in front of it. When the users were on the one end of the monitor, they needed to look the other end to find themselves. Thus, it took a while and made them think that they did not appear on the screen.

Overall, I found the project very fun. I enjoyed looking at other people standing in front of the monitor, moving their hands up and down, looking at themselves in the big monitor screen. I enjoyed seeing themselves trying to control the character through the moving buildings, trying to get the highest score. I will further add more features and improvements to my project and keep them up to post on this blog.

 

My Final Project_ Quick Update

I had successfully made a prototype of my first frightening part, which is creating the raining code. Below is my own version of the raining code:

Remaining frightening parts:

  1. Manipulate these codes into an outline a person who is standing in front of the camera. I am currently using Motion Detecting example by Daniel Shiffman to detect when a person is in front of a camera. Then, I will align change the positions of the falling code into the outline of that person.
  2. I give a second thought to whether I really need a candy box or not because its mechanism is quite complicated, but seems trivial to the whole project. For now, I put it in low priority.
  3. I will need to create a game as a part of testing whether the user is the ONE or not. My game is simple, with four buttons (switches), which determine the angles and directions. I will also use a potentiometer for control the speed. The users will have to use these controls to jump from building to building.  To land on the next building successfully, the users need to use the correct angle and speed (projectile motion).

 

Response: Digitize Everything

I think there is no doubt that the digitization of everything makes life easier. We can almost find every answer to our question online now as Google dominates the web with easy-to-access information. We do not need to carry big textbooks around now because we have e-book that we can read from our laptops, phones, iPads, and tablets. We do not need to worry that we might get lost in a place that we do not know because we have map apps that help us reach our destination wherever we are. And communication is so much faster than before when we have e-mails and social medias that link people all over the world.

Still, I don’t think that we will ever be able or want to digitize everything. Although it makes life easier and helps us do our daily work more efficiently, it lacks aspects that we  enjoy. For instance, an ebook can not replace a hardcopy book because a hardcopy book has the smell and the texture that an ebook lacks. Personally, I can read a hardcopy book for hours with enjoyment because, of course, of the content and the feeling I get from holding and smelling it. This is something that a digitized copy can’t do. And this is why people like me choose to carry a hardcopy of a book around instead of having an ebook version of it on our laptops.

With all of these in my mind, I’m looking to our digitized world, a world of efficiency and ease, but with the belief that certain aspects that we enjoy about our not-digitized world will not be gone.

My Final Project: Are You the One?

It took me a while to come up with a clearer idea about my final project. I knew that it had something to do using camera to take video and then manipulating that video/image, but I was not quite sure how I will do it. Now, I think I know how.

I got the inspiration from one of my favorite movies The Matrix. I still believe that the raining code in The Matrix is the coolest thing ever. Below is a demonstration of it:

 

1st Part: Raining Code

For my project, I want to have this raining code running on the TV. There will be a camera attached to the TV, so when people come in front of it, those characters in the code will change to form the images of those people, just like the one below:

The characters will not stop falling, but they’ll fall in a manner that will able to maintain the image of the audience.

2nd Part: Red or Blue Pill

Continuing with The Matrix’s theme, the whole movie mainly focuses on finding the One, the person who has the power to manipulate the Matrix and end the war to free the humans from the machines’ control.

At the beginning of the movie, the main character, Neo, is asked to choose a pill to consume: If he chose the blue pill, the story would end, and he wouldn’t be able to find out about the Matrix; if he chose the red pill, he would continue his adventure into the Matrix world. Of course, Neo chooses the red pill.

For my final project, I’m thinking of presenting the users with two “pills,” red and blue. I’ll ask them whether they want to know that they are the One or not. If they want to know, they can take the red pill, else they can take the blue pill and leave. There are several ways of presenting the “pills.” One way is to use red and blue switches for the users to press on. Another way is to use red and blue candy and make the camera detect the color to see which “pill” has been chosen. The second way is harder because I am so familiar with it, but I’ll give it a try first.

3rd Part: Tests

The users will be presented with several “tests,” so the program can use the result to figure out whether they are One or not. In the movie, the main character needs to fight powerful agents, dodge bullets, and reincarnate after he gets shot to death.  For my project, the tests are much simpler and, of course, safer.

   Test 1: Pulse Check/ Pressure check

Depending on what available in the lab, a pulse sensor or pressure sensor will be used       for the users to press and hold on to it. Some data will be recorded and compared the data of the One. This is one of the comparisons to see whether the user is the One.

   Test 2: Game test

The user will be asked to play a game. I’m not sure what the game is, but it will be simple and easy to play. Depending on the score, the user will be determined to be the One or not.

   Test 3:  A puzzle

The users will see hints as to what they need to do. They will not be told what to do, so  they can to figure it out by themselves. Again, I’m not sure what the puzzle will look like. Depending on how they solve that puzzle, they will be determined to be the One.

4th Part: Candy Box

At the end, the result will be shown whether the user is the one or not. Regardless of whether the user is the One or not, he/she will receive a candy. To give the candy, I’m thinking of using two servo motors give out the candy. I will have a box. One motor will be inside the box, and another one will be outside. When the adventure comes to the end, the outside motor will open the lid, and the inside motor will push a candy out.

Design:

Materials:

  • Arduino
  • Swtiches
  • Pulse/ pressure sensors
  • 2-3 web cameras
  • Box-acrylic using laser cutter
  • Tv

Things to Think about:

  1. I’m not sure how to make the raining code, but I can do some research and self-testing.
  2. I’m not certain how to arrange those codes according to the outline of the person standing in front of the camera. It might take a lot of time to figure out, but I think it’s doable.
  3. I need to come up with a game that is simple to play, but tricky enough for the users to enjoy. I don’t want to lose their interest with too simple game.
  4. The mechanism of the candy box seems simple and feasible enough in theory, but I’m not quite sure what it’s like in practice.
  5. I really want to use red and blue “pills” instead of just using switches. I’m afraid that I might spend too much time trying to figure this out, so I need to make sure that I keep this in mind.

 

Response: Design Meets Disability

Graham Pullin’s Design Meets Disability reminds me of Don Norman’s The Design of Everyday Thing because in both books, the two authors claim that functionality of a design is not the only thing that designers care about; designers need to take into consideration how the users feel about that design also. For instance, Pullin brings up an example of how early glasses were designed to be invisible for disabled people, so these people would not get noticed. Although this seems like a reasonable, it does not work. The first reason is it’s too obvious to be “invisible.” Second, trying to hide the disability does not help the users; instead, it gives a projection of those users as lacking self confidence. And it shows that the users don’t even want to put those glasses on.

The above problem shows that functionality is not everything. Designers need to come with designs that do not just do the job but also make the users feel satisfied. I think this is when the concept of choice comes in. Although a group of people need to wear glasses to see, it does not mean that they need to wear the same kind of glasses. Designers need to provide options to them, so they feel that they have choices to choose. It’s important to not assume that people prefer the same thing because people have different preferences. In addition, I understand that most designs are aimed to be inclusive, so designers tend to base their designs on certain “universal” concept. However, “universal” concept does not apply to everyone, so we need to make sure to include other minor ideas as well. To do this, we need collaboration of different people from different fields, including designers, engineers, and developers, to make designs for everyone.

 

Game Controller

For this assignment, I created a classic space game with two potentiometers. One potentiometer is used to control the spaceship up and down motion while the other one is used to move the spaceship right and left. The user can use the two potentiometers to move the space ship to certain area only.

During the game, there will be enemy spaceships who move randomly toward my spaceship. I need to move my spaceship in away that my spaceship will not collide with those spaceships because my health will be reduced during collisions. When my health reaches 0, I’ll lose the game. In addition to enemy ships, there are shields and hearts that the players can catch to protect themselves and increase their health back. As the game progresses, more and more enemy spaceships arrive at faster rate, making it harder for the player ‘s spaceship from colliding with the other spaceships.

The hardest part of creating this game was determining when the spaceships are colliding because they are not regular shapes. To determine whether two spaceships are colliding, I consider each spaceship as a circle with certain radius. I then calculate the distance between the two spaceships and compare to the distance of the sum of the radii of the two space ships. If the calculated distance is less than or equal to the sum of the radii, the two spaceships collide.

Below is my code:

Schematic of potentiometers:

And here is a video of my game:

 

Self Portrait Code

Below is my self portrait code:

 

Reponse to Casey Reas’ Eyeo talk

I was amazed by how Casey used “software vehicles” to interact with dots in certain manner depending on how they were wired to create abstract art. He added more and more “software vehicles” until patterns could be seen and then he printed that out as his artwork. This is very intriguing because I never thought of this as a way to design an artwork. I always thought that artwork came from the designers who actually do all the work themselves. I always imagined that they thought through every line and point before they put them in their artwork. What Casey had shown really blew my mind.  He had shown me that wonderful pieces of artwork could be created by randomness, but randomness with purpose.

I see that randomness has played a large part in his designs. But in that randomness, there are purposeful patterns that could be. In this way, being random opens space for creativity, allowing designers to explore more and more into the discovered zone. One of the risks with randomness is designers might make things so random that at the end no patterns are derived at all. In this case, we might need to step back into something less random, so we are able to create what we want. Still, I believe that it’s important that we play with randomness to explore the unknown. It’s fun and never fail to amaze us.

 

Recreating Art Design

I am recreating this art piece below. I found it very fascinating with all those lines overlapping each other. It looks like a piece of knitted cloth with tiles.

Here is my code:

And below is the video of the code in action:

An Example of Class: A Modification of MovingCircle

Below is my code for a sample class. I made some modifications to the MovingCircle class that we worked in class on Saturday. Instead of calling my class MovingCircle, I call it Gas. The objects of this class have additional properties like they collide against each other. When they collide against each other, they switch their speed and colors.