Inhoudsopgave:
- Stap 1: Hardware-ontwerp + Build + 3D-printen
- Stap 3: Programmeren van de cameraschuifregelaar
- Stap 4: De cameraschuif bedienen
- Stap 5: Laatste gedachten + toekomstige verbeteringen
Video: Object Tracking Camera Slider Met Roterende As. 3D-geprint en gebouwd op de RoboClaw DC-motorcontroller en Arduino - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Fusion 360-projecten »
Dit project is een van mijn favoriete projecten sinds ik mijn interesse in het maken van video's heb kunnen combineren met doe-het-zelf. Ik heb altijd gekeken naar en wilde die filmische opnamen nabootsen in films waarin een camera over een scherm beweegt terwijl hij pant om het object te volgen. Dit voegt een zeer interessant diepte-effect toe aan een verder 2D-video. Omdat ik dit wilde repliceren zonder duizenden dollars uit te geven aan Hollywood-uitrusting, besloot ik zelf zo'n cameraschuifregelaar te bouwen.
Het hele project is gebouwd op onderdelen die je in 3D kunt printen, en de code draait op het populaire Arduino-bord. Alle projectbestanden zoals de CAD-bestanden & code zijn hieronder beschikbaar om te downloaden.
CAD/3D-afdrukbestanden hier beschikbaar
Arduino Code-bestand hier beschikbaar
Het project draait om de 2 geborstelde gelijkstroommotoren en de Basic Micro Roboclaw Motorcontroller. Deze motorcontroller kan geborstelde gelijkstroommotoren transformeren in een superieur type servo met ongelooflijke positionele nauwkeurigheid, tonnen koppel en een volledige 360 graden rotatie. Hierover later meer.
Bekijk eerst de video-tutorial die hier is gelinkt voordat we verder gaan. Die tutorial geeft je een overzicht van hoe je dit project kunt bouwen en deze Instructables-gids gaat dieper in op hoe ik dit project heb gebouwd.
Materialen-
- 2x 1 meter lange m10 draadstangen gebruikt om alle onderdelen te verbinden
- 8x M10 moeren om de onderdelen op de draadstangen te monteren
- 2x 95 cm lange 8 mm gladde stalen staven om de slider op te schuiven
- 4x lm8uu lagers voor de slider om soepel over de stalen staven te schuiven
- 4x 10mm lange m3 moeren voor montage van de motor
- 2 x skateboardlagers (22 mm buitendiameter, 8 mm binnendiameter) voor de rotatie-as
- 1x 15mm lager voor de spanzijde
- 1x 4cm lange m4 bout met m4 borgmoer voor montage van het rondsellager op het 3d geprinte deel van de spanrol.
- Tandwiel met 20 tanden en een binnendiameter van 4 mm voor de schuifmotor. De exacte poelie is niet erg belangrijk, omdat uw gelijkstroommotor moet zijn afgestemd op voldoende koppel. Zorg ervoor dat het dezelfde toonhoogte heeft als uw riem
- 2 meter lange GT2 riem. Nogmaals, u kunt elke riem gebruiken, zolang deze overeenkomt met de tandafstand van uw katrol.
Elektronica
- 2 * Geared DC-motoren met encoders (één regelt de zijwaartse beweging, terwijl de andere de rotatie-as regelt). Hier is degene die ik heb gebruikt. Meer hierover in het gedeelte Elektronica van de gids
- RoboClaw DC-motorcontroller. (Ik gebruikte de dubbele 15Amp-controller omdat ik hiermee beide motoren met één controller kon bedienen)
- Elke Arduino. Ik gebruikte de Arduino UNO
- Batterij/ Stroombron. (Ik gebruikte een 7,4V 2-cell LiPo-batterij)
- Scherm (Voor het weergeven van het menu. Elk U8G-compatibel scherm zal werken, ik heb dit 1,3 inch OLED-scherm gebruikt)
- Rotatry-encoder (voor het navigeren en configureren van opties in het menu)
- Fysieke drukknop (voor het activeren van de beweging van de schuifregelaar)
Stap 1: Hardware-ontwerp + Build + 3D-printen
Laten we nu verder gaan met de elektronica. De elektronica is waar dit project veel flexibiliteit heeft.
Laten we beginnen met de kern van dit project: de 2 geborstelde gelijkstroommotoren.
Ik koos om een paar redenen voor geborstelde gelijkstroommotoren.
- Geborstelde motoren zijn veel eenvoudiger te bedraden en te bedienen in vergelijking met stappenmotoren
- Geborstelde gelijkstroommotoren zijn veel lichter dan gelijkstroommotoren, wat vooral belangrijk is voor de rotatie-asmotor, aangezien die motor fysiek zijdelings met de camera meebeweegt en deze zo licht mogelijk maken is belangrijk om overmatige belasting van de schuifmotor van de primaire camera te voorkomen.
Ik koos voor deze specifieke DC-motor. Deze motor gaf me een extreem hoog koppel dat nodig was om zo'n zware camerabelasting te verplaatsen. Bovendien betekende de hoge versnelling dat het piektoerental laag was, wat betekende dat ik langzamere bewegingen kon filmen, en de hoge versnelling leidde ook tot een hogere positionele nauwkeurigheid, aangezien een rotatie van 360 graden van de uitgaande as 341,2 tellen van de encoder van de motor betekende.
Dit brengt ons bij de RoboClaw-bewegingscontroller. De Roboclaw motor dual DC motorcontroller neemt eenvoudige instructies van je Arduino via eenvoudige code-opdrachten en doet alle zware verwerking en vermogensafgifte om je motor te laten functioneren zoals bedoeld. De Arduino kan signalen naar de Roboclaw sturen via PWM, analoge spanning, eenvoudig serieel of pakketserieel. Packet-serieel is de beste manier om te gaan, omdat het u in staat stelt om informatie terug te krijgen van de Roboclaw die nodig is voor het positioneel volgen. Ik zal in de volgende stap (programmeren) dieper in het software/programmeergedeelte van de Roboclaw duiken.
In wezen kan de Roboclaw een DC-borstelmotor met een encoder transformeren om meer op een servo te lijken, dankzij het vermogen van de RoboClaw om positiecontrole uit te voeren. Maar in tegenstelling tot een traditionele servo, heeft uw geborstelde gelijkstroommotor nu veel meer koppel, veel meer positionele nauwkeurigheid vanwege de hoge motoroverbrenging, en het belangrijkste is dat uw gelijkstroommotor continu 360 graden kan draaien, wat geen van beide een traditionele servo niet kan doen.
Het volgende elektronische onderdeel is het scherm. Voor mijn scherm heb ik voor dit OLED-paneel gekozen vanwege het formaat en het hoge contrast. Dit hoge contrast is ongelooflijk en maakt het scherm zeer gemakkelijk te gebruiken in direct zonlicht, terwijl het niet te veel licht geeft dat een mogelijke donkere camera-opname kan verstoren. Dit scherm kan eenvoudig worden verwisseld voor een ander U8G-compatibel scherm. De volledige lijst met compatibele schermen is hier beschikbaar. In feite is dit project opzettelijk gecodeerd rond de U8G-bibliotheek, zodat doe-het-zelvers zoals jij meer flexibiliteit hadden in hun onderdelen
De laatste elektronica-onderdelen voor dit project waren de roterende encoder en de drukknop om de schuifbeweging te starten. Met de encoder kunt u door het menu van het scherm navigeren en alle menu's van de schuifregelaar configureren met slechts één draaiknop. De roterende encoder heeft geen 'eind'-positie zoals een traditionele potentiometer, en dit is vooral handig voor het tweaken van x- en y-coördinaten van het volgen van objecten op het scherm. De drukknop wordt uitsluitend gebruikt om de beweging van de schuifregelaar te starten zonder dat u aan de roterende encoder hoeft te sleutelen.
Stap 3: Programmeren van de cameraschuifregelaar
Coderen was verreweg de moeilijkste uitdaging van dit project. Zie je, vanaf het begin wilde ik dat de schuifregelaar vanaf een scherm bestuurbaar was. Om dit project compatibel te maken met zoveel mogelijk schermen, moest ik de U8Glib-bibliotheek voor de Arduino gebruiken. Deze bibliotheek heeft ondersteuning voor meer dan 32 schermen. De U8Glib-bibliotheek gebruikte echter een beeldlus om het menu op het scherm te tekenen en dit was in strijd met het vermogen van de Arduino om tegelijkertijd informatie te verzamelen over de positie van de camera die nodig was voor de camerahoekberekeningsfunctionaliteit (dit wordt behandeld in de volgende paragrafen). De U8Glib2 heeft een alternatief voor de beeldlus door gebruik te maken van iets dat een volledige paginabufferoptie wordt genoemd, maar de bibliotheek nam te veel geheugen in beslag en maakte het moeilijk om de rest van de code in te passen, gezien de geheugenbeperkingen van de Arduino Uno. Dit betekende dat ik vastzat met U8G en het probleem moest omzeilen door te voorkomen dat het scherm werd bijgewerkt wanneer de schuifregelaar in beweging was en de Arduino positiegegevens van de Roboclaw moest verzamelen. Ik werd ook gedwongen om de schuifregelaar te activeren om buiten de menulus te gaan, want zodra ik de submenu's binnenging, zou ik in de beeldlus zijn en de schuifregelaar zou niet werken zoals bedoeld. Ik heb dit probleem ook omzeild door een aparte fysieke knop de beweging van de schuifregelaar te laten activeren.
Laten we het vervolgens hebben over het rotatievolgelement. Dit onderdeel lijkt erg ingewikkeld om te integreren, maar het is eigenlijk vrij eenvoudig. De implementatie hiervoor is onder de functie 'motor ()' in mijn Arduino-code. De eerste stap is om een 2-dimensionaal raster te maken en te beslissen waar het object dat u wilt volgen wordt geplaatst. Op basis daarvan kun je een driehoek tekenen naar je huidige locatie. U kunt uw huidige locatie uit de encoderwaarde van de motor halen. Als u de positie van het gevolgde object in cm/mm wilt configureren, moet u uw encoderwaarde vertalen naar een cm/mm-waarde. Dit kan eenvoudig door de cameraschuif 1 cm te verplaatsen en de toename van de encoderwaarde te meten. U kunt deze waarde bovenaan de code invoeren onder de variabele encoder_mm.
Verderop, nu zullen we de inverse tangensfunctie gebruiken om de hoek te krijgen waarin de camera moet staan om naar uw object te wijzen. De inverse tangens neemt de tegenoverliggende en aangrenzende zijde van de driehoek in. De andere kant van de driehoek verandert nooit, omdat dit de y-afstand is van uw schuifregelaar tot het object. De aangrenzende zijde van de cameraschuifregelaar verandert echter wel. Deze aangrenzende zijde kan worden berekend door de x-positie van het object te nemen en uw huidige positie ervan af te trekken. Terwijl de schuifregelaar door zijn bewegingsbereik beweegt, blijft hij de Arduino bijwerken op de encoderwaarde. De Arduino converteert deze encoderwaarde herhaaldelijk naar een cm/mm x positionele waarde en berekent vervolgens de aangrenzende zijlengte en berekent ten slotte de hoek die de camera te allen tijde moet hebben om naar het object te wijzen.
Nu onze Arduino de camerahoek dynamisch verwerkt, kunnen we deze hoek omzetten in een positionele waarde waar de rotatiemotor naartoe moet. Dit brengt ons bij de grootste functie van de RoboClaw voor dit project. Door de Roboclaw een positiewaarde te geven, kan het er in wezen voor zorgen dat een DC-borstelmotor zich als een servo gedraagt. Behalve in tegenstelling tot een servo, heeft onze motor tonnen meer koppel, een veel hogere nauwkeurigheid en kan hij ook 360 graden draaien.
De Arduino-code om de Roboclaw naar een bepaalde positie te verplaatsen is als volgt:
roboclaw. SpeedAccelDeccelPositionM1(adres, 'speed', 'acceleration', 'deceleration', 'position you want to go', 1);
Om de positiewaarde van de motor af te stemmen op uw camerahoek, moet u de cameraplaat handmatig 180 graden bewegen. Bekijk vervolgens hoeveel de encoderwaarde is veranderd van het verplaatsen van de cameraplaat van 0 graden naar 180 graden. Dit geeft u uw encoderbereik. U kunt dit bereik invoeren in de motorfunctie die de camerahoek van de Arduino toewijst aan een positionele waarde. Dit wordt ook vermeld in de code, dus het zou gemakkelijk te vinden moeten zijn *****
De RoboClaw gaf me ook de mogelijkheid om andere factoren af te stemmen, zoals versnelling, vertraging en PID-waarden. Dit stelde me verder in staat om de beweging van de rotatie-as af te vlakken, vooral wanneer de hoekveranderingen klein waren en schokken toevoegden zonder hoge 'D' PID-waarde. U kunt uw PID-waarden ook automatisch afstemmen via de desktop-app van Roboclaw.
Stap 4: De cameraschuif bedienen
Nu komen we bij het leuke gedeelte, het bedienen van de schuifregelaar. Het menu heeft 4 hoofdtabbladen. Het bovenste tabblad is gewijd aan snelheidsregeling. De middelste rij van het menu bevat tabbladen om de X & Y-positie van het gevolgde object in mm te configureren, en ook om te configureren of we willen dat de schuifregelaar draait en ons object volgt of gewoon een eenvoudige schuifbeweging maakt zonder rotatie. Door aan de roterende encoder te draaien, kunnen we door de verschillende opties van de menu's navigeren. Om een van de opties te configureren, navigeert u naar de optie en drukt u op de draaiknop. Eenmaal ingedrukt, verandert het draaien aan de roterende encoder de waarde van het gemarkeerde submenu in plaats van door het menu te bladeren. Zodra u de gewenste waarde heeft bereikt, kunt u opnieuw op de roterende encoder klikken. U bent nu terug in het hoofdmenu en kunt navigeren tussen de verschillende tabbladen. Als je klaar bent, druk je gewoon op de go-knop naast het scherm en de slider doet zijn werk!
Zorg er wel voor dat als je eenmaal klaar bent met het gebruik van de cameraschuifregelaar, de camera in de 'thuis'-positie staat: de kant van de schuifregelaar waarop hij begon. De reden hiervoor is dat de motor-encoder geen absolute encoder is, wat betekent dat de Roboclaw/Arduino niet kan zien waar de encoder is. Ze kunnen alleen zien hoeveel de encoder is veranderd sinds deze voor het laatst is ingeschakeld. Dit betekent dat wanneer u uw cameraschuifregelaar uitschakelt, de schuifregelaar de schuifregelaarpositie zal 'vergeten' en de encoder terugzet op een 0. Daarom, als u uw schuifregelaar aan de andere kant uitschakelt, wanneer u hem inschakelt, zal de schuifregelaar probeer verder te gaan dan de rand en bots tegen de schuifwand. Dit encodergedrag is ook de reden waarom de camera de rotatiehoek opnieuw instelt na elke beweging van de cameraschuif. De rotatie-as beschermt zichzelf ook tegen crashen tegen het einde van zijn bewegingsbereik.
U kunt dit oplossen door eindstops en een homing-procedure toe te voegen wanneer u opstart. Dit is wat 3D-printers gebruiken.
Stap 5: Laatste gedachten + toekomstige verbeteringen
Ik raad ten zeerste aan dat elke bouwer zijn eigen versies van deze schuifregelaar maakt in plaats van exact dezelfde schuifregelaar te bouwen. Door mijn ontwerp aan te passen, kunt u uw schuifregelaar volgens uw exacte specificaties bouwen, terwijl u ook beter begrijpt hoe de elektronica en code werken.
Ik heb de code zo leesbaar en configureerbaar mogelijk gemaakt, zodat u de verschillende codevariabelen kunt aanpassen / kalibreren voor uw schuifregelaarspecificaties. De code is ook volledig opgebouwd rond functies, dus als u bepaalde gedragingen van de schuifregelaar wilt kopiëren/tweaken/herschrijven, hoeft u niet de hele code te reverse-engineeren en opnieuw te bewerken, maar alleen de delen die u wilt bewerken.
Tot slot, als ik een versie 2.0 zou maken, zijn hier enkele verbeteringen die ik zou aanbrengen:
- Hogere overbrengingsverhouding voor de rotatie-asmotor. Een hogere gearing ratio betekent dat ik preciezere kleine bewegingen kan maken. Dit is vooral belangrijk wanneer de camera ver van uw object verwijderd is en uw camerahoek zeer langzaam verandert. Momenteel is mijn motor niet te hoog afgesteld en kan het resulteren in een licht schokkerige beweging als de cameraschuif te langzaam loopt of als er heel weinig verandering in de rotatiehoek is. Het toevoegen van een hoge 'D' PID-waarde heeft me geholpen om hiervan af te komen, maar dit ging ten koste van een iets lagere nauwkeurigheid van het volgen van objecten.
- Modulaire lengte. Dit is een vergezocht doel, maar ik zou graag hebben dat de cameraschuifregelaar modulair in lengte is, wat betekent dat je gemakkelijk langere stukken spoor kunt bevestigen waarop de camera kan schuiven. Dit is best moeilijk omdat je beide sporen perfect moet uitlijnen en uitzoeken hoe het gordelsysteem werkt. Desalniettemin zou het een coole upgrade zijn!
- Aangepaste beweging Keyframing. Ik zou graag het concept van keyframed-bewegingen in deze cameraschuifregelaar introduceren. Keyframing is een techniek die veel wordt gebruikt bij video- en audioproductie. Het zou niet-lineaire camerabewegingen mogelijk maken waarbij de camera naar een positie gaat, wacht, dan naar een andere positie gaat met een andere snelheid, wacht, dan naar een derde positie gaat enz.
- Bluetooth / draadloze telefoonbediening. Het zou echt gaaf zijn om de parameters van de cameraschuifregelaar draadloos te kunnen configureren en de cameraschuifregelaar op moeilijk bereikbare locaties te kunnen inzetten. De telefoon-app kan ook mogelijkheden bieden om keyframing te integreren, zoals vermeld in de laatste paragraaf.
Dat was het voor deze tutorial. Voel je vrij om eventuele vragen in de comments hieronder neer te zetten.
Voor meer tutorials over inhoud en elektronica kun je hier ook mijn YouTube-kanaal bekijken.
Aanbevolen:
Hoe ik mijn elektrische fietsgenerator heb gebouwd: 10 stappen
Hoe ik mijn elektrische fietsgenerator heb gebouwd: Paul Fleck
Ombouwen van een Sabertooth naar een RoboClaw Motor Controller: 3 stappen
Ombouwen van een Sabertooth naar een RoboClaw-motorcontroller: De Dimension Engineering-lijn van Sabertooth-motorcontrollers en de BasicMicro-lijn van RoboClaw-controllers zijn populaire keuzes voor roboticaprojecten op instapniveau. Ze gebruiken echter twee heel verschillende systemen voor het configureren van de controller. De Sab
Een geweldig klinkende Bluetooth-luidspreker gebouwd - Upcycled!: 7 stappen (met afbeeldingen)
Een geweldig klinkende Bluetooth-luidspreker gebouwd | Upcycled!: Een tijdje geleden stuurde mijn vriend me een foto van een oude luidsprekerkast die op zijn dak lag. Zoals je op de afbeelding kunt zien (in de volgende stap), is het in een vreselijke staat. Gelukkig, toen ik hem vroeg om het aan mij te geven, stemde hij toe. Ik was van plan om te bouwen
DJi F450 Quadcopter Hoe te bouwen? Zelf gebouwd.: 7 stappen (met afbeeldingen)
DJi F450 Quadcopter Hoe te bouwen? Zelf gebouwd.: Dit was een zelfgebouwde drone die werd bestuurd door hobbykoning 6-kanaals zender en ontvanger en Kk2.1.5-vluchtcontroller, normaal worden hiervoor borstelloze motoren met een bereik van 1000KV gebruikt, maar voor mijn project heb ik 1400KV-motoren gebruikt voor de beste prestaties
Arduino - Roterende Led op Beweging - Draagbaar item (geïnspireerd door Chronal Accelerator Tracer Overwatch): 7 stappen (met afbeeldingen)
Arduino - Roterende Led op Beweging - Draagbaar item (geïnspireerd door Chronal Accelerator Tracer Overwatch): Deze instructable helpt je om een accelerometer en een Neopixel Led-ring aan te sluiten. Ik zal de code leveren om de accelerometer te lezen en dit effect te krijgen met je neopixel animatie.Voor dit project heb ik de Adafruit 24bit Neopixel ring gebruikt, en de MP