/*Inclui as bibliotecas necessárias.*/
#include <MPU6050_tockn.h> /*fornece funções para inicializar o sensor, calcular offsets, e obter valores de ângulo e temperatura.*/
#include <Servo.h> /*permite controlar servo motores*/
#include <Wire.h> /*permite a comunicação via I2C*/
/*Cria os objetos de controle para cada servomotor*/
Servo servoX;
Servo servoY;
Servo servoZ;
/*Cria o objeto de controle do módulo MPU6050*/
MPU6050 mpu6050(Wire);/*é configurado para se comunicar com o Arduino usando a interface I2C, que é gerida pela biblioteca Wire*/
void setup() {
/* Inicia a comunicação serial com a velocidade de 9600*/
Serial.begin(9600);
/*Inicia a comunicação Wire(protocolo I2C)*/
Wire.begin();
/*Inicia o objeto de controle do módulo MPU6050*/
mpu6050.begin();
/*Realiza a Calibração automática do módulo MPU6050 de todos os eixos*/
/*O parâmetro true mostra a calibração no monitor serial*/
mpu6050.calcGyroOffsets(true);
/*Atribui as portas de controle para cada servomotor*/
servoX.attach(3);
servoY.attach(7);
servoZ.attach(12);
}
void loop() {
/*Atualiza a posição do módulo MPU6050*/
mpu6050.update();
/*Coleta os dados dos eixos e armazena nas variáveis*/
int eixoX = mpu6050.getAngleX();
int eixoY = mpu6050.getAngleY();
int eixoZ = mpu6050.getAngleZ();
/*Obtém a temperatura atual medida pelo sensor MPU6050, em graus Celsius*/
float temp = mpu6050.getTemp();
/*Mapeia os dados de -90 a 90 para valores de 0 a 180*/
int Xmapeado = map(eixoX, -90, 90, 0, 180);
int Ymapeado = map(eixoY, -90, 90, 0, 180);
int Zmapeado = map(eixoZ, -90, 90, 0, 180);
/*Restringe os dados para valores de 0 a 180*/
int restritoX = constrain(Xmapeado, 0, 180);
int restritoY = constrain(Ymapeado, 0, 180);
int restritoZ = constrain(Zmapeado, 0, 180);
/*Imprime os dados no monitor serial.*/
Serial.print("eixo X: " + String(restritoX) + "°\t");
Serial.print("eixo Y: " + String(restritoY) + "°\t");
Serial.print("eixo Z: " + String(restritoZ) + "°\t");
Serial.print("Temp: " + String(temp) + "°C\n");
/*Posiciona os servomotores*/
servoX.write(restritoX);
servoY.write(restritoY);
servoZ.write(restritoZ);
}