Monday, 29 June 2009

Riding the 95% finished product!

video

13 comments:

  1. Nice work.
    I'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

    ReplyDelete
  2. Hey Romeu,

    Total 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

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

    Congratulations on a great project.

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

    ReplyDelete
  5. 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!)

    Awesome project. Well done!

    ReplyDelete
  6. 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.

    ReplyDelete
  7. 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

    ReplyDelete
  8. 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.

    ReplyDelete
  9. 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

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

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

    waiting for ur answer...

    ReplyDelete

  11. I 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

    ReplyDelete
  12. Nice and informative information shared by your blog. I really appreciate it.
    Electric Balance Scooter

    ReplyDelete
  13. Electronic Cigarette for Sale
    I am really glad that I have found this post and I thank you for letting us know about this information….This is a big help for sure!!Thanks!

    ReplyDelete