подскажите по детальке "Трёхосный акселерометр"

Тема в разделе "Посоветуйте детальки", создана пользователем Rustam, 9 май 2014.

  1. Rustam

    Rustam Нерд

    хочу сделать что-то умеющее держать баланс или просто выравниваться при наклонах. подключил "Трёхосный акселерометр" ( http://amperka.ru/collection/imu-sensors/product/triple-axis-accelerometer ) он выдает 3 цифры: X, Y и Z. но данные слишком сильно плавают. пришлось вычислять среднее по выборкам из 1000 показаний. но эти показания все равно мне непонятны. как найти нулевую точку? есть интересные примеры устройств на данной схемке? увязал акселерометр с сервоприводом, но все равно не могу найти четкую связь наклона с действиями сервы.
    может лучше было купить сразу гироскоп? ( http://amperka.ru/collection/imu-sensors/product/triple-axis-gyro) но он дороже в 3 раза =(
     
    Последнее редактирование: 9 май 2014
  2. Unixon

    Unixon Оракул Модератор

    Фото/видео установки и код скетча в студию.
     
  3. Rustam

    Rustam Нерд

    собрана только установка для проверки акселерометра. показания выдает примерно от 150 до 450 условных единиц.
    фото/видео пока нет, а скетч вот такой:

    #include <LiquidCrystal.h>
    LiquidCrystal lcd(4, 5, 10, 11, 12, 13);

    #define SENSOR_PINx A5
    #define SENSOR_PINy A4
    #define SENSOR_PINz A3
    void setup()

    {
    Serial.begin(9600);
    lcd.begin(16, 4);
    }

    void loop()
    {

    long valx = 0;
    long valy = 0;
    long valz = 0;

    for (int i=0; i<1000; ++i) // берем среднее по 1000 измерениям, потом при использовании нужно поделить на 1000
    {
    valx = valx + analogRead(SENSOR_PINx);
    valy = valy + analogRead(SENSOR_PINy);
    valz = valz + analogRead(SENSOR_PINz);
    }

    Serial.println(" x=");
    Serial.println(valx);


    Serial.println(" y=");
    Serial.println(valy);


    Serial.println(" z=");
    Serial.println(valz);

    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print (valx);
    lcd.setCursor(0, 2);
    lcd.print (valy);
    lcd.setCursor(0, 3);
    lcd.print (valz);

    }
     
  4. Unixon

    Unixon Оракул Модератор

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

    Обратите внимание на направление осей акселерометра. Среднее значение 512 +- погрешность. Значения, которые вы считываете - это проекция вектора g на оси акселерометра. Акселерометр работает в определенной шкале: 1.5g или 6g, среднее значение - это 0g, крайнее значение 0 или 1023 с АЦП соответствует максимальному значению рабочей шкалы.
     
    Последнее редактирование: 10 май 2014
    Megakoteyka и Rustam нравится это.
  5. Rustam

    Rustam Нерд

    спасибо. буду доделывать
     
  6. vvr

    vvr Инженерище

    Вам нужно совсем по другому подойти к этой теме и хорошенько её изучить.
    Почитайте о балансирующих роботах.
    Здесь нужен и гироскоп и акселерометр и обязательно фильтры Кальмана.
     
  7. Rustam

    Rustam Нерд

    математика для меня темный лес =(
     
  8. vvr

    vvr Инженерище

    К сожалению по другому не получится :)