Archive

Vehicles

With a 12S LiPo battery pack, two 2.45 kW motors, and a brake pedal turned accelerator SouthernFried Chibi is a ton of fun that weighs in at around 30lbs thanks to its super light 8020 frame.

A small child enjoys the magnificence of southernfried chibi whilst wielding a wooden laser-cut banjo.

A small child enjoys the magnificence of southernfried chibi whilst wielding a wooden laser-cut banjo.

Project Background Info:

As I currently understand it, this go-kart started as Xo Wang’s (geekshavefeelings.com) mission to build a Charles Guan (www.etotheipiplusone.net/) inspired go-kart in a weekend’s time. Fortunately for me however, Xo ended up not  entirely finishing the kart and out of the goodness of his heart bestowed the project to me.

When I got the kart, it was a fame with wheels, steering, and some motors. Then began my construction efforts…

This is what the kart looked like when I got it

This is what the kart looked like when I got it

My Construction Efforts:

I quickly set about buying motor controllers and batteries for the cart. After much consideration I decided on:

While I was waiting for the electronics to arrive, I set about installing chains on the rear drive wheels. The chains utilized for this project were #25 size which is perfect for this power/torque range but makes things difficult when you need things like half links. Throughout the project I wasn’t able to find #25 chain parts anywhere locally which meant having to order chain parts from odd places in china and really long waits for new master links.

As soon as batteries and controllers were in my possession, I laser cut a .25″ thick acrylic electronics tray and went about attaching the controllers and batteries to it (you’ll notice however that the cart now utilizes a wooden tray because the acrylic tray broke D:). I also wired up two male-to-female banana plug jumpers which allow me to connect the 3 LiPo batteries in series. Finally some banana plug Y’s (to connect the batteries to both controllers) were soldered, some shorted pins (to turn the controllers on) were rigged together, and a 5K pot was wired in to both of the controller’s “throttle” leads and everything was ready to go!

All done! (I thought)

There was much rejoicing and lots of silly go-karting inside of MRDC!

You might notice in the video a loud clanking sound every time the cart accelerates. That clanking noise was the sound of chains not meshing properly with sprockets. Basically, the chains were skipping off of the sprockets #sadface.

Done forrealsies this time

After realizing I was going to need totally new sprockets for the rear wheels, I put off the kart for a long time. Instead of letting it sit around indefinitely however, I asked some awesome fellow University Lab Instructors from the GaTech Invention Studio to help me out. We all agreed on Atlanta Maker Faire for the new project deadline to force us to actually get the thing done.

Joshua and Kuttler putting some work into the kart!

Joshua and Kuttler putting some work into the kart!

I brought in new scooter wheels and cut some better sprockets out using our waterjet. Joshua Terrell and Kuttler Smith brought a whole bunch of hard work and elbow grease. Joshua and Kuttler essentially rebuilt the entire cart. They remounted the seat to add more rigidity to the frame, made a woodern electronics tray, and a really nifty accelerator pedal. Xo originally made the pedal to be used for brakes but since we didn’t have brakes, Kutler rigged up a system of belts and springs so the pedal could be a “gas” pedal. I installed the new wheels and sprockets and the project was done!

If you have any questions, please feel free to leave them in the comments below.

Until next time,

Chad

 

I finally had some time to sit down and finish the code for my DIY Segway or “ChadWay” as it has been named around the Invention Studio. This code is developed for an Arduino Uno and uses the servo library to send motor drive commands to a Sabertooth 2×25 motor controller.  I commented almost every line so it should be pretty easy to understand. If you have any questions, feel free to ask!

-Chad

#include <Servo.h> //includes the servo library in the code
#include <Wire.h>  //includes the servo library in the code 
#include <FreeSixIMU.h> //includes the servo library in the code
#include <FIMU_ADXL345.h> //includes the servo library in the code
#include <FIMU_ITG3200.h> //includes the servo library in the code
#define KP 0.5            // proportional controller gain
const int leftButtonPin = 2; //tells the arduino where the left steering button is
const int rightButtonPin = 3; //tells the arduino where the right steering button is 
int leftButtonState = 0; //creates a variable for the left switch's state to be stored to
int rightButtonState= 0; //creates a variables for the right switch's state to be stored to
Servo leftMotor;  //creates a servo instance for the left motor
Servo rightMotor; //creates a servo instance for the left motor 
float angles[3]; //creates an array for the sensor data to go in
FreeSixIMU sixDOF = FreeSixIMU();

void setup() 
{
  digitalWrite(10,LOW); //sets the pin to off
  digitalWrite(11,LOW); //sets the pin to off
  Serial.begin(9600);           // sets the serial BAUD rate
  delay(5); 
  sixDOF.init(); //initializes the sensor
  delay(5);
  pinMode(leftButtonPin, INPUT); //sets the port the button is plugged into as an input port
  pinMode(rightButtonPin, INPUT); //sets the port the button is plugged into as an input port
  Wire.begin(); //begins all the wire library stuff
  leftMotor.attach(10);          
  rightMotor.attach(11);          
  digitalWrite(10,LOW);  //sets the pin to off
  digitalWrite(11,LOW);  //sets the pin to off
}
void loop()
{
  float corrected_angles = 0.00;
  float output = 0.00;
  signed int motorL = 0;
  signed int motorR = 0;
  sixDOF.getEuler(angles); //Gets the angles array from the sensors
  corrected_angles=(angles[1]); //The angle component from the array
  corrected_angles=corrected_angles-3; //Adjusts the value to compensate for the sensor being mounted nonlevel
  output=corrected_angles*KP; //Proportional control loop
  output=output-.20; //Cleaning things up abit (a gain adjust)
  motorL=map(output,-30,30,150,30); //Maps sensor values to motor outputs
  motorR=map(output,-30,30,150,30); //Maps sensor values to motor outputs
  leftBuuttonState = digitalRead(leftButtonPin); //Reads the state of the left steering button
  rightButtonState = digitalRead(rightButtonPin); //Reads the state of the right steering button
  if(leftButtonState == HIGH) {   //If the state of the left steering button is high then tell motorL to go faster
    motorL=motorL+10;
  }
  if(rightButtonState == HIGH) {  //If the state of the left steering button is high then tell motorR to go faster
    motorR=motorR+10;
  }
  leftMotor.write(motorL);    //Writes speed value to the left motor
  rightMotor.write(motorR);   //Writes speed value to the right motor
}