You are on page 1of 11

ELECTRONICS DESIGN

STAIR NAVIGATING ROBOT
Project Documentation


Members:
Eusebio, Jan Rafael B.
Hernandez, Bien Daniel R.
Nario, Allen Stefen C.








Letter of Transmittal

Engr. Ramon Garcia
Electronics Engineering Department
School of Electrical, Electronics, and Computer Engineering
Mapua Institute of Technology
Intramuros, Manila

Dear Engr. Ramon Garcia:

In accordance of your instructions and also in compliance with the fulfilment of the
requirement on the subject “Electronics Design (ECE110D)”, we are pleased to present
to you the prototype design entitled “Stair Navigating Robot”

The purpose of this documentation is to discuss how a Stair Navigating Robot
mechanism. This paper also includes the data with regards to the prototype’s operation,
concepts, principles and schematic diagrams. It also contains the prototype’s functions,
the list of material that we used including its prices.

We hope that this proposal will meet your approval.



Respectfully yours,
Eusebio, Jan Rafael B.
Hernandez, Bien Daniel R.
Nario, Allen Stefen C.




Acknowledgement

The researchers would like to express our deepest appreciation and to thank the
following people for the success of our design.
 First and above all, we praise God, the almighty for providing us this opportunity
and granting me the capability to proceed successfully.
 To our advisers, Engr. Febus Reidj Cruz and Engr. Glenn Magwili, thank you for
for their continuous support for the project, from initial advice & contacts in the
early stages of conceptual inception & through ongoing advice & encouragement
for the whole term.
 To our instructor, Engr. Ramon Garcia for his patience and supporting us with the
necessary steps in the making of this project.
 To the panel of professors for adjusting their schedule and for their
encouragement, insightful comments, and hard questions.
 To my friends who helped and lend some time for our prototype to be done
successfully
 Also thanks our parents for their undivided support and interest who inspired us
and encouraged us to go in our own way, without whom we would be unable to
complete my project
 We would also like to thank all the employees and staff of Deeco, Alexan and E-
Gizmo Electronics and some shops for guiding and giving us all possible
resources for the required materials.



With all your help we made this project prototype working and possible.





Description of the Project

Today, we live in a world of rapidly advancing technology; an age where advanced
electronics that are to be integrated into our everyday lives are being developed continuously.
Among these are robots with increasingly versatile functionalities. This course enables us to
create a robot with the ability to navigate up and down a flight of stairs.
The robot created is controlled using an Android device (tablet or smartphone), through
the use of Bluetooth technology. An application called ArduDroid, developed by TechBitar, and
available on Google's Play Store, was used to connect the device to the robot's HC-05 Bluetooth
module.
The design consists of two pairs of "arms" that are connected to servo motors, which in
turn, can be controlled individually. These arms are used to lift the robot's main chassis, and
have it levelled with the stair's steps. The robot also has four wheels, each connected to dc
geared motors for added mobility.
1/8 inch thick clear acrylic sheets were used for the arms, the wheels, basically the
entire robot's body. These were connected together using cyanoacrylate and Mighty Bond. In
addition, gear belts were twisted inside out and stuck to the circumference of the wheels for
added traction and grip.







Block Diagram

























Android Device
HC-05
GIZDUINO
SERVO MOTOR
DC GEARED
MOTOR

ARMS
WHEELS
DIGITAL PIN 3 AND 4
MOTOR DRIVER SHIELD
DIGITAL PIN 8, 9, 10, 11
Li-Poly Battery used
as a power supply
DIGITAL PIN 1 AND 2


Tabulated List of Materials


QTY MODEL UNIT PRICE SUBTOTAL
4 131 rpm DC Motor 290.00 Php 1160.00
1 set Acrylic Body + Wheels 800.00 Php 800.00
4 6 kg Servo Motors 398.00 Php 1592.00
1 Gizduino Mini
ATMega328
662.00 Php 662.00
1 HC-05 Bluetooth
Module
560.00 Php 560.00
4 Clear Epoxy 65.00 Php 260.00
1 Mighty Bottle 104.00 Php 104.00
2 Breadboards 169/275 Php 444.00
1 Li-Poly Battery 1400.00 Php 1400.00
Wires 150.00 Php 150.00
2 Motor Driver Shield 450.00 Php 900.00
TOTAL Php 8032.00
Please note that this does not include the redesigns and rebought (broken) parts which amount to around 5-8 thousand Php.










Appendix
A. Arduino Code
/*
PROJECT: ArduDroid
PROGRAMMER: Hazim Bitar (techbitar at gmail dot com)
DATE: Oct 31, 2013
FILE: ardudroid.ino
LICENSE: Public domain
*/

