Autonomous Robot, motor driver

Looks to me that you're blasting it straight to full speed immediately? (You need to post more of the code)

It might be worthwhile to have a speedstep of say 10 and a speed of 0, then loop through a section of code that sets speed = speed + speedstep and pwms it the new value of speed, and do the loop until the speed is the value you want.

JimboZA:
Looks to me that you're blasting it straight to full speed immediately? (You need to post more of the code)

It might be worthwhile to have a speedstep of say 10 and a speed of 0, then loop through a section of code that sets speed = speed + speedstep and pwms it the new value of speed, and do the loop until the speed is the value you want.

I don't understand how would i include that?. My issue is, the code works perfectly, as long as the car isn't on the ground. I can hold it up in the air, and the drive motor does what it is supposed to, and the turn motor works when it is supposed to. But when I put it down, it works on a nice flat surface for a few seconds. It wont move at all on carpet.

  if (errorSum < 25)
  {
    drive_stop();
  }
  else {
  if ( Stotal> 2100 )
  {
  drive_stop();
  }
  else {
  if ( turn == 128 ){
  drive_forward();  
  analogWrite(PWMR, 255);// speed control
  analogWrite(PWML, 255);// speed control
  }

  if ( turn > 129 ){
  drive_right();
  analogWrite(PWMR, 255);// speed control
   }
   if ( 127 > turn ){
   drive_Left();
  analogWrite(PWML, 255);// speed control
   }
 }
  }
//delay(100);
}

void drive_forward()
     {
  digitalWrite(RFWD,HIGH);// right wheel foward h-bridge
  digitalWrite(RRVS,LOW);
  digitalWrite(LFWD,HIGH);//left wheel foward h-bridge
  digitalWrite(LRVS,LOW);
  return;
     }
     
void drive_Left()
     {
  digitalWrite(RFWD,HIGH);// right wheel foward h-bridge
  digitalWrite(RRVS,LOW);
  digitalWrite(LFWD,LOW);//left wheel foward h-bridge
  digitalWrite(LRVS,HIGH);
  return;
     }
     
void drive_right()
     {
  digitalWrite(RFWD,LOW);// right wheel foward h-bridge
  digitalWrite(RRVS,HIGH);
  digitalWrite(LFWD,HIGH);//left wheel foward h-bridge
  digitalWrite(LRVS,LOW);
  return;
     }
     
void drive_stop()
     {
  digitalWrite(RFWD,LOW);// right wheel foward h-bridge
  digitalWrite(RRVS,LOW);
  digitalWrite(LFWD,LOW);//left wheel foward h-bridge
  digitalWrite(LRVS,LOW);
  return;
     }

Yes the code may works perfectl, but it seems to run the motors at 255 which is full speed. When you try to get the wheels to move the robot at full speed immediately, it stalls. But if you do an analogWrite(pin, 10) followed by a short delay and an analogWrite(pin, 20) etc etc it might start moving.

But instead of hard-coding the 10 and 20 etc into a zillion analogWrites, you would increment a variable called speed and have analogWrite(pin, speed) to get it up to speed gradually.

JimboZA:
Yes the code may works perfectl, but it seems to run the motors at 255 which is full speed. When you try to get the wheels to move the robot at full speed immediately, it stalls. But if you do an analogWrite(pin, 10) followed by a short delay and an analogWrite(pin, 20) etc etc it might start moving.

But instead of hard-coding the 10 and 20 etc into a zillion analogWrites, you would increment a variable called speed and have analogWrite(pin, speed) to get it up to speed gradually.

Thanks for the help, I'm going to try it now, I understood the concept but where would I increment "speed"? in what part of my code would i place it I'm just confused there?

also, my professor stated "The problem is too much load. If it works fine with the wheels off the ground the you know what the problem is. adding a fan will help. " what do you think?

JimboZA:
Yes the code may works perfectl, but it seems to run the motors at 255 which is full speed. When you try to get the wheels to move the robot at full speed immediately, it stalls. But if you do an analogWrite(pin, 10) followed by a short delay and an analogWrite(pin, 20) etc etc it might start moving.

But instead of hard-coding the 10 and 20 etc into a zillion analogWrites, you would increment a variable called speed and have analogWrite(pin, speed) to get it up to speed gradually.

int speeds=0;
int speedstep=10;
if ( 127 > turn ){
   drive_Left();
   for (i=0; i < 255; i++)
   {
   speeds=speeds+speedstep;
  analogWrite(PWML, speeds);// speed control
  }
  }

correct?

You should add a small delay in there to see the change. Also for that particular segment, I would swap analogWrite(PWML, speed), with analogWrite(PWML, i);//

HazardsMind:
You should add a small delay in there to see the change. Also for that particular segment, I would swap analogWrite(PWML, speed), with analogWrite(PWML, i);//

I just tried it, worked in the Air, again put it on the carpet and it stalled.

Attached are the pictures of my bot. Did I install the motors the wrong way? Should the motor and bracket be above the chassis?

WHY THE STALL! lol its getting frustrating

My guess would be the mass of the chassis. And the fact that your on carpet doesn't help either.

HazardsMind:
My guess would be the mass of the chassis. And the fact that your on carpet doesn't help either.

The weight of the whole robot is 5.7 pounds, each motor weighs 1 pound, so the chassis is 3.7 pounds very light material.

