Найти тему

Двунаправленный счетчик оборотов на Arduino и трех датчиках TCRT5000

Оглавление

Исходные данные

1. Прибор, с которого необходимо считывать количество оборотов - рыболовная инерционная катушка с диаметром 100 мм.

2. Счетчик должен работать в двух направлениях - как увеличивать сумму оборотов, так и уменьшать, в том числе должен иметь возможность работать с отрицательными значениями.

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

Концептуальная часть

Датчик TCRT5000 называют "датчик линии", "датчик отражения". В данном проекте важно то, что такой датчик позволяет распознавать оттенки серого на поверхности, на которую он "смотрит".

Цвет барабана катушки - серый, поэтому на его внутренней стороне, максимально удаленно от оси вращения, нужно нанести метку черного цвета. На корпусе катушки нужно разместить направленный в сторону барабана датчик TCRT5000 так, чтобы метка при вращении барабана проходила над датчиком. Таким образом при каждом пересечении датчика меткой можно будет регистрировать существенное изменение показаний датчика.

Один датчик не позволит достоверно определить, был ли совершен полный оборот, ведь можно пересечь метку и начать вращать барабан в обратную сторону, на втором пересечении будет зарегистрировано уже два оборота.

Двух датчиков тоже недостаточно для определения полного оборота, так как можно доводить метку до одного датчика, останавливаться на ней, а потом вращать барабан в обратную сторону, доводя метку до второго датчика, затем повторять тоже самое в обратном направлении, таким образом сумма оборотов будет увеличиваться, при этом барабан не совершит ни одного полного оборота.

Три датчика решают проблему, так как в случае с тремя датчиками один оборот предполагает последовательность из сигналов пересечения первого, второго, третьего и снова первого датчика. Более того, при работе с тремя датчиками можно определять, что метка прошла расстояние между двумя конкретными датчиками и понимать, в каком направлении это перемещение было совершено. Например, последовательность пересечений датчиков 1-2-3-2 говорит о том, что метка пересекла первый датчик, затем второй, затем третий, потом барабан начали вращать в обратную сторону и метка вернулась до второго датчика. Если длины дуг окружности между датчиками одинаковы, можно определять расстояние, пройденное меткой с точностью до одной трети оборота барабана.

Механическая часть

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

-2
-3

На внутренней стороне барабана с помощью черного лака для ногтей была нанесена метка.

-4

Аппаратная часть

Компоненты: 3 датчика TCRT5000, 3 резистора с номиналом около 470 Ом, 3 резистора 10 кОм, плата Arduino (здесь Uno).

Датчик TCRT5000 подключается к Arduino по следующей схеме:

-5

На макетной плате подключение выглядит так:

Провода: Красный (плюс) - 5V, Синий (минус) - GND, Фиолетовый (сигнал) - A0; Резисторы: Зеленый - здесь 430 Ом, Коричневый - здесь 10 КОм; На макетной плате контакты под синей полосой объединены, контакты над красной полосой также объединены, остальные контакты на макетной плате объединены вертикальными рядами.
Провода: Красный (плюс) - 5V, Синий (минус) - GND, Фиолетовый (сигнал) - A0; Резисторы: Зеленый - здесь 430 Ом, Коричневый - здесь 10 КОм; На макетной плате контакты под синей полосой объединены, контакты над красной полосой также объединены, остальные контакты на макетной плате объединены вертикальными рядами.

При подключении нескольких датчиков необходимо повторить такую схему для каждого датчика (для каждого датчика отдельные резисторы, для каждого датчика отдельный сигнальный провод в отдельный аналоговый вход Arduino, плюс и минус для всех датчиков общие).

Так может выглядеть подключение трех датчиков. Здесь значения сопротивлений резисторов с меньшим номиналом составляет 510 Ом, что отличается от сопротивления зеленого резистора на фотографии выше (430 Ом), этот момент не является критичным, главное, чтобы номиналы данных резисторов в рамках одной схемы были одинаковы и равнялись приблизительно 470 Ом.
Так может выглядеть подключение трех датчиков. Здесь значения сопротивлений резисторов с меньшим номиналом составляет 510 Ом, что отличается от сопротивления зеленого резистора на фотографии выше (430 Ом), этот момент не является критичным, главное, чтобы номиналы данных резисторов в рамках одной схемы были одинаковы и равнялись приблизительно 470 Ом.

Схема была собрана на внутренней стороне корпуса катушки, компоненты и провода были покрыты термоклеем.

-8

Для удобства работы с прибором на корпус катушки было припаяно Mini USB гнездо.

-9

С помощью термоусадочной трубки и тонких проводов был собран пятижильный кабель с Mini USB штекером.

-10

Программная часть

Тестирование схемы

Для тестирования схемы следует загрузить на плату скетч для работы с одним датчиком (Single), либо скетч для работы с тремя датчиками (Triple) по ссылкам далее.

RotationCounterSingle.txt
RotationCounterTriple.txt

После загрузки скетча, не отключая плату Arduino от компьютера и не перекрывая датчики барабаном катушки или чем-то ещё, выполнить следующие действия:

1. В Arduino IDE открыть Монитор порта. В нем можно будет наблюдать следующие показания:

-11

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

-12

Итоговый скетч

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

RotationCounter.txt

Скетч позволяет считать обороты с точностью до одной трети оборота и выводит результаты в Монитор порта.