#include <Servo.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inicialize o LCD 20x4 com o endereço I2C (0x27 é o endereço comum)
LiquidCrystal_I2C lcd(0x27, 20, 4);
Servo servo_1;
Adafruit_MPU6050 mpu;
void setup() {
// Inicializa o display LCD
lcd.init();
lcd.backlight();
// Mensagem de inicialização do LCD
lcd.setCursor(0, 0);
lcd.print("Iniciando...");
servo_1.attach(5);
servo_1.write(0);
delay(1000);
servo_1.write(90);
delay(1000);
servo_1.write(0);
delay(1000);
servo_1.write(180);
delay(1000);
Serial.begin(115200);
while (!Serial)
delay(10); // Aguarda a abertura do console serial
Serial.println("Adafruit MPU6050 test!");
// Tenta inicializar o MPU6050
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Erro MPU6050");
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);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MPU6050 Inicializado");
delay(1000);
}
void loop() {
int valor = analogRead(A0);
valor = map(valor, 0, 1032, 0, 180);
servo_1.write(valor);
// Obtem as leituras do sensor
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// Atualiza o display LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Accel X: ");
lcd.print(a.acceleration.x, 1);
lcd.setCursor(0, 1);
lcd.print("Accel Y: ");
lcd.print(a.acceleration.y, 1);
lcd.setCursor(0, 2);
lcd.print("Accel Z: ");
lcd.print(a.acceleration.z, 1);
lcd.setCursor(10, 0);
lcd.print("Gyro X: ");
lcd.print(g.gyro.x, 1);
lcd.setCursor(10, 1);
lcd.print("Gyro Y: ");
lcd.print(g.gyro.y, 1);
lcd.setCursor(10, 2);
lcd.print("Gyro Z: ");
lcd.print(g.gyro.z, 1);
lcd.setCursor(0, 3);
lcd.print("Servo Pos: ");
lcd.print(valor);
// Também imprime no console serial para depuração
Serial.print("Acceleration X: ");
Serial.print(a.acceleration.x);
Serial.print(", Y: ");
Serial.print(a.acceleration.y);
Serial.print(", Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s^2");
Serial.print("Rotation X: ");
Serial.print(g.gyro.x);
Serial.print(", Y: ");
Serial.print(g.gyro.y);
Serial.print(", Z: ");
Serial.print(g.gyro.z);
Serial.println(" rad/s");
Serial.print("Servo Position: ");
Serial.println(valor);
Serial.println("");
delay(500);
}