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.)
the original code copied had speed formula changed because wasn't working right , had no idea how make sense of it.
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.
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
Post a Comment