Съдържание:
- Стъпка 1: Хардуерен дизайн + компилация + 3D печат
- Стъпка 3: Програмиране на плъзгача на камерата
- Стъпка 4: Работа с плъзгача на камерата
- Стъпка 5: Заключителни мисли + бъдещи подобрения
Видео: Плъзгач за камера за проследяване на обекти с ротационна ос. 3D отпечатано и вградено в контролера за DC двигател на RoboClaw и Arduino: 5 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:51
Проекти на Fusion 360 »
Този проект е един от любимите ми проекти, откакто съчетах интереса си към създаването на видео с DIY. Винаги съм гледал и съм искал да подражавам на тези кинематографични кадри във филми, където камера се движи по екрана, докато се движи, за да проследи обекта. Това добавя много интересен ефект на дълбочина към иначе 2d видео. Искайки да повторя това, без да харча хиляди долари за холивудска екипировка, реших сам да направя такъв плъзгач за камера.
Целият проект е изграден върху части, които можете да отпечатате 3D, а кодът се изпълнява на популярната дъска Arduino. Всички файлове на проекта, като CAD файлове и код, са достъпни за изтегляне по -долу.
CAD/ 3D файлове за печат, достъпни тук
Arduino Code файл, достъпен тук
Проектът се върти около 2 -те редукторни постояннотокови двигатели и основния контролер за микро микро Roboclaw. Този моторен контролер може да трансформира четките DC двигатели в превъзходен тип серво с невероятна точност на позицията, тонове въртящ момент и пълни 360 градуса на въртене. Повече за това по -късно.
Преди да продължим, първо гледайте видео урока, свързан тук. Този урок ще ви даде преглед на това как да изградите този проект и това ръководство за Instructables ще разгледа по -задълбочено начина, по който изградих този проект.
Материали-
- 2x 1 метър резба с резба m10, използвана за свързване на всички части
- 8x гайки M10 за монтиране на частите към резбованите пръти
- 2x 95 см дълги 8 мм гладки стоманени пръти за плъзгане на плъзгача
- 4x лагери lm8uu за плъзгача да се плъзга гладко по стоманените пръти
- 4x 10 мм дълги м3 гайки за монтиране на двигателя
- 2 x лагера за скейтборд (22 мм външен диаметър, 8 мм вътрешен диаметър) за оста на въртене
- 1x 15 мм лагер за празен ход
- 1x болт m4 с дължина 4 см с гайка m4 за монтиране на лагера на празен ход към частта с 3d отпечатване на празен ход.
- 20 зъбни колела с вътрешен диаметър 4 мм за плъзгащия двигател. Точната ролка не е много важна, тъй като вашият постоянен двигател трябва да бъде насочен за достатъчен въртящ момент. Просто се уверете, че това е същата стъпка като вашия колан
- 2 метра дълъг GT2 колан. Отново можете да използвате всеки колан, стига да съответства на височината на зъбите на вашата ролка.
Електроника
- 2 * Редукторни DC двигатели с енкодери (единият контролира страничното движение, а другият контролира оста на въртене). Ето този, който използвах. Повече за това в частта на ръководството за електроника
- Контролер на DC двигател RoboClaw. (Използвах двойния 15Amp контролер, тъй като ми позволи да управлявам и двата двигателя с един контролер)
- Всеки Arduino. Използвах Arduino UNO
- Батерия/ източник на захранване. (Използвах 7.4V 2 клетъчна LiPo батерия)
- Екран (За показване на менюто. Всеки U8G съвместим екран ще работи, използвах този 1,3 -инчов OLED екран)
- Ротационен енкодер (За навигация и конфигуриране на опции в менюто)
- Физически бутон (за задействане на движението на плъзгача)
Стъпка 1: Хардуерен дизайн + компилация + 3D печат
След това нека преминем към електрониката. Електрониката е мястото, където този проект има много гъвкавост.
Нека започнем с ядрото на този проект- 2-те четки DC двигателя.
Избрах четки DC двигатели по няколко причини.
- Четканите двигатели са много по -лесни за свързване и работа в сравнение със стъпковите двигатели
- Двигателите с постоянен ток са много по -леки от двигателите с постоянен ток, което е особено важно за мотора на въртящата се ос, тъй като този двигател физически се движи странично с камерата и прави възможно най -светлината важна за предотвратяване на прекомерно натоварване на основния плъзгащ двигател на камерата.
Избрах този конкретен DC мотор. Този мотор ми даде изключително голям въртящ момент, необходим за преместване на толкова тежък товар на камерата. Освен това, високата предавка означава, че пиковите обороти са бавни, което означаваше, че мога да снимам по -бавни движения, а високата предавка също води до по -висока позиционна точност, тъй като едно завъртане на 360 градуса на изходния вал означава 341,2 броя на енкодера на двигателя.
Това ни отвежда до контролера за движение RoboClaw. Контролерът на двигателя с двоен DC двигател на Roboclaw приема прости инструкции от вашия Arduino чрез прости кодови команди и извършва цялата тежка обработка и доставка на енергия, за да накара вашия двигател да функционира по предназначение. Arduino може да изпраща сигнали към Roboclaw чрез ШИМ, аналогово напрежение, обикновен сериен или пакетен сериен. Пакетната серия е най -добрият начин да отидете, тъй като ви позволява да получите информация обратно от Roboclaw, която е необходима за проследяване на позицията. Ще се потопя по -дълбоко в софтуерната/програмната част на Roboclaw в следващата стъпка (програмиране).
По същество Roboclaw може да трансформира DC четен двигател с енкодер, за да прилича повече на серво, благодарение на способността на RoboClaw да извършва позиционен контрол. Въпреки това, за разлика от традиционното серво, сега вашият четен двигател с постоянен ток има много по -голям въртящ момент, много по -голяма точност на позицията поради високото предаване на двигателя и най -важното, вашият постоянен двигател може да се върти на 360 градуса непрекъснато, нито едно от което традиционното серво не може да направи.
Следващата част от електрониката е екранът. За моя екран избрах този OLED панел поради неговия размер и висок контраст. Този висок контраст е невероятен и прави екрана много лесен за използване при директна слънчева светлина, като същевременно не излъчва твърде много светлина, която може да попречи на потенциална снимка с тъмна камера. Този екран може лесно да бъде заменен с друг U8G съвместим екран. Пълният списък на съвместимите екрани е достъпен тук. Всъщност този проект беше умишлено кодиран около библиотеката на U8G, така че конструкторите „направи си сам“като вас имаха по -голяма гъвкавост в своите части
Последните части от електрониката за този проект бяха въртящият се енкодер и бутон за стартиране на плъзгача. Енкодерът ви позволява да навигирате в менюто на екрана и да конфигурирате цялото меню на плъзгача само с един циферблат. Ротационният енкодер няма „крайна“позиция като традиционния потенциометър и това е особено полезно за промяна на координатите x и y на проследяването на обекта на екрана. Бутонът се използва изключително за стартиране на движението на плъзгача, без да се налага да се занимавате с въртящия се енкодер.
Стъпка 3: Програмиране на плъзгача на камерата
Кодирането беше най -трудното предизвикателство на този проект. Виждате ли, от самото начало исках плъзгачът да може да се управлява от екран. За да направя този проект съвместим с възможно най -много екрани, трябваше да използвам библиотеката U8Glib за Arduino. Тази библиотека има поддръжка за над 32 екрана. Библиотеката на U8Glib обаче използва цикъл за рисуване, за да нарисува менюто на екрана и това противоречи на възможността на Arduino да събира едновременно информация за позицията на камерата, която е необходима за функционалността за изчисляване на ъгъла на камерата (Това е обхванато в следващите няколко параграфа). U8Glib2 има алтернатива на цикъла на картината, като използва нещо, наречено опция за буфер за пълна страница, но библиотеката изразходва твърде много памет и затруднява приспособяването на останалата част от кода предвид ограниченията на паметта на Arduino Uno. Това означаваше, че бях заседнал с U8G и трябваше да заобиколя проблема, като предотвратявах актуализирането на екрана всеки път, когато плъзгачът беше в движение и Arduino трябваше да събира позиционни данни от Roboclaw. Аз също бях принуден да задействам плъзгача, за да започна да се движа извън цикъла на менюто, тъй като след като влязох в подменютата, щях да бъда вътре в цикъла на картината и плъзгачът нямаше да работи по предназначение. Аз също заобиколих този проблем, като отделен физически бутон задейства движението на плъзгача.
След това нека поговорим за ротационния проследяващ елемент. Тази част изглежда много сложна за интегриране, но всъщност е доста проста. Изпълнението за това е под функцията „motor ()“в моя код на Arduino. Първата стъпка е да направите двуизмерна мрежа и да решите къде е поставен обектът, който искате да проследите. Въз основа на това можете да нарисувате триъгълник към текущото си местоположение. Можете да получите текущото си местоположение от стойността на енкодера на двигателя. Ако искате да конфигурирате позицията на обекта, който се проследява в cm/mm, ще трябва да преведете стойността на кодера в стойност cm/mm. Това може просто да стане чрез преместване на плъзгача на камерата на 1 см и измерване на увеличаването на стойността на енкодера. Можете да въведете тази стойност в горната част на кода под променливата encoder_mm.
Продължавайки, сега ще използваме функцията за обратна допирателна, за да получим ъгъла, който камерата трябва да е обърната, за да сочи вашия обект. Обратната тангента поема противоположната и съседната страна на триъгълника. Обратната страна на триъгълника никога не се променя, тъй като е y разстоянието от плъзгача до обекта. Съседната страна на плъзгача на камерата обаче се променя. Тази съседна страна може да бъде изчислена, като вземете позицията на обекта x и извадите текущата си позиция от нея. Докато плъзгачът се движи през своя обхват на движение, той ще продължи да актуализира Arduino на стойността на енкодера. Arduino многократно ще преобразува тази стойност на енкодера в позиционна стойност cm/mm x и след това ще изчисли дължината на съседната страна и накрая ще изчисли ъгъла, който камерата трябва да бъде обърната през цялото време, за да сочи обекта.
Сега, когато нашият Arduino динамично обработва ъгъла на камерата, можем да се заемем с преобразуването на този ъгъл в позиционна стойност, към която да се движи въртящият се двигател. Това ни довежда до най -голямата функция на RoboClaw за този проект. Като дава на Roboclaw стойност на позицията, той може по същество да накара DC четеният двигател да се държи като серво. Освен за разлика от серво, нашият мотор има тонове по -голям въртящ момент, много по -висока точност и също може да върти 360 градуса.
Кодът на Arduino за преместване на Roboclaw на определена позиция е следният:
roboclaw. SpeedAccelDeccelPositionM1 (адрес, „скорост“, „ускорение“, „забавяне“, „позиция, на която искате да отидете“, 1);
За да настроите позиционната стойност на мотора да съответства на ъгъла на камерата, ще трябва ръчно да преместите пластината на камерата на 180 градуса. След това вижте колко се е променила стойността на енкодера от преместване на плочата на камерата от 0 градуса на 180 градуса. Това ви дава обхвата на енкодера. Можете да въведете този диапазон в моторната функция, която картографира ъгъла на камерата на Arduino до позиционна стойност. Това също е коментирано в кода, така че трябва да е лесно да се намери *****
RoboClaw също ми даде възможност да настройвам други фактори като ускорение, забавяне и PID стойности. Това допълнително ми позволи да изгладя движението на въртящата се ос, особено когато промените в ъгъла бяха малки и добавих ритници без висока „D“PID стойност. Можете също така автоматично да настроите вашите PID стойности чрез настолното приложение на Roboclaw.
Стъпка 4: Работа с плъзгача на камерата
Сега стигаме до забавната част, работа с плъзгача Менюто има 4 основни раздела. Горният раздел е предназначен за контрол на скоростта. Средният ред на менюто съдържа раздели за конфигуриране на позицията X и Y на проследявания обект в мм, а също и за конфигуриране дали искаме плъзгача да се върти и проследява нашия обект или просто да правим просто плъзгащо движение без завъртане. Усукването на въртящия се енкодер ни позволява да се придвижваме в различните опции на менютата. За да конфигурирате някоя от опциите, отидете до опцията и натиснете въртящия се енкодер. След като натиснете, завъртането на въртящия се енкодер ще промени стойността на маркираното подменю, вместо да прелиствате през менюто. След като достигнете желаната стойност, можете да щракнете отново върху въртящия се енкодер. Сега се връщате в главното меню и можете да се придвижвате между различните раздели. След като сте готови, просто натиснете бутона за движение до екрана и плъзгачът върши работата си!
Уверете се, че след като приключите с използването на плъзгача на камерата, камерата е в „домашна“позиция: страната на плъзгача, от която е започнала. Причината за това е, че енкодерът на двигателя не е абсолютен енкодер, което означава, че Roboclaw/Arduino не може да определи къде е енкодерът. Те могат само да кажат колко е променен енкодерът от последното му включване. Това означава, че когато изключите плъзгача на камерата, плъзгачът ще „забрави“позицията на плъзгача и ще върне енкодера на 0. Следователно, ако изключите плъзгача от другата страна, когато го включите, плъзгачът ще опитайте се да се преместите по -далеч от ръба и да се блъснете в стената на плъзгача. Това поведение на енкодера също е причината камерата да нулира ъгъла на завъртане след всяко движение на плъзгането на камерата. Ротационната ос също се предпазва от сблъсък в края на обхвата на движение.
Можете да поправите това, като добавите крайни спирки и процедура за насочване при стартиране. Това използват 3D принтерите.
Стъпка 5: Заключителни мисли + бъдещи подобрения
Силно препоръчвам всеки строител да направи свои собствени версии на този плъзгач, вместо да изгражда точно същия плъзгач. Промяната на моя дизайн ще ви позволи да изградите вашия плъзгач според вашите точни спецификации, като същевременно по -добре разберете как работят електрониката и кодът.
Направих кода възможно най -четим и конфигурируем, за да можете да ощипвате/калибрирате различните кодови променливи за вашите спецификации на плъзгача. Кодът също е изцяло изграден около функции, така че ако искате да копирате/ ощипвате/ пренапишете определени поведения на плъзгача, не е нужно да реконструирате и преработвате целия код, а само частите, които искате да редактирате.
И накрая, ако направих версия 2.0, ето някои подобрения, които бих направил
- По -високо предавателно отношение за двигателя на въртящата се ос. По -високото съотношение на предавки означава, че мога да правя по -прецизни малки движения. Това е особено важно, когато камерата е далеч от вашия обект и ъгълът на камерата се променя много бавно. В момента моторът ми не е насочен твърде високо и това може да доведе до леко резки движения, когато плъзгачът на камерата работи твърде бавно или когато има много малка промяна на ъгъла на въртене. Добавянето на висока „D“PID стойност ми помогна да се отърва от това, но това стана с цената на малко по -ниска точност на проследяване на обекти.
- Модулна дължина. Това е далечна цел, но бих искал плъзгачът на камерата да бъде модулен по дължина, което означава, че можете лесно да прикачите по-дълги писти, за да може камерата да се плъзга. Това е доста трудно, тъй като човек перфектно ще трябва да подреди и двете коловози и да разбере как да работи системата на колана. Независимо от това, това би било готин ъпгрейд!
- Персонализиран механизъм Keyframing. Бих искал да въведа концепцията за движения с ключови кадри в този плъзгач на камерата. Keyframing е техника, много често използвана във видео и аудио продукцията. Това би позволило нелинейни движения на камерата, където камерата отива в позиция, чака, след това се премества в друга позиция с различна скорост, изчаква, след това отива в трета позиция и т.н.
- Управление чрез Bluetooth/ безжичен телефон. Би било наистина страхотно да можете да конфигурирате параметрите на плъзгача на камерата безжично и да можете да разгърнете плъзгача на камерата на труднодостъпни места. Приложението за телефон също може да отвори възможности за интегриране на ключови кадри, както е споменато в последния параграф.
Това е всичко за този урок. Чувствайте се свободни да зададете всички въпроси в секцията за коментари по -долу.
За повече уроци по съдържание и електроника можете също да разгледате канала ми в YouTube тук.
Препоръчано:
Модел локомотив със стъпков двигател - Стъпков двигател като въртящ се енкодер: 11 стъпки (със снимки)
Модел локомотив със стъпков двигател | Стъпков двигател като въртящ се енкодер: В една от предишните инструкции научихме как да използваме стъпков двигател като въртящ се енкодер. В този проект сега ще използваме въртящия се енкодер със стъпков двигател, за да управляваме модел локомотив, използвайки микроконтролер Arduino. Така че, без fu
Стъпков двигател Контролиран стъпков двигател - Стъпков двигател като въртящ се енкодер: 11 стъпки (със снимки)
Стъпков двигател Контролиран стъпков двигател | Стъпков двигател като въртящ се енкодер: Имате ли няколко стъпкови двигателя, които лежат наоколо и искат да направят нещо? В тази инструкция нека използваме стъпков двигател като въртящ се енкодер, за да контролираме позицията на друг стъпков двигател, използвайки микроконтролер Arduino. Така че без да се замисляме, нека да
Raspberry Pi - Автономен марсоход с проследяване на обекти OpenCV: 7 стъпки (със снимки)
Raspberry Pi - Автономен марсоход с OpenCV проследяване на обекти: Захранва се от Raspberry Pi 3, разпознаване на обекти с отворен CV, ултразвукови сензори и двигатели с постоянен ток. Този роувър може да проследява всеки обект, за който е обучен, и да се движи по всякакъв терен
Вградено LED отпечатано 3D коледно дърво: 10 стъпки (със снимки)
Вградено LED 3D отпечатано коледно дърво: Това е 3D отпечатано коледно дърво с вградени адресируеми светодиоди вътре. Така че е възможно да се програмират светодиодите за хубави светлинни ефекти и да се използва 3D отпечатаната структура като дифузор. Дървото е разделено на 4 етапа и основен елемент (дървото
Направете плъзгач с контролирана от Arduino моторизирана камера!: 13 стъпки (със снимки)
Направете плъзгач с контролирана моторизирана камера с Arduino !: Този проект ви показва как да конвертирате всеки обикновен плъзгач в моторизиран плъзгач, контролиран от Arduino. Плъзгачът може да се движи много бързо с 6 м/мин, но също така и изключително бавно. Препоръчвам ви да гледате видеото, за да получите добро представяне. Нещата, от които се нуждаете: Всяко