Recitation 8: Serial Communication by Jonathan Lin

Starting out this tasked seemed to be really hard, but as I slowly got into it I realized my problem. I was using the wrong basic code and that made my job a lot harder. After switching to the correct code I used what we learned in class and that helped a lot to create this project.

This project was much quicker to assemble, mostly because now I had the correct code! We have built many buzzer circuits in the past, therefore the build was easy. I thought the code might be hard at first, but as I started writing it seemed very logical.

Conclusion

Both of these projects were extremely fun to make, and due to us learning Serial communication in class it was not as hard as I expected. This recitation has definitely helped me to understand how to communicate between processing and Arduino, which will make help a ton when I start my final project.

Schematics/Code

Project One

Project 2

Preparatory Research and Analysis by Jonathan Lin

When I first started this course, I thought I knew what interaction meant. I knew what it meant, but I was not able to define it through specific words. Through the group project and the midterm, I started to put rules on what I believed was interaction. The first rule, there had to be multiple actors involved, and the actors did not have to be animated. Second, the outcomes of the actors cannot have been predetermined. Third, both actors on either side have the capability to respond to the other actor’s actions. Some examples that fit my interaction definition are: strangers bumping into each other while walking, a student talking to his teacher, and a man surfing the internet. Some non-interactive examples would be: in a play where people have scripted lines to say to each other, two robots having a pre-programmed conversation, and a man talking to himself.

Throughout this semester, my definition of interaction has evolved and been refined. Previously, it was a word that I thought I knew, but could not explain to a small child, but now it is something that I have defined. Interaction Lab taught me just how complicated an everyday word as “interaction” is. My definition of interaction is not the best and well defined, but merely it is how I see it. Everyone has their own views on what interaction is, and this class has taught me that everyone’s definition can be correct too. Interaction is truly an amazing word and concept!

Two great projects, one which aligns with my definition of interaction and one which does not, are the Digital Wheel Art by Younghyun Chung and the EM table. In the Digital Wheel Art, the technology allowed a 16-year-old boy, who has pediatric movement disorders, to use his wheelchair to express his artistic freedom. While the EM table, when turned on, transmits a small electromagnetic field around its center with the ability to power low energy demanding light. Both of these projects are amazing, but in the Digital Wheel Art, it allows the user to interact with the technology, while the EM table merely acts as a battery source rather than something interactive. The reason why Young’s project inspires me more for my final project is that not only was his project interactive, but it also brought joy to the user testing it. This brings to my new definition of interaction I would like to explain.

I challenge everyone to adopt my new type of interaction. It has all the previous rules, but now I have added one more: your interaction only counts if it brings joy and happiness to the person actor testing it. Whether that means making a wheelchair to help disabled children finally be able to express themselves, or even a game that brings joy and fun to their interaction with it. In any case, it must make the other user happy that he/she has tested your product. My current level in creation is not sufficient to be able to make practical technology which can benefit disabled people, but I can start by making a final project that will allow others to have fun and be happy. I want my project to be something that will make people say “let me try again, that was so much fun!” Interaction is a complicated word, but the interaction I hope to find is the one which brings out the happiness in others.

Sources:
Digital Wheel Art

EM Table

Recitation 7: Processing Animation by Jonathan Lin

For this project, I wanted it to have something to do with Spring. Therefore, I made the background into a photo that I found online, and then I wrote my code for the cute little ladybugs. One problem I encountered was that ladybugs were not just one solid color, so I had to experiment around until I finally found a way to have many different color circles on top of one main circle. All in all, this project was really fun to make because it made me think outside of the box to not only find a way to create a pretty background but also in the creation of these little critters.

GITHUB

The circle was pretty simple to make thanks to what we learned during our classes.

This part was probably the trickiest because initially with my if statement, the numbers were overriding. Therefore I had to be a little creative, so I added an object “a” that was
a boolean and what I did was make it switch between true and false states depending on the current value of my diameter. When this worked this was the highlight of the project!

This was quite simple as all I did was follow the hints given on the website, and then added a variable that represents a number that would translate to the color. I then added that random number into the previously made if statements making it change colors along with the size changes.

