Simple Balancer


this simple balancing robot using accelerometer , small simple sketch.  built robot center of gravity (cg) inch above pivot (axle) , put accelerometer close cg possible.  putting accelerometer @ cg reduces affect of motor acceleration during balancing.  put x axis of accelerometer in direction of travel parallel ground detect direction of tipping.   

here short video:

https://www.youtube.com/watch?v=pfol2efpzms

here sketch more notes:

code: [select]
/*
simple balancing robot
by dave gundlach
8/5/2014

this simple balancer using robot short distance center of gravity (cg) above wheel centers.
this uses on accelerometer sensor.  tilt calculated reading value , direction of an
axis parallel ground.  accelerometer located @ robot cg minimize motor acceleration.
in addition, motors shut down small delay before reading accelerometer minimize motor acceleration.

robot:  radioshack make robotics starter kit + motor addon
        robot 2 black tip motors, 2 (4 aa) battery packs
        battery pack (9v) arduino power
        arduino uno
        adafruit v1.2 motor controller
        make prototype shield mini breadboard
        adafruit adxl335 accelerometer
       
wiring: 2 (4 aa) battery packs connected in parallel motor power connection (jumper off)
        motors connected each of motor connections on motor controller, black wire inner terminal.
        accelerometer connected 5v, ground, a0 xout., , aref 3vo (see adafruit tutorial more info).
       
libraries:
  adafruit motor shield library
    copyright adafruit industries llc, 2009
    code public domain, enjoy!
 
*****warning - see arduino reference page important info on external reference usage******
warning - failure not follow external reference instruction may result in damage arduino

*/
// motor shield setup //
#include <afmotor.h>

af_dcmotor motor1(1, motor12_64khz);    // instance each motor
af_dcmotor motor2(2, motor12_64khz);

// accelerometer setup //

#define xpin a0      // x axis pin
//#define ypin a1      // y axis pin
//#define zpin a2      // z axis pin
#define xzero 509    // x 0 g value              // calibration values (need use values sensor)
//#define yzero 510    // y 0 g value
//#define zzero 523    // z 0 g value
#define xinc 103.0   // x increment value (float)
//#define yinc 106.0   // y increment value (float)
//#define zinc 101.0   // z increment value (float)

void setup() {
  analogreference(external);  // see warning
  serial.begin(9600);           // set serial library @ 9600 bps
 
  // turn on motor
  motor1.setspeed(250);
  motor2.setspeed(250);

  motor1.run(release);
  motor2.run(release);
}

void loop() {
  motor1.run(release);                   // release motors reduce motor accel on sensor
  motor2.run(release);
  //delay(1);                             // short delay let motors release
  int xraw = analogread(xpin);           // read raw accelerometer values
  float xg = (xraw - xzero)/xinc;        // calc g values (note, xinc needs float value)
  int del = 2;                          // set delay 2ms
  int xgh = xg*100;                     // make xg integer multiplying 100
  int speed = (xgh) * 90;               // calculate motor speed , multiply speed factor
  speed = abs(speed);                    // make positive
  speed = constrain(speed, 0, 250);      // constrain max of 250
  serial.println (speed);
  if (xgh < 0) {                         // if negative
    motor1.run(forward);                 // move forward
    motor2.run(forward);
    motor1.setspeed(speed);
    motor2.setspeed(speed);
    delay(del);
    }
  else {                                // else positive
    motor1.run(backward);               // move backward
    motor2.run(backward);
    motor1.setspeed(speed);
    motor2.setspeed(speed);
    delay(del);
  }
}


i made experiment can accelerometer.  better use accelerometer , gyro, has done :)

dave



Arduino Forum > Topics > Robotics (Moderator: fabioc84) > Simple Balancer


arduino

Comments

Popular posts from this blog

Connecting Raspberry Pi 2 to P10(1R)-V706 LED Dot Matrix - Raspberry Pi Forums

TypeError: <unknown> is not a numpy array - Raspberry Pi Forums

datso and removing imagetitle - Joomla! Forum - community, help and support