|
Скорость и обработка сигналов 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 Другое)
Спасибо за советы!
|
| |
| |
| 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, Идея была взята с аналогичной машины, у моей конструкции некоторые недостатки, при движении задним ходом платформа поворачивается куда угодно, необходимо делать подруливание сервомеханизмом. А шарнир находится посредине платформы и нужна развесовка грузов если таковые имеются и соизмеримы с массой платформы. Из достоинств малый радиус разворота ну и энергопотребление.
Сообщение отредактировал Вячеслав - Понедельник, 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 |
| |
| |