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