ADXL345 для обнаружения внезапных и значительных изменений ускорения

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

Я использовал сенсорный тест Adafruit ADXL345 из библиотеки, но не знаю, как его запрограммировать так, чтобы показания появлялись только при резком и значительном изменении ускорения в любом направлении x/y/z.

Есть советы, как это сделать?

, 👍-1

Обсуждение

так же, как вы закодировали бы его так, чтобы чтение появлялось только при нажатии кнопки, @jsotola


1 ответ


0

Создайте корпус для Arduino и датчика таким образом, чтобы можно оставить подключенным USB-кабель, соединяющий Arduino с компьютером. Затем запустите приведенный в качестве примера скетч для тестирования сенсора с библиотеки и просмотрите (или, что еще лучше, запишите) данные об ускорении.

Теперь переверните корпус, встряхните его, ударьте по нему, бросьте на заземление... все это время контролируя выход датчика. Я рекомендую вам постройте кривые ускорения: это должно прояснить ситуацию. Что Вы видеть? Можете ли вы сказать разницу между падением корпуса на пол и другие формы тряски, просто глядя на выходные данные? Как отличить? Это величина ускорения или это скорость изменения? Если вы думаете, что скорость изменения больше релевантно, затем измените скетч, чтобы также распечатать эту скорость изменение. В любом случае, можете ли вы найти порог величины (или скорости изменения) ускорения, которое можно было бы использовать для различения падение и другие формы движения? Если да, запишите это.

Я задаю все вышеперечисленные вопросы, чтобы показать вам путь к решению вашей проблема. Цель состоит не только в том, чтобы вы сделали всю работу: я не есть ответы на эти вопросы, и вам действительно придется делать все эту работу самостоятельно.

Вы должны быть в состоянии придумать критерий формы: объект отбрасывается, если такая функция измеренного ускорения выше чем такой порог. Функция, вероятно, будет либо евклидовой норма ускорения или евклидова норма его производной по времени (I не могу сказать, что лучше). Теперь закодируйте функцию в своем скетче, затем вы можете написать что-то вроде:

if (computed_criterion >= drop_threshold) {
    signal_that_the_object_has_been_dropped();
}
,