INHOUDSOPGAWE:

Objekopsporingskamera -skuifbalk met rotasie -as. 3D gedruk en gebou op die RoboClaw DC -motorbeheerder en Arduino: 5 stappe (met foto's)
Objekopsporingskamera -skuifbalk met rotasie -as. 3D gedruk en gebou op die RoboClaw DC -motorbeheerder en Arduino: 5 stappe (met foto's)

Video: Objekopsporingskamera -skuifbalk met rotasie -as. 3D gedruk en gebou op die RoboClaw DC -motorbeheerder en Arduino: 5 stappe (met foto's)

Video: Objekopsporingskamera -skuifbalk met rotasie -as. 3D gedruk en gebou op die RoboClaw DC -motorbeheerder en Arduino: 5 stappe (met foto's)
Video: Webinar 3D printen K3D 2024, Julie
Anonim
Image
Image
Hardeware -ontwerp + bou + 3D -drukwerk
Hardeware -ontwerp + bou + 3D -drukwerk

Fusion 360 -projekte »

Hierdie projek is een van my gunsteling projekte sedert ek my belangstelling in die maak van video met DIY kon kombineer. Ek het nog altyd daarna gekyk en wou die filmopnames navolg in films waar 'n kamera oor 'n skerm beweeg terwyl hy die voorwerp opspoor. Dit voeg 'n baie interessante diepte -effek by 'n andersins 2d -video. Omdat ek dit wou herhaal sonder om duisende dollars aan Hollywood -uitrustings te spandeer, het ek besluit om self so 'n kameraskuif te bou.

Die hele projek is gebou op dele wat u in 3D kan druk, en die kode loop op die gewilde Arduino -bord. Al die projeklêers, soos die CAD -lêers en kode, kan hieronder afgelaai word.

CAD/ 3D druk lêers hier beskikbaar

Arduino -kode lêer hier beskikbaar

Die projek wentel om die 2 gerigte, geborselde gelykstroommotors en die Basic Micro Roboclaw -motorbeheerder. Hierdie motorbeheerder kan geborselde gelykstroommotors omskep in 'n superieure tipe servo met ongelooflike posisionele akkuraatheid, tonne wringkrag en 'n volle rotasie van 360 grade. Meer hieroor later.

Kyk eers na die video -tutoriaal wat hier gekoppel is, voordat ons verder gaan. Die tutoriaal gee u 'n oorsig van hoe u hierdie projek kan bou, en hierdie Instructables -gids sal dieper ingaan op hoe ek hierdie projek gebou het.

Materiaal-

  • 2x 1 meter lange m10 draaddrade wat gebruik word om al die onderdele te verbind
  • 8x M10 -moere om die dele aan die skroefdraadstawe te monteer
  • 2x 95 cm lang, 8 mm gladde staalstawe vir die glyer om op te skuif
  • 4x lm8uu -laers sodat die glyer glad op die staalstawe kan gly
  • 4x 10 mm lange m3 moere vir die montering van die motor
  • 2 x skaatsplank laers (22 mm buitedeursnee, 8 mm binnediameter) vir die rotasie -as
  • 1x 15 mm -laer vir die oop kant
  • 1x 4 cm lange m4 -bout met m4 -slotmoer vir die montering van die leeglager op die 3d -gedrukte deel van die leeglêer.
  • 20 tande rat met 'n binnediameter van 4 mm vir die skuifmotor. Die presiese katrol is nie baie belangrik nie, aangesien u GS -motor genoeg krag moet kry. Maak net seker dat dit dieselfde toonhoogte as u gordel is
  • 2 meter lange GT2 gordel. Weereens kan u enige gordel gebruik solank dit ooreenstem met die toonhoogte van u katrol se tande.

Elektronika

  • 2 * Geskikte DC -motors met enkodeerders (die een beheer die sybeweging, terwyl die ander die rotasie -as beheer). Hier is die een wat ek gebruik het. Meer hieroor in die elektroniese gedeelte van die gids
  • RoboClaw DC motorbeheerder. (Ek het die dubbele 15Amp -beheerder gebruik, aangesien dit my toegelaat het om albei motors met een beheerder te beheer)
  • Enige Arduino. Ek het die Arduino UNO gebruik
  • Battery/ kragbron. (Ek het 'n 7,4V 2 -sel LiPo -battery gebruik)
  • Skerm (vir die vertoon van die spyskaart. Enige U8G -versoenbare skerm werk, ek het hierdie 1,3 duim OLED -skerm gebruik)
  • Rotatry encoder (Vir navigeer en instel opsies in die spyskaart)
  • Fisiese drukknop (om die skuifbeweging te aktiveer)

Stap 1: Hardeware -ontwerp + Bou + 3D -druk

Elektronika
Elektronika

Vervolgens gaan ons oor na die elektronika. Die elektronika is waar hierdie projek baie buigsaamheid het.

Kom ons begin met die kern van hierdie projek- die 2 geborselde GS-motors.

Ek het om 'n paar redes gekiesde DC -motors gekies.

  1. Geborstelde motors is baie makliker om te dra en te bestuur in vergelyking met stepper motors
  2. Geborstelde gelykstroommotors is baie ligter as gelykstroommotors, wat veral belangrik is vir die motor van die rotasie -as, aangesien die motor fisies sywaarts met die kamera beweeg en dit so belangrik as moontlik maak om oormatige spanning op die primêre skuifmotor van die kamera te voorkom.

Ek het hierdie spesifieke DC -motor gekies. Hierdie motor het my 'n baie groot wringkrag gegee wat nodig was om so 'n swaar kameras te beweeg. Verder beteken die hoë ratkas dat die piek -omwentelinge stadig was, wat beteken dat ek stadiger bewegings kon film, en die hoë ratkas het ook gelei tot 'n hoër posisionele akkuraatheid, aangesien een 360 grade -rotasie van die uitsetas 341.2 tellings van die motor se encoder beteken het.

Dit bring ons by die RoboClaw -bewegingsbeheerder. Die Roboclaw -motor met twee DC -motorbeheer neem eenvoudige instruksies van u Arduino af deur middel van eenvoudige kodeopdragte en doen al die swaar verwerking en kraglewering om u motor te laat funksioneer soos bedoel. Die Arduino kan seine na die Roboclaw stuur via PWM, analoog spanning, eenvoudige reeks of pakkie -reeks. Pakketreeks is die beste manier om te gaan, aangesien dit u in staat stel om inligting terug te kry van die Roboclaw wat nodig is vir die posisionele opsporing. Ek sal in die volgende stap (programmering) dieper in die sagteware-/programmeringsgedeelte van die Roboclaw ingaan.

In wese kan die Roboclaw 'n DC -geborstelde motor met 'n encoder omskep in 'n servo, danksy die RoboClaw se vermoë om posisionele beheer te doen. Maar in teenstelling met 'n tradisionele servo, het u geborste DC -motor nou baie meer wringkrag, baie meer posisionele akkuraatheid as gevolg van hoë motorrat, en die belangrikste is dat u DC -motor deurlopend 360 grade kan draai, wat nie 'n tradisionele servo kan doen nie.

Die volgende elektroniese deel is die skerm. Vir my skerm het ek hierdie OLED -paneel gekies vanweë die grootte en die hoë kontras. Hierdie hoë kontras is ongelooflik en maak die skerm baie maklik om te gebruik in direkte sonlig, terwyl dit nie te veel lig gee wat 'n moontlike donker kameraskoot kan belemmer nie. Hierdie skerm kan maklik verruil word vir 'n ander U8G -versoenbare skerm. Die volledige lys van versoenbare skerms is hier beskikbaar. Hierdie projek is eintlik doelbewus in die U8G -biblioteek gekodeer, sodat selfdoenbouers soos jy meer buigsaamheid in hul dele gehad het

Die laaste elektroniese onderdele vir hierdie projek was die roterende enkodeerder en drukknop om die skuifbeweging te begin. Met die encoder kan u deur die spyskaart van die skerm navigeer en al die skuifknoppies met slegs een draaiknop instel. Die roterende encoder het geen 'eind' -posisie soos 'n tradisionele potensiometer nie, en dit is veral handig vir die aanpassing van x- en y -koördinate van die objekopsporing op die skerm. Die drukknop word uitsluitlik gebruik om die skuifbeweging te begin sonder om met die draaiknop te hoef te worstel.

Stap 3: Programmering van die kamera -skuifbalk

Programmeer die kamera -skuifbalk
Programmeer die kamera -skuifbalk
Programmeer die kamera -skuifbalk
Programmeer die kamera -skuifbalk

Kodering was verreweg die moeilikste uitdaging van hierdie projek. U sien, van die begin af wou ek hê dat die skuifbalk vanaf 'n skerm beheer moet word. Om hierdie projek met soveel skerms as moontlik te maak, moes ek die U8Glib -biblioteek vir die Arduino gebruik. Hierdie biblioteek het ondersteuning vir meer as 32 skerms. Die U8Glib -biblioteek het egter 'n prentlus gebruik om die spyskaart op die skerm te teken, en dit was in stryd met die Arduino se vermoë om gelyktydig inligting te versamel oor die posisie van die kamera wat nodig was vir die funksie van die kamerahoekberekening (Dit word in die volgende paragrawe behandel)). Die U8Glib2 het 'n alternatief vir die prentlus deur iets te gebruik wat 'n volblad -buffer -opsie genoem word, maar die biblioteek het te veel geheue verbruik en dit moeilik gemaak om by die res van die kode te pas, gegewe die geheue -beperkings van die Arduino Uno. Dit het beteken dat ek vas was met U8G en die probleem moes oplos deur te verhoed dat die skerm opgedateer kon word wanneer die skuifknop aan die gang was en die Arduino nodig was om posisionele data van die Roboclaw te versamel. Ek was ook genoodsaak om die skuifbalk te aktiveer om buite die spyskaartlus te begin beweeg, want as ek in die sub-spyskaarte ingaan, was ek in die prentlus en sou die skuifknop nie werk soos bedoel nie. Ek het hierdie probleem ook omseil deur 'n aparte fisiese knoppie te hê wat die beweging van die skuifknop aktiveer.

Kom ons praat vervolgens oor die rotasie -opsporingselement. Hierdie deel lyk baie kompleks om te integreer, maar dit is eintlik redelik eenvoudig. Die implementering hiervan is onder die 'motor ()' -funksie in my Arduino -kode. Die eerste stap is om 'n tweedimensionele rooster te maak en besluit waar die voorwerp wat u wil volg, geplaas word. Op grond hiervan kan u 'n driehoek na u huidige ligging teken. U kan u huidige ligging kry uit die encoder -waarde van die motor. As u die posisie van die voorwerp wat in cm/mm gevolg word, wil instel, moet u die waarde van u encoder vertaal na 'n cm/mm -waarde. Dit kan eenvoudig gedoen word deur die skuifbalk van die kamera 1 cm te skuif en die toename in die waarde van die encoder te meet. U kan hierdie waarde bo -aan die kode invoer onder die encoder_mm veranderlike.

As ons verder gaan, sal ons nou die inverse raaklynfunksie gebruik om die hoek te kry waarteen die kamera moet wys om na u voorwerp te wys. Die omgekeerde raaklyn neem die teenoorgestelde en aangrensende sy van die driehoek in. Die teenoorgestelde kant van die driehoek verander nooit, aangesien dit die y -afstand van u skuifbalk tot die voorwerp is. Die aangrensende kant van die kameraskuif verander egter. Hierdie aangrensende sy kan bereken word deur die x -posisie van die voorwerp in te neem en u huidige posisie daarvan af te trek. Terwyl die skuifbalk deur sy bewegingsreikwydte beweeg, sal die Arduino steeds die waarde van die encoder bywerk. Die Arduino sal hierdie encoder -waarde herhaaldelik omskakel na 'n posisionele waarde van cm/mm x en dan die aangrensende sylengte bereken en uiteindelik die hoek bereken wat die kamera te alle tye in die gesig staar om na die voorwerp te wys.

Noudat ons Arduino die kamerahoek dinamies verwerk, kan ons die hoek omskakel na 'n posisionele waarde waarmee die roterende motor kan beweeg. Dit bring ons by die grootste kenmerk van RoboClaw vir hierdie projek. Deur die Roboclaw 'n posisiewaarde te gee, kan dit in wese 'n DC -geborstelde motor soos 'n servo laat optree. Behalwe in teenstelling met 'n servo, het ons motor baie meer wringkrag, 'n baie groter akkuraatheid en kan dit ook 360 grade draai.

Die Arduino -kode om die Roboclaw na 'n sekere posisie te skuif, is soos volg:

roboclaw. SpeedAccelDeccelPositionM1 (adres, 'snelheid', 'versnelling', 'vertraging', 'posisie waarheen u wil gaan', 1);

Om die posisionele waarde van die motor aan te pas by u kamerahoek, moet u die kamera met die hand 180 grade beweeg. Kyk vervolgens hoeveel die waarde van die encoder verander het nadat die kameraplaat van 0 tot 180 grade beweeg is. Dit gee u u encoder -reeks. U kan hierdie reeks invoer in die motorfunksie wat die kamerahoek van die Arduino na 'n posisionele waarde toewys. Dit word ook in die kode opgemerk, sodat dit maklik moet wees om ***** te vind

Die RoboClaw het my ook die vermoë gegee om ander faktore in te stel, soos versnelling, vertraging en PID -waardes. Dit het my verder toegelaat om die beweging van die rotasie -as glad te maak, veral as die hoekveranderinge klein was en rukke sonder 'n 'D' PID -waarde bygevoeg het. U kan u PID-waardes ook outomaties afstel via die tafelblad-app van Roboclaw.

Stap 4: Gebruik die kamera -skuifbalk

Gebruik die kameraskuifbalk
Gebruik die kameraskuifbalk

Nou kom ons by die prettige deel met die gebruik van die skuifbalk. Die spyskaart het 4 hoof oortjies. Die boonste oortjie is toegewy aan spoedbeheer. Die middelste ry van die spyskaart bevat oortjies om die X & Y -posisie van die voorwerp in mm op te stel, en ook op te stel as ons wil hê dat die skuifbalk ons voorwerp moet draai en opspoor of net 'n eenvoudige skuifbeweging sonder rotasie kan doen. Deur die draai -encoder te draai, kan ons deur die verskillende opsies van die spyskaarte blaai. Navigeer na die opsie om een van die opsies te konfigureer en druk die draaiknop. Sodra dit ingedruk is, sal die waarde van die gemerkte submenu verander word deur die draai van die omskakelaar eerder as om deur die spyskaart te skrop. Sodra u die gewenste waarde bereik het, kan u weer op die roterende enkodeerder klik. Nou is u terug na die hoofkieslys en kan u tussen die verskillende oortjies blaai. Sodra u gereed is, druk u op die knoppie langs die skerm en die skuifknop doen alles!

Maak seker dat die kamera in die 'huis' -posisie is: die kant van die skuifbalk waarop dit begin het, sodra u klaar is met die kamera -skuifbalk. Die rede hiervoor is dat die motor -encoder nie 'n absolute encoder is nie, wat beteken dat die Roboclaw/Arduino nie kan weet waar die encoder is nie. Hulle kan net weet hoeveel die encoder verander het sedert dit laas aangeskakel is. Dit beteken dat as u u kamera -skuifbalk afskakel, die skuifbalk die skuifposisie sal 'vergeet' en die encoder terugstel na 'n 0. As u die skuifbalk aan die ander kant afskakel, sal die skuifbalk probeer om verder as die rand te beweeg en in die skuifwand vas te val. Hierdie encoder -gedrag is ook die rede waarom die kamera sy rotasiehoek herstel na elke beweging van die kamera. Die rotasie -as beskerm homself ook teen ineenstorting aan die einde van sy bewegingsreeks.

U kan dit regstel deur eindpunte en 'n tuisprosedure by te voeg wanneer u begin. Dit is wat 3D -drukkers gebruik.

Stap 5: Laaste gedagtes + toekomstige verbeterings

Ek beveel sterk aan dat elke bouer hul eie weergawes van hierdie skuifbalk maak eerder as om presies dieselfde skuifbalk te bou. Deur my ontwerp aan te pas, kan u u skuifbalk volgens u presiese spesifikasies bou, terwyl u ook beter kan verstaan hoe die elektronika en kode werk.

Ek het die kode so leesbaar en konfigureerbaar moontlik gemaak, sodat u die verskillende kodeveranderlikes vir u skuifspesifikasies kan aanpas/kalibreer. Die kode is ook volledig opgebou rondom funksies, dus as u sekere gedrag van die skuifbalk wil kopieer/ aanpas/ herskryf, hoef u nie die reverse -kode te verander en die hele kode te herwerk nie, maar net die dele wat u wil redigeer.

Laastens, as ek 'n weergawe 2.0 gemaak het, is hier 'n paar verbeterings wat ek sou aanbring

  1. Hoër ratverhouding vir die motor van die rotasie -as. 'N Hoër ratverhouding beteken dat ek meer akkurate bewegings kan maak. Dit is veral van kritieke belang as die kamera ver van u voorwerp af is en u kamerahoek baie stadig verander. Tans is my motor nie te hoog gerig nie en kan dit 'n effense rukbeweging tot gevolg hê as die kamera -skuifbalk te stadig loop of as daar min rotasiehoek verander word. Die toevoeging van 'n hoë 'D' PID -waarde het my gehelp om daarvan ontslae te raak, maar dit het ten koste gegaan van 'n effens laer akkuraatheid van die opsporing van voorwerpe.
  2. Modulêre lengte. Dit is 'n vergesogte doelwit, maar ek sou graag wou hê dat die kamera-skuifbalk modulêr in lengte is, wat beteken dat u maklik langer spoorlengte kan heg sodat die kamera kan gly. Dit is redelik moeilik, aangesien u beide spore perfek sal moet in lyn bring en moet uitvind hoe die gordelstelsel werk. Tog sou dit 'n goeie opgradering wees!
  3. Aangepaste beweging Sleutelframe. Ek sou graag die konsep van sleutelframe bewegings in hierdie kamera -skuifbalk wou bekendstel. Sleutelframe is 'n tegniek wat baie algemeen gebruik word in video- en klankproduksie. Dit sal nie-lineêre kamerabewegings moontlik maak waar die kamera na 'n posisie gaan, wag, dan met 'n ander spoed na 'n ander posisie beweeg, wag, dan na 'n derde posisie, ens.
  4. Bluetooth/ draadlose telefoon beheer. Dit sou baie gaaf wees om die parameters van die kamera -skuifbalk draadloos te kon instel en die kamera -skuifbalk in moeilike plekke te kan ontplooi. Die telefoon -app kan ook geleenthede bied om sleutelframe te integreer, soos in die laaste paragraaf genoem.

Dit is dit vir hierdie tutoriaal. Voel vry om enige vrae in die kommentaarafdeling hieronder neer te sit.

Vir meer inhouds- en elektroniese tutoriale, kan u my YouTube -kanaal ook hier besoek.

Aanbeveel: