Захват движений руки на MPU6050

,

Здравствуйте! Собираю устройство для считывания движений пальцев на основе 10-ти датчиков MPU6050. Необходим код, который будет сохранять значение угла Y девяти датчиков в отдельные переменные типа int. Один датчик должен фиксировать угол Y, угол X и угол Z. Нужно использовать DMP, встроенный в каждый датчик.

8 датчиков адресом 0х68 подключены к 7-ми каналам первого мультиплексора TCA9548 с адресом 0х70.
2 датчика со стандартными адресами 0х68 подключены к первым двум каналам второго мультиплексора TCA9548 с адресом 0х71. Первый канал отведен для датчика, который должен фиксировать все три угла.

Пины 2-10 подключены к контактам INT датчиков: 2-й пин к датчику на нулевом канале первого мультиплексора, 3-й пин к датчику на 1-м канале первого мультиплексора, и так далее.
Пин 11 подключен к датчику (INT) на нулевом канале второго мультиплексора. Пин 12 подключен к датчику на первом канале второго мультиплексора.

Поможет в реализации:
I2Cdev.h
Библиотеки MPU6050 на I2Cdev

Пытался сделать сам, но при попытке считывания значений с каждого канала первого мультиплексора всё рушилось:

#include <Wire.h>
#include <I2Cdev.h>
#include <MPU6050_6Axis_MotionApps20.h>

#define MUX_ADDRESS 0x70
#define NUM_SENSORS 8

Quaternion q;
VectorInt16 aa;
VectorFloat gravity;
float euler[3];
float ypr[3]; 

uint8_t fifoBuffer[64];
bool dmpReady = false;  
uint8_t mpuIntStatus;   
uint8_t devStatus;     
uint16_t packetSize;    
uint16_t fifoCount;

uint8_t teapotPacket[14] = { '$', 0x02, 0,0, 0,0, 0,0, 0,0, 0x00, 0x00, '\r', '\n' };

MPU6050 mpu;

volatile bool mpuInterrupt = false;     // indicates whether MPU interrupt pin has gone high
void dmpDataReady() {
    mpuInterrupt = true;
}

void changeChannel (int channel){
  Wire.begin();
  Wire.beginTransmission(MUX_ADDRESS);
  Wire.write(1 << channel);
  Wire.endTransmission();
  mpu.initialize();
  mpu.setXGyroOffset(220);
    mpu.setYGyroOffset(76);
    mpu.setZGyroOffset(-85);
    mpu.setZAccelOffset(1788);
    
    mpu.CalibrateAccel(6);
    mpu.CalibrateGyro(6);
    mpu.CalibrateAccel(6);
    mpu.CalibrateGyro(6);
    mpu.PrintActiveOffsets();
}

void setup() {
  Wire.begin();
  Wire.setClock(400000);
  Serial.begin(115200);
  for (int i = 2; i < 11; i++){
    pinMode(i , INPUT);
  }

  for (int i = 0; i < 8; ++i){
    changeChannel(i);
  }
  for (int i = 2; i < 11; i++){
      attachInterrupt(digitalPinToInterrupt(i), dmpDataReady, RISING);
    }
}

void loop() {
  mpu.dmpGetCurrentFIFOPacket(fifoBuffer);
      changeChannel(3);
    mpu.setDMPEnabled(true);
      mpu.dmpGetQuaternion(&q, fifoBuffer);
      mpu.dmpGetGravity(&gravity, &q);
      mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
      Serial.print("\t");
      Serial.print(ypr[1] * 180/M_PI);
}

Бюджет небольшой (<10$)

за 10 баксов напрашивается вопрос: вам надо совет или консультацию?

Бармалея бы, но он последнее время ушел в тень…
Видимо огромный запас дошираков ))))

я так понимаю, что то, что нам обильно форсят по телеку в виде “работать некому, зажрались” следует воспринимать как “работать никто уже не хочет за 10 долларов, дураков нет”. Ну и данная тема прекрасно это иллюстрирует. Хотя, есть таки вероятность что человек вполне вменяем и хотел написать 100.

Есть таки вероятность что ты вполне вменяем и хотел написать 1000.

ТС - с одним датчиком умеете общаться ???

<$10, чота ржу

наверное стоимость рассчитывал по формуле бакс за палец

за сто тыщ рублей тут немного другой ажиотаж начнется, не факт что кому-то из реально вменяемых удастся заработать

Не начнется. Тут дай бог есть половина спеца, реально способного сделать рабочую мо-кап руку.

не суди других по себе

наверное только взгляд

Ладно, буду делать сам.

Или, оценив свои трудозатраты, пойдет лишнюю гайку точить для «ланцета». Тут как бэ не всё однозначно.

угу… так муж жене отвечает, когда у неё “голова болит”.

кажется максимум что сможете это подключить 8 mpu6050 используя 8 TCA9548…
или 10 подключая один mpu6050 сразу к 2 TCA9548, но показания в один момент времени вы сможете получать только с 1го mpu6050, но могу и ошибаться… кажется вы просто тратите время… используйте 2 ардуино, 10 TCA9548, и 10 mpu6050…

Это нахуа ?

Разобрался.

патаму что я нубяра, который не знает как падключть больше 2ух mpu 6050 к 1 ардуино))))