In summary, this recitation was tons of fun because it really helped to me learn processing. Every time I made a mistake I could a fellow, and usually before they even finished reviewing my code I would just find it. Making a lot of mistakes during this process really helped me to hone my processing skills!

Code for my homework
GISTHUB CODE

Recitation 6: Processing Basics by Jonathan Lin

I choose this picture because I really love the symmetry of a butterfly. The beauty of a butterfly is the wingspan, which is the same on both sides. In real life, butterflies are quite small creatures, but in this painting, it seems larger than life. Everything about it from its symmetry to the bright vibrant colors it is appealing to the eyes. It makes you appreciate the small things in life because if we look at the small things we can still find beauty. Some people love infinite landscapes, but I prefer to focus on the small beauties always present around us. 

I knew my processing and artistic skills were not that great, therefore I went for a simpler version. My art takes inspiration from the vibrant colors, symmetry, and bright background. At first, I had to find the correct rectangle sizes and angles to represent each part of the wings. Afterward, I placed them all in order on the y-axis and then copied and pasted that each time just adjusting the x position. The hard part was finding the proper color pallet. Eventually, I found that looked fine, and with little time left in class, I decided to just go with it. The quality of the two art pieces is obviously different, along with the colors. I think they both show off the butterfly beautifully though, all in all, I tried my best and I think I could improve a lot, but I am satisfied with the work I got done with only one hour. 

CODE

size(600, 600);
background(255);
rectMode(CENTER);

fill(0, 0, 0);
rect(300, 300, 20, 300);

noStroke();
colorMode(RGB, 600);
for (int i = 0; i < 600; i++) {
for (int j = 0; j < 600; j++) {
stroke(i, j, 0);
point(i, j);
}
}

fill(255, 0, 0);

rect(20, 150, 20, 60, 10, 20, 30, 40);
rect(20, 210, 20, 60, 10, 20, 30, 40);

rect(20, 390, 20, 60, 10, 20, 30, 40);
rect(20, 450, 20, 60, 10, 20, 30, 40);

rect(40, 150, 20, 60, 10, 20, 30, 40);
rect(40, 210, 20, 60, 10, 20, 30, 40);

rect(40, 390, 20, 60, 10, 20, 30, 40);
rect(40, 450, 20, 60, 10, 20, 30, 40);

rect(60, 90, 20, 60, 10, 20, 30, 40);
rect(60, 150, 20, 60, 10, 20, 30, 40);
rect(60, 210, 20, 60, 10, 20, 30, 40);
rect(60, 270, 20, 60, 10, 20, 30, 40);
rect(60, 330, 20, 60, 10, 20, 30, 40);
rect(60, 390, 20, 60, 10, 20, 30, 40);
rect(60, 450, 20, 60, 10, 20, 30, 40);
rect(60, 510, 20, 60, 10, 20, 30, 40);

rect(80, 30, 20, 60, 10, 20, 30, 40);
rect(80, 90, 20, 60, 10, 20, 30, 40);
rect(80, 150, 20, 60, 10, 20, 30, 40);
rect(80, 210, 20, 60, 10, 20, 30, 40);
rect(80, 270, 20, 60, 10, 20, 30, 40);
rect(80, 330, 20, 60, 10, 20, 30, 40);
rect(80, 390, 20, 60, 10, 20, 30, 40);
rect(80, 450, 20, 60, 10, 20, 30, 40);
rect(80, 510, 20, 60, 10, 20, 30, 40);
rect(80, 570, 20, 60, 10, 20, 30, 40);

rect(100, 30, 20, 60, 10, 20, 30, 40);
rect(100, 90, 20, 60, 10, 20, 30, 40);
rect(100, 150, 20, 60, 10, 20, 30, 40);
rect(100, 210, 20, 60, 10, 20, 30, 40);
rect(100, 270, 20, 60, 10, 20, 30, 40);
rect(100, 330, 20, 60, 10, 20, 30, 40);
rect(100, 390, 20, 60, 10, 20, 30, 40);
rect(100, 450, 20, 60, 10, 20, 30, 40);
rect(100, 510, 20, 60, 10, 20, 30, 40);
rect(100, 570, 20, 60, 10, 20, 30, 40);

fill(0, 255, 0);

