Asalam alykum warahmatullahi wabarakatuh,
All praise due to Allah , May Allahs peace and blessing of Allah be upon his Messenger and May Allah have mercy on his family and his companions and may Allah guide this muslim ummah and straighten our way and enlighten our hearts,
after this (a'ama ba'ad) dear reader,
i want to introduce you to robotics , im working on this great Robot,its the beginners stage,im collecting experience in basic robotics and i was advised by people to work on this robot,due to the costs and time.
Yet even i have chosen this i have my own version but the engine and system is that of arduino.

or this

Im facing two problems like everyone who enjoys his life,money and time.
Due to some costs of certain sensors im not going forward,i look forward to present my robot via a youtube video when it is complete inshaAllah and inshaAllah my robot will be great.
for some people i can advise you this instruction to work on your own robot,but required are the assembler language or c++ and some basic knowledge in electronics,and the most important is being experiemental.
#define CENTER 1400
#define CENTER_R CENTER
#define CENTER_L CENTER+1
#define LEFT CENTER-650
#define RIGHT CENTER+650
#define R_FULL_FORWARD R_STOP+300
#define L_FULL_FORWARD L_STOP-300
#define L_FULL_REVERSE R_FULL_FORWARD
#define R_FULL_REVERSE L_FULL_FORWARD
#define R_STOP 1450
#define L_STOP 1450
#define LEFT_TURN 0
#define RIGHT_TURN 1
#define QUARTER_TURN_DELAY 800 // in milliseconds
#define DIST_ERR 50
#define RSPEED R_STOP + 100
#define LSPEED L_STOP - 110
#define DEBUG 0
#define BUMP_DELAY 125
int leftDist = 0; // the average
int rightDist = 0;
int forDist = 0;
int vision = 5;
boolean goingLeft = true;
boolean turnNow = false;
int curDist = 0;
int objDist = 0;
int objDir = 0;
#include .h>
// create servo objects to control servos
ServoTimer2 leftWheel;
ServoTimer2 rightWheel;
ServoTimer2 head;
int leftSpeed = LSPEED; // variable to store the servo position
int rightSpeed = RSPEED;
int headPos=CENTER;
void setup()
{
leftWheel.attach(10); // attaches the servo on pin 9 to the servo object
rightWheel.attach(11);
head.attach(9);
rightWheel.write(rightSpeed); // Stop Wheels
leftWheel.write(leftSpeed); // Stop Wheels
head.write(headPos);
Serial.begin(9600); // initialize serial communication with computer
}
/************************************************** *****
* turn - Executes an in-place turn for miliseconds
* QUARTER_TURN_DELAY gets you about 90 deg
************************************************** ******/
void turn(int dir, int duration){
// Store previous speeds
//rightSpeed = rightWheel.read();
//leftSpeed = leftWheel.read();
if(dir == LEFT_TURN){
rightWheel.write(R_FULL_REVERSE);
leftWheel.write(L_FULL_FORWARD);
}
else {
rightWheel.write(R_FULL_FORWARD);
leftWheel.write(L_FULL_REVERSE);
}
delay(duration);
// restore previous speeds
rightWheel.write(rightSpeed);
leftWheel.write(leftSpeed);
}
void go(){
rightWheel.write(RSPEED);
leftWheel.write(LSPEED);
}
void stop(){
rightWheel.write(R_STOP);
leftWheel.write(L_STOP);
}
/************************************************** *
* scan - This function is called every cycle
* it turns the head a click and records a distance and
* heading. It only saves the closest object info.
* objDist and objDir hold the closest object data
************************************************** **/
void scan(){
if(goingLeft){
head.write(head.read()-10);
}
else{
head.write(head.read()+10);
}
if(head.read() <= LEFT){
goingLeft = false;
forDist = 0;
objDist = 0;
turnNow = true;
}
if(head.read() >= RIGHT){
goingLeft = true;
forDist = 0;
objDist = 0;
turnNow = true;
}
curDist = analogRead(vision);
if(curDist > objDist){
objDist = curDist;
objDir = head.read();
if(DEBUG){
Serial.print(βNew close obj at Dist: β);
Serial.print(objDist);
Serial.print(β heading: β);
Serial.println(objDir);
}
}
delay(10);
}
/************************************************** ********
* bump
* Executes a nudge to a given side
* Pass in LEFT_TURN or RIGHT_TURN
************************************************** *********/
void bump(int dir){
#define BUMP 100
if(dir == LEFT_TURN){
rightWheel.write(rightWheel.read()-BUMP);
delay(BUMP_DELAY);
rightWheel.write(rightWheel.read()+BUMP);
}
else {
leftWheel.write(leftWheel.read()+BUMP);
delay(BUMP_DELAY);
leftWheel.write(leftWheel.read()-BUMP);
}
}
/************************************************** ********
* bumpSteer
* Nudges us back on coarse if we see something off to the
* side. Relies on objDist and objDir to be updated by scan()
*
************************************************** *********/
void bumpSteer(){
// One bump per scan
if(!turnNow || objDist < 470)
return;
if(objDir > CENTER){
bump(RIGHT_TURN);
}
else if(objDir <= CENTER){
bump(LEFT_TURN);
}
// No turn till next scan
turnNow = false;
}
void lookAround(){
head.write(LEFT);
delay(400);
leftDist = analogRead(vision);
head.write(CENTER);
delay(400);
forDist = analogRead(vision);
head.write(RIGHT);
delay(400);
rightDist = analogRead(vision);
head.write(CENTER);
delay(200);
}
int cornerNav(){
if(objDist > 600 && objDir > CENTER - 350 && objDir < CENTER + 200){
if( DEBUG ){
Serial.println("Check:");
Serial.println(objDist);
Serial.println(objDir);
}
stop();
lookAround();
if(leftDist > rightDist + DIST_ERR){
turn(LEFT_TURN, QUARTER_TURN_DELAY);
}
else {
turn(RIGHT_TURN, QUARTER_TURN_DELAY);
}
go();
objDist = 0;
return 1;
}
return 0;
}
void loop()
{
scan();
if(!cornerNav()){
bumpSteer();
}
}
This in green is the programm for the commands of the robot.
And this instruction is only available for pro members of the website instructables ( a great place of ideas).
All praise due to Allah , May Allahs peace and blessing of Allah be upon his Messenger and May Allah have mercy on his family and his companions and may Allah guide this muslim ummah and straighten our way and enlighten our hearts,
after this (a'ama ba'ad) dear reader,
i want to introduce you to robotics , im working on this great Robot,its the beginners stage,im collecting experience in basic robotics and i was advised by people to work on this robot,due to the costs and time.
Yet even i have chosen this i have my own version but the engine and system is that of arduino.

