Six bar not lifting?

Our VEX team is working on our Starstruck robot and having trouble getting our six bar to lift all the way, as the motors are straining. We’re on a significant time stretch, so temporary solutions and long-term solutions are appreciated, but short-term more so.

What’s happening is when the button is pressed on our joystick that runs both motors to lift the six bar, it seems to be staggering. The bar lifts quite slowly and jerkily, which is odd. I used the same basic construction as several YouTube instructionals, which also used two 393 motors, but ours seems to not work. I tried adding rubber bands in the pictures, but it doesn’t seem like they’re helping. More rubber bands stop the lift entirely. If i guide the bottom bar with my hands, the lift works great. It also goes down smoothly.

Any and all suggestions are GREATLY appreciated. We have a school “mock tournament” tomorrow and we’re trying to get our robot working by then.

Here is a video of our robot not working.

Pictures are attached.
Broken Robot View 2.jpg
Broken Robot.jpg

i dont know where or who you heard from, but 2 motors will not lift a 6 bar, especially loaded down with scoring objects, we have 6 motors on our 1:5 6bar, but it struggles to lift cubes, so the reason its struggling is because of lack of torque, not a build issue.

Thank you for the quick response. Where would you recommend adding the additional motors, or how should we change our design to accommodate the extra motors?

No bearing flats seems to be your biggest issue. A square shaft turning in a square hole is never good. As a good rule of thumb, whenever you have a shaft going through metal, use a bearing flat. 2 motors is also underpowered depending on what kind of loads you are trying to lift. However, it looks like that’s all steel; if you want to keep two motors bump up that gear ratio to a 1:7 or higher and add a lot more rubber bands. The placement you have rubber bands right now is also not the best; place them between the bars of the six bar. Here’s a very bad drawing:

````````````|````````|
-------------------------------------*
|```````````|
---------------------

Where the stars are mounting points for rubber bands.

i would recommend essentially adding an idler gear (of any size) below your powered gear, and then have a motor powering a 12 tooth gear, on both sides of the lift, heres a kinda drawing
0
@
0
@
0
@
with the @'s being 12 tooth powered gears, and 0’s being your idler/arm gears
edit:formatting

With the geometry of the gears here, it will be easier not to use idlers to add two motors. Just put another 12 tooth pinion below the 60 tooth gear.

you could, but the high strength (which i recommend) 12 tooth metal gears do badly on each other, creating tons of friction, if you used smaller idlers, any size you want, you get way less friction

You never have 12 tooth on 12 tooth contact.

12 tooth
60 tooth
12 tooth

is how it would work. No idlers, so a lot less energy lost to friction.

We added the two additional motors and bearing flats without any effect to the six bar.

Loosen the nylocks on the six bar, looks like you cranked them down too tight and that is why its jumping around.

We’ve varied how tight they are, and don’t seem to be the source of our problem.

What does your button code look like? All of the above suggestions are good, but that stutter can be your code sending a lift value and a stop value at the same time. Be sure you are giving those motors only one instruction. Something like:

motor[liftmotor] = vexRT[Btn6U] * 100 - vexRT[Btn6D] * 60;

This is our program so far. The topRight, topLeft, bottomLeft, bottomRight are all operating the six bar.


#pragma config(Motor,  port2,           topRightmotor, tmotorVex393_MC29, openLoop)
#pragma config(Motor,  port3,           topLeftmotor,  tmotorVex393_MC29, openLoop, reversed)
#pragma config(Motor,  port4,           bottomLeftmotor, tmotorVex393_MC29, openLoop)
#pragma config(Motor,  port7,           bottomRightmotor, tmotorVex393_MC29, openLoop, reversed)
#pragma config(Motor,  port8,           leftWheel,     tmotorVex393_MC29, openLoop, reversed)
#pragma config(Motor,  port9,           rightWheel,    tmotorVex393_MC29, openLoop, reversed)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

task main ()
{

  while(1 == 1)
  {
    motor[leftWheel]  = vexRT[Ch3];   // Left Joystick Y value
    motor[rightWheel] = vexRT[Ch2];   // Right Joystick Y value
    	if(vexRT(Btn6U)==1)
    	{
    		motor(topLeftmotor)=67;
    		motor(topRightmotor)=67;
    		motor(bottomLeftmotor)=67;
    		motor(bottomRightmotor)=67;
    	}
    		else
    		{
    			motor(topLeftmotor)=0;
    			motor(topRightmotor)=0;
    			motor(bottomLeftmotor)=0;
    			motor(bottomRightmotor)=0;
    		}
    			if(vexRT(Btn6D)==1)
    			{
    				motor(topLeftmotor)=-67;
    				motor(topRightmotor)=-67;
    				motor(bottomLeftmotor)=-67;
    				motor(bottomRightmotor)=-67;
    			}
    				else
    				{
    					motor(topLeftmotor)=0;
    					motor(topRightmotor)=0;
    					motor(bottomLeftmotor)=0;
    					motor(bottomRightmotor)=0;
    				}



  }

}

When 6U is pressed and 6D is not pressed, what are you telling the motors to do? Think it through.

Here is the logic for buttons in if statements
if (up)
{
up
}
else if (down)
{
down
}
else
{
stop
}

Ohhhh, i wouls use 127, as thats max power, id its too fast lower it but thats probably. Your problem, as your only using 1/2 of the motors power

Well, sure, using higher power would be nice… but if its being told to go 127 and 0 at the same time the problem will persist.

Thats true, thatd be the cause of twitching though

Hopefully you sorted it out yourselves, but I need to take off and don’t want to leave you hanging…

This is the solution:


	if(vexRT(Btn6U)==1)
	{
		motor(topLeftmotor)=127;
		motor(topRightmotor)=127;
		motor(bottomLeftmotor)=127;
		motor(bottomRightmotor)=127;
	}
	else if(vexRT(Btn6D)==1)
	{
		motor(topLeftmotor)=-67;
		motor(topRightmotor)=-67;
		motor(bottomLeftmotor)=-67;
		motor(bottomRightmotor)=-67;
	}
	else
	{
		motor(topLeftmotor)=0;
		motor(topRightmotor)=0;
		motor(bottomLeftmotor)=0;
		motor(bottomRightmotor)=0;
	}

I would also suggest adding rubber bands from the top of your tower to the bottom of the middle vertical bar, and from the top of the middle vertical to the bottom of the outer vertical. This will assist your motors in lifting the linkage.

could also be written as


motor(topLeftmotor)=((vexRT(Btn6U)) - (vexRT(Btn6D)) * 127);
motor(topRightmotor)=((vexRT(Btn6U)) - (vexRT(Btn6D)) * 127);
motor(bottomLeftmotor)=((vexRT(Btn6U)) - (vexRT(Btn6D)) * 127);
motor(bottomRightmotor)=((vexRT(Btn6U)) - (vexRT(Btn6D)) * 127);

Edit: added *127 to make the motors full value (can be changed to any positive integer).

That wouldn’t work, you’d just be setting the motors to 1 or 0.