2014-11-26 5 views
1

У меня есть следующая проблема: у меня есть акселерометр Arduino + (MMA8452Q), установленный на велосипеде. Я пытаюсь читать торможения при торможении. Проблема в том, что из-за конструктивных ограничений я могу только установить вышеупомянутую аппаратную настройку на велосипедиста. Так как всадник будет менять положение очень часто, акселерометр также изменит базовые значения, которые я использую для измерения замедлений (например, когда ось Z перпендикулярна земле, она будет измерять 1 г, но под другим углом она будет показывать другое значение), что делает мой код непригодным.Arduino Accelerometer: обнаружение торможения/торможения на велосипеде

Вот некоторые фрагменты из моего кода:

/* Set up thresholds - 0.42g is maximum braking force the bike can do */ 
maximum_value = 0.7; 
soft_braking = 0.4 * maximum_value; 
strong_braking = 0.6 * maximum_value; 

if(val > strong_braking) 
        { 
         analogWrite(ledPin, 255); 
        } 
        else if(acc > soft_braking) 
        { 
         analogWrite(ledPin, 127); 
        } 

* Допустим ускорение по оси я использую для измерения замедления (после некоторой скользящей средней фильтрации).

Как я могу надежно вычислить замедление, учитывая, что оборудование не имеет фиксированного положения относительно рамы велосипеда, а также на показания влияет угол местности? Я рассматриваю возможность использования платы 6DOF (например, MPU6050) с гироскопом и постоянно измеряю угол платы и корректировать значения ускорений на основе этого, но я не знаю, какую математику я должен использовать для этого? Кто-нибудь имел такую ​​же проблему или может направить меня на какой-то подобный проект?

ответ

2

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

Что касается монтажа на всаднике, я предлагаю пояс вокруг талии. Это находится недалеко от центра тяжести гонщика, и вы можете игнорировать ускоренные ускорения от всадника, двигающегося вставанием и т. Д.

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

Для математики, пусть g - ускорение силы тяжести, gb - ускорение/замедление велосипеда, а gx, gy, gz - измерения ускорения с устройства. Тогда по теореме Pytagorean, квадрат ускорения

дх^2 + Gy^2 + GZ^2 = г^2 + д.б.^2

гб = SQRT (дх^2 + Gy^2 + gz^2 - g^2)

+0

Спасибо за ответ, да, похоже, это работает лучше, по крайней мере, при статическом тестировании. Я поеду на тест-драйв в выходные, но теперь, из того, что я вижу, мне нужно подумать о лучшем способе фильтрации ударов (возможно, фильтр нижних частот вместо скользящего среднего), а также для калибровки датчика (странно после некоторого нажатия на базовое значение «gb» меняется, и если я сброшу плату arduino, она вернется к нормальному состоянию). – MichaelD

Смежные вопросы