or this

Im facing two problems like everyone who enjoys his life,money and time.
Due to some costs of certain sensors im not going forward,i look forward to present my robot via a youtube video when it is complete inshaAllah and inshaAllah my robot will be great.
for some people i can advise you this instruction to work on your own robot,but required are the assembler language or c++ and some basic knowledge in electronics,and the most important is being experiemental.
#define CENTER 1400
#define CENTER_R CENTER
#define CENTER_L CENTER+1
#define LEFT CENTER-650
#define RIGHT CENTER+650
#define R_FULL_FORWARD R_STOP+300
#define L_FULL_FORWARD L_STOP-300
#define L_FULL_REVERSE R_FULL_FORWARD
#define R_FULL_REVERSE L_FULL_FORWARD
#define R_STOP 1450
#define L_STOP 1450
#define LEFT_TURN 0
#define RIGHT_TURN 1
#define QUARTER_TURN_DELAY 800 // in milliseconds
#define DIST_ERR 50
#define RSPEED R_STOP + 100
#define LSPEED L_STOP - 110
#define DEBUG 0
#define BUMP_DELAY 125
int leftDist = 0; // the average
int rightDist = 0;
int forDist = 0;
int vision = 5;
boolean goingLeft = true;
boolean turnNow = false;
int curDist = 0;
int objDist = 0;
int objDir = 0;
#include .h>
// create servo objects to control servos
ServoTimer2 leftWheel;
ServoTimer2 rightWheel;
ServoTimer2 head;
int leftSpeed = LSPEED; // variable to store the servo position
int rightSpeed = RSPEED;
int headPos=CENTER;
void setup()
{
leftWheel.attach(10); // attaches the servo on pin 9 to the servo object
rightWheel.attach(11);
head.attach(9);
rightWheel.write(rightSpeed); // Stop Wheels
leftWheel.write(leftSpeed); // Stop Wheels
head.write(headPos);
Serial.begin(9600); // initialize serial communication with computer
}
/************************************************** *****
* turn - Executes an in-place turn for miliseconds
* QUARTER_TURN_DELAY gets you about 90 deg
************************************************** ******/
void turn(int dir, int duration){
// Store previous speeds
//rightSpeed = rightWheel.read();
//leftSpeed = leftWheel.read();
if(dir == LEFT_TURN){
rightWheel.write(R_FULL_REVERSE);
leftWheel.write(L_FULL_FORWARD);
}
else {
rightWheel.write(R_FULL_FORWARD);
leftWheel.write(L_FULL_REVERSE);
}
delay(duration);
// restore previous speeds
rightWheel.write(rightSpeed);
leftWheel.write(leftSpeed);
}
void go(){
rightWheel.write(RSPEED);
leftWheel.write(LSPEED);
}
void stop(){
rightWheel.write(R_STOP);
leftWheel.write(L_STOP);
}
/************************************************** *
* scan - This function is called every cycle
* it turns the head a click and records a distance and
* heading. It only saves the closest object info.
* objDist and objDir hold the closest object data
************************************************** **/
void scan(){
if(goingLeft){
head.write(head.read()-10);
}
else{
head.write(head.read()+10);
}
if(head.read() <= LEFT){
goingLeft = false;
forDist = 0;
objDist = 0;
turnNow = true;
}
if(head.read() >= RIGHT){
goingLeft = true;
forDist = 0;
objDist = 0;
turnNow = true;
}
curDist = analogRead(vision);
if(curDist > objDist){
objDist = curDist;
objDir = head.read();
if(DEBUG){
Serial.print(βNew close obj at Dist: β);
Serial.print(objDist);
Serial.print(β heading: β);
Serial.println(objDir);
}
}
delay(10);
}
/************************************************** ********
* bump
* Executes a nudge to a given side
* Pass in LEFT_TURN or RIGHT_TURN
************************************************** *********/
void bump(int dir){
#define BUMP 100
if(dir == LEFT_TURN){
rightWheel.write(rightWheel.read()-BUMP);
delay(BUMP_DELAY);
rightWheel.write(rightWheel.read()+BUMP);
}
else {
leftWheel.write(leftWheel.read()+BUMP);
delay(BUMP_DELAY);
leftWheel.write(leftWheel.read()-BUMP);
}
}
/************************************************** ********
* bumpSteer
* Nudges us back on coarse if we see something off to the
* side. Relies on objDist and objDir to be updated by scan()
*
************************************************** *********/
void bumpSteer(){
// One bump per scan
if(!turnNow || objDist < 470)
return;
if(objDir > CENTER){
bump(RIGHT_TURN);
}
else if(objDir <= CENTER){
bump(LEFT_TURN);
}
// No turn till next scan
turnNow = false;
}
void lookAround(){
head.write(LEFT);
delay(400);
leftDist = analogRead(vision);
head.write(CENTER);
delay(400);
forDist = analogRead(vision);
head.write(RIGHT);
delay(400);
rightDist = analogRead(vision);
head.write(CENTER);
delay(200);
}
int cornerNav(){
if(objDist > 600 && objDir > CENTER - 350 && objDir < CENTER + 200){
if( DEBUG ){
Serial.println("Check:");
Serial.println(objDist);
Serial.println(objDir);
}
stop();
lookAround();
if(leftDist > rightDist + DIST_ERR){
turn(LEFT_TURN, QUARTER_TURN_DELAY);
}
else {
turn(RIGHT_TURN, QUARTER_TURN_DELAY);
}
go();
objDist = 0;
return 1;
}
return 0;
}
void loop()
{
scan();
if(!cornerNav()){
bumpSteer();
}
}
This in green is the programm for the commands of the robot.

And this instruction is only available for pro members of the website instructables ( a great place of ideas).

Comment