0 голосов

к примеру мы вращаем устройство вокруг оси У плоскостью Х получается и мы точно знаем что мы повернем устройство в итоге на 360 градусов, в два этапа сначала от 0 до 180 потом от 180 до 360. Скорость может быть не равномерная. После чего нам нужно зажечь светодиод и все. Конечно если не докрутили или вернулись обратно то финишного состояния не получим. 

Для этой задачи я думал использовать акселерометра troyka нашел формулу расчета углов Статья но по результатам я понял что тут только отклонение на -+90 полный оборот мы не можем получить. Следовательно решить эту задачу с помощью одного акселерометра невозможно? 

Наверно мне нужен комплекс решений типа акселерометра + гироскопа? К примеру mpu6050 или IMU-сенсор на 10 степеней свободы (Troyka-модуль) так?

Но опять появляется вопрос как мне это поможет?

гироскоп положение в пространстве, акселерометр ускорение. Как мы можем это расcчитать можете помочь? Под рукой у меня есть mpu6050 

(2 баллов) 1

1 Ответ

+1 голос

Можно попробовать сделать как описано в этой статье. НО нужно учитывать что гироскоп имеет нехорошее свойство дрейфа. (даже если устройство будет стоять неподвижно) - и если нужна точность измерений угла поворота в долговременной перспективе скорее всего правильный ответ ни как. Не совсем понятно что там у Вас за устройство - но в большинстве случаев эту задачу (если это возможно) гораздо практичнее решать используя энкодер, а не гироскоп.

(1.2 тыс. баллов) 3 20 49
Энкодер да я с вами полностью согласен. Но в данном случае не подходит. Суть примерно такая же как у дверного замка ключ крутиться, а замок нет и они между собой не связаны. SureKey посмотрите. Суть устройства такая же как у ключ, оно вращается, обратной связи от второй части устройства нет, потому что она строго механическая. По этому все вращения должны фиксироваться только в подвижном устройстве и все. В этом вся и проблема.

Точность видите мне нужно только сделать фиксацию вращения 180 потом снова 180 и записать имитацию извлечения ключа. Т.е. перемещение ключа по оси Х в отрицательную сторону. Какая тут точность нужна, ну не знаю. Я нашел вот такую статью

Тут пример который скетчь один работает нормально.

#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
#include "math.h"

MPU6050 mpu;

int16_t accY, accZ;
float accAngle;

void setup() {  
  mpu.initialize();
  Serial.begin(9600);
}

void loop() {  
  accZ = mpu.getAccelerationZ();
  accY = mpu.getAccelerationY();
   
  accAngle = atan2(accY, accZ)*RAD_TO_DEG;
  
  if(isnan(accAngle));
  else
    Serial.println(accAngle);
}

Вроде все отлично, но странно функция atan работает в диапазоне от 0 до 180, а atan2 в диапазоне от 0 до 360. Но датчик показывает данные с 0 => 180 => 160 => 100 .....=> 0 почему не показывает 360? эта функция должна вроде показывать? Я бы в принципе указал что отметка в 360 прошла и все ок горит лампочка, а лучше не 360 а прошел диапазон 340-360 (если так можно написать в С++) constrain(x, a, b) почему то так не работает у меня(((
А статью которую вы скинули я смотрел, но не совсем понял что и как тут, тут много чего и мне для начала нужно хотя бы что то сделать на имеющемся датчике mpu6050, а потом уже заказать этот датчик который в вашей статье.Потому что мне все равно нужно будет не одно устройство.
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.
  1. parovoZZ

    102 балл(ов)

  2. Un_ka

    66 балл(ов)

  3. sser

    38 балл(ов)

  4. Тигрыч

    10 балл(ов)

  5. Kiprais

    9 балл(ов)

  6. N08I40K

    8 балл(ов)

Награды месяца
1-е место: Raspberry Pi 3 Model A+
2-е место: Raspberry Pi Zero W
3-е место: Raspberry Pi Zero

...