Код для сервы MG 996R, работающей от датчика движения
- Войдите на сайт для отправки комментариев
Чт, 17/03/2022 - 14:22
Хотелось бы сделать так, чтобы серва крутилась только в одну сторону при засечении движения.
Сейчас она крутится вообще все время.
Код ниже.
Что в нем не так?
Причина скорее всего не в датчике движения. Проверил на 2-х датчиках.
В коде же есть HIGH и LOW для servoPin.
Почему тогда серво крутится постоянно?
В коде же есть HIGH и LOW для servoPin.
Для чего?
Господи! Неужели реально всех в гугле забанили???
https://coolcode.ru/arduino-upravlenie-servoprivodom-na-primere-sg90/
В коде же есть HIGH и LOW для servoPin.
Чтобы подавать и убирать напражение на/с сервы.
Господи! Неужели реально всех в гугле забанили???
https://coolcode.ru/arduino-upravlenie-servoprivodom-na-primere-sg90/
Ну да, это то же самое, что я закомментил в строки 53 - 60.
Так тоже пробовал.
Вот:
Здесь серво крутится по и против часовой стрелки и никак не реагирует на сигналы с датчика движения.
Чтобы подавать и убирать напражение на/с сервы.
а нахрена? Вы явно вообще не понимаете, как работает серва.
серво крутится по и против часовой стрелки и никак не реагирует на сигналы с датчика движения.
и тут тоже самое - вы вообще не понимаете, как управлять сервой. Именно поэтому код выше не работает - вместо того чтоб по сигналу датчика поворачивать серву на разный угол - вы зачем-то подаете или выключаете напряжение на ней.
Запомните, сервы НЕ УПРАВЛЯЮТСЯ НАПРЯЖЕНИЕМ!!
Запомните, сервы НЕ УПРАВЛЯЮТСЯ НАПРЯЖЕНИЕМ!!
пневматическая что ли, али гидравлическая?
и тут тоже самое - вы вообще не понимаете, как управлять сервой. Именно поэтому код выше не работает - вместо того чтоб по сигналу датчика поворачивать серву на разный угол - вы зачем-то подаете или выключаете напряжение на ней.
Запомните, сервы НЕ УПРАВЛЯЮТСЯ НАПРЯЖЕНИЕМ!!
Да, поменял код. Серва крутится против часовой стрелки. Это так и надо. Но почему-то очень медленно. Это особенность MG 996R 360 или что? По часовой крутится быстрее. Как сделать так, чтобы против часовой стрелки серва тоже быстро вращалась?
Вот код:
покажите весь код
Как мне помнится - серва 360 отличается от обычной тем, что цифирь во write() задаёт не градус поворота, а скорость и направление вращения. Отсюда и делайте выводы - как ускорить и как остановить.
Добавил функцию. Сейчас быстро крутится против часовой стрелки.
Но при засечении движения вначале идет откат назад: движение по часовой стрелке - и только потом начинается движение против часовой стрелки.
Как можно убрать движение по часовой стрелке?
И если датчик не засекает движение, серва все равно продолжает крутиться. Хотя и медленнее.
Как ее можно остановить?
Вот снял на телефон
https://drive.google.com/file/d/1wV9qqQLHiWOzCaTzQccmIYUD5CpHNxU9/view?usp=sharing
Добавил функцию. Сейчас быстро крутится против часовой стрелки.
Но при засечении движения вначале идет откат назад: движение по часовой стрелке - и только потом начинается движение против часовой стрелки.
Как можно убрать движение по часовой стрелке?
И если датчик не засекает движение, серва все равно продолжает крутиться. Хотя и медленнее.
Как ее можно остановить?
Вот снял на телефон
https://drive.google.com/file/d/1wV9qqQLHiWOzCaTzQccmIYUD5CpHNxU9/view?usp=sharing
Все эти вопросы следует разделить на три группы:
1. Какого поведения Вы хотите добиться от сервы?
2. Какие сигналы надо подавать, чтобы серва вела себя так, как нужно?
3. Как заставить МК подавать на серву нужные сигналы?
По сути дела к Ардуино здесь имеют отношения только вопросы группы 3.
Поэтому могу посоветовать для начала самостоятельно подробно расписать ответы на группы 1 и 2.
1. Какого поведения Вы хотите добиться от сервы?
Движение против часовой стрелки на полный оборот (360 градусов) при срабатывании датчика движения.
И остановка, если датчик движения ничего не засекает.
1. Какого поведения Вы хотите добиться от сервы?
Движение против часовой стрелки на полный оборот (360 градусов) при срабатывании датчика движения.
И остановка, если датчик движения ничего не засекает.
Если серва срабатывает от датчика движения, при чем здесь Ардуина?
Как такой вариант?
Прописал attach и detach для сервы в цикле.
Сейчас останавливается, если датчик движения не срабатывает.
Правда отказ по часовой пока остался..
Если серва срабатывает от датчика движения, при чем здесь Ардуина?
То есть покапаться в настройках датчика? Оранжевые подстроечные резисторы?
Мне кажется, его надо как-то выровнять на 0. То есть он откатывается на 0 или что-то в этом роде..
Подскажите пож-та ссылку на ролик Youtube, кто знает
Если серва срабатывает от датчика движения, при чем здесь Ардуина?
То есть покапаться в настройках датчика? Оранжевые подстроечные резисторы?
Нет.
Сначала грамотно сформулировать задачу.
1. Какого поведения Вы хотите добиться от сервы?
Движение против часовой стрелки на полный оборот (360 градусов) при срабатывании датчика движения.
И остановка, если датчик движения ничего не засекает.
я не пойму, отчего вы все - новички - боитесь лишнее слово сказать? Опасаетесь ляпнуть глупость и хотите казаться умнее? -бестолку!!, на этом форуме это не поможет, у нас тут слова "новичок" и "идиот" - тождественны.
Теперь к сути. Того, что вы написали выше - недостаточно. Допустим, серва повернулась на 360 при срабатывании датчика. Что она делает дальше? Остается в этом положении (360)? Откатывается назад на ноль?
Если первое - осталась на 360- что будет при следующем сигнале от датчика? - повернется еще на 360 с итоговым положением 720?
Если второе - возвращается на наль - то как быстро?
ну и так далее в том же стиле описывайте ВСЮ СВОЮ ПРОГРАММУ
Нет.
Сначала грамотно сформулировать задачу.
1. Какого поведения Вы хотите добиться от сервы?
Движение против часовой стрелки при срабатывании датчика движения. Движение в течение 5 секунд.
И потом через 5 секунд остановка, если датчик движения ничего не засекает.
Без откатов на 0 градусов. Просто остановка через 5 секунд.
Потом, если датчик засекает движение, снова движение против часовой в течение 5 секунд и так далее по кругу.
Если второе - возвращается на наль - то как быстро?
ну и так далее в том же стиле описывайте ВСЮ СВОЮ ПРОГРАММУ
2. Какие сигналы надо подавать, чтобы серва вела себя так, как нужно?
3. Как заставить МК подавать на серву нужные сигналы?
Тут нужно вместо 360 градусов и/или 10 расчитать значения?
Так поставьте флаг на то, что серва уже повернулась. Снимите его, когда датчик будет неактивен (или через 5 сек., но тогда уберите delay из программы)
- задать движение против часовой стрелки. Только вот на сколько градусов, если крутиться будет 5 секунд? То есть это нужно опытным путем расчитать, на сколько градусов поворачивается серва за 5 секунд и это значение проставить? И тогда не будет отката назад?
то выбирать следует не серву, а электромотор.
Я бы выбрал специальный электромотор - шаговый
то выбирать следует не серву, а электромотор.
Я бы выбрал специальный электромотор - шаговый
А какая разница, если нужно только 5 секунд и только в одну сторону?
Так поставьте флаг на то, что серва уже повернулась. Снимите его, когда датчик будет неактивен (или через 5 сек., но тогда уберите delay из программы)
И как это поможет убрать откат назад? Не совсем понимаю. Объясните пож-та.
Я бы выбрал специальный электромотор - шаговый
А разве нельзя просто градусы увеличить?
Например, если полный оборот 360 градусов серва делает за секунду, то 360 x 5 = 1800 градусов и будет 5 секунд или нет?