Управление сервами и моторами джойстиком Playstation
- Войдите на сайт для отправки комментариев
Втр, 19/07/2016 - 20:11
Появилась идея механизировать lego technics, но стандартные наборы жутко дорогие, а пульты ни о чем. Если взять ардуино и подключить джойстик от ps2 то можно ли будет подключить два простых моторчика 9v для управления гусеницами экскаватора и 6-8 сервоприводов для открытия/закрытия клапанов пневмосистемы? Либо придётся докупать ещё какие-то платы или контроллеры? Насколько сложно будет написать программу?
Выход Ардуино моторчик, даже самый маленький, не потянет.
Сложно ли написать программу?
Смотря какая программа и кто будет писать...
Помимо ардуино еще потребуется драйвер двигателей (подбирается в зависимости от используемых двигателей). Сервы запитывайте отдельно от ардуино. Совет: сначала поэкспериментируйте с джойстиком, в библиотеке ps2x есть пример использования с выводом в монитор порта.
Сервоприводы отдельно это понятно, драйвер мотора есть компактный на 2 мотора? И вопрос именно в том хватит ли пинов ардуино нано чтоб подключить джойстик два движка и 6 сервоприводов?
Двигатели простые 9в
Подключение серв - 6 выходов (ШИМ), джойстика - еще 6, драйвера типа L298N - еще 6 (2 из них ШИМ), итого 18. Выводов ШИМ вам не хватит. Как вариант, обратите на такую платку для серв. По двигателям: при выборе драйвера учитывают не только вольтаж, но и ампераж.
Большое спасибо, щас более-менее понятно всё по железкам, как придёт посылок буду разбираться с программкой
Для серв ШИМ не нужен. Драйверу двигателя достаточно 4-х контактов. И вообще, я бы поостерегся слушать советы человека, который напряжение называет вольтажом, а силу тока - амперажом.
А если взять бесколлекторный двигатель с регулятором оборотов, то им можно управлять просто шим сигналом?
А как сервами можно управлять без шим?
Встречный вопрос: а как сервами можно управлять с ШИМ?
Для серв ШИМ не нужен.
Вот это новость, т.е. все что у меня работает - работать не должно, а библиотеку servo.h написали чтобы всех ввести в заблуждение.
А пост:
http://arduino.ru/forum/obshchii/prezhde-chem-sprosit-pro-servomashinku-...
вообще непонятно зачем опубликован
давно для ардуины изобрели I2C - PWM контроллеры. на ардуине используешь I2C (выводы SDL, SCA) и нагружаешь до 16 сервоприводов на один контроллер.
выйдет чуть дороже, чем обычный двигатель, но зато действительно управляться будет просто ШИМ и его можно также повесить на I2C-PWM контроллер, т.е. на ардуине задействуется только два вывода, а в нагрузке будет 16 устройств
Для серв ШИМ не нужен.
Вот это новость, т.е. все что у меня работает - работать не должно, а библиотеку servo.h написали чтобы всех ввести в заблуждение.
А пост:
http://arduino.ru/forum/obshchii/prezhde-chem-sprosit-pro-servomashinku-servo-posmotri-tut
вообще непонятно зачем опубликован
И где в этом посте упоминается ШИМ?
Я его внимательно прочитал. Второй раз перечитывать не стал - поручл поиск Файерфоксу, результат, первое упоминание ШИМ лишь в 17 посте темы. В 0-м посте темы о ШИМ нет ни слова.
Или, может, мы живем на разных плангетах и Интернеты у нас разные?
PS. По хорошему, ссылки надо давать не на форум, а на дэйташит сервы, т.к. на форуме (как и в среднем по Интернету) найти можно все что угодно.
PPS. А что именно у Вас работает, я, честно говоря, не знаю - хрустальный шар на профилактике.
PPPS. Не поленился и заглянул в исходноки библиотеки servo для avr. Так вот, ШИМ там не используется. Чудес не бывает.
Ладно, давайте зайдем с другой стороны. Расскажите мне пожалуйста, как происходит управление углом поворота однооборотного сервопривода. По моему глубокому убеждению угол поворота прямо-пропорционально связан с длительностью импульса подаваемого по каналу управления. Как правило длительность импульса находится в диапазоне от 800 до 1800 мкс. Т.е. передаваемое значение "кодируется" в ширине передаваемого импульса, при этом период следования импульсов постоянен. Поэтому этот метод передачи называется широтно-импульсной модуляцией. Вот именно так это уложено в моей голове и я был честно говоря обескуражен, когда увидел Ваш пост, что для управления сервой ШИМ не нужен (пост 6)
kasper007, я бы назвал диапразон длительностей чуть пошире, но это не важно. Важно то, что для установки сервы в некоторое положение, ей нужен ОДИН импульс, ни о каком периоде следования речи нет.
Другое дело, что установленная в определенное положение серва далее предоставлена самой себе, и если мы захотим руками (или грузом) повернуть ее на какой-то другой угол, нам удастся это без каких либо проблем. Т.е. серва получила сигнал, повернулась и обо всем забыла.
Вот если мы хотим, чтобы серва "помнила" заданное положение (отслеживала его - при отклонениях возвращала обратно), нам надо время от времени напоминать ей. Например, периодически подавать на нее "напоминающие" импульсы. Собственно, именно это и сделано в библиотеке servo.
Ничего общего с ШИМ указанный алгоритм не имеет. Более того, сама идея существенно противоречит основной идее ШИМ - обеспечивать _фиксированную_ скважность, пропорциональную модулируемому сигналу. В случае управления сервой скважность нас вообще не интересует. И поддерживать ее не нужно. Нужно лишь выдерживать длительность управляющего импульса, период же следования импульсов может быть любым. В частности, "напоминающее" воздействие вообще может быть непериодическим.
Это первое соображение, почему не следует называть управляющий сигнал для сервы ШИМом - теоретическое.
Теперь рассмотрим практический аспект. Применительно конкретно к Ардуине.
Вспомним, с чего все началось. А началось с 4-го поста в этой теме, на который я, собственно, и отвечал.
Так вот, повторяю еще раз: ШИМ для серв не нужен. Соответственно, сервы можно подключать к любым ногам, в том числе и не поддерживающим ШИМ. Т.е. количество ног Ардуины, поддерживающих ШИМ, не является ограничением для данного проекта. Ну и заодно уж конкретный факт: Ардуиновский ШИМ в библиотеке servo не используется. Хотя, честно говоря, даже если бы и использовался в конкретной библиотеке, это бы не говорило о том, что ШИМ как-то связан с сервами (а не с конкретной реализацией конкретной библиотеки).
выйдет чуть дороже, чем обычный двигатель, но зато действительно управляться будет просто ШИМ и его можно также повесить на I2C-PWM контроллер, т.е. на ардуине задействуется только два вывода, а в нагрузке будет 16 устройств
Тоесть регулятором оборотов можно управлять с того же контроллера что и сервоприводами?
[/quote] Тоесть регулятором оборотов можно управлять с того же контроллера что и сервоприводами?[/quote]
Совершенно верно. У меня получается управлять одновременно 3 бк моторами и одним сервоприводом. использую 4 порта на контроллере I2C-PWM, покупал на али:
http://ru.aliexpress.com/item/1pc-PCA9685-16-Channel-12-bit-PWM-Servo-motor-Driver-I2C-Module-For-Arduino-Robot-Worldwide/32614764717.html?detailNewVersion=
использует библиотеку: <Adafruit_PWMServoDriver.h>, очень хорошое есть описание в интернете, погуглите найдете.
Причем моторы у меня достаточно мощные, поэтому с контроллера I2C-PWM я беру лишь землю и управляющий сигнал, а + питания заведен непосредственно с АКБ.
Ну я как раз заказал её, нано, и сервоприводы, как придёт буду разбираться. Спасибо всем за помощь, думаю в следующий раз буду писать уже в програмировании если не разберусь.
Вот пример для бк мотора посредством этой платы. Плавно увеличивает скорость вращения в одну сторону, затем в другую.
Для серво будет тоже самое, только убрать калибровку нуля, для сервы она не нужна и точно выставить пределы.
Если Вы считаете джойстиком это http://www.parkflyer.ru/ru/blogs/view_entry/3131/ то я такой использую. Некоторые просто весь пульт ps2 джойстиком называют. Управляю сервой по одной оси и движком линейного привода по другой. Джойстик не понравился, по центру большая "мертвая" зона, зона регулировки маленькая. Ввод положения через analogRead(), среднее положение немножко корректирую, введеное значение линейно преобразую в величину от 0 до 10. Если вопросы есть - пишите.
Нет, я как раз хочу именно весь пульт. Было бы интересно посмотреть пример скетча где показано что при поступлении сигнала от приёмника пульта сервами такая то поворачиваешься на столько то градусов, а при поступлении другого сигнала мотор начинает вращаться с такой то скоростью. А сигналы с приёмника если я правильно понял можно посмотреть через монитор порта и к ним уже привязать действия. И ещё хотелось бы чтоб серва поворачивалась медленно и потом уже по месту подбирать насколько медленно чтоб было удобно управлять потому что игрушкой рулить будет сын.
А поиск не?
http://www.billporter.info/2010/06/05/playstation-2-controller-arduino-l...