rect(120, 30, 20, 60, 10, 20, 30, 40);
rect(120, 90, 20, 60, 10, 20, 30, 40);
rect(120, 150, 20, 60, 10, 20, 30, 40);
rect(120, 210, 20, 60, 10, 20, 30, 40);
rect(120, 270, 20, 60, 10, 20, 30, 40);
rect(120, 330, 20, 60, 10, 20, 30, 40);
rect(120, 390, 20, 60, 10, 20, 30, 40);
rect(120, 450, 20, 60, 10, 20, 30, 40);
rect(120, 510, 20, 60, 10, 20, 30, 40);
rect(120, 570, 20, 60, 10, 20, 30, 40);

rect(140, 30, 20, 60, 10, 20, 30, 40);
rect(140, 90, 20, 60, 10, 20, 30, 40);
rect(140, 150, 20, 60, 10, 20, 30, 40);
rect(140, 210, 20, 60, 10, 20, 30, 40);
rect(140, 270, 20, 60, 10, 20, 30, 40);
rect(140, 330, 20, 60, 10, 20, 30, 40);
rect(140, 390, 20, 60, 10, 20, 30, 40);
rect(140, 450, 20, 60, 10, 20, 30, 40);
rect(140, 510, 20, 60, 10, 20, 30, 40);
rect(140, 570, 20, 60, 10, 20, 30, 40);

rect(160, 30, 20, 60, 10, 20, 30, 40);
rect(160, 90, 20, 60, 10, 20, 30, 40);
rect(160, 150, 20, 60, 10, 20, 30, 40);
rect(160, 210, 20, 60, 10, 20, 30, 40);
rect(160, 270, 20, 60, 10, 20, 30, 40);
rect(160, 330, 20, 60, 10, 20, 30, 40);
rect(160, 390, 20, 60, 10, 20, 30, 40);
rect(160, 450, 20, 60, 10, 20, 30, 40);
rect(160, 510, 20, 60, 10, 20, 30, 40);
rect(160, 570, 20, 60, 10, 20, 30, 40);

rect(180, 30, 20, 60, 10, 20, 30, 40);
rect(180, 90, 20, 60, 10, 20, 30, 40);
rect(180, 150, 20, 60, 10, 20, 30, 40);
rect(180, 210, 20, 60, 10, 20, 30, 40);
rect(180, 270, 20, 60, 10, 20, 30, 40);
rect(180, 330, 20, 60, 10, 20, 30, 40);
rect(180, 390, 20, 60, 10, 20, 30, 40);
rect(180, 450, 20, 60, 10, 20, 30, 40);
rect(180, 510, 20, 60, 10, 20, 30, 40);
rect(180, 570, 20, 60, 10, 20, 30, 40);

fill(0, 0, 255);

rect(200, 30, 20, 60, 10, 20, 30, 40);
rect(200, 90, 20, 60, 10, 20, 30, 40);
rect(200, 150, 20, 60, 10, 20, 30, 40);
rect(200, 210, 20, 60, 10, 20, 30, 40);
rect(200, 270, 20, 60, 10, 20, 30, 40);
rect(200, 330, 20, 60, 10, 20, 30, 40);
rect(200, 390, 20, 60, 10, 20, 30, 40);
rect(200, 450, 20, 60, 10, 20, 30, 40);
rect(200, 510, 20, 60, 10, 20, 30, 40);
rect(200, 570, 20, 60, 10, 20, 30, 40);

rect(220, 30, 20, 60, 10, 20, 30, 40);
rect(220, 90, 20, 60, 10, 20, 30, 40);
rect(220, 150, 20, 60, 10, 20, 30, 40);
rect(220, 210, 20, 60, 10, 20, 30, 40);
rect(220, 270, 20, 60, 10, 20, 30, 40);
rect(220, 330, 20, 60, 10, 20, 30, 40);
rect(220, 390, 20, 60, 10, 20, 30, 40);
rect(220, 450, 20, 60, 10, 20, 30, 40);
rect(220, 510, 20, 60, 10, 20, 30, 40);
rect(220, 570, 20, 60, 10, 20, 30, 40);

