Съдържание:

XYZ точков скенер, използващ запазени въртящи се енкодери: 5 стъпки
XYZ точков скенер, използващ запазени въртящи се енкодери: 5 стъпки

Видео: XYZ точков скенер, използващ запазени въртящи се енкодери: 5 стъпки

Видео: XYZ точков скенер, използващ запазени въртящи се енкодери: 5 стъпки
Видео: Как надо делать хорроры или проблемы хоррор-игр и как их решить 2024, Ноември
Anonim
XYZ точков скенер, използващ запазени въртящи се енкодери
XYZ точков скенер, използващ запазени въртящи се енкодери

След като придобих доста голям брой изхвърлени ротационни оптични енкодери от работното си място, най -накрая реших да направя нещо забавно/полезно с тях.

Наскоро закупих нов 3D принтер за дома си и какво би могло да го комплиментира по -добре от 3D скенер! Този проект също ми предостави перфектната възможност да използвам моя 3D принтер за производство на необходимите части.

Консумативи

Оптични енкодери и съответни оптични сензори

Arduino UNO

опционален прототипиращ щит

стоманени шини

достъп до 3D принтер

Стъпка 1: Оптичните енкодери

Оптичните енкодери
Оптичните енкодери
Оптичните енкодери
Оптичните енкодери
Оптичните енкодери
Оптичните енкодери

Почти всеки въртящ се енкодер може да се използва за този проект, стига да ви осигури относително голям брой „щраквания“на мм. Очевидно различните енкодери ще изискват подходящо решение за монтаж.

Използвах измервател на непрекъснатостта, за да проследя схемата на свързване на фотосензорите.

Стъпка 2: 3D отпечатани части

3D отпечатани части
3D отпечатани части
3D отпечатани части
3D отпечатани части

Тези части съдържат въртящи се енкодери и осигуряват плъзгане за релсата. Единичният корпус на енкодера има два отвора отзад, към които могат да се монтират напречните релси. Корпусът с двоен енкодер е просто два единични корпуса, слети заедно под прав ъгъл.

Проектирах тези стойки на fusion360 така, че да отговарят на моя избор на енкодери и релси. Валът на енкодера има къса част от гумена обвивка от прашка, за да му помогне да се захване по -добре от вала от неръждаема стомана.

Искате валът да се плъзга свободно и да пада през корпуса, когато се държи вертикално, но той трябва да упражнява достатъчно натиск върху енкодера, за да не се плъзне. Това, което работи за мен, беше да позволя на плъзгача за вала да се припокрие с вала на енкодера с 0,5 мм. Прашката е достатъчно мека, за да се деформира с това количество и да осигури добро сцепление.

Стъпка 3: Схема на свързване

Електрическа схема
Електрическа схема

Схемата е много проста. Опто-сензорите изискват известен ток за диодите с IR емитер, заземяващи и издърпващи резистори за фотодиодите.

Реших за 5mA за серийните емитерни диоди, в този конкретен енкодер спадането на напрежението върху диодите е 3.65V. Използвам 5V захранване от Arduino, което оставя 1.35V за резистора, при 5mA това работи на 270 ома.

10k ohm беше избрано за издърпванията, тъй като фотодиодите могат да потънат само при малък ток, 10k ohm беше използван и за бутон. Наличен е бутон за използване на прототипната платка, която вече е свързана към земята, просто му осигурете издърпващ се резистор и го свържете към желания входен щифт.

Стъпка 4: Arduino код

Кодът на Arduino
Кодът на Arduino
Кодът на Arduino
Кодът на Arduino
Кодът на Arduino
Кодът на 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) самата диаграма е просто XOR на сигналите S1 и S2. (другата диаграма е НЕ на това).

Сега разбирането на кода е просто.

// четене в PORT паралелно // запомняне съседни двойки принадлежат към едно и също състояние на енкодера = PINB & 0x3f; // какви пинове са се променили, ако има разлика = задържане ^ състояние; // XOR съседни сигнали S1 и S2 за получаване на таблица на истината // най -лесният начин е да направите копие на текущото състояние // и да го изместите надясно с едно търсене на битове = състояние >> 1; // сега битовете са подравнени за XOR dir = lookup ^ state; // запомнете, таблицата трябва да бъде обърната, ако един // от входовете остане постоянен, не се нуждаем от IF // израз за това. В момента желаният бит за посока // е десният бит на всяка двойка в променливата „dir“// левият бит е безсмислен // променливата „diff“има бита, който промени „set“//, така че или имаме '01' или '10' // XOR това с байта 'dir' или // ще обърне или няма смисления бит. dir ^= разлика; // сега актуализираме променливата hold 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 - Формат на файла с данни в облак от точки

Поставете броя на точките в заглавката, това е лесно за всеки редактор, който ви предоставя номера на редове.

Над точките могат да се видят в freeCad, след това те се експортират от freeCad като. PLY файл.

Отворете. PLY на MeshLab и повърхността на обекта. Свършен!!

Препоръчано: