Проблемы с акселерометром и часами реального времени.

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем DrOnJD, 12 ноя 2016.

  1. DrOnJD

    DrOnJD Нерд

    Использую IscraJS
    1. Aкселерометр
      Используя ваш акселерометр и вашу библиотеку для него получаю данные больше похожие на данные с гироскопа, нежели с акселерометра. Т.е. при встряхивании онного показания меняются не сильно, а вот при наклоне по любой из осей показания меняются прилично. В чем возможная причина?
    2. Страница библиотеки часов реального времени.
      а) В примере кода указано
      Код (Javascript):
      var rtc = require('rtc').connect(PrimaryI2C);
      вместо
      Код (Javascript):
      var rtc = require('@amperka/rtc').connect(PrimaryI2C);
      б) В самой библиотеке ошибка
      Код (Javascript):
      Rtc.prototype.getTime = function(unit) {
        var time = this.read(0x00, 7);
        this._time = new Date(
          this._bcdToDec(time[6]) + 2000,
          this._bcdToDec(time[5]) - 1,
          this._bcdToDec(time[4]),
          this._bcdToDec(time[2] & 0x3f),
          this._bcdToDec(time[1]),
          this._bcdToDec(time[0] & 0x7f)
        );

        var res = this._time;
        switch (unit) {
          case 'unixtime':
            res = Math.ceil(res.getTime() / 1000);
            break;
          case 'iso':
            res = res.getFullYear() + '-' + res.getMonth() /* возвращает текст, в результате ноябрь выводится как "101" */ + 1 +
               '-' + res.getDay() /* возвращает день недели, а не день в месяце */ + 'T' + res.getHours() +
               ':' + res.getMinutes() + ':' + res.getSeconds();
            break;
          default: break;
        }
        return res;
      };
      в) Еще бы хотелось что бы по getTime('Date') возвращался готовый экземпляр класса Date;
    3. Почему этих библиотек нет на гитхабе, было бы проще там исправить на ходу чем писать сюда тему.
     
    Последнее редактирование: 12 ноя 2016
  2. acos

    acos Официальный гик Администратор

    Здравствуйте. Спасибо за тему, давайте вместе разбираться.
    1. Акселерометр показывает ускорение в трёх координатах. Гироскоп показывает угловую скорость. Акселерометр в покое всегда показывает где земля, т.е. направление, в сторону которого действует ускорение свободного падения. Если повернуть его на бок, то изменится именно вектор ускорения свободного падения. Скажите, показания сильно меняются именно во время поворота и исчезают после остановки? Тогда это похоже на гироскоп. Если показания значительно меняются при повороте и не обнуляются после остановки - это акселерометр.
    2. а) Спасибо, поправил. Сейчас прошерстю остальные модули на предмет такой же баги
    б, в, г) Да, неприятно. Спасибо. что сообщили. Эти библиотеки есть на гитхабе, здесь. Были бы очень рады помощи :)
     
  3. DrOnJD

    DrOnJD Нерд

    Вероятно это всё таки акселерометр.Просто я ожидал, что в состоянии покоя он будет показывать нулевое ускорение по всем осям.

    В этом случае я не совсем понимаю как с ним работать. Как отличить наклон от ускорения?
     
  4. rkit

    rkit Гуру

    Наклон определяют гироскопом. Выход акселерометра надо корректировать, если он наклоняется.
     
  5. acos

    acos Официальный гик Администратор

    Вам по-сути нужен модуль ускорения, т.е. длина трёхмерного вектора ускорения, без угла? Можно её посчитать, и если она отличается от 9.8 м/с^2, то понять, что есть дополнительное ускорение. Как-то так
    [​IMG]
     
  6. DrOnJD

    DrOnJD Нерд

    Дело в том, что с учетом вашего совета, мне еще нужен гироскоп, что бы понять насколько наклонен акселерометр. Я же воспринимаю акселерометр как законченный и обособленный модуль который для своей корректной работы не требует дополнительных модулей.

    Спасибо, обязательно попробую это прикрутить вечерком. Но без применения мне кажется, что я могу получить значение ускорения, но не буду знать куда это ускорение направлено.

    Я постараюсь описать задачу, возможно Вы что-то мне посоветуете.
    Мне нужно определять момент торможения. Если я всё верно понимаю, акселерометр в состоянии выдать данные когда по одной из осей(к примеру по X) происходит остановка(торможение). Собсна эти данные мне как раз и нужны.
     
  7. rkit

    rkit Гуру

    Акселерометр корректно и законченно измеряет ускорение. Вы же хотите измерять вектор движения относительно Земли, судя по всему.
     
  8. DrOnJD

    DrOnJD Нерд

    Вектор и величину ускорения
     
  9. acos

    acos Официальный гик Администратор

    Если вы знаете модуль вектора ускорения, то что мешает проверить углы этого вектора, и куда они направлены?:) Строго вниз - стоим, если он куда-то наклонён - происходит ускорение в сторону наклона вектора. Величину ускорения тоже можно вычислить, зная ускорение свободного падения. Здесь нужна трёхмерная геометрия, я бы в ту сторону копал.
     
  10. DrOnJD

    DrOnJD Нерд

    Тело в том, что "предмет" на котором закреплен датчик не всегда перпендикулярен земле. По этому нельзя с уверенностью сказать сменил ли "предмет" вектор движения или просто сменил угол относительно земли.

    Мне видится эта проблема не разрешимой без гироскопа. Хотя надеюсь я просто Вас неверно понял.
     
  11. acos

    acos Официальный гик Администратор

    Чисто теоретически - если модуль ускорения равен 9.8 м/с^2, то просто сменил угол. Если больше - ускорение/торможение (здесь будет сложение векторов). Хотя, конечно, направление на землю в этом случае нужно знать всё равно. Это можно решить стартовой инициализацией, т.е мы при включении, или по нажатию какой-то кнопки знаем, что находимся в состоянии покоя. Запоминаем вектор состояния покоя. Во время работы от измеренного вектора отнимаем запомненный вектор состояния покоя - получаем вектор ускорения. В принципе, точку отсчёта (направлние на землю) можно получать с трёхмерного компаса, его вектор всегда будет направлен на север, параллельно поверхности земли (в идеальных условиях, конечно).

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

    В общем, вам для экспериментов я бы посоветовал попробовать IMU-сенсор. на нём акселерометр, гироскоп, трёхмерный компас, ну и барометр до кучи, чтоб высоту над поверхностью понимать. На вики есть пример с ориентацией в пространстве, может поможет.
     
    Последнее редактирование: 16 ноя 2016
  12. DrOnJD

    DrOnJD Нерд

    Спасибо за совет. У меня как раз такой валяется без дела. Только если я верно понимаю на JS под него нет библиотеки? И помнится под Arduino вычисление достоверной матрицы отняло много нервов. Но вероятно всё же придется использовать именно его.