rect(240, 30, 20, 60, 10, 20, 30, 40);
rect(240, 90, 20, 60, 10, 20, 30, 40);
rect(240, 150, 20, 60, 10, 20, 30, 40);
rect(240, 210, 20, 60, 10, 20, 30, 40);
rect(240, 270, 20, 60, 10, 20, 30, 40);
rect(240, 330, 20, 60, 10, 20, 30, 40);
rect(240, 390, 20, 60, 10, 20, 30, 40);
rect(240, 450, 20, 60, 10, 20, 30, 40);
rect(240, 510, 20, 60, 10, 20, 30, 40);
rect(240, 570, 20, 60, 10, 20, 30, 40);

rect(260, 150, 20, 60, 10, 20, 30, 40);
rect(260, 210, 20, 60, 10, 20, 30, 40);
rect(260, 270, 20, 60, 10, 20, 30, 40);
rect(260, 330, 20, 60, 10, 20, 30, 40);
rect(260, 390, 20, 60, 10, 20, 30, 40);
rect(260, 450, 20, 60, 10, 20, 30, 40);

rect(280, 210, 20, 60, 10, 20, 30, 40);
rect(280, 270, 20, 60, 10, 20, 30, 40);
rect(280, 330, 20, 60, 10, 20, 30, 40);
rect(280, 390, 20, 60, 10, 20, 30, 40);

rect(320, 210, 20, 60, 10, 20, 30, 40);
rect(320, 270, 20, 60, 10, 20, 30, 40);
rect(320, 330, 20, 60, 10, 20, 30, 40);
rect(320, 390, 20, 60, 10, 20, 30, 40);

rect(340, 150, 20, 60, 10, 20, 30, 40);
rect(340, 210, 20, 60, 10, 20, 30, 40);
rect(340, 270, 20, 60, 10, 20, 30, 40);
rect(340, 330, 20, 60, 10, 20, 30, 40);
rect(340, 390, 20, 60, 10, 20, 30, 40);
rect(340, 450, 20, 60, 10, 20, 30, 40);

rect(360, 30, 20, 60, 10, 20, 30, 40);
rect(360, 90, 20, 60, 10, 20, 30, 40);
rect(360, 150, 20, 60, 10, 20, 30, 40);
rect(360, 210, 20, 60, 10, 20, 30, 40);
rect(360, 270, 20, 60, 10, 20, 30, 40);
rect(360, 330, 20, 60, 10, 20, 30, 40);
rect(360, 390, 20, 60, 10, 20, 30, 40);
rect(360, 450, 20, 60, 10, 20, 30, 40);
rect(360, 510, 20, 60, 10, 20, 30, 40);
rect(360, 570, 20, 60, 10, 20, 30, 40);

rect(380, 30, 20, 60, 10, 20, 30, 40);
rect(380, 90, 20, 60, 10, 20, 30, 40);
rect(380, 150, 20, 60, 10, 20, 30, 40);
rect(380, 210, 20, 60, 10, 20, 30, 40);
rect(380, 270, 20, 60, 10, 20, 30, 40);
rect(380, 330, 20, 60, 10, 20, 30, 40);
rect(380, 390, 20, 60, 10, 20, 30, 40);
rect(380, 450, 20, 60, 10, 20, 30, 40);
rect(380, 510, 20, 60, 10, 20, 30, 40);
rect(380, 570, 20, 60, 10, 20, 30, 40);

rect(400, 30, 20, 60, 10, 20, 30, 40);
rect(400, 90, 20, 60, 10, 20, 30, 40);
rect(400, 150, 20, 60, 10, 20, 30, 40);
rect(400, 210, 20, 60, 10, 20, 30, 40);
rect(400, 270, 20, 60, 10, 20, 30, 40);
rect(400, 330, 20, 60, 10, 20, 30, 40);
rect(400, 390, 20, 60, 10, 20, 30, 40);
rect(400, 450, 20, 60, 10, 20, 30, 40);
rect(400, 510, 20, 60, 10, 20, 30, 40);
rect(400, 570, 20, 60, 10, 20, 30, 40);

fill(0, 255, 0);