The motors are supposedly powerful, I thought they will handle something like this.

Is the weight appropriate? maybe the chassis is too long?

Try this, pick the robot up and run the motors. Then using your finger try to slowly apply pressure to the wheel and see how much pressure it takes to stop it. Do you or can you post a schematic of your design? It is possible that your motors are not getting enough current, so you will need another or better battery.

HazardsMind:
Try this, pick the robot up and run the motors. Then using your finger try to slowly apply pressure to the wheel and see how much pressure it takes to stop it. Do you or can you post a schematic of your design? It is possible that your motors are not getting enough current, so you will need another or better battery.

http://www.robotshop.com/bat-04-7-2v-ni-mh-rechargeable-battery.html
Im using that battery, 7.2V / 2800 mAH Ni-MH Rechargeable Battery , its fully charged for the motors.

For my entire circuit and arduino I'm using a 9 volt battery, (I gotta find a replacement for that, its running out every 10 minutes)

My professor keeps stating "You do not have enough torque. Use a motor operated fan to cool the motor driver"

[quote author=husein06
My professor keeps stating "You do not have enough torque. Use a motor operated fan to cool the motor driver"
[/quote]

Don't you think you might ought to listen to him? I also told you that it wouldn't take much to overheat that controller. One important thing you need to take into consideration is derating your parts as temperatures go up. Those specs you gave are likely for the controller when it is at 25C.

afremont:
[quote author=husein06
My professor keeps stating "You do not have enough torque. Use a motor operated fan to cool the motor driver"

Don't you think you might ought to listen to him? I also told you that it wouldn't take much to overheat that controller. One important thing you need to take into consideration is derating your parts as temperatures go up. Those specs you gave are likely for the controller when it is at 25C.

I just cant grasp how a fan over my motor driver will help my robot drive? will a fan really cool off the warming of current that much?
and I'm just trying to learn and ask here dont fight me lol

Ok try this, bypass the motor controller altogether. Wire the motors directly to the battery and see if it is able to move.

If your 7.2V battery is only powering the motors and it is able to move with a direct connection, then the problem is with your motor controller.

If it still does not work, even with a direct connection, then it is your battery.

Do this little test, and you will finally find the culprit to your problem.

HazardsMind:
Ok try this, bypass the motor controller altogether. Wire the motors directly to the battery and see if it is able to move.

If your 7.2V battery is only powering the motors and it is able to move with a direct connection, then the problem is with your motor controller.

If it still does not work, even with a direct connection, then it is your battery.

Do this little test, and you will finally find the culprit to your problem.

I'm going to do that right now!! check back for my reply!

Thank you for your help!

HazardsMind:
Ok try this, bypass the motor controller altogether. Wire the motors directly to the battery and see if it is able to move.

If your 7.2V battery is only powering the motors and it is able to move with a direct connection, then the problem is with your motor controller.

If it still does not work, even with a direct connection, then it is your battery.

Do this little test, and you will finally find the culprit to your problem.

GREAT NEWS!!!! I put that battery directly to those motors and it went forward about 10 yards in 1 second! lol So on the bright side we now know the problem is the motor driver, this is the one I was using:

What do you think is the problem, I'm trying to find a better motor driver!

Thanks for pointing out this simple test!

I am not familiar with the one you have so I have no clue what the problem is. How about this one.
http://www.ebay.com/itm/L298N-Dual-H-Bridge-IC-Stepper-Motor-Driver-Controller-Board-Module-for-Arduino-/300864612676?pt=LH_DefaultDomain_2&hash=item460ceda944

The below is from the pololu 33926 page.

Unlike other H-Bridges, the 33926 has a feature that allows it to gracefully reduce current as the current exceeds 5 A or as the chip temperature approaches its limit. This means that if you push the chip close to its limit, you will see less power to the motor, but it might allow you to avoid a complete shutdown.

HazardsMind:
I am not familiar with the one you have so I have no clue what the problem is. How about this one.
http://www.ebay.com/itm/L298N-Dual-H-Bridge-IC-Stepper-Motor-Driver-Controller-Board-Module-for-Arduino-/300864612676?pt=LH_DefaultDomain_2&hash=item460ceda944

With a 298 in there he's going to lose 2-3 volts at the motors straight off the top....

Btw, have you tried to code the acceleration in, as I suggested and as you elaborated in code earlier?

And tried it on a floor with no carpet? As the wheel sinks in the pile, as it moves off it has to flatten the pile in front and that takes energy.

JimboZA:

HazardsMind:
I am not familiar with the one you have so I have no clue what the problem is. How about this one.
http://www.ebay.com/itm/L298N-Dual-H-Bridge-IC-Stepper-Motor-Driver-Controller-Board-Module-for-Arduino-/300864612676?pt=LH_DefaultDomain_2&hash=item460ceda944

With a 298 in there he's going to lose 2-3 volts at the motors straight off the top....

Btw, have you tried to code the acceleration in, as I suggested and as you elaborated in code earlier?

And tried it on a floor with no carpet? As the wheel sinks in the pile, as it moves off it has to flatten the pile in front and that takes energy.

Yes I did it didn't work, the problem is not accelerate or the code. The motor driver kept shutting off from over heating, I guess the motors were drawing more than 2.5 amps, and the motor driver couldn't handle it.