Как измерить скорость и направление движения с помощью двух датчиков?
- Войдите на сайт для отправки комментариев
Задача такая. Есть два индуктивных датчика. А и Б. мимо них на некой скорости, с одинаковым расстоянием движутся металлические предметы. (детали цепи покрасчной линии на производстве)
Алгоритм работы устройства я представляю но не хватает знаний в программировании ардуины.
Механизм такой, если конечно так будет работать (??)
1) Оба датчика вешаем на пины для прерываний 2 и 3.
2) oбработчик прерывания int1 - срабатывает как на rising 2-го пина так на RISING 3-го пина. (PCINT?)
в прерывании int1:
2.1 если таймер не запущен - то запускаем таймер и не возвращаем ничего. запоминаем время, в которое было вызвано прерывание.
2.1 если таймер уже запущен - то останавливаем и возвращаем
время
, которое насчитал таймер/счетчик.
3) обработчик прерывания int2 - будет срабатывать только на RISING 2-го пина.
В нем сравниваем время когда был запущен int1 с временем когда был запущен int2. таким образом вычисляем направление. (если оони равны - то вперед, еслинет то назад.)
Вопросы собственно такие:
можно ли это реализовать именно так как я описал?
так ли работают таймеры?
как мне запускать\останавливать таймеры, брать из них значения, узнавать что таймер запущен?
А че так сложно-то? Попроще никак?
можно ли это реализовать именно так как я описал?
Можно, наверное, откуда ж нам знать? Например, я понятия не имею, возможна ли ситуация, когда следующая деталь доедет до первого датчика раньше, чем первая деталь доедет до второго датчика?
так ли работают таймеры?
Как "так"?
как мне запускать\останавливать таймеры, брать из них значения, узнавать что таймер запущен?
Ну, а как Вы это обычно делаете? Там, вроде, способов-то не так много.
Линия движется с космической скоростью? Я бы, для решения в лоб - посадил датчики на прерывания, без всяких таймеров - просто attachInterrupt. Деталь прошла первый датчик - смотрим, не прошла ли она раньше второй датчик, если прошла раньше - движение назад, если прошла позже - движение вперёд. То же самое по прерыванию на втором датчике, только наоборот. Пока на обоих датчиках не будет факта прохода - выводы не делать. Факт прохода через оба датчика зафиксирован - сбрасываем систему в исходное состояние.
Используя банальный millis() - всё реализуется.
Или я чего не понял?
Ещё проще (раз уж энкодер поставить нельзя, для определения направления вращения) - взять три датчика, разместив их на неравномерном расстоянии, например: 0м, 1м, 3м. Если временной график по факту прохода детали через все три датчика выглядит так: |_|__| - движение вперёд, если так: |__|_| - движение назад.
Я бы, пожалуй, расположил датчики так, чтобы учитываемый объект перекрывал оба. Потом как на энкодере: 10 - в одну сторону едем, 01 - в другую.
ну да, можно и так. что то я намудрил. линия идет со скоростью 1 датчик в 1-3 секунды.
я имею ввиду, таймер - это буфер, в котором лежит что то или это сам счетчик который этот буфер напоняет? тоесть можно ли таймер запускать/останавливать или с таймера можно только снимать данные и все что можно с ним делать это замедлять/ускорять
Ну, вы определитесь с потребностью... в AVR есть таймеры, которые можно запускать и останавливать. Wiring в ардуино сам стартует один из таймеров при начале исполнения прошивки, и сидя на нем, каждую миллисекунду увеличивает значение millis() на единицу. Так что можете и запускать/останавливать, а можете просто значение millis() откидывать в переменную при определенном событии.
я имею ввиду, таймер - это буфер, в котором лежит что то или это сам счетчик который этот буфер напоняет? тоесть можно ли таймер запускать/останавливать или с таймера можно только снимать данные и все что можно с ним делать это замедлять/ускорять
https://stavroskrest.ru/sites/default/files/files/books/chelpanov_logika.pdf
Особенно главу 11, по законы мышления.
Да не судете слишком парня :) А по поводу механизма, почитай про работу энкодера и тут нет смысла оба датчика вешать на инты. Достаточно одного, и как писали ранее, важное условие - оба индукционника расположить так чтобы деталь перекрывала оба датчика! И не совсем понятно нафига использовать таймер? Мерять время, или вернее на этом регулировать скорость движения конвеера, так в этом случае все решаемо и сложности здесь нет никакой. Почитай, посмотри уроки по ардуинке, или пиши запрос на разработку проги под задачу.
Два датчика - это хорошо, но: настроили так, чтобы деталь перекрывала оба датчика. Сменили детали на конвейере на новые, меньшего размера, и - опа! уже не перекрывает. Шо делать? Перенастраивать датчики?
Именно поэтому я и предложил вариант с тремя датчиками, размещёнными на неравномерных расстояниях - при таком подходе пофиг, какого размера детали, и всегда можно определить направление движения. Хотя я бы просто поюзал энкодер (если речь только о направлении движения) - мало ли там валов на конвейере, куда можно это дело зацепить? Вангую - хватает ;)
Да не вопрос в количестве датчиков, только экономически вешать 3 и более датчиков для решения простых задач - это пожалуй... ну это определяется индивидуаль ;) а по мне так ...экономика должна быть экономна...
Да не вопрос в количестве датчиков, только экономически вешать 3 и более датчиков для решения простых задач - это пожалуй... ну это определяется индивидуаль ;) а по мне так ...экономика должна быть экономна...
Ну так энкодер - тоже предлагался, куда уж экономней ;)
чтобы повешать энкодер надо заменять вал (как? вытачивать новый?) побирать и где то искать муфту, покупать сам энкодер (а они немало стоят), останавливать линию в конце концов..
ладно это все лирика, я же сразу написал что я хочу и как.
кто нибудь знает как измерить время между двумя прерываниями с помощью таймеров?
кто нибудь знает как измерить время между двумя прерываниями с помощью таймеров?
Таймер это те же часы. Я просто не понимаю что ТС не понятно.
Вот энкодер вешайте на него. Если не хотите останавливать линию. Да и где у вас там инженер конструктор бегает. Он все может чертежами реализовать.
кто нибудь знает как измерить время между двумя прерываниями с помощью таймеров?
Таймеры тут ни к чему. Как вариант:
да для измерения частоты и одного пина прерывания хватит(для уно 2 или 3), вот ссылка, и приведено несколько вариантов, может пригодиться https://habr.com/post/346126/