rect(420, 30, 20, 60, 10, 20, 30, 40);
rect(420, 90, 20, 60, 10, 20, 30, 40);
rect(420, 150, 20, 60, 10, 20, 30, 40);
rect(420, 210, 20, 60, 10, 20, 30, 40);
rect(420, 270, 20, 60, 10, 20, 30, 40);
rect(420, 330, 20, 60, 10, 20, 30, 40);
rect(420, 390, 20, 60, 10, 20, 30, 40);
rect(420, 450, 20, 60, 10, 20, 30, 40);
rect(420, 510, 20, 60, 10, 20, 30, 40);
rect(420, 570, 20, 60, 10, 20, 30, 40);

rect(440, 30, 20, 60, 10, 20, 30, 40);
rect(440, 90, 20, 60, 10, 20, 30, 40);
rect(440, 150, 20, 60, 10, 20, 30, 40);
rect(440, 210, 20, 60, 10, 20, 30, 40);
rect(440, 270, 20, 60, 10, 20, 30, 40);
rect(440, 330, 20, 60, 10, 20, 30, 40);
rect(440, 390, 20, 60, 10, 20, 30, 40);
rect(440, 450, 20, 60, 10, 20, 30, 40);
rect(440, 510, 20, 60, 10, 20, 30, 40);
rect(440, 570, 20, 60, 10, 20, 30, 40);

rect(460, 30, 20, 60, 10, 20, 30, 40);
rect(460, 90, 20, 60, 10, 20, 30, 40);
rect(460, 150, 20, 60, 10, 20, 30, 40);
rect(460, 210, 20, 60, 10, 20, 30, 40);
rect(460, 270, 20, 60, 10, 20, 30, 40);
rect(460, 330, 20, 60, 10, 20, 30, 40);
rect(460, 390, 20, 60, 10, 20, 30, 40);
rect(460, 450, 20, 60, 10, 20, 30, 40);
rect(460, 510, 20, 60, 10, 20, 30, 40);
rect(460, 570, 20, 60, 10, 20, 30, 40);

rect(480, 30, 20, 60, 10, 20, 30, 40);
rect(480, 90, 20, 60, 10, 20, 30, 40);
rect(480, 150, 20, 60, 10, 20, 30, 40);
rect(480, 210, 20, 60, 10, 20, 30, 40);
rect(480, 270, 20, 60, 10, 20, 30, 40);
rect(480, 330, 20, 60, 10, 20, 30, 40);
rect(480, 390, 20, 60, 10, 20, 30, 40);
rect(480, 450, 20, 60, 10, 20, 30, 40);
rect(480, 510, 20, 60, 10, 20, 30, 40);
rect(480, 570, 20, 60, 10, 20, 30, 40);

fill(255, 0, 0);

rect(500, 30, 20, 60, 10, 20, 30, 40);
rect(500, 90, 20, 60, 10, 20, 30, 40);
rect(500, 150, 20, 60, 10, 20, 30, 40);
rect(500, 210, 20, 60, 10, 20, 30, 40);
rect(500, 270, 20, 60, 10, 20, 30, 40);
rect(500, 330, 20, 60, 10, 20, 30, 40);
rect(500, 390, 20, 60, 10, 20, 30, 40);
rect(500, 450, 20, 60, 10, 20, 30, 40);
rect(500, 510, 20, 60, 10, 20, 30, 40);
rect(500, 570, 20, 60, 10, 20, 30, 40);

rect(520, 30, 20, 60, 10, 20, 30, 40);
rect(520, 90, 20, 60, 10, 20, 30, 40);
rect(520, 150, 20, 60, 10, 20, 30, 40);
rect(520, 210, 20, 60, 10, 20, 30, 40);
rect(520, 270, 20, 60, 10, 20, 30, 40);
rect(520, 330, 20, 60, 10, 20, 30, 40);
rect(520, 390, 20, 60, 10, 20, 30, 40);
rect(520, 450, 20, 60, 10, 20, 30, 40);
rect(520, 510, 20, 60, 10, 20, 30, 40);
rect(520, 570, 20, 60, 10, 20, 30, 40);

rect(540, 90, 20, 60, 10, 20, 30, 40);
rect(540, 150, 20, 60, 10, 20, 30, 40);
rect(540, 210, 20, 60, 10, 20, 30, 40);
rect(540, 270, 20, 60, 10, 20, 30, 40);
rect(540, 330, 20, 60, 10, 20, 30, 40);
rect(540, 390, 20, 60, 10, 20, 30, 40);
rect(540, 450, 20, 60, 10, 20, 30, 40);
rect(540, 510, 20, 60, 10, 20, 30, 40);

