Midterm Project Blog Post: Happy penguin – Yixuan Huang (Mercela)

1. Project name: Happy Penguin

2. Project Statement of Purpose:

Our project has the purpose of bringing people happiness and accompany the group of people who really need cares, for example, the children and the introverted people. They may lack the care from the family or they may be nervous about communicating with others. With the happy penguin, they can receive the care from our project both physically and mentally. When they are depressed or in a low mood, they can come to the penguin for help. As they are near the penguin, it will sense the distance is getting closer and closer. When the distance is smaller than a certain amount (which is 50cm in our model), the penguin will move forward until it reaches the user. If the user presses the button on its head, the wings of the penguin will open and give the user a warm hug. Since the animal is easier to express their friendliness with their cute appearance and behavior. The direct interaction between the penguin and the user will eliminate people’s stress and anxiety. It will also bring confidence and happiness to the users.

3. Literature and art, perspectives and contexts:

The article “The Art of Interactive Design”, written by Crawford, gives us the most important and fundamental concept of interaction and interactive design. He defines interaction as a communication which involves “a cyclic process in which two actors alternately listen, think, and speak” Therefore, we thought about how to start the interaction more easily and make the communication between the project and the users more actively and smoothly.

After we searched about other artists’ projects on the website, we found a robotic arm called Encounter, created by Piet Schmidt. The machine can act like a living creature to follow the users and hold the mirrors from different perspectives. The idea of building a more living thing attracts us so much.

What’s more, we found the project of the Arduino car named “Little Bot Budget: Affordable Arduino Robotics Kit” in the Arduino library by blogger Slant Concepts who combine the sensors and motors we have learned in class. We thought that we can build a similar system and add other elements to imitate the movement of the animal. We decided to make the project response initially instead of people giving the order first, which will seem more like a living animal.

Besides the basic action of running forward, we decided to add more movements on the hands. We were inspired by the waving hand that the professor has shown in the class, which use the servo as the main component. We changed the hand to the wings and made the movement like a hug which fits our aim of expressing friendliness and happiness. The idea of the hug comes from the movie Big Hero 6, in which the robot Baymax is designed to accompany people. His action of hugging is a typical way of how a robot shows his love for the user, so we thought our penguin can use a similar way to interact with the users.


The Art of Interactive Design, Crawford

Encounter – Suspiciously curious robotics

LittleBot Budget: Affordable Arduino Robotics Kit © CC BY-NC-ND

4. Project Description:

In the process of building the project, we firstly prototype our project and think through the interaction process. Initially, we added a lot of functions to the penguin, including the following function, the waving wings, the shaking of the head and the LED eyes. However, the professors suggested that the system is too complex for us at present time and due to the limit of time, we simplified the functions only to the moving of the wheels and the waving wings.

What’s more, we originally wanted to control the penguin at a certain distance from the object, which means it will follow the user moving forward or backward within a constant distance and even alter the direction. But it seems strange for the penguins to go backward and it doesn’t match our purpose of showing friendliness and love. Therefore, we decided to make only two functions for the penguin with DC motors, Ultrasonic sensor, and the servo.

The central issue is to connect the motor and the wheels for the basic body part and add the servo to the wings. In this process, we met a lot of problems such as the broken of the components, the code and how to give power to the two systems with the outside power like batteries. We tested the DC motor and wheel system and add them onto the baseboard first so that we can decide the size of our penguin and avoid the lack of space for the main Arduino board.

Since we want to make the body by ourselves instead of buying a toy and put everything into it, we design the body with illustrator, laser cut the board and assemble them together. We use the cotton to fill the body and use the black plastic sheet.

Lastly, we made the wings and added them to the body. We choose to build the DC motor part first because it is the most important interaction in our project. And only after we build the circuit and solve the problem of the outside power, can we decide the size of our penguin and how to carry the Arduino board. Before we laser cut the body, we use the cardboard to build the model of the body so that we can calculate the position of the wheels and the wings. When building the wings, we also thought about how to fix the servo on the body, and in what direction should the wings wave so that it won’t hit the body and is more vivid.

5. Project Significance:

As I have introduced before, our goal for the project is to build a machine that can act like a living animal and interact with people directly. The target groups like children and introverted people can open their mind and feel the care from our penguin through its action of hugging and approach them when they are in need. Besides these people, other users can also feel the friendliness and warmth from the project.

6. Project Design & production:

