So I built a HOG drive gimbal in order to thrust vector a model rocket engine.
Here is a pic of what a hog drive looks like, it basically has 2 rings, one controls the x orientation, and the other, mounted inside the first, controls the y.
I am using a mpu 6050 to read orientation values and turn the gimbal in the opposite direction of the accelerometer's value. So far I have written code to control one servo to mimic the gyro's orientation. I was wondering if you guys could help me make it so that both servos work continously, and to get the servos to rotate the opposite direction of the gyro. Thanks and all the best
-High School Student
#include "Wire.h" // allows communication to i2c devices connected to arduino
#include "I2Cdev.h" // I2Connection library (communication to serial port)
#include "MPU6050.h" // IMU library
#include "Servo.h" // servo control library
MPU6050 mpu; //defines the chip as a MPU so it can be called in the future
int16_t ax, ay, az; // x y z orientation values from accelerometer
int16_t gx, gy, gz; // x y z orientation values from gyrscope
///////////////////////////////////////////////////////////////////////////////////////
Servo outer;
Servo inner;
///////////////////////////////////////////////////////////////////////////////////////
int valo; // outer val
int prevValo; // outer prev val
///////////////////////////////////////////////////////////////////////////////////////
int vali; //inner val
int prevVali; //outer prev val
///////////////////////////////////////////////////////////////////////////////////////
//initializes the IMU
void setup()
{
Wire.begin();
Serial.begin(38400);
Serial.println("Initialize MPU");
mpu.initialize();
Serial.println(mpu.testConnection() ? "Connected" : "Connection failed");
outer.attach(9); //servo on pin 9 for large ring y
inner.attach(10);//servo on pin 10 for small ring x
}
///////////////////////////////////////////////////////////////////////////////////////
void loop()
{
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
valo = map(ax, -17000, 17000, 0, 179);
if (valo != prevValo)
{
outer.write(valo);
prevValo = valo;
}
vali = map(ay, -17000, 17000, 0, 179);
if (vali != prevVali)
{
inner.write(vali);
prevVali = vali;
}
}
///////////////////////////////////////////////////////////////////////////////////////