Chosen Concept
Isometric View
Front View
Top View
Right Side View
Exploded View
Drawing
Design Highlights:
- Pacman theme
- Support roller for balance
- Bumper for light sensors
- Custom made mounts for Motors
- M-2.5 Screws used for all assemblies
Code Testing:
Bumper Sensor
Edge Detector
Line Following
Edge Detector:
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_PWMServoDriver.h"
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *leftMotor = AFMS.getMotor(1);
Adafruit_DCMotor *rightMotor = AFMS.getMotor(2);
int threshold = 400;
void setup() {
AFMS.begin();
leftMotor->setSpeed(100);
leftMotor->run(RELEASE);
rightMotor->setSpeed(100);
rightMotor->run(RELEASE);
pinMode(2, INPUT_PULLUP);
}
void loop() {
int sensorVal = analogRead(A0);
if (sensorVal < threshold ) {
leftMotor->run(FORWARD);
rightMotor->run(FORWARD);
}else{
leftMotor->run(RELEASE);
rightMotor->run(RELEASE);
delay(100);
leftMotor->run(BACKWARD);
rightMotor->run(BACKWARD);
delay(500);
leftMotor->run(RELEASE);
rightMotor->run(RELEASE);
delay(100);
leftMotor->run(FORWARD);
rightMotor->run(BACKWARD);
delay(500);
leftMotor->run(RELEASE);
rightMotor->run(RELEASE);
delay(100);
}}
Line Follower
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_PWMServoDriver.h"
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *leftMotor = AFMS.getMotor(1);
Adafruit_DCMotor *rightMotor = AFMS.getMotor(2);
int threshold = 400;
void setup() {
AFMS.begin();
leftMotor->setSpeed(100);
leftMotor->run(RELEASE);
rightMotor->setSpeed(100);
rightMotor->run(RELEASE);
pinMode(2, INPUT_PULLUP);
}
void loop() {
int sensorVal1 = analogRead(A0);
int sensorVal2 = analogRead(A1);
int sensorVal3 = analogRead(A2);
if (sensorVal2 > threshold ) {
leftMotor->run(FORWARD);
rightMotor->run(FORWARD);
}
if (sensorVal1 > threshold) {
leftMotor->run(FORWARD);
rightMotor->run(BACKWARD);
}
if (sensorVal3 > threshold) {
leftMotor->run(BACKWARD);
rightMotor->run(FORWARD);
}}
Bumper Sensor:
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_PWMServoDriver.h"
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *leftMotor = AFMS.getMotor(1);
Adafruit_DCMotor *rightMotor = AFMS.getMotor(2);
int button1 = 6;
int button2 = 10;
boolean buttonState1 = 1;
boolean buttonState2 = 2;
void setup() {
AFMS.begin();
leftMotor->setSpeed(100);
leftMotor->run(RELEASE);
rightMotor->setSpeed(100);
rightMotor->run(RELEASE);
pinMode(6, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int buttonState1 = digitalRead(6);
int buttonState2= digitalRead(10);
if (buttonState1 == 0 && buttonState2 == 0) {
leftMotor->run(BACKWARD);
rightMotor->run(BACKWARD);
delay(1000);
}
else if (buttonState1 == 1)
{
leftMotor->run(FORWARD);
rightMotor->run(FORWARD);
}
else if (buttonState2 == 1)
{
leftMotor->run(FORWARD);
rightMotor->run(FORWARD);
}
else if (buttonState1 == 0)
{
leftMotor->run(BACKWARD);
rightMotor->run(BACKWARD);
}
else if (buttonState2 == 0)
{
leftMotor->run(BACKWARD);
rightMotor->run(BACKWARD);
}
if (buttonState2 == 0) {
leftMotor->run(BACKWARD);
rightMotor->run(BACKWARD);
delay(1000);
leftMotor->run(FORWARD);
rightMotor->run(BACKWARD);
delay(1000);
}
if (buttonState1 == 0){
leftMotor->run(BACKWARD);
rightMotor->run(BACKWARD);
delay(1000);
leftMotor->run(BACKWARD);
rightMotor->run(FORWARD);
delay(1000);
}}