Вопрос по работе линейного энкодера

avex
Offline
Зарегистрирован: 11.03.2017

Всем привет!

Проектирую линейный энкодер, состоящий из "расчески" (с одинаковыми зубьями и расстоянием между ними ) и ИК-пары (эмиттер и диод). При перемещении ИК-пары относительно "расчески", считываются срабатывания, обрабатываются математически и мы получаем положение пары относительно точки начала движения.

Но тут возникает вопрос - так это работает, если двигать пару в сторону от начала движения. А, если в какой-то момент ее начать двигать в обратную сторону? Как дать понять Ардуине, что пара переместилась в обратную сторону? А потом снова - от начала движения? Как это реализовать своими руками? 

Возможен вариант с установкой стандартного датчика для Ардуино - с гироскопом и акселерометром. Он ведь сможет определить момент остановки, начала движения в обратную сторону и т.д.? 

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Блин пока тебя с говном не съели... купи дешовую мышь, разбери ее... и прикрути к ардуине... ВСЕ. там в мышки есть все что тебе надо... Забуть про гироскопы аксилерометры, GPS модули... 

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

да... к ардуине есть библиотека работы с клавой и мышкой... И да в твоем случаи эмитр/диот не определить направление... если у тебя опять все независимо... и не понятно что чем управляетьсся... обычно в таких системах два датчика, считывают "гребенку" расположенных 1/2 гребенки... и сравнивают где раньше,  где позже... а не только импульсы ;-) 

dmitron1036
Offline
Зарегистрирован: 10.01.2016

квадратурный энкодер погуглите.

И на свалку загляните за принтером.

будут новости развития в предложенном мною ключе - тоже интересно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

avex пишет:

Но тут возникает вопрос - так это работает, если двигать пару в сторону от начала движения. А, если в какой-то момент ее начать двигать в обратную сторону? Как дать понять Ардуине, что пара переместилась в обратную сторону? А потом снова - от начала движения? Как это реализовать своими руками? 

Вы, похоже, не знаете как устроен энкодер. Тут нужны прорези на "расчёске" специального вида (размера)  и две пары "светодиод/фототранзистор".

Могу нарисовать как это должно выглядеть, но Вы, наверное уже и сами догадались.

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Либо гребенку с асиметричными прорезями и анализировать фронт импульса.... \_|\_|\_|\_|\_|  тогда можно и без пары...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, такую упаришься резать :)

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

можно не резать, а распечатать и в отраженном варианте? Ну а резать... ЧПУ нарежит хоть слоников =))

avex
Offline
Зарегистрирован: 11.03.2017

ЕвгенийП пишет:

avex пишет:

Но тут возникает вопрос - так это работает, если двигать пару в сторону от начала движения. А, если в какой-то момент ее начать двигать в обратную сторону? Как дать понять Ардуине, что пара переместилась в обратную сторону? А потом снова - от начала движения? Как это реализовать своими руками? 

Вы, похоже, не знаете как устроен энкодер. Тут нужны прорези на "расчёске" специального вида (размера)  и две пары "светодиод/фототранзистор".

Могу нарисовать как это должно выглядеть, но Вы, наверное уже и сами догадались.

Не угадали), как раз изучил. Но спасибо за помощь!

В общем, нашел такое решение, выложу здесь, может, кому-то пригодится.

"Расческа" у меня будет состоять из трех рядов, их будут считывать соответственно три ИК-пары (диод + транзистор). Прорези будут идти в таком порядке:

0 0 0 0 1 1 1 1 

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1,

где 0 - свет перекрыт, 1 - свет открыт. "Зубья" и "окошки" будут одинаковой длины и ширины. Из таких повторяющихся отрезков и будет состоять "расческа". МК будет получать информацию, на каком столбце находится считывающая головка (и перемещающийся объект), а простенькая функция будет сравнивать с предыдущим показанием, и делать вывод, куда направляется объект. Переходы между отрезками тоже обрабатываются в этой функции. Ее написал мой сын-школьник, правда, на своем Паскале. Осталось перевести на язык Ардуины.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

