Conectar sensor BMP280 y MPU6050 en el mismo arduino nano

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);
}

¿Puedes compartir tu circuito?

Y compara con esta lámina:

1-11-1

La conexión la estoy tratando de hacer I2C. Este es el esquema.


Si se conecta en serie aveces es irregular la toma de datos por parte de los sensores.

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


Porque todo el mundo empieza por cosas que los superan?
Modificar librerias? Eso es para un experto.

Tienes dos sensores que se conectan por I2C.
Los probaste individualmente? Probaste el BMP280 con el sketch ejemplo que trae su librería? funcionó?
Probaste el MPU6050 con el test ejemplo de su librería? Funcionó?
Son pasos básicos.
Porque responden muchas cosas. Responde que el hardware esta bien conectado y que el software funciona.
Cuando ambos pasos fueron logrados unes los códigos en algo similar a lo que has posteado mal por cierto, sin usar etiquetas, asi que edita.

Espero tu respuesta posterior a la edición, por favor, observa como enfatizo ciertas palabras.

Si, anteriormente ya había probado ambos sensores individualmente, con códigos de la librería y códigos. Si me arrojan lectura de datos, tengo entendido que se pueden conectar dichos pines "SDA y SCL" en serie, pero no estoy seguro de ello.

A que llamas serie?
Se conectan en paralelo. Pones todo lo que diga sda al pin SDA del Arduino y todo lo que diga SCL al pin SCL del Arduino, eso es parelelo.
Si los códigos funcionan bien individualmente cuando los pones juntos lo único que suele hacer fallar alguna lectura es algun delay. Veo uno de 500 mseg.
Retiralo temporalmente y mira a ver que ocurre, o baja el valor a 100 por ejemplo

Porqué abres dos archivos? uno para BMP280 y otro para el MPU, porque no solo uno y guardas los datos separados x comas?
Es la manera de hacerlo.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.