rect(560, 150, 20, 60, 10, 20, 30, 40);
rect(560, 210, 20, 60, 10, 20, 30, 40);

rect(560, 390, 20, 60, 10, 20, 30, 40);
rect(560, 450, 20, 60, 10, 20, 30, 40);

rect(580, 150, 20, 60, 10, 20, 30, 40);
rect(580, 210, 20, 60, 10, 20, 30, 40);

rect(580, 390, 20, 60, 10, 20, 30, 40);
rect(580, 450, 20, 60, 10, 20, 30, 40);

fill(600);
ellipse(300, 100, 60, 180);

Shake to Quake – Jonathan Lin – Young Chung

My group project helped me to understand that people needed to understand your project just by looking at it. The key to a successful product is the ability for your audience to understand it immediately. Take for example the water bottle, the structure of it instantly tells the audience it is meant to hold some sort of liquid. It’s sole opening at the top limits the imagination of the audience to what it can do. The group project was different because it was something in the future, but this time we were building something that could be used. For our research, we looked at how earthquakes worked. Earthquakes vary on a scale, which determines the damage an earthquake can inflict. Some buildings are more resistant to the damage from an earthquake so we built all these interactions into our product. Depending on how quickly the user shook our city, that would determine the rate at which the towers fell. The towers would also always fall in order because the towers at the end are just more resistant than the towers prior.

We knew our name had to be not only catchy but also understandable. Therefore, our title “Shake to Quake” were all keywords to signify what our project was. We also added the city layouts on top of the box and included instructions on the front of the box. We really tried our best to avoid a norman door situation. Our materials were pretty limited so the only differentiating part of our project was our sensor. At first, we were thinking of using a gravity sensor, which would detect the movement relative to the gravitational pull. Looking back, the code for the gravity sensor would have not only been harder, but the way it would detect the earthquake would be worse too. Gravity Sensors detect vertical movement better when in reality, an earthquake has horizontal movement. Thankfully, the back did not have gravity sensors, so we went with a much better choice: an accelerometer. We then used the data from the accelerometer and put that into a formula which then gave the vector as the output. The vector was then used as the threshold to determine whether a tower fell or not.

One of our biggest struggles was the 3D printing because when we tried to print out our city, the printer broke. Therefore, we only had time to use one city for the user testing day, but that did not really affect our feedback. We got tons of great feedback during the testing, most of which we acted upon. One of the IMA fellows gave us this great idea to have the lights on before the game started to signify electricity, and as the earthquake took place the lights would slowly turn off to signify the loss of power. This also aided in our second problem where we lacked a countdown for the game to start. Originally, the goal was to light up the 5 lights, but changing it to turning off the 5 lights made it clearer. We also added a quick fade to each light when the reset/start button was pressed to further emphasize the game restarting and ready for use again. All this feedback definitely helped us to successfully demo our project during class because now everyone knew they had to Shake to Quake!

Our idea was an Earthquake simulator, and I believe that we successfully created just that. Not only was our project meant to be a fun multiplayer game, but also to show a side of realism. Earthquakes are frequent and they do not need to be that powerful to cause major damage. Take for example our game, some people would shake quite slowly, but even that would be enough to topple the great towers in our city. Our goal was always a fun game, but spreading awareness was also a side thought. I believe that is just natural if you make a disaster simulator people will learn how it works and the damage it can cause.  Our project was definitely interactive to because not only were you able to compete against someone else, but your actions determined the rate at which the towers fell. I believed it would have been cool if we added a timer to our project because then we could have seen all the varying times it took for different people to decimate the city. Having people lose and wanting to rematch was always a fun sight to see because it showed us that people were having fun. If we had more time, data screens would have definitely been added. We could have hooked up screens and displayed all sorts of data like how quickly you were able to shake the city, how fast your shaking would translate on the Richter scale, and also maybe some high scores to entice people to play again. We learned preparation is key because sometimes printers fail, and you need to find another way. I have definitely learned that saying all your ideas is important because I thought it was silly when my last idea was an Earthquake simulator. Looking at the finished product though, it is a really awesome idea and I am happy and proud of the work my group put into it.