Obstacle Avoiding Robot Help


can't figure out....tried bunch of different things.
i want move forward until sensor sees object, stop, both ways, pick longest route, turn, continue forward.
i feel sensor isn't working. i'm using 6 aa batteries hooked motor shield's external power.
i copied of code other examples on other oa robots code never worked right me i've made own. had working right bit fast , didn't respond walls in time , when tried fine tune somehow lost previous code , screwed up. i'm pretty square one.
(also wheels move way fast liking can't seem slow them down playing motor.setspeed. voltage seems make difference on motor speed.)

code: [select]

#include <afmotor.h>
#include <servo.h>
#include <newping.h>

#define trig_pin a4 //pin a4 ultrasonic sensor
#define echo_pin a5 //pin a5 ultrasonic sensor
#define max_distance 200 // maximum sensor distance 200cm
#define coll_dist 20 //set distance of stop , reverse 20cm
#define turn_dist 40 // sets distance robot veers objects 40cm
newping sonar(trig_pin, echo_pin, max_distance); //set sensor library correct pins measure distance
servo servo;
af_dcmotor motor1(1); //left wheel
af_dcmotor motor2(2); //right wheel

int leftdistance, rightdistance; //distances on either side
int curdist = 0;
string motorset ="";
int speedset = 0;


//-----------------------------------------------------------------------

void setup()
{
 servo.attach(9);
 servo.write(90); //set servo 90 degrees//facing forward
 delay(500);

}

//-----------------------------------------------------------------------

void loop()
{
 
 servo.write(90); //sensor forward
 delay(100);
 curdist = readping(); //read distance

 if (curdist>coll_dist){
   changepath();
 } //if forward blocked, change direction
   moveforward(); //move forward 1/2 second
 delay(500);
}
//===========================================

void changepath(){
 movestop();
 servo.write(36); //check right distance
 delay(500);
 rightdistance = readping(); //set right distance
 delay(500);
 servo.write(144); //check left distance
 delay(700);
 leftdistance = readping(); //set left distance
 delay(500);
 servo.write(90); //center servo
 delay(100);
 comparedistance();
}

//++++++++++++++++++++++++++++++++++++++++++++++

void comparedistance() //find longest distance
{
 if (leftdistance>rightdistance)
 {
   turnleft();
 }
 else if (rightdistance>leftdistance)
 {
   turnright();
 }
 else
 {
   turnaround();
 }
}

//=============================================
int readping() //read ultrasonic sensor
{
 delay(70);
 int = sonar.ping();
 int cm = us/us_roundtrip_cm;
 return cm;
}

//============================================

void movestop()  //stop motors
{
 motor1.run(release);
 motor2.run(release);
}

//=============================================

void moveforward()
{
 motorset = "forward";
 motor1.run(forward);
 motor2.run(forward);


   motor1.setspeed(100);
   motor2.setspeed(100);
   


}

//=============================================

void movebackward()
{
 motorset = "backward";
 motor1.run(backward);
 motor2.run(backward);

   motor1.setspeed(50);
   motor2.setspeed(50);
   delay(10);

 
}

//=============================================

void turnright()
{
 motorset = "right";
 motor1.run(forward);
 motor2.run(backward);
 delay(400);
 motorset = "forward";
 motor1.run(forward);
 motor2.run(forward);
}

//===============================================

void turnleft()
{
 motorset = "left";
 motor1.run(backward);
 motor2.run(forward);
 delay(400);
 motorset = "forward";
 motor1.run(forward);
 motor2.run(forward);
}

//==================================================

void turnaround()
{
 motorset = "right";
 motor1.run(forward);
 motor2.run(backward);
 delay(800);
 motorset = "forward";
 motor1.run(forward);
 motor2.run(forward);
}




the original code copied had speed formula changed because wasn't working right , had no idea how make sense of it.

code: [select]

for (speedset = 0; speedset < max_speed; speedset +=2) // bring speed avoid loading down batteries quickly
 {
   motor1.setspeed(speedset);
   motor2.setspeed(speedset+max_speed_offset);
   delay(5);


this on forward , back. wouldn't wheels need same speed forward , back?
originally when used person's code 1 motor work , bot went in circle.

edit
-----
multimeter showing 8.4v right now
dunno if figure out problem or not.

quote
this on forward , back. wouldn't wheels need same speed forward , back?


no - 1 motor needs go clock wise , other anti-clockwise. @ how motors mounted. same true car!.

mark


Arduino Forum > Using Arduino > Project Guidance > Obstacle Avoiding Robot Help


arduino

Comments

Popular posts from this blog

Connecting Raspberry Pi 2 to P10(1R)-V706 LED Dot Matrix - Raspberry Pi Forums

TypeError: <unknown> is not a numpy array - Raspberry Pi Forums

datso and removing imagetitle - Joomla! Forum - community, help and support