The Pelican Ping Pong Ball Launcher was pretty successful at the museum. The children really enjoyed swimming in a plethora of colorful ping pong balls and feeding them to the fussy Pelican!

The action of the mouth opening and closing at random times was more interesting to the children than the actual ball launcher probably due to how weak the ball launcher was and the fact that the device was mounted on the floor. The drama of a ping pong ball flying was not as evident.

Some technical issues we ran into mainly had to do with the stability of the structure. Because the pieces were so oversized and disproportioned, they kept coming off. The tabs were not strong enough to keep the head in place and the narrow base could not support much rough play, so the device would tip over. We need to redesign the base so that it’s wider and more stable.

Seeing our device in action also revealed that we need to hide a lot of structures. The wheels that launch our ping pong balls and the Arduino need to have a safe spot to function so that kids don’t get hurt and they don’t hurt the device.

In our next iteration, we intend to make the mouth more durable instead of simply covering it in paper. Cloth will rip much less easily. We also plan to improve the ping pong ball launching mechanism so the flight is angled upwards. Also, instead of launching the balls as soon as they are “eaten” we want to allow for a bunch of balls to be collected before releasing them all to be launched at once in random intervals. Since the mouth is the main feature of our device, we hope to redesign our device so that the balls will also be shot out of the mouth.

#include <Servo.h&gt;

#define MOT_A1_PIN 6
#define MOT_A2_PIN 5
#define MOT2_A1_PIN 10
#define MOT2_A2_PIN 9

int count = 0;
Servo s;

int closed_time = 0;
int open_time = 50000;
int angle = 0;

bool mouth_open = false;
bool mouth_closed = true;

int s_pin = 8;

void setup() {
  s.attach(s_pin);
  
  pinMode(MOT_A1_PIN, OUTPUT);
  pinMode(MOT_A2_PIN, OUTPUT);
  pinMode(MOT2_A1_PIN, OUTPUT);
  pinMode(MOT2_A2_PIN, OUTPUT);
  
  digitalWrite(MOT_A1_PIN, LOW);
  digitalWrite(MOT_A2_PIN, LOW);
  digitalWrite(MOT2_A1_PIN, LOW);
  digitalWrite(MOT2_A2_PIN, LOW);
}

void loop() {
  digitalWrite(MOT_A2_PIN, HIGH);
  digitalWrite(MOT2_A1_PIN, HIGH);

  if(mouth_closed)
  {
    s.write(0);
    count++;
    if(count &gt;= closed_time)
    {
      mouth_closed = false;
      mouth_open = true;
      closed_time = (rand() % 10) * 5000;
      angle = (rand() % 10);
      count = 0;
    }
  }
  if(mouth_open)
  {
    s.write(9 * angle);
    count++;
    if(count &gt;= open_time)
    {
      mouth_open = false;
      mouth_closed = true;
      open_time = (rand() % 10) * 20000;
      count = 0;
    }
  }
}

Here is our list of revisions in order of importance:

  • redesign the base/device to be more proportionate and stable
  • make the tab connectors sturdier
  • angle the launcher
  • hide the Arduino
  • hide the wheels
  • replace paper covering

Some additional items we need to purchase include: container for the balls, white feathers, google eyes, and cloth. Mostly aesthetic items need to be purchased.