#define START_CMD_CHAR '*'
#define END_CMD_CHAR '#'
#define DIV_CMD_CHAR '|'
#define CMD_DIGITALWRITE 10
#define CMD_ANALOGWRITE 11
#define CMD_TEXT 12
#define CMD_READ_ARDUDROID 13
#define MAX_COMMAND 20 // max command number code. used for error checking.
#define MIN_COMMAND 10 // minimum command number code. used for error checking.
#define IN_STRING_LENGHT 40
#define MAX_ANALOGWRITE 255
#define PIN_HIGH 3
#define PIN_LOW 2

#include <Servo.h>

int pos = 0, motor = 0;
Servo myservo1;
Servo myservo2;
String inText;

void setup() {
Serial.begin(9600);
Serial.println("ArduDroid 0.12 Alpha by TechBitar (2013)");
myservo1.attach(9);
myservo2.attach(10);
Serial.flush();
}

void loop()
{
Serial.flush();
int ard_command = 0;


int pin_num = 0;
int pin_value = 0;

char get_char = ' '; //read serial

// wait for incoming data
if (Serial.available() < 1) return; // if serial empty, return to loop().

// parse incoming command start flag
get_char = Serial.read();
if (get_char != START_CMD_CHAR) return; // if no command start flag, return to loop().

// parse incoming command type
ard_command = Serial.parseInt(); // read the command

// parse incoming pin# and value
pin_num = Serial.parseInt(); // read the pin
pin_value = Serial.parseInt(); // read the value

// 1) GET TEXT COMMAND FROM ARDUDROID
if (ard_command == CMD_TEXT){
inText =""; //clears variable for new input
while (Serial.available()) {
char c = Serial.read(); //gets one byte from serial buffer
delay(5);
if (c == END_CMD_CHAR) { // if we the complete string has been read
// add your code here
break;
}
else {
if (c != DIV_CMD_CHAR) {
inText += c;
delay(5);
}
}
}
}

// 2) GET digitalWrite DATA FROM ARDUDROID
if (ard_command == CMD_DIGITALWRITE){
if (pin_value == PIN_LOW) pin_value = LOW;
else if (pin_value == PIN_HIGH) pin_value = HIGH;
else return; // error in pin value. return.
set_digitalwrite( pin_num, pin_value); // Uncomment this function if you wish to use
return; // return from start of loop()
}



// 3) GET analogWrite DATA FROM ARDUDROID
if (ard_command == CMD_ANALOGWRITE) {
int val1, val2;
analogWrite( pin_num, pin_value );
// add your code here
switch (pin_num) {
case 11:
val1 = map(pin_value,0,255,0,159);
myservo1.write(val1);
delay(10);
break;
case 10:
val2 = map(pin_value,0,255,0,159);
myservo2.write(val2);
delay(10);
break;

}
return; // Done. return to loop();
}

// 4) SEND DATA TO ARDUDROID
if (ard_command == CMD_READ_ARDUDROID) {
// char send_to_android[] = "Place your text here." ;
// Serial.println(send_to_android); // Example: Sending text
Serial.print(" Analog 0 = ");
Serial.println(analogRead(A0)); // Example: Read and send Analog pin value to Arduino
return; // Done. return to loop();
}
}

// 2a) select the requested pin# for DigitalWrite action
void set_digitalwrite(int pin_num, int pin_value)
{
switch (pin_num) {
case 13:
pinMode(13, OUTPUT);
digitalWrite(13, pin_value);
// add your code here
break;
case 12:
pinMode(12, OUTPUT);
digitalWrite(12, pin_value);
// add your code here
break;


case 11:
pinMode(11, OUTPUT);
digitalWrite(11, pin_value);
// add your code here
break;
case 10:
pinMode(10, OUTPUT);
digitalWrite(10, pin_value);
// add your code here
break;
case 9:
pinMode(9, OUTPUT);
digitalWrite(9, pin_value);
// add your code here
break;
case 8:
pinMode(8, OUTPUT);
digitalWrite(8, pin_value);
// add your code here
break;
case 7:
pinMode(7, OUTPUT);
digitalWrite(7, pin_value);
// add your code here
break;
case 6:
pinMode(6, OUTPUT);
digitalWrite(6, pin_value);
// add your code here
break;
case 5:
pinMode(5, OUTPUT);
digitalWrite(5, pin_value);
// add your code here
break;
case 4:
pinMode(4, OUTPUT);
digitalWrite(4, pin_value);
// add your code here
break;
case 3:
pinMode(3, OUTPUT);
digitalWrite(3, pin_value);
// add your code here
break;
case 2:


pinMode(2, OUTPUT);
digitalWrite(2, pin_value);
// add your code here
break;
// default:
// if nothing else matches, do the default
// default is optional
}
}