MPU6050 Controlled Servo Arm

Introduction: MPU6050 Controlled Servo Arm

So, in this instructable i present the process to make a 2-axis pan and tilt servo arm controlled using the MPU6050
accelerometer.

First of all we need to Upload the files from i2cdev.zip and MPU6050.zip into the Arduino IDE library.
This can be done by extracting the files within the .zip folders and copying into the library folder of the arduino IDE.

The parts needed for this project are:
1) Arduino UNO
2) Breadboard
3) MPU6050
4) 2 x Servo motors ( i used microservo motors in this case)
5) Male-Male Jumper cables
6) Computer with Arduino IDE

The connections should be made as shown in the Fritzing diagram.

For MPU6050:
SCL -> A5
SDA -> A4
INT -> 2

Servo1 -> 9
Servo2 ->10

After all the connections are made, upload the code onto your Arduino:

#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Servo.h"

MPU6050 mpu;
int16_t ax, ay, az;
int16_t gx, gy, gz;
Servo servo1;
Servo servo2;

int val1;
int val2;
int prevVal1;
int prevVal2;

void setup()
{
Wire.begin();
Serial.begin(38400);
Serial.println("Initialize MPU");
mpu.initialize();
Serial.println(mpu.testConnection() ? "Connected" : "Connection failed");
servo1.attach(9);
servo2.attach(10);
}

void loop()
{
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
val1 = map(ax, -17000, 17000, 0, 179);
if (val1 != prevVal1)
{
servo1.write(val1);
prevVal1 = val1;
}
val2 = map(ay, -17000, 17000, 0, 179);
if (val2 != prevVal2)
{
servo2.write(val2);
prevVal2 = val2;
}
delay(50);
}





Important note: There might be issues connecting the MPU6050, as the wires keeping running lose, so when you initially upload it, check in the serial moniter if the accelerometer was successfully connected. Else reconnect and try again.




Tips: You can add more servos by introducing new variables and mapping accordingly. Adding more powerful servos and a better structure can open new possibilities like a fpv camera mount etc

.

Always ready for feedback.
Thank you.

Share

    Recommendations

    • Tiny Home Contest

      Tiny Home Contest
    • Fix It! Contest

      Fix It! Contest
    • Water Contest

      Water Contest

    9 Discussions

    0
    None
    IsaacE15

    Question 5 months ago

    Hey. Nice program. If I were to add another servo, making it 3 servo one mpu6050, how big of a difference does it effect the program?

    Hello, where did you find the values -17000, 17000, 0, 179 ? Are they your offsets?

    It is not so smooth. How can we make it smoother?

    Thanks for sharing!

    From the line "map(ax, -17000, 17000, 0, 179);", how come the acceleration values are assumed to be within -17000 and 17000? Aren't they 16-bit values? If so, shouldn't the range be wider than -17000, 17000?

    0
    None
    DswW

    2 years ago

    Hello, Can i see how is your servo motor connected with each other in detail?

    And can i know the exact model of the servo motor that you are using pls?

    tq for sharing

    1 reply

    Unfortunately i disassembled the setup, but its a Towerpro 90g motor found here:

    http://www.xcluma.com/servo-SG90

    As for servo connection its basically arm of one servo is glued ontho the body of other servo, in order to use two axis.