Подключение 2-ух ADXL345

Тема в разделе "Arduino & Shields", создана пользователем norgard, 12 окт 2019.

  1. norgard

    norgard Нуб

    Доброго времени суток. Нужна помощь. К плате ардуино подключено два adxl345 , смог вывести на экран перемещения по осям.
    Значения выводятся большие и то потворяются,как 2 акселометра я не менял в пололожении.
    Как их откалибровать чтоб,меньше получались?
    Код (C++):
    #include <Wire.h>

    int i = 0;


    void setup() {
      Serial.begin(9600);
      Wire.begin();

      // запишем адрес регистра DEVID
      Wire.beginTransmission(0x53);
      Wire.write(byte(0x00));
      Wire.endTransmission();

      // прочитаем регистр DEVID:
      Wire.requestFrom(0x53, 1);
      while (Wire.available()) {
        byte c = Wire.read();
        Serial.print("ID = ");
        Serial.println(c, HEX);
      }

      // переведём акселерометр в режим измерений
      Wire.beginTransmission(0x53);
      Wire.write(byte(0x2D));
      Wire.write(byte(0x08));
      Wire.endTransmission();

    Wire.beginTransmission(0x1D);
      Wire.write(byte(0x00));
      Wire.endTransmission();

      // прочитаем регистр DEVID:
      Wire.requestFrom(0x1D, 1);
      while (Wire.available()) {
        byte c = Wire.read();
        Serial.print("ID = ");
        Serial.println(c, HEX);
      }

      // переведём акселерометр в режим измерений
      Wire.beginTransmission(0x1D);
      Wire.write(byte(0x2D));
      Wire.write(byte(0x08));
      Wire.endTransmission();
      }
    void loop() {
      // запишем адрес начала данных по осям X, Y и Z:
      Wire.beginTransmission(0x53);
      Wire.write(byte(0x32));
      Wire.endTransmission();

      // прочитаем 6 байтов значений XYZ:
      i = 0;
      byte xyz1[6];
      Wire.requestFrom(0x53, 6);
      while (Wire.available()) {
        byte c = Wire.read();
        xyz1[i] = c;
        i++;
      }
      Wire.beginTransmission(0x1D);
      Wire.write(byte(0x32));
      Wire.endTransmission();

      // прочитаем 6 байтов значений XYZ:
      i = 0;
      byte xyz2[6];
      Wire.requestFrom(0x1D, 6);
      while (Wire.available()) {
        byte c = Wire.read();
        xyz2[i] = c;
        i++;
      }
      // посчитаем и отобразим значения X, Y, Z:
      int x1 = word(xyz1[1], xyz1[0]);
      int y1 = word(xyz1[3], xyz1[2]);
      int z1 = word(xyz1[5], xyz1[4]);
      // посчитаем и отобразим значения X, Y, Z:
      int x2 = word(xyz2[1], xyz2[0]);
      int y2 = word(xyz2[3], xyz2[2]);
      int z2 = word(xyz2[5], xyz2[4]);
     
      Serial.print(x1);
      Serial.print("\t");
      Serial.print(y1);
      Serial.print("\t");
      Serial.print(z1);
      Serial.print("\t");
      Serial.print(x2);
      Serial.print("\t");
      Serial.print(y2);
      Serial.print("\t");
      Serial.print(z2);

      delay(30000);
    }
     

    Вложения:

    • 8.PNG
      8.PNG
      Размер файла:
      8 КБ
      Просмотров:
      213
  2. asam

    asam Гик

    А как подключены то? Там на одной надо пин SDO/ALT ADDRESS к питанию, а на другой к земле, что бы у них разные адреса были.
     
  3. norgard

    norgard Нуб

    Один через 0x53
    А второй через 0x1D
    +2 датчика спаянны в провод
    Который подсоеденяется к шилду.
     
  4. asam

    asam Гик

    Что то я не могу расшифровать. Схему можете привести?
     
  5. norgard

    norgard Нуб

    8 001.jpg 8 001.jpg 8 001.jpg
     
  6. asam

    asam Гик

    А ардуина обычная 5и вольтовая? Тогда с ADXL345 надо уровни согласовывать. А еще нужны блокировочные конденсаторы по питанию каждой МС и резисторы для подтяжки I2C линий