avex, конечно, похвально, что Ваш сын изобретает велосипеды. Но неплохо бы ему быть в курсе, что для данной задачи 3 оптопары - избыточно: достаточно одного светодиода, двух фотодатчиков и одной "расчески". Шаг зубьев "расчески" равен расстоянию между фотодатчиками (при условии, что светодиод и фотодатчики находятся от расчески на одинаковом расстоянии).

Если уж изобретать решение самому, все равно нужно заботиться, чтобы оно было простым и элегантным.

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

не понимаю логики... зачем три датчика? Тоже самое на двух... и на одной гребенки... Вы как то сильно усложнили за раз себе задачу. В три раза =) 

Вот в вашем варианте мысленно уберите третью гребенку... что получаеться да тоже самое... а теперь из двух сделайте одну... сместив считывающие головки на 1/2 зуба

на в ходе получаем вот такие данные

00011110000111000/меняем направления/0000111100001111000
11000111100001110/меняем направления/1100001111000011110

 

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

avex пишет:
мой сын-школьник, правда, на своем Паскале. Осталось перевести на язык Ардуины.

Ну, чё, - молоток! Вам есть чем гордиться! Дайте ему вот это - он сам переведёт, заодно и новому научится.

Ну, про некоторое пересложнение аппаратной части Вам уже написали, не буду повторяться.

А сделать своими руками "велосипед" считаю очень полезным, мы вон с внуком посмотрите что делали.

avex
Offline
Зарегистрирован: 11.03.2017

andriano пишет:

avex, конечно, похвально, что Ваш сын изобретает велосипеды. Но неплохо бы ему быть в курсе, что для данной задачи 3 оптопары - избыточно: достаточно одного светодиода, двух фотодатчиков и одной "расчески". Шаг зубьев "расчески" равен расстоянию между фотодатчиками (при условии, что светодиод и фотодатчики находятся от расчески на одинаковом расстоянии).

Если уж изобретать решение самому, все равно нужно заботиться, чтобы оно было простым и элегантным.

Ваше решение справедливо для системы, в которой известна скорость перемещения и когда она постоянна. Есть на ютьюбе уроки по созданию прибора, замеряющего скорость пульки. У нас в проекте скорость меняется все время.  

avex
Offline
Зарегистрирован: 11.03.2017

ЕвгенийП пишет:

avex пишет:
мой сын-школьник, правда, на своем Паскале. Осталось перевести на язык Ардуины.

Ну, чё, - молоток! Вам есть чем гордиться! Дайте ему вот это - он сам переведёт, заодно и новому научится.

Ну, про некоторое пересложнение аппаратной части Вам уже написали, не буду повторяться.

А сделать своими руками "велосипед" считаю очень полезным, мы вон с внуком посмотрите что делали.

Спасибо за ссылки и за добрые слова! Когда-то давно узнал из психологии о "кругах развития" - чем больше дел ("кругов") мы делаем с детьми с самого раннего возраста, чем более эти дела разнообразны, тем больше круг интересов и выше степень усваиваемости материала, к которому прикоснулись, у них будет в более старшем возрасте. 

b707
Offline
Зарегистрирован: 26.05.2017

avex пишет:

Ваше решение справедливо для системы, в которой известна скорость перемещения и когда она постоянна.

скорость не имеет хначения. постояннство - тем более. Лишь бы датчики успевали.

avex
Offline
Зарегистрирован: 11.03.2017

b707 пишет:

avex пишет:

Ваше решение справедливо для системы, в которой известна скорость перемещения и когда она постоянна.

скорость не имеет хначения. постояннство - тем более. Лишь бы датчики успевали.

