ARDUINO Проезд на заданное расстояние по энкодеру

labamnus

✩✩✩✩✩✩✩
6 Окт 2019
2
0
Доброго времени суток, есть у меня оптический энкодер и робот с дешёвыми китайскими моторчиками с колёсами (2 моторчика с колёсами), на которые приделаны энкодеры. Подскажите пожалуйста, как мне сделать проезд на заданное расстояние?(в идеале готовый кусок кода)
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Вопрос интересный... Сначала надо определиться с несколькими вещами.
1) 1 оборот колеса это определенная дистанция. L
2) На энкодере есть определенное число прорезей. это N
отсюда вытекает
3) S=L/N - минимальное определяемое расстояние.
4) Получаем нужное нам расстояние DIST, делим его на S, M=DIST/S , т.е. энкодер должен в определенном направлении (тут мы точно знаем в каком!) получить M сигналов... а для этого даже энкодер не нужен. достаточно прерывателя и диска.. но это так. Если отслеживать изменения, то можно и уменьшить шаг..но при условии, что прорези и не прорези равны по размеру.
5) На 2-ой или 3-ий пин вешаем прерываение (в setup)
C++:
pinMode (2, INPUT_PULLUP);
attachInterrupt(0, GOGOGO, RISING);
Имеем функцию обработки прерывания
C++:
volatile int Step;

void GOGOGO()
{
Step++;
if (Step==Нужное кол-во шагов)
    {остановить мотор};
}
как бы все , но это черновик, надо пробовать , тестировать конечно

конечно надо при запуске мотора обнулятm Step и задавать нужное кол-во шагов
 

labamnus

✩✩✩✩✩✩✩
6 Окт 2019
2
0
Это, конечно, дельное решение. Но меня не очень устраивает использование прерываний, как это можно сделать без них?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Можно, опрашивать энкодер в цикле LOOP постоянно, но точность будет ниже. Можно еще измерить расстояние на какое робот проедет за пару секунд и вычислить время, за какое он должен проехать требуемую дистанцию. Все упирается в цель и точность.

А почему не устраивает использование прерываний ?