Buenas, tengo una cuestión y es que no logro conectar dichos sensores a una placa de arduino uno, ya que los pines analogicos A5 y A4 están destinados a los pines SDA Y SCl, dichos pines que poseen BMP280 y MPU6050, se trató de conectar en serie pero obviamente no dió los mejores resultados, por otro lado se trató de modificar librerías y código para tratar de encajar dichos sensores, ¿Habrá alguna manera? Les dejó el código abajo para poderlo analizar.
#include <SD.h>//Librería para módulo micro SD
#include <Wire.h>//Librería para conexión I2C
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>//Librerías del modulo BMP280
#include <MPU6050.h> // incluye librerias para sensor MPU6050
MPU6050 mpu; // crea objeto con nombre mpu
Adafruit_BMP280 bmp; //Crea objeto BMP de la libreria adafruit.
File myFileBMP280;//Crea un archivo en la SD para registrar los datos del BMP
File myFileMPU6050;//Crea un archivo en la SD para registrar los datos del MPU6050
// Timers del MPU6050
unsigned long timer = 0;
float timeStep = 0.01;
float pitch, roll, yaw = 0; // Valor Pitch, roll, yaw
float temperature,pressure, P0; // variable para almacenar valor de temperatura y variables para almacenar valor de presion atmosferica y presion actual como referencia para altitud
void setup()
{
Serial.begin(115200);
Serial.print("Iniciando SD ...");
if (!SD.begin(10)) {
Serial.println("No se pudo inicializar");
return;
}
Serial.println("inicializacion exitosa del SD");
if (!bmp.begin(0x76)){
Serial.println("Error al inicializar el sensor BMP280");
while (1);
}
while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) // Si falla la comunicacion con el sensor mostrar
{
Serial.println("mpu6050 no encontrado !");
delay(5000); // Demora de 5 segundos entre lecturas
}
mpu.calibrateGyro(); // Calibra el giroscopio en reposo
mpu.setThreshold(3); // Define la sensibilidad. Default 3.
P0 = bmp.readPressure()/100;
SD.remove("TPA.txt");//Remueve los datos del BMP280
SD.remove("XYZ.txt");//Remueve los datos del MPU6050
}
void loop()
{
timer = millis();
Vector norm = mpu.readNormalizeGyro(); // Lee valores normalizados
pitch = pitch + norm.YAxis * timeStep, roll = roll + norm.XAxis * timeStep, yaw = yaw + norm.ZAxis * timeStep; // Calcula el valor Roll, Calcula el valor Pitch, Calcula el valor Yaw
float temperature = bmp.readTemperature(), pressure = bmp.readPressure()/100.0F;
myFileBMP280 = SD.open("TPA.txt", FILE_WRITE);//abrimos el archivo para el bmp280
myFileMPU6050 = SD.open("XYZ.txt", FILE_WRITE);//abrimos el archivo para el mpu6050
if (myFileMPU6050){
// Salidas sin procesar
Serial.print("Pitch ");
Serial.print(pitch);
Serial.print(" , Roll ");
Serial.print(roll);
Serial.print(" , Yaw ");
Serial.println(yaw);
myFileMPU6050.print("Pitch ");
myFileMPU6050.print(pitch);
myFileMPU6050.print(" , Roll ");
myFileMPU6050.print(roll);
myFileMPU6050.print(" , Yaw ");
myFileMPU6050.println(yaw);
myFileMPU6050.close(); //cerramos el archivo
}
else {
Serial.println("Error al abrir el archivo MPU6050");
}
if (myFileBMP280) {
Serial.println("Escribiendo SD: ");
// Escribir los datos en el archivo de datos
myFileBMP280.print(temperature);
myFileBMP280.print(" °C");
myFileBMP280.print(" , ");
myFileBMP280.print(pressure);
myFileBMP280.print(" HPa");
myFileBMP280.print(" , ");
myFileBMP280.print(bmp.readAltitude(P0));
myFileBMP280.println(" m");
myFileBMP280.close(); //cerramos el archivo
Serial.print(temperature);
Serial.print(" °C");
Serial.print(" , ");
Serial.print(pressure);
Serial.print(" HPa");
Serial.print(" , ");
Serial.print(bmp.readAltitude(P0));
Serial.println(" m");
}
else {
Serial.println("Error al abrir el archivo BMP280");
}
delay(500);
}