Controlling Servo With MPU6050 Gyro Sensor Using ESP32 - Servo Control Using ESP32
MPU6050 measures accelerometer + gyroscope. Code calculates pitch from accelerometer (X tilt). The pitch (range -90° to +90°) is mapped to servo angles (0°–180°). The servo on GPIO 13 moves according to tilt.📌 Wiring:-
MPU6050 → ESP32
VCC → 3.3V
GND → GND
SDA → GPIO 21 (default I²C SDA on ESP32)
SCL → GPIO 22 (default I²C SCL on ESP32)
Servo → ESP32
Signal (orange/yellow) → GPIO 13
VCC (red) → 5V (use external supply if possible, not directly from ESP32)
GND (black/brown) → GND (common ground with ESP32 & MPU6050)
⚠️ Important: Servos draw a lot of current → use an external 5V supply for the servo, not just the ESP32’s 5V pin.
Full Code:-
#include <Wire.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <ESP32Servo.h>
Adafruit_MPU6050 mpu;
Servo myServo;
int servoPin = 13; // PWM pin for servo
void setup() {
Serial.begin(115200);
// Initialize MPU6050
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
Serial.println("MPU6050 Found!");
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
delay(100);
// Attach servo
myServo.attach(servoPin);
}
void loop() {
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// Calculate pitch angle from accelerometer
float pitch = atan2(a.acceleration.y, a.acceleration.z) * 180 / PI;
// Map pitch (-90 to 90) → servo (0 to 180)
int servoAngle = map(pitch, -90, 90, 0, 180);
// Constrain to avoid errors
servoAngle = constrain(servoAngle, 0, 180);
myServo.write(servoAngle);
Serial.print("Pitch: ");
Serial.print(pitch);
Serial.print("° → Servo: ");
Serial.println(servoAngle);
delay(20); // Small delay for smooth motion
}
👉Project All Parts Amazon Link:- Click Here👈
Comments
Post a Comment