Как правильно подключить концевик?
- Войдите на сайт для отправки комментариев
Пнд, 31/07/2017 - 23:18
Добрый день, уважаемые форумчане!
Необходимо подключить механический концевой выключатель к arduino Uno.
Модель: YL-99
Информацию об этом концевике нашел только на этом сайте: тык
Была на нём найдена и схема подключения. Только там, кажется, номера пинов перепутаны? И почему на VCC поставлен диод и резисто на 10кОм? Чтобы на источник питания не уходили наводки?
Читал про разные концевики, но где-то встроенные резисторы есть, где-то нет.. Вот решил спросить у знающих людей.
Читал про разные концевики, но где-то встроенные резисторы есть, где-то нет.. Вот решил спросить у знающих людей.
ты желаешь, что тебе сюда процитировали террабайты информации обо всех концевиках в этой Вселенной?
концевой выключатель
я их всегда подключаю как кнопку с наружной или внутренней подтяжкой и обрабатываю как кнопку.
я их всегда подключаю как кнопку с наружной или внутренней подтяжкой и обрабатываю как кнопку.
vvadim, спасибо большое! Так и попробую сделать.
я их всегда подключаю как кнопку с наружной или внутренней подтяжкой и обрабатываю как кнопку.
vvadim, спасибо большое! Так и попробую сделать.
забрал в тупизмы #45
я их всегда подключаю как кнопку с наружной или внутренней подтяжкой и обрабатываю как кнопку.
можно как-то иначе?
Подключил - всё работает. Между vcc и gnd поставил резистор номиналом 10кОм.
Для управления шаговым двигателем использую драйвер L298N и билиотеку Stepper.h. Написал примитивный скетч для тестирования:
Проблема в том, что концевик срабатывает с опозданием, поэтому двигатель ломает конструкцию. Каким образом можно ускорить срабатывание концевика? Поставить резистор меньшего номинала? Если да, то какая сила тока должна подавать на пин для корректной работы? Или нужно изменить что-то в самом скетче?
Добавлю. Заметил, что на arduino UNO такой проблемы нет. Может быть дело в плате(arduino Mega)..
Да. У ней интеллекта больше, это она и ломает канструкцею.
Да. У ней интеллекта больше, это она и ломает канструкцею.
Просто я её заказывал у китайцев, может быть они на ней сэкономили сильнее, чем на Uno. :)) Ну или я какие-то особенности Меги не знаю, которые тут проявляются..
Пробела решилась подавлением дребезга контактов при помощи задержек. Хорошая статья находится здесь: тык.
Подавлять с помощью задержек в условиях наличия задержек это мощьно. Вам нужно по первому тику дребезга останавливаться. Тут прерывание лучше подойдёт.
Подавлять с помощью задержек в условиях наличия задержек это мощьно. Вам нужно по первому тику дребезга останавливаться. Тут прерывание лучше подойдёт.
Я монтиторил значение входа. Выяснилось, что быстрые нажатия не учитывались(порт не менял состояние). Для того, чтобы состояние изменилось, необходимо было кнопку держать нажатой в течение прожолжительного времени.
Помогло вот это: "объявим процедуру debounce(), на вход которой мы подаём предыдущее состояние кнопки. Если нажатие кнопки длится более 5 мсек, значит это действительно нажатие. Определив нажатие, мы меняем состояние светодиода."
Теперь всё хорошо. Единственное, наверное, нужно будет код переписать без использования delay().
Подавлять с помощью задержек в условиях наличия задержек это мощьно. Вам нужно по первому тику дребезга останавливаться. Тут прерывание лучше подойдёт.
а, по последнему, что делать?
наверное, нужно будет код переписать без использования delay().
с этого и надо было начинать. Именно из-за наличия delay() в коде у вас концевик не отрабатывает вовремя. И пока вы delay() не уберете, проблемы не уйдут.
Выяснилось, что быстрые нажатия не учитывались(порт не менял состояние). Для того, чтобы состояние изменилось, необходимо было кнопку держать нажатой в течение прожолжительного времени.
не существует быстрых и медленных нажатий - выбрось из головы эту ересь.
библиотека для кнопки с казино и шлюхами - здесь #403
для исключения аварийных ситуаций как раз и предназначен механический концевой выключатель
выключатель! - в разрыв питания подключается, а не к контроллеру.
а, по последнему, что делать?
Да ничего не делать. Забить и забыть. Первый тик отработали - мотор остановили и ладно.
...... предназначен механический концевой выключатель
выключатель! - в разрыв питания подключается, а не к контроллеру.
Согласен. Вот только уточнить хочу, что разрывать питание надо вторым концевым выключателем надо. Иначе после разрыва никто никуда больше не поедет. Первый в процессор для сигнала. Второй аварийный, что бы не сломать.
Согласен. Вот только уточнить хочу, что разрывать питание надо вторым концевым выключателем надо. Иначе после разрыва никто никуда больше не поедет. Первый в процессор для сигнала. Второй аварийный, что бы не сломать.
ну, если по серьёзному, то у тебя должны быть энкодеры относительного положения что там у тебя двигается.
датчики крайнего положения
и аварийные концевики.
работать будет как в принтере: при включении питания всё двигается в крайние положения и останавливается при срабатывании датчиков крайнего положения, значения энкодеров обнуляются, далее - согласно программе...
Большое спасибо всем, кто помог советом! Простите пожалуйста моё незнание.
Особенно полезной для меня была информация написанная vvadim. Наверное, она очевидная, но именно отталкиваясь от неё удалось найти причину проблемы и её решение. Для решения проблемы подошёл способ, который был описан на сайте, указанным мной в посте #8. После этого программа совершенно адекватно обрабатывает нажатия - никакая плата не ломает конструкцию из-за своего интеллекта. :))
Изначально я подключал концевик через резистор номиналом 10кОм, считывал значение порта и работал с этой информацией. Пробовал подключать прямо к плате - результат одинаковый. Функция delay() добавилась позже - из способа, который помог. Корректному выполнению задачи delay() не мешает, но, наверное, нужно будет заменить её, чтобы не замораживала работу всей программмы.
Мне очень важно знать, когда сработал концевик. Если произвожу остановку двигателя через программу, то он останавливается вовремя, поэтому пока не буду концевик встраивать в цепь двигателя и платы.
Ещё раз всем большое спасибо!!!