Project Documentation in Electronics Design (ECE110D) of a Stair Navigating Robot under Engr. Ramon Garcia, School of EECE, Mapua Institute of Technology.
Project Documentation in Electronics Design (ECE110D) of a Stair Navigating Robot under Engr. Ramon Garcia, School of EECE, Mapua Institute of Technology.
Project Documentation in Electronics Design (ECE110D) of a Stair Navigating Robot under Engr. Ramon Garcia, School of EECE, Mapua Institute of Technology.
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 prototypes operation, concepts, principles and schematic diagrams. It also contains the prototypes 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 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 } }