
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:04

Приобретя на своем рабочем месте довольно большое количество выброшенных поворотных оптических энкодеров, я, наконец, решил сделать с ними что-нибудь интересное / полезное.
Недавно я купил себе дома новый 3D-принтер, и что может быть лучше 3D-сканера! Этот проект также предоставил мне прекрасную возможность использовать мой 3D-принтер для изготовления необходимых деталей.
Запасы
Оптические энкодеры и соответствующие оптические датчики
Arduino UNO
дополнительный щит для прототипирования
стальные рельсы
доступ к 3D-принтеру
Шаг 1: оптические энкодеры



Для этого проекта можно использовать практически любой поворотный энкодер, если он обеспечивает относительно высокое количество «щелчков» на мм. Очевидно, что для разных энкодеров потребуется подходящее монтажное решение.
Я использовал измеритель непрерывности, чтобы проследить схему подключения фотодатчиков.
Шаг 2: детали, напечатанные на 3D-принтере


Эти детали содержат поворотные энкодеры и обеспечивают скольжение рельса. В корпусе одиночного энкодера есть два отверстия сзади для крепления поперечных направляющих. Корпус сдвоенного энкодера - это просто два отдельных корпуса, соединенных между собой под прямым углом.
Я разработал эти крепления на fusion360 в соответствии с моим выбором энкодеров и направляющих, на валу энкодера есть короткий кусок резиновой оболочки рогатки, чтобы он лучше держался за вал из нержавеющей стали.
Вы хотите, чтобы вал свободно скользил и проваливался через корпус, когда держите его вертикально, но при этом он должен оказывать на энкодер достаточное давление, чтобы не проскальзывать. Что сработало для меня, так это то, что ползун вала перекрывался с валом энкодера на 0,5 мм. Резина рогатки достаточно мягкая, чтобы деформироваться на такую величину и обеспечить хорошее сцепление с дорогой.
Шаг 3: Схема подключения

Схема очень простая. Оптодатчикам требуется ток для диодов ИК-излучателя, заземляющие и подтягивающие резисторы для фотодиодов.
Я выбрал 5 мА для последовательно соединенных эмиттерных диодов, в этом конкретном энкодере падение напряжения на диодах составляет 3,65 В. Я использую источник питания 5 В от Arduino, что оставляет 1,35 В для резистора, при 5 мА получается 270 Ом.
Для подтягиваний было выбрано 10 кОм, поскольку фотодиоды могут потреблять только небольшой ток, 10 кОм также использовалось для кнопки. Есть кнопка, доступная для использования на прототипе платы, уже подключенной к земле, просто снабдите ее подтягивающим резистором и подключите его к желаемому входному контакту.
Шаг 4: Код Arduino



Код нуждается в небольшом объяснении, поскольку его работа может быть не сразу очевидна, но его нужно было оптимизировать таким образом, чтобы можно было достаточно быстро обрабатывать 3 кодировщика.
Во-первых, мы хотим обработать данные направления только в том случае, если произошло изменение положения энкодера.
изменения = новое_значение ^ сохраненное значение;
Чтобы добиться большего разрешения от моих кодировщиков, мне пришлось обрабатывать как нарастающие, так и спадающие фронты.
На моей установке разрешение составляет 24 щелчка на 1 см.
Это оставляет нам несколько сценариев.
S1 - постоянный 0, а S2 переключается с 0 на 1.
S1 - постоянный 0, а S2 - от 1 до 0.
S1 - постоянная 1, а S2 - от 0 до 1.
S1 - постоянная 1, а S2 - от 1 до 0.
S2 является постоянным 0, а S1 переключается с 0 на 1.
S2 является постоянным 0, а S1 переключается с 1 на 0.
S2 - постоянная 1, а S1 переключается с 0 на 1.
S2 является постоянным 1, а S1 переключается с 1 на 0.
Эти условия лучше понятны в приведенных выше таблицах истинности, также каждое условие дает «направление», произвольно названное 0 или 1.
Графики дают нам две важные подсказки:
1) одна диаграмма является полной инверсией другой, поэтому, если она у нас есть, мы можем легко вычислить другую, просто инвертируя вывод. Мы инвертируем вывод, только если один вывод меняется, а не другой, мы можем выбрать один произвольно.
2) сама диаграмма представляет собой просто исключающее ИЛИ сигналов S1 и S2. (другая диаграмма НЕ этого).
Теперь понять код просто.
// параллельное чтение в ПОРТ // запоминаем, что соседние пары принадлежат одному и тому же состоянию кодировщика = PINB & 0x3f; // какие пины изменились, если есть diff = hold ^ state; // XOR смежных сигналов S1 и S2 для получения таблицы истинности // Самый простой способ - сделать копию текущего состояния // и сдвинуть ее вправо на один бит lookup = state >> 1; // теперь биты выровнены для XOR dir = lookup ^ state; // помните, что таблица должна быть инвертирована, если // один из входов остался постоянным, для этого нам не нужен оператор IF. В настоящее время бит желаемого направления // является правым битом каждой пары в переменной 'dir' // левый бит не имеет смысла // переменная 'diff' имеет бит, который изменил 'set' // поэтому мы либо имеем '01' или '10' // XOR с байтом 'dir' // либо инвертирует, либо нет значимый бит. dir ^ = diff; // теперь обновляем переменную удержания hold = state; // если для этого кодировщика изменился какой-либо бит if (diff & 0x03) {// определить направление if (dir & 0x01) {// на основе вашего аппаратного обеспечения и подключения ++ или - --z; } else {++ z; }} // то же самое в остальном if (diff & 0x0c) {if (dir & 0x04) {++ y; } else {--y; }} if (diff & 0x30) {if (dir & 0x10) {--x; } else {++ x; }}
Когда кнопка нажата, мы отправляем текущее значение XYZ в программу терминала.
Последовательные данные идут медленно, но во время нормальной работы положения энкодеров все равно не будут меняться в течение этого времени.
Данные отправляются в виде сырых подсчетов. Вы можете посчитать и отправить данные в миллиметрах или дюймах и т. Д. Я считаю, что необработанные значения так же хороши, потому что мы можем масштабировать объект позже в программном обеспечении.
Шаг 5: Первое сканирование




