Art-duino

Group 18

Bonnie (bmeisenm@), Erica (eportnoy@), Mario (mmcgil@), Valya (vbarboy@)

Description

We built a mini-crawler robot that draws a path behind it to make interesting designs. We chose this design for a variety of reasons. First and foremost, we experimented with attaching our other materials to the motors, and most of them were too heavy for the motors to handle. In particular, we wanted to use the DC motor to drive a wheel, but all materials were too heavy for it. For this reason using the slinky or other toys was not an option. We also liked the idea of combining the two servos to make legs, and adding the marker on top was interesting because we could visually track even minimal movement. In the end, we liked the cool random patterns that our Art-duino made. That being said, it moves more slowly than we would have liked, because it was very difficult to deal with the friction and the lack of forward power. Because the servos can only turn 180 degrees, we had to find some way to allow the arms to reset to their original positions, without moving the Art-duino backwards. Our solution to this were the “paws” (see sketch), which were good at battling the friction, but not too great. Since the two servos push the bot alternately forward and backwards, the paws create an asymmetry by increasing the force due to friction in the forward direction. We also wish we could make the motion more deterministic, although the randomness creates cool images.

Brainstorming

  1. We have an android doll. We could put cardboard underneath, and give it wire spools to make it roll.
  2. We have a string of beads which turns, and whatever is at the end of the chain is the robot, like a puppy!
  3. String of wire, with a motor attached to one end, as it winds the spool the robot will climb, like a spider!
  4. We have a little music box. Our robot would have a piezo sound sensor, and it would move when it heard music.
  5. A little reptile-robot that spins around until it finds light, and then crawls towards the light.
  6. Slinky-robot that dances to the music, by flipping and flopping around.
  7. Max (from Where the Wild Things Are) can come bring you a flower, on his little cardboard boat.
  8. A robot that runs away when it senses vibrations (for example, stomping).
  9. A maze of cards that the robot moves through. It does this by trying to go forward, and if it can’t do so it turns 90 degrees and continues.
  10. A robot that doesn’t like to be touched: it runs away from your hand, using a proximity sensor.
  11. A robot that moves in random patterns due to vibrations caused by an imbalanced motor.
  12. A mecha robot that walks upright using servos to move its legs.

Design sketches

A sketch of Art-duino

The circuit diagram for our final design.

Art-duino’s final form.

Video

This video shows the tape-pawed prototype of Art-duino in action, along with earlier prototypes and experiments to make the crawler move.

Parts List

  • 2 servos
  • 2 one-armed horns
  • paper plate
  • sharpie
  • electrical tape
  • wires
  • breadboard
  • Arduino

Instructions

First use electrical tape to connect the two servos. The wires should both be in the middle, facing forward. Connect the one-armed horns so that they sweep in opposite directions. Connect this to your Arduino, as indicated in the circuit diagram. Cut a tiny bit off of the paper plate, to make the paws, and tape them so that the paw faces forward (like a dog), and so that they are completely covered with tape. Then attach a sharpie (facing backwards), so that the robot draws as it walks.

Source Code

/*
Based on Adafruit Arduino - Lesson 14. Sweep
*/

#include <Servo.h>

int servoPin = 9;
int servoPin2 = 10;

Servo servo;
Servo servo2;

int angle = 0;   // servo position in degrees

void setup()
{
    servo.attach(servoPin);
    servo2.attach(servoPin2);
}

int speed1 = 0;
int speed2 = 0;
void loop()
{
    // scan from 0 to 180 degrees
    for(angle = 0; angle < 180; angle++)
    {
        servo.write(angle);
        servo2.write(angle);
        delay(5);
    }

    // now scan back from 180 to 0 degrees
    for(angle = 180; angle > 0; angle--)
    {
        servo.write(angle);
        servo2.write(angle);
        delay(5);
    }
}