Love the "zzzzrrrrzzzzzrrrr" sounds. Do the motors and chains make that noise, or did you use the old playing card-in-the-spokes trick? (So hoping it's the latter!)

I wonder if it is possible to use a brushless engine in one of those... Something like this: http://hobbyking.com/hobbycity/store/uh_viewItem.asp?idProduct=5142&Product_Name=Turnigy_80-100-B_130Kv_Brushless_Outrunner_(eq:_70-55)

I know that the speed controller will be a problem to find or build... But other than that those motors are efficient and dont wear out as much as brushed.

wow me and a partner built one of these for a projects class last semester, we only had the one semester to do it in so it didn't get 100% bout 90 or so... it worked it just didn't turn and needed to smooth out the code alil but it did balance. It was amazing to see how close ours was to yours (the frame was near i dentical minus the hand positions) but its cool to see what we coulda accomplished if we had a couple more weeks! heres a link if your interested http://www.chasecooley.blogspot.com/ we had to write often for the grade so alot of it is venting but their is arduino code and such on there but nice job I am really impressed

The zzzzzrrrrzzzzzzzzz noise is the chain system, its a nice noise! (sure beats the gearbox sound of conventional gearing).

I've posted the arduino PDE if anyone is interested.

It wouldn't be possible to use a hobby sensorless brushless motor, there are too many issues (0 start torque) and I think would have to be retrofitted with sensors.

Dear Macaba I will like to build a segway but i don't know from where to buy the electronic part. I'll be happy if you have some plan, or some project to show me. Thank you. My email is lupenimih@yahoo.it

int xPin = 2; // select the input pin for the potentiometer int gyroPin = 1; int steerPin = 3; int ledPin = 13; // select the pin for the LED int pwmPinL = 9; int pwmPinR = 10; int enPin = 7;

float p = 8; //2 float i = 0; //0.005 float d = 1300; //1000

float gyro_integration = 0; float xZero = 0; int gZero = 445; //this is always fixed, hence why no initialisation routine unsigned long time, oldtime; int pwmL; int pwmR; boolean over_angle = 0;

void setup() { unsigned int i = 0; unsigned long j = 0; //maximum possible value of j in routine is 102300 (100*1023)

pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT Serial.begin(115200); analogReference(EXTERNAL); //---------------------------------------------------- TCCR1B = TCCR1B & 0b11111000 | 0x01; analogWrite(pwmPinL,127); analogWrite(pwmPinR,127); digitalWrite(enPin,HIGH); pinMode(enPin,OUTPUT); digitalWrite(enPin,LOW); //----------------------------------------------------- delay(100); for (i = 0; i < j =" j" steeringzero =" analogRead(steerPin);" xzero =" j/100;" oldtime =" micros();" time =" micros();">= (oldtime+5000)){ oldtime = time; calculateAngle();

void calculateAngle() { //Analogref could be as small as 2.2V to improve step accuracy by ~30% //uses small angle approximation that sin x = x (in rads). maybe use arcsin x for more accuracy? //analogref is off the gyro power supply voltage, and routine is calibrated for 3.3V. maybe run acc/gyro/ref off 1 3.3V regulator, an //accurately measure that. //routine runs at 200hz because gyro maximum response rate = 200hz float acc_angle = 0; float gyro_angle = 0;

Nice work.

ReplyDeleteI'm planing on making one for myself, do you already have a total cost for this? Will you make your arduino .pde available??

Thanks man

Hey Romeu,

ReplyDeleteTotal cost was around £500, which is what I aimed for so that went well.

I will post my arduino .pde in the near future (poke me if i don't!).

Mark

Very nice workmanship and ingenuity. Is it fully operational now? How much ride time do you get out of your batteries?

ReplyDeleteCongratulations on a great project.

Wow that is awesome! Do you have the schematics available online? I cant wait to see the .pde. Great Job!

ReplyDeleteLove the "zzzzrrrrzzzzzrrrr" sounds. Do the motors and chains make that noise, or did you use the old playing card-in-the-spokes trick? (So hoping it's the latter!)

ReplyDeleteAwesome project. Well done!

I wonder if it is possible to use a brushless engine in one of those...

ReplyDeleteSomething like this:

http://hobbyking.com/hobbycity/store/uh_viewItem.asp?idProduct=5142&Product_Name=Turnigy_80-100-B_130Kv_Brushless_Outrunner_(eq:_70-55)

I know that the speed controller will be a problem to find or build... But other than that those motors are efficient and dont wear out as much as brushed.

wow me and a partner built one of these for a projects class last semester, we only had the one semester to do it in so it didn't get 100% bout 90 or so... it worked it just didn't turn and needed to smooth out the code alil but it did balance. It was amazing to see how close ours was to yours (the frame was near i dentical minus the hand positions) but its cool to see what we coulda accomplished if we had a couple more weeks! heres a link if your interested http://www.chasecooley.blogspot.com/

ReplyDeletewe had to write often for the grade so alot of it is venting but their is arduino code and such on there but nice job I am really impressed

The zzzzzrrrrzzzzzzzzz noise is the chain system, its a nice noise! (sure beats the gearbox sound of conventional gearing).

ReplyDeleteI've posted the arduino PDE if anyone is interested.

It wouldn't be possible to use a hobby sensorless brushless motor, there are too many issues (0 start torque) and I think would have to be retrofitted with sensors.

Dear Macaba

ReplyDeleteI will like to build a segway but i don't know from where to buy the electronic part. I'll be happy if you have some plan, or some project to show me. Thank you. My email is lupenimih@yahoo.it

Is there any advantage of using 'self balancing technique' for riding a vehicle like this?

ReplyDeleteusing a 3rd wheel(freewheel) and a joystick controlled mechanism for riding rite..?

waiting for ur answer...

Hİ

ReplyDeleteI WANT YOU TO KNOW THIS SUPPER WORKINK BRAVO BUT I TYRED

BUT THIS NOT WORKINK WHATS WRONG PLEASE HELP ME

EMAIL

nevzateler@hotmail.com

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

int xPin = 2; // select the input pin for the potentiometer

int gyroPin = 1;

int steerPin = 3;

int ledPin = 13; // select the pin for the LED

int pwmPinL = 9;

int pwmPinR = 10;

int enPin = 7;

float angle = 0;

float angle_old = 0;

float angle_dydx = 0;

float angle_integral = 0;

float balancetorque = 0;

float rest_angle = 0;

float currentspeed = 0;

int steeringZero = 0;

int steering = 0;

int steeringTemp = 0;

float p = 8; //2

float i = 0; //0.005

float d = 1300; //1000

float gyro_integration = 0;

float xZero = 0;

int gZero = 445; //this is always fixed, hence why no initialisation routine

unsigned long time, oldtime;

int pwmL;

int pwmR;

boolean over_angle = 0;

void setup() {

unsigned int i = 0;

unsigned long j = 0; //maximum possible value of j in routine is 102300 (100*1023)

pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT

Serial.begin(115200);

analogReference(EXTERNAL);

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

TCCR1B = TCCR1B & 0b11111000 | 0x01;

analogWrite(pwmPinL,127);

analogWrite(pwmPinR,127);

digitalWrite(enPin,HIGH);

pinMode(enPin,OUTPUT);

digitalWrite(enPin,LOW);

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

delay(100);

for (i = 0; i < j =" j" steeringzero =" analogRead(steerPin);" xzero =" j/100;" oldtime =" micros();" time =" micros();">= (oldtime+5000)){

oldtime = time;

calculateAngle();

steering = (analogRead(steerPin) - steeringZero)/(15+(abs(angle)*8));

//-----OVER ANGLE PROTECTION-----

if (angle > 20 || angle < -20) { digitalWrite(enPin,HIGH); over_angle = 1; delay(500); } //-----END----- if (over_angle) { //if over_angle happened, give it a chance to reset when segway is level if (angle <> -1) {

digitalWrite(enPin, LOW);

over_angle = 0;

}

}

else {

//-----calculate rest angle-----

if (currentspeed > 10)

{

rest_angle = 0;

//-----END-----

angle_integral += angle;

balancetorque = ((angle+rest_angle)*p) + (angle_integral*i) + (angle_dydx*d);

angle_dydx = (angle - angle_old)/200; //now in degrees per second

angle_old = angle;

currentspeed += (balancetorque/200);

pwmL = (127 + balancetorque + steering);

//-----COERCE-----

if (pwmL < pwml =" 0;"> 255)

pwmL = 255;

//-----END-----

pwmR = (127 - balancetorque + steering);

//-----COERCE-----

if (pwmR < pwmr =" 0;"> 255)

pwmR = 255;

//-----END-----

analogWrite(pwmPinL, pwmL);

analogWrite(pwmPinR, pwmR);

}

}

}

void calculateAngle() {

//Analogref could be as small as 2.2V to improve step accuracy by ~30%

//uses small angle approximation that sin x = x (in rads). maybe use arcsin x for more accuracy?

//analogref is off the gyro power supply voltage, and routine is calibrated for 3.3V. maybe run acc/gyro/ref off 1 3.3V regulator, an

//accurately measure that.

//routine runs at 200hz because gyro maximum response rate = 200hz

float acc_angle = 0;

float gyro_angle = 0;

acc_angle = (((analogRead(xPin)-xZero)/310.3030)*(-57.2958);

gyro_angle = ((analogRead(gyroPin) - gZero)*4.8099)/200;

gyro_integration = gyro_integration + gyro_angle; //integration of gyro and gyro angle calculation

angle = (gyro_integration * 0.99) + (acc_angle * 0.01); //complementary filter

gyro_integration = angle; //drift correction of gyro integration