Могу ли я соединить DS3231 и MPU6050?

Можно ли соединить DS3231 и MPU6050 с помощью Arduino Mega 2560? Я подключил его:

MPU 6050               Arduino Mega 2560
SDA           =        SDA
SCL           =        SCL
GND           =        GND
VCC           =        5V

И я подключил DS3231 к SDA и SCL рядом с выводом AREF:

DS3231               Arduino Mega 2560
SDA           =        SDA
SCL           =        SCL
GND           =        GND
VCC           =        5V

Проблема в том, что когда я подключаю их оба, MPU6050 печатает nan, после открытия контакта DS3231 от arduino MPU6050 печатает правильные углы. Кто-нибудь может мне помочь?

Код:

#include "MPU6050.h"
#include "Wire.h"
#include <DS3231.h>
MPU6050 accelgyro;
int16_t ax, ay, az, gx, gy, gz;

DS3231 rtc(SDA, SCL);


double timeStep, time, timePrev;
double arx, ary, arz, grx, gry, grz, gsx, gsy, gsz, rx, ry, rz;

int i;
double gyroScale = 131;

void setup() {
  Wire.begin();
  accelgyro.initialize();
  Serial.begin(9600);
  rtc.begin();
}

void loop() {
  timePrev = time;
  time = millis();
  timeStep = (time - timePrev) / 1000; 
  accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
  gsx = gx/gyroScale;   gsy = gy/gyroScale;   gsz = gz/gyroScale;
  arx = (180/3.141592) * atan(ax / sqrt(square(ay) + square(az))); 
  ary = (180/3.141592) * atan(ay / sqrt(square(ax) + square(az)));
  arz = (180/3.141592) * atan(sqrt(square(ay) + square(ax)) / az);
  if (i == 1) {
    grx = arx;
    gry = ary;
    grz = arz;
  }
  else{
    grx = grx + (timeStep * gsx);
    gry = gry + (timeStep * gsy);
    grz = grz + (timeStep * gsz);
  }  
  rx = (0.1 * arx) + (0.9 * grx);
  ry = (0.1 * ary) + (0.9 * gry);
  rz = (0.1 * arz) + (0.9 * grz);
  Serial.print("X axis == ");
  Serial.println(arx);
  Serial.print("Y axis == ");
  Serial.println(ary);
  Serial.print("Z axis == ");
  Serial.println(arz);
  Serial.println(rtc.getTimeStr());
  i = i + 1;
  delay(1000);
}

, 👍0

Обсуждение

запустить скетч сканера I2C, @Juraj

Какую библиотеку DS3231.h вы используете и почему указываете, какие контакты использовать? Это, вероятно, переводит его в программный режим I2C и ломает аппаратный I2C., @Majenko

Я использую этот DS3231, ссылка = http://www.rinkydinkelectronics.com/library.php?id=73..., @Abhrajeet Sarder

А как запустить сканер I2C, что это такое?, @Abhrajeet Sarder


2 ответа


1

Библиотека DS3231, которую вы используете, работает (по какой-то странной причине) исключительно с собственной внутренней реализацией I2C. Это нельзя использовать на тех же контактах, что и аппаратная библиотека Wire, которую использует MPU6050.

Либо переместите DS3231 на другую пару контактов, либо найдите лучшую библиотеку DS3231, которая использует для связи библиотеку Wire.

,

0

Да. Используя i2c, вам нужно изменить адрес MPU6050, потому что по умолчанию используется (0x68), который также является значением по умолчанию и может использовать только адрес DS3231.

Пример изменения адреса из личного скетча:

MPU6050 mpu(0x69);

Попробуйте:

Ускоряющий гироскоп MPU6050 (0x69);

,