Огонек, остановись!

Тема в разделе "Глядите, что я сделал", создана пользователем OldKryptos, 4 фев 2020.

  1. OldKryptos

    OldKryptos Гик

    Датчики положения, то еще развлечение. Данные шумят и плывут, математики много, а ведь в основном цикле Ардуино не только они крутятся, но и другие цацки, тоже желающие твоего внимания. Ни разу такого не было, чтобы: "Раз!", и все получилось. Но даже такой лентяй, как я, смог пару забавных устройств собрать на GY-61 и GY-521. Слава библиотекописателям!
    Очередной экзерсис на тему MPU 6050. План максимум - сделать автомат светоэффектов для модели-ракеты завязанный на датчики положения. Ну а минимум - сделать по возможности огонек "неподвижным". Это пожалуй, сложнее, чем сделать светящиеся надписи на крутящемся колесе, но почему бы не попробовать?
    IMG_3567-2.jpg IMG_3574.jpg IMG_3589.jpg IMG_3618.jpg IMG_3615.jpg

    Начал издалека - вытравил линейку для светодиодов, Стал паять... и понял, что лень. Заказал в сети бобину с тремя метрами подходящих светодиодов. Отрезал для песочницы 20 неопикселов. Накодил необходимый минимум функций для их работы. И уж после этого взялся за датчик. Ради расширения кругозора перескочил с библиотеки Kalman.h на MPU6050_6Axis_MotionApps20.h
    Логика такая:
    1) снимается показатель ускорения "aaReal", библиотечный метод - mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
    2) "aaReal" масштабируется в "а" м/c.кв ;
    3) расчет расстояния делаем по классической формуле равноускоренного движения: S = S̥ + V̥t + ½at², где S̥ - предыдущее положение огонька на линейке; V̥ - предыдущая скорость; а - ускорение; t = const время;
    4) расчет новой скорости V = V̥ + at;
    5) значение S переcчитываем в Sл согласно длине линейки ( 0 <= Sл <= 330 мм). Если S вне диапазона, то ее не кратный остаток перекидывается на противоположный конец линейки;
    6) далее бинарный поиск номера светодиода по значению Sл;
    7) если значение рядом с положением диода, то зеленый свет, если на диоде, то красный.



    Сразу оговорюсь, что в курсе, что формула не совсем подходящая. Потому что, движение не равноускоренное, это раз. Время вовсе не константа, это - два. В третьих, не учитываются угловые отклонения конструкции, то есть - нет компенсации по силе тяжести. Но решил начать с посильного. Дальше посмотрим, как пойдет.
     
    Последнее редактирование: 4 фев 2020
    Un_ka, sanik, Daniil и ещё 1-му нравится это.