Team members: Ruben Markowitz, Bryan Gardiner, Sara Johnson
Roles: Bryan Gardiner(Integrator and Scribe), Sara Johnson(Integrator and Designer), Ruben Markowitz(Designer and Tutor)
Introduction
Marco Robo is a robot that explores its surroundings and creates a visual and physical map that shows how the robot perceives the outside world. In the third iteration of the project, we redesigned the device to rotate around a fixed axis so Marco Robo interprets the change in a room over time.
Marco Robo rolls around a center pivot, and uses a sonar sensor to measure the distance of objects in front of it. If the robot sees nothing in its range, it will rotate on the outer ring of its motion. When objects move into its field of view, it will mark what it sees by driving inward toward its axis and making a divot in its path. Overtime, the robot creates a circular map of the location and frequency of disturbances.
Video
Technical Specs
The movement of Marco Robo is driven by a geared motor, controlling its angular position, and a stepper motor, controlling its radial location. The robot moves on two omni wheels that allow free radial and axial movement, and one fixed wheel that drives it radially. Marco Robo uses a sonar sensor to collect and average the distance of objects immediately in front of it, and then scales the object size to the length of the gear arm. The drive box then moves this distance as it turns, moving the marker fixed to the drive box, and creates a map over time.
Circuit Schematic
Code
//Marco Robo
//Ruben Markowitz, Bryan Gardiner, Sara Johnson
//Digital Pin Definitions
int rMotorDirectionPin = 2;
int rMotorStepPin = 3;
int thetaMotorDirectionPin1 = 4;
int thetaMotorDirectionPin2 = 5;
int innerHomeSensorLightPin = 6;
int outerHomeSensorLightPin = 7;
int rangeEcho = 8;
int rangeTrig = 9;
int rangeMax = 200;
//Analog Pin Definitions
int innerHomeSensorPin = 0;
int outerHomeSensorPin = 1;
int gyroPin = 2;
//Threshold Modifiers
int innerHomeSensorLow = 700;
int outerHomeSensorLow = 200;
int sonarSamples = 20;
float driveGearCircum = 1.67894;
int driveWheelCircum = 54;
int stepperStepsPerRev = 200;
int robotLen = 15.1;