Сбор точек - медленный процесс, я кладу зонд в верхний левый угол и перезагружаю Arduino.
Это обнуляет позицию как домашнюю.
Затем переместите зонд в место на цели, удерживайте его неподвижно и нажмите кнопку «снимок».
Для этого довольно большого образца я взял всего ~ 140 баллов, так что детализация конечного продукта оставляет желать лучшего.
Сохраните данные в файл. PCD и добавьте заголовок.
#. PCD v.7 - Формат файла данных облака точек ВЕРСИЯ.7 ПОЛЯ x y z РАЗМЕР 4 4 4 ТИП F F F COUNT 1 1 1 ШИРИНА (количество ваших баллов) ВЫСОТА 1 ТОЧКА ОБЗОРА 0 0 0 1 0 0 0 ОЧКОВ (количество ваших баллов)
Поместите количество очков в заголовок, это легко в любом редакторе, который предоставляет вам номера строк.
Над точками можно увидеть в freeCad, затем они экспортируются из freeCad как файл. PLY.
Откройте. PLY в MeshLab и выровняйте объект. Выполнено!!
Рекомендуемые:
Тахометр / сканер с использованием Arduino, OBD2 и шины CAN: 8 шагов

Тахометр / датчик сканирования с использованием Arduino, OBD2 и CAN-шины: любой владелец Toyota Prius (или другого гибридного / специального транспортного средства) будет знать, что на их приборных панелях может отсутствовать несколько циферблатов! У моего Prius нет ни оборотов двигателя, ни датчика температуры. Если вы любитель производительности, вам может быть интересно узнать о таких вещах, как опережение по времени и
Сканер QR-кода с использованием OpenCV в Python: 7 шагов

Сканер QR-кода с использованием OpenCV в Python: в современном мире мы видим, что QR-код и штрих-код используются практически везде, от упаковки продукта до онлайн-платежей, а теперь мы видим QR-коды даже в ресторане, чтобы увидеть меню. сомневаюсь, что сейчас это большая мысль. Но вы когда-нибудь задумывались
Многоцветный точечный принтер: 6 шагов

Многоцветный точечный принтер: Всем привет. Это руководство по проектированию и производству многоцветного точечного принтера. В основном это было основано на аналогичной работе, которая уже была опубликована здесь в виде инструкций. Работа, о которой я говорю, называется «Dotter: Huge Arduino based Dot Matrix Pr
3D-сканер тела с использованием камер Raspberry Pi: 8 шагов (с изображениями)

3D-сканер тела с использованием камер Raspberry Pi: этот 3D-сканер является совместным проектом BuildBrighton Makerspace с целью сделать цифровые технологии доступными для общественных групп. Сканеры используются в индустрии моды для настройки дизайна одежды, в игровой индустрии для
Сканер Wi-Fi большого радиуса действия с использованием ESP8266: 6 шагов (с изображениями)

Сканер Wi-Fi дальнего действия с использованием ESP8266: В этом руководстве я делаю портативное устройство сканирования Wi-Fi дальнего действия 2,5 диапазона с питанием от аккумулятора, используемое для определения наилучшего канала для моей домашней сети. Его также можно использовать для поиска открытых точек доступа Wi-Fi на ходу. Стоимость изготовления: около 25 долларов