Хотел было возразить, но, когда стал представлять детально, понял, что да, это возможно. Но тут нужно рассчитать точные расстояния между "окошками", между "зубьями" и между двумя ИК-приемниками и точно их исполнить. В моем варианте пара соток в ту или иную сторону роли не играют, так как во всех трех рядах шаг одинаков. Ну и программно проще считать, нужно лишь перевести двоичное число, которое мы получаем на вход, в нормальное. Там, если присмотритесь, как раз происходит увеличение при движениии вправо - от 0 до 7, и наоборот. К тому же, получившиеся отрезки по х и по у (тайлы, если по-геймдевски) кратны 8, а у меня именно из таких квадратов и планировалось изначально поле. Так что совпадение в тему.

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

У меня слова закончились

avex
Offline
Зарегистрирован: 11.03.2017

 andriano, Степан и Евгений, спасибо! Мой Паскаль пришел из школы, посмотрел на рисунок Степана и "прозрел". Сказал, что можно решить одной гребенкой и одной ИК-парой. Но он видоизменил гребенку - теперь она будет состоять из спаренных 11 и спаренных 00. И всегда можно будет узнать, куда направился объект - вперед или назад, потому что после первой единички должна быть вторая, после второй - первый нолик и т.д. Если после первой единички повляется снова единичка, значит, объект свернул назад. Это обсуждение привело к отличному результату, всем спасибо! 

П.С. Я уже отправил на лазерную резку первый заказ с тремя рядами. Позвонил, сказали еще бы несколько минут и сделали бы по-старому)) Отменил и выслал новый чертеж - с одним рядом.

b707
Offline
Зарегистрирован: 26.05.2017

avex пишет:

 Мой Паскаль пришел из школы, посмотрел на рисунок Степана и "прозрел".

Ну и моложец! а можно было не ждать Степана, а самому найти в гугле, как устроен квадратурный энкодер...

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

а можно фотку потом гребенки соспареными 00 и 11, может и мне пригодиться =))) я че то плохо представляю это. 

avex
Offline
Зарегистрирован: 11.03.2017

Забейте в гугле "линейный энкодер" и/или "линейный энкодер своими руками". Через сколько страниц, минут, часов вам встретится "квадратурный энкодер"? Но я теперь знаю, как поступлю в следующий раз - сначала к сыну, потом в поисковик. 

avex
Offline
Зарегистрирован: 11.03.2017

stepan_sotnikov пишет:

а можно фотку потом гребенки соспареными 00 и 11, может и мне пригодиться =))) я че то плохо представляю это. 

Представьте, что шаг в энкодере 1см. Горка - это единичка, впадина - нолик (или наоборот, не важно). Вначале идут две единички, потом два нолика: 11001100 и т.д. А дальше, как я объяснил ранее. Вот так все оказалось просто.

b707
Offline
Зарегистрирован: 26.05.2017

stepan_sotnikov пишет:

а можно фотку потом гребенки соспареными 00 и 11, может и мне пригодиться =))) я че то плохо представляю это. 

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Нефига себе... Это серьезно отличаеться от того, что я говорил и рисовал... ;-)

b707
Offline
Зарегистрирован: 26.05.2017

stepan_sotnikov пишет:

Нефига себе... Это серьезно отличаеться от того, что я говорил и рисовал... ;-)

честно говоря, в ваш рисунок я не вглядывался :) Но то, что описывает avex с его двойными единичками и нуликами - и вот это - это суть одно и то же.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

avex пишет:

andriano пишет:

...для данной задачи 3 оптопары - избыточно: достаточно одного светодиода, двух фотодатчиков и одной "расчески".

Ваше решение справедливо для системы, в которой известна скорость перемещения и когда она постоянна. 

Если известны направление и постоянная скорость, то нужно ровно ноль светодиодов, ноль фотодатчиков и ноль расчесок. Зачем что-то измерять, если и так все известно?

Если известно направление, а скорость не известна, достаточно всего по одному.

А если направление тоже требуется определять, то имено, как я написал: 1+2+1.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

А штангель на 150мм вам не cгодится?

https://habr.com/ru/post/133088/

 

 

avex
Offline
Зарегистрирован: 11.03.2017

Спасибо. Но у него ход маловат, а нужно до 50 см.