Скорость и обработка сигналов Arduino - ФОРУМ ДВ Робот dvrobot.ru
Суббота, 15.12.2018, 04:03
Главная Мой профиль Регистрация Выход
  • НАШ МАГАЗИН
  • Вы вошли как Гость | Группа "Гости"Приветствую Вас, Гость
    [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Модератор форума: Serg, GRACH  
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Arduino - вопросы и ответы. » Скорость и обработка сигналов Arduino
    Скорость и обработка сигналов Arduino
    ВячеславДата: Воскресенье, 05.01.2014, 01:13 | Сообщение # 1
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 13
    Репутация: 20
    Статус: Offline
    Здравствуйте!
    Для изучения основ робототехники построена шарнирно-сочлененная механизированная платформа.
     

    Впереди стоит курсовой ИК датчик,платформа едет прямо, при обнаружении препятствия платформа поворачивала налево, препятствия нет едет прямо. Все работает идеально.
     Решил расширить видимость платформы и поставил ИК датчик на шаговый двигатель который вращался туда-обратно на угол 60-80 градусов. Получился  как бы радар или сканер. Но сигнал от ИК стал долго обрабатываться. Что бы платформа повернула налево сигнал должен быть продолжительным, порядка  2с. и что бы платформа после поворота ехала прямо сигнал с ИК должен отсутствовать тоже около 2с.
      
    Вот видос


    Вот скетч

    int IN1 = 2;
    int IN2 = 4;
    int IN3 = 7;
    int IN4 = 8;
    int KNOPKA = 11;
    #include <Stepper.h>

    const int stepsPerRevolution = 200; 

    Stepper myStepper(stepsPerRevolution, 3,5,6,9);
    void setup()
    {myStepper.setSpeed(80);
    pinMode (KNOPKA, INPUT); 
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);
    }
    void loop()
    {
      
      if (digitalRead(KNOPKA)==HIGH){
    digitalWrite(IN1,LOW);// Машина вперед
    digitalWrite(IN2,HIGH);
    digitalWrite(IN3,LOW);
    digitalWrite(IN4,HIGH);
    }
    else
    {
    digitalWrite(IN1,LOW);//Машина вправо
    digitalWrite(IN2,HIGH);
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4,LOW);
    } myStepper.step(stepsPerRevolution*2);
      myStepper.step(-stepsPerRevolution*2);
    }

    Подскажите где засада?

    Из предпринятого мной
    1 ставил порты управления ходовыми двигателями в пины с ШИМ, управление  ШД в простые и наоборот.
    2 изменял расположение строк в скетче )
    3 отключал питание ШД ничего не изменилось.

    Предполагаю
    1 Ардуино  не справляется с потоком информации
    2 Написать более грамотный скетч
    3 Другое)

    Спасибо за советы!
    Прикрепления: 6094583.jpg(297.0 Kb) · 0209575.jpg(206.1 Kb) · 2990264.jpg(226.8 Kb)
     
    loriДата: Воскресенье, 05.01.2014, 08:56 | Сообщение # 2
    12 Вольт
    Группа: Пользователи
    Сообщений: 108
    Репутация: 20
    Статус: Offline
    Вячеслав, думается мне, что вы изначально используете не совсем тот датчик. Рекомендую поменять на:
    1. Ультразвуковой датчик 2.0 (ID:358-52)

    или на:
    2. ИК- дальномер 10-80 см (ID:589-60)

    Конечно при этом придется переписать скетч для вашей платформы
     
    GRACHДата: Воскресенье, 05.01.2014, 15:26 | Сообщение # 3
    dvrobot.ru
    Группа: Администраторы
    Сообщений: 111
    Репутация: 16181
    Статус: Offline
    Вячеслав, А мне конструкция платформы понравилась ! Она у вас 2WD Передний привод? Супер! На поворотах идет малый расход энергии и как следствие поворачивает платформа легче. Чего не скажешь о 4WD платформах у которых нет центрального шарнира как у вас.
     
    ВячеславДата: Понедельник, 06.01.2014, 00:00 | Сообщение # 4
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 13
    Репутация: 20
    Статус: Offline
    lori, Предложенные вами датчики имеют более широкие возможности, они позволяют измерять расстояние до объекта, для платформы важнее есть ли препятствие на заданном расстоянии или нет, цифрового сигнала достаточно, суть вопроса в том что система отлично работала без шагового двигателя. С введением в схему ШД обработка сигналов значительно замедлилась.

    Добавлено (06.01.2014, 00:00)
    ---------------------------------------------
    GRACH, Идея была взята с аналогичной машины, у моей конструкции некоторые  недостатки, при движении задним ходом платформа поворачивается куда угодно, необходимо делать подруливание сервомеханизмом. А шарнир находится посредине платформы и нужна развесовка грузов если таковые имеются и соизмеримы с массой платформы. Из достоинств малый радиус разворота ну и энергопотребление.
    Прикрепления: 1290843.jpg(134.6 Kb)


    Сообщение отредактировал Вячеслав - Понедельник, 06.01.2014, 00:05
     
    loriДата: Понедельник, 06.01.2014, 17:28 | Сообщение # 5
    12 Вольт
    Группа: Пользователи
    Сообщений: 108
    Репутация: 20
    Статус: Offline
    Вячеслав, хорошо, соглашусь с тем, что использованного вами датчика достаточно.
    Тогда такие соображения - судя по скетчу ваша машинка постоянно поворачивает шаговый двигатель при этом угол под которым в конкретный момент времени происходит сканирование пространства никак не привязан к углу поворота шаговиком датчика, это подтверждает и выложенное вами видео. Предложение такое: на каждом шаге поворота шаговика мерить расстояние и в соответствии с полученными данными принимать решение о повороте. А сейчас, у вас выходит так, что сначала (когда датчик направлен прямо) и впереди препятствие, программа принимает решение повернуть, но в следующий момент (когда датчик повернут) датчик не видит препятствия и снова дается команда на движение вперед, платформа продолжает двигаться прямо, так происходит до того момента, пока машинка не приблизится к препятствию до того расстояния на котором датчик в нескольких положениях поворота шаговика не станет показывать препятствие, отсюда и впечатление, что время сканирования увеличилось. Здесь не нужно забывать о специфики отраженного сигнала (угол падения равен углу отражения), а так же об инерционности механики по сравнению со скоростью обработки данных программой.
    В общем так, алгоритм должен быть такой: поворачиваем на один шаг двигатель, замеряем расстояние, принимаем решение, затем все сначала. Каждому шагу должен соответствовать один замер. А у вас сейчас не так.
     
    ВячеславДата: Понедельник, 06.01.2014, 23:34 | Сообщение # 6
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 13
    Репутация: 20
    Статус: Offline



    Вот вам два кинофильма, на первом датчик снят с ШД препятствие создается рукой, поворачивается только левое колесо оно и в кадре. Препятствие появилось датчик сработал система "немного" подумала и совершила поворот, препятствие исчезло датчик отключился "опять подумала" продолжила ехать прямо.
    На втором кино из скетча было удалено все что связано с ШД и видно что поворот и движение прямо отрабатывается мгновенно.
     
    SergДата: Понедельник, 06.01.2014, 23:36 | Сообщение # 7
    Ампер
    Группа: Модераторы
    Сообщений: 510
    Репутация: 28
    Статус: Offline
    Попробуйте другую библиотеку для шагового двигателя. А лучше- используйте прерывания.
     
    loriДата: Вторник, 07.01.2014, 08:28 | Сообщение # 8
    12 Вольт
    Группа: Пользователи
    Сообщений: 108
    Репутация: 20
    Статус: Offline
    Да уж, весьма странная ситуация, нужно подумать.
    Значит, скорее всего это программные подтормаживания, и скорее всего, как пишет Serg из за библиотеки. Для того чтобы точно убедиться попробуйте поставить в программе метки, например, проще всего, выдача в порт какого либо символа (или даже данных полученных в ходе работы программы), подключите arduino к ПК и понаблюдайте через монитор порта что и когда программа выдает в порт. Можно поставить несколько меток с выдачей разных символов в ключевых местах программы. Этот метод диагностики, конечно, не самый лучший, но самый простой, не требует дополнительных аппаратных средств, не требует грубого вмешательства в скетч, и при практически полном отсутствии диагностических средств в IDE дает достаточно быстро сориентироваться в каком месте программы могут возникать ошибки.


    Сообщение отредактировал lori - Вторник, 07.01.2014, 08:40
     
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Arduino - вопросы и ответы. » Скорость и обработка сигналов Arduino
    • Страница 1 из 1
    • 1
    Поиск:

    ДВ Робот - Чат