Сервопривод и энкодер
- Войдите на сайт для отправки комментариев
Чт, 02/08/2018 - 20:13
Всем привет, новичек и хочу для начала энкодером покрутить сервопривод. Как подключить энкодер и сервопривод по отдельности научился (понял). А вот как в скетче связать положение сервопривода и ручки энкодера не могу сообразить. Поискал по интренту, ничего не нашел. Крутят только потенциометрами.
Энкодер сервопривод
ардуино
подскажите пожалуйст где раздобыть скетч?
подскажите пожалуйст где раздобыть скетч?
Написать - не вариант?
подскажите пожалуйст где раздобыть скетч?
«На море на океане есть остров, на том острове дуб стоит, под дубом сундук зарыт, в сундуке — заяц, в зайце — утка, в утке — яйцо, в яйце — нужный скетч».
«На море на океане есть остров, на том острове дуб стоит, под дубом сундук зарыт, в сундуке — заяц, в зайце — утка, в утке — яйцо, в яйце — нужный скетч».
Так, что ли?))))
Всем привет, новичек и хочу для начала энкодером покрутить сервопривод. Как подключить энкодер и сервопривод по отдельности научился (понял). А вот как в скетче связать положение сервопривода и ручки энкодера не могу сообразить. Поискал по интренту, ничего не нашел. Крутят только потенциометрами.
подскажите пожалуйст где раздобыть скетч?
Раздобыть можно здесь: http://arduino.ru/forumy/ishchu-ispolnitelya
Только, прежде, чем писать туда, Вы бы сформулировали поточнее, что именно Вы подразумеваете под словом "связать". И возможно ли в принципе осуществить то, что Вы задумали. Ведь не просто так "Крутят только потенциометрами".
И какой из 150 вариантов следует выбрать?
Энкодэр - это дэвайс не имеющий понятия "положение ручки"
Его выходные "понятия" это направление и скорость вращения.
Энкодэром лучше крутить шаговик.
Там вообще процессор не нужен если у вас step-dir контроллер.
Я имею ввиду перевести энкодер в скетче так, чтобы его первым 180 "позициям" можно было присвоить угол поворота от 0 до 180 градусов, а все остальные градусы (позиции энкодера) были игнорированы.
У энкодера не первых позиций.
Вторых - тоже.
У энкодера не первых позиций.
Вторых - тоже.
Но, Вы можете самостоятельно назначить ему некие "позиции" и от них крутить серву.
Просто в момент запуска скетча считаете текущую позицию энкодера нулем, а её изменение право/влево, отслеживаете самостоятельно в переменной (+-) и, тупо ставите серву в текущую "позицию" этой переменной, пересчитывая её в угол места положения. Можно даже добавить кнопку "это ноль", нажатие на которую будет устанавливать серву (и переменную) в нулевое положение.
Не вижу ничего сложного (как у остальных писателей), как заменить резистор энкодером. :)
Но, Вы можете самостоятельно назначить ему некие "позиции" и от них крутить серву.
Просто в момент запуска скетча считаете текущую позицию энкодера нулем, а её изменение право/влево, отслеживаете самостоятельно в переменной (+-) и, тупо ставите серву в текущую "позицию" этой переменной, пересчитывая её в угол места положения. Можно даже добавить кнопку "это ноль", нажатие на которую будет устанавливать серву (и переменную) в нулевое положение.
Не вижу ничего сложного (как у остальных писателей), как заменить резистор энкодером. :)
Пусть для определенности 1 шаг - 18 градусов.
Какой сигнал надо подать на серву, если энкодер зафиксировал один шаг по часовой?
Сложность здесь - принципиальная: интеграл можно вычислить лишь с точностью до константы.
andriano, я понимаю что Вы уже давно не "читатель". ТС прямо указал 180 делений вправо и столько же влево, т.е. по 1* на щелчок энкодера. Что сложного-то?
Собственно и все. В переменной имитируем "резистор", изменяя его значения на величину смещения энкодера. Делов-то.
P.S. Для "дурошлепов": код приведен исключительно как образец имитации резистора энкодером. Конечно же он - не рабочий. Для подумать, а не с3.14дить. :)
Arhat109-2, спасибо за правильные мысли! Буду пробовать это осуществить...если полчится, выставлю сюда рабочий скетч.
Архат, если серва находится в положении 90 градусов, то требуется перевести ее в положение 91 градус, а если в положении 60 градусов - то в положение 61. Ваш же код из любого положения переводит серву в положение 1 градус. Это совершенно не то же самое.
Строка 26, написана явно не для ВАС, andriano. :)
Строка 26, написана явно не для ВАС, andriano. :)
Андриано, тащемта, прав: при включении дуньки чему у вас равен posEncoder, ась? Правильный ответ, судя по скетчу - 0. А если серва при включении питалова стоит в положении 90 градусов, ась?
Я, конечно, понимаю, что сейчас начнутся жёсткие отбуцкивания вида "для идиотов поясняю, что надо на старте гнать серву в нулевое положение", или "в EEPROM пишем положение сервы", или "ну это уже не ко мне - пусть тот, кто задал вопрос, и додумывает", но - Андриано, тащемта, прав: код не отвечает требованиям.
Код приведен исключительно как ОБРАЗЕЦ на подумать. Как будет синхронизироваться положение сервы и переменной в коде - тут просто не указано. Об этом написано в самом верху пример: "не вдаваясь в детали работы энкодера и настройку сервы"
Выделил для нечитателей..
P.S. И ещё напомню всем чукчам в танке: мне не интересно следить за вашими ляпами в темах, поэтому ожидать напоминаний от меня Вам о них - будет ошибкой. Но, те кто тщательно следит за таковыми .. могут взять эти посты "себе на вооружение" в дальнейшем. :)
Архат - красавчик, полностью соответствует ожиданиям: если я написал, что он отбрыкается - он таки отбрыкался. Правильно, на минном поле надо быть осторожным :)
Да читать надо вдумчиво, а не торопиться постить фигню "о, я у Архата нарыл косяк" .. дурни беспонтовые.. :)
Да читать надо вдумчиво, а не торопиться постить фигню "о, я у Архата нарыл косяк" .. дурни беспонтовые.. :)
Да там тех косяков - что на гуталиновой фабрике, смысл в том г-не рыться-то? Тебе, хитрожопому, ссы в глаза - всё божья роса. Вы там с логиком, случайно, не бахаетесь по вечерам?
Лоханулся, так обтекай смирно, не разбрызгивай, дятел.
Лоханулся, так обтекай смирно, не разбрызгивай, дятел.
Сказал убогий в зеркало :)
Код приведен исключительно как ОБРАЗЕЦ на подумать. Как будет синхронизироваться положение сервы и переменной в коде - тут просто не указано. Об этом написано в самом верху пример: "не вдаваясь в детали работы энкодера и настройку сервы"
В: Как избежать травм при падении?
О: Нужно подстелить соломку в том месте, где упадешь.
В: А как узнать, где упадешь?
О: Ну, это уже детали реализации...
Не следует относить прнинципиально неразрешимые проблемы к деталям реализации.
Что там "принципиально неразрешимого" для Вас, сидящих в лужах? Откройтен секрет полишинеля.. :)
Ещё раз: код приведен КАК ПРИМЕР имитации резистора в переменной .. всего лишь. Об чем там и написано ПО-РУССКИ (надо было как-то ишо?)
Вам ещё и разжевать как синхронизировать значение переменной с реальным положением сервы в пространстве?!? ну .. ваще..
Вам ещё и разжевать как синхронизировать значение переменной с реальным положением сервы в пространстве?!? ну .. ваще..
Вот в этом и разница между потенциометром и энкодером, что для потенциометра проблемы синхронизации нет.
Бли-и-ин .. ну ваще, в отпаде. Ловите.
2(ДВЕ!) строчки кода. Самый примитивный вариант, ваша "неразрешимая задача". Ну Вы даете.. ;)
Панеслось!
Хорошо, что я вчера попкорном затарился.
Не протух ещё, попкорн-то? :)
Бли-и-ин .. ну ваще, в отпаде. Ловите.
2(ДВЕ!) строчки кода. Самый примитивный вариант, ваша "неразрешимая задача". Ну Вы даете.. ;)
Архат, Вы меня просто умиляете.
Не нужно устанавливать серву в 0. Нужно сдвинуть ее на 1 градус от текущего положения.
andriano, перечитайте ТС-а с самого начала. И вопрос что нужно, а что нет - у Вас отпадет. Есть 2 момента в его задаче:
1. Двигать серву энкодером = насколько повернул энкодер, настолько градусов ушла серва от текущего положения. Прекрасно решается строкой 26, на которую указал Вам раньше, но Вы - явно не поняли в ней НИЧЕГО. Там как раз ответ на ваш вопрос: серва (и переменная) стоят в 60* энкодер выдал +2 .. поворачиваем к 62*.
2. Начальная установка позиции. Решение и банальное. Привести серву И переменную в соответствие. Приведено выше. Дальше они изменяются СИНХРОННО, согласно коду. Как правило, начальную установку производят в блоке setup() на Ардуино. Но, никто не мешает реализовать вызов, скажем по кнопке "заново" ..
Как догадываюсь, что допереть до совмещения п.1 и п.2 в рамках задачи ТС-а у вас так и не хватило тяму .. перечитывайте, не позорьтесь. :)
Arhat109-2, читаем ТС дословно: " А вот как в скетче связать положение сервопривода и ручки энкодера не могу сообразить. Поискал по интренту, ничего не нашел. Крутят только потенциометрами."
Вот имеется у нас такой потенциометр. Со шкалой.
Ну, для простоты, пусть точно так же выглядит и серва - тоже со шкалой.
Поворачиваем потенциометр на отметку "20" - серва поворачивается на отметку "20".
Поворачиваем потенциометр на отметку "70" - серва поворачивается на отметку "70".
Теперь, внимаение: выключаем питание.
Поворачиваем потенциометр на отметку "40", а серва не поворачивается - питания то нет!
Теперь включаем питание.
Потенциометр не трогаем - он у нас стоит на "40", а серва со значения "70" переходит в положение "40".
Вот это и называется "связать положение сервопривода и ручки энкодера".
Именно поэтому и "Крутят только потенциометрами". Потому как энкодер на такое не способен.
Будете спорить?
Будете спорить?
Обязательно, иначе что это за архат? :)
Будете спорить?
Обязательно, иначе что это за архат? :)
Не. не буду. С дураком спорить, сам таковым станешь. А вас тут и так как собак нерезанных, целая свора .. меж собой, плиз. ТС уже давно все понял и сделал как надо.
Будете спорить?
Обязательно, иначе что это за архат? :)
Не. не буду. С дураком спорить, сам таковым станешь.
Стареет наш дурилка-то, сдувается быстро :) Видимо, подгузники уже не держат такого кол-ва обсёров за короткие промежутки времени :)
Тоже такая проблема, но я всё-таки придумал как её исправить. Например:
я хочу управлять двигателем через L298N, и ещё 2 сервами.
Воспользовался библиотекой гайвера.
Спасибо добрый человек.