We choose the DC motor to run the wheels according to the value we get from the Ultrasonic sensor because only the DC motor can drive the wheels which are big enough to carry the entire body of the penguin. As we were inspired by the waving hands shown by professor Marcela in the class, we learned that the servo can control the angle which can be used on the wings of the penguin.

As for the material of the body, we abandoned the use of cardboards to laser cut board because the cardboards are not strong enough for the whole body. We also found some cotton and black plastic cover for the decoration of the body because we wanted to make the penguin fluffy, soft and cute.

When building the circuits, we tested the DC motors and the wheels we borrowed first, which took us a lot of time since the transistor sometimes didn’t work well. We changed it several times and adjust the distance value of the sensor to test what is the optimal distance that is comfortable for the users. We increased the delay time so that the motor can move more smoothly. Moreover, with the help of faculties, we added the serial write in the code so that it is more convenient for us to examine the problem of the motor through our computer. In the end, the wheels will move when the distance is between 10cm and 50cm. When the distance keeps decreasing to 10cm or it becomes further than 50cm, the motor will stop.

For the wings part, we use the servo to control the angle. At first, the servos are connected to the same Arduino board with the motor which only had one 7.4 V battery to provide power. However, the battery is not stable for running the two system and the servo can’t work well. Hence, we added another battery and use a new Arduino board to control the servos which make it safer and more stable. When we assembled the wings to the body, we miscalculated the angle and the direction of the servo several times. After repeating tests and adjustment, we finally made it.



In the user testing part, we found a big problem for this motor and wheel part. When the user is going to leave, the distance will increase again over 10cm which will make the penguin move again. In this case, the users have to hold it so that they can walk away and leave. Some users suggested us to add a main button to the penguin to restart the whole system which is a very helpful idea. What’s more, some users suggested if we can add more sensors around the penguin’s body instead of the only one in the front which is also a point we could develop later.

7. Conclusions

Finally, we accomplished our happy penguin project. By using the ultrasonic sensor to record the distance and the DC motor to response when the distance value is smaller than 50cm, we realize the goal of interact initiatively. The button that controls the wings is another interaction that enables the machine to communicate with people and can bring people happiness and pleasure.

The problems we have for our project is that after the user testing part, we don’t have much time to add in the main switch. Since we divided the wheels and the wings to two systems, it becomes more difficult for us to figure out how to use one switch button to control both two systems. In addition to that, we may change the direction of the servo to make the waving of the wings more like a hug. Our code also needs to be improved to be clearer and more precise. Especially the distance of the sensor needs more testing, we can add the speed of the motor into the code so that the penguin can go a little slower without scaring the users.

Through all the failures in connecting the circuits and testing the code, we learned a lot about the code writing and the how to debug the code by changing the components or add a serial. Print order into the code. When assembling the body, we learned the usage of laser cut. In fact, we made a little mistake in our laser cut graph which made the boards can’t perfectly fit into each other, but we fixed it by using the glue gun. The whole project expresses our thought of creating a machine that can act with people like a living creature. Those who are lonely and need help can find love and warmth through the hug from our lovely penguin.



#include <Servo.h>;

const int pingPin = 9;
int motorPin1 = 6;
int motorPin2 = 5;
unsigned long previousMillis = 0;
const int buttonPin = 8;
//const int switchPin = 7;

// servo pin
const int servoPin1 = 10;
const int servoPin2 = 11;

const int d0 = 0;
const int d1 = 60;
Servo servo1;
Servo servo2;

void setup() {
  // initialize serial communication:
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(buttonPin, INPUT);

void loop() {
  long duration, inches, cm;
  pinMode(pingPin, OUTPUT);

  digitalWrite(pingPin, LOW);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(50 );
  digitalWrite(pingPin, LOW);

  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);
  // convert the time into a distance
 // cm = microsecondsToCentimeters(duration);

  Serial.print("cm, motor = ");


  if ((cm <= 10) || (cm >= 50)) {
    analogWrite(motorPin1, 0);
    analogWrite(motorPin2, 0);

  else {

    analogWrite(motorPin1, 80);
    analogWrite(motorPin2, 80);

    analogWrite(motorPin1, 0);
    analogWrite(motorPin2, 0);

//servo part

  int buttonState;
  buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) 
  else  {

long microsecondsToInches(long microseconds) {
  return microseconds / 74 / 2;

long microsecondsToCentimeters(long microseconds) {
  return microseconds / 29 / 2;

One thought on “Midterm Project Blog Post: Happy penguin – Yixuan Huang (Mercela)

Leave a Reply