The Elite Four (#19) Lab 3

The Elite Four (#19)
Jae (jyltwo)
Clay (cwhetung)
Jeff (jasnyder)
Michael (menewman)

What We Built:
We built a robotic system to assist users who are working with breadboards. It is designed to deliver a breadboard across a table by using two servos that are attached to the breadboard and are controlled by a rotary pot. The servos use their horns to propel that breadboard across the table to the user who needs it. (For clarification, the breadboard-carrying robot is attached to another breadboard that contains the robot’s control circuit.) We liked that the final result was able to make the delivery successfully, albeit quite slowly. If we were to do it differently, the system could be better implemented by using two DC motors; this would make movement faster and easier. In addition, the breadboard robot could be improved by adding steering, which could be done by using a separate rotary pot to control each servo motor.

Brainstorm:
1. Use two DC motors to control two wheels on an axle and a servo motor to control the angle of the axle.
2. Use two servo motors that can rotate a full 360 degrees as “legs” on a robot.
3. “Fan-car” — a car with servo motors controlling the wheels and a DC motor in the back controlling a fan to propel it forward.
4. Make a motor that spins a cat toy around in a circle. Attach it to the back of a cat. The cat’s movement trying to get the toy will move the robot.
5. Helicopter robot where rotors are controlled with DC motor(s)
6. Make a robot row-boat with “oars” that are controlled by servos.
7. Build a robot that acts like a spinning top by using the motor to spin a disk with one point of contact.
8. A robot that throws a grappling hook forward using a servo catapult. The hook is connected to the robot by a line and the robot reels itself in towards the hook with a DC motor.
9. Zipline robot that uses a DC motor to move back and forth along a suspended string/wire
10. A jellyfish like-robot that propels itself through a fluid by flexing robot tentacles using a servo-motor.
11. Robo-bicycle with very wide wheels, powered by DC motor(s)
12. Attach metal rods to 2 servo motors and use them as “legs” that drag the robot forward in a single direction

Documentation of our system:


This is the design sketch for our breadboard bot.


This is the control circuit for our breadboard bot (also on a breadboard).


Side view of the breadboard bot. As seen, the DC motor is being used as a weight.


Front view of the breadboard bot.


Jeff demonstrates his masterful piloting skill in the video above.

Ingredients:
– 2 servo motors (with horns)
– 1 DC motor
– electrical tape
– 1 rotary pot
– 1 100 μF capacitor
– small breadboard
– large breadboard
– Arduino
– wires
– small Phillips head screwdriver

Recipe:
1. Attach the large straight horns to the servos using the small Phillips head screwdriver.
2. Tape two servo motors to the small breadboard using electrical tape. They should be back-to-back, facing outward on the breadboard’s shorter dimension, so that the horns hang over the edge. Center the motors with respect to the longer dimension of the breadboard.
3. Tape the DC motor to the breadboard so that it hangs off of one of the short edges. If you would like, you can create a sad face out of another color of electrical tape on the DC motor, but you should not make a happy face.
(3.5) In order to complete the following steps, you may find it helpful to connect the Arduino’s GND pin to the negative power rail on the breadboard, and the +5V pin to the positive power rail. Make the following connections using jumper wires.
4. Connect each servo’s brown wire to GND and the red wire to +5V.
5. Connect the orange wire of one servo to Pin 9 and the other to Pin 11 of Arduino.
6. Place the 100uF capacitor across GND and +5V. If it is polarized, make sure to connect the negative side to GND and the positive side to +5V.
7. Connect the one side of the rotary potentiometer to GND and the other to +5V.
8. Connect the middle pin of the rotary potentiometer to the A0 pin of the Arduino.

Code:

/*
  Authors: jasnyder, cwhetung, menewman, jyltwo
  Date: 3/25/2013
  COS 436 Lab L3: The Breadboard-Bot

  Our robot is set up using a rotary pot and two servo motors. 
  The pot reads a value from 0 to 1023, so we divide this value 
  by 6 to get an angle value from 0 to 170.5 that we send to the
  servo. The second servo's angle value is offset by 160 because
  it is facing in the opposite direction. An offset of 180 makes 
  the most sense, but after experimentation, we found that the 
  angles being slightly different made the walking smoother. Because 
  of this offset, however, the user controlling the pot must be 
  careful not to turn the pot to a value that would result in a
  negative value for the second servo. 
*/

#include  

int potPin = 0;  
int servoPin1 = 9;
int servoPin2 = 11;
Servo servo1; 
Servo servo2;

// offset of the second servo so that they move in symmetry
// this is needed since the servos are facing opposite directions
int offset = 160;

void setup() 
{ 
  servo1.attach(servoPin1);  
  servo2.attach(servoPin2);
} 

void loop() 
{ 
  int reading = analogRead(potPin);     // 0 to 1023
  int angle = reading / 6;              // 0 to 180-ish
  servo1.write(angle);
  servo2.write(offset-angle);
}