Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Timelapses er flotte! De hjelper oss med å ta en titt på den sakte bevegelige verden, som vi kanskje glemmer å sette pris på skjønnheten i den. Men noen ganger kan en jevn timelapse -video være kjedelig, eller det skjer så mange ting rundt at bare en vinkel ikke er tilstrekkelig. La oss krydre det!
I denne instruksen vil jeg vise deg hvordan jeg har laget en enhet som vil legge til bevegelse i timelapse. La oss komme i gang!
Trinn 1: Planen
Jeg ønsket at kameraet skulle bevege seg i to retninger, dvs. i horisontal (X) og vertikal (Y) akse. For det trenger jeg to motorer.
Vi bør kunne velge start- og stopposisjon for begge aksene.
Motorens bevegelse ville være slik at aksene etter hvert foto skulle snu med 1 grad.
For å få så presis kontroll vil jeg bruke Servomotorer.
Vi bør også kunne angi tidsintervallet.
Jeg ville at den skulle være bærbar, så jeg bestemte meg for å kjøre den på et LiPo -batteri, noe som betyr at lading og boostkrets vil være nødvendig.
Og til slutt vil hjernen for å kontrollere alt dette være Arduino. ATMega328p vil bli brukt som en frittstående mikrokontroller.
Jeg gikk med et GoPro -kamera, ettersom det er lite, og det er enkelt å ta timelapses med det. Du kan gå med et annet lite kamera eller mobiltelefonen din.
Trinn 2: Liste over komponenter
1x ATmega328p (med Arduino bootloader)
2x MG995 servomotor
1x MT3608 Boost -omformer
1x TP4056 LiPo batterilademodul
1x SPDT -bryter
1x 16 MHz krystall
2x 22pF kondensator
2x 10k motstand
1x potensiometer (hvilken som helst verdi)
1x trykknapp (normalt åpen)
Valgfri:
3D -skriver
Trinn 3: Utforming av kretskortet
For å gjøre kretsen så liten som mulig, gikk jeg med et kretskort. Du kan etse brettet selv hjemme eller la fagfolkene gjøre det harde arbeidet for deg, og det er det jeg gjorde.
Når alt fungerer rett på brødbrettet, kan vi starte med PCB -designprosessen. Jeg valgte EasyEDA for å designe, da det gjør ting enkelt for nybegynnere som meg.
Sjekk, sjekk og sjekk! Sørg for at du ikke gikk glipp av noe. Når du er helt sikker, klikker du på Generer fabrikasjonsfil for å laste ned Gerber -filene, eller du kan bestille den direkte fra JLCPCB for bare 2 $ ved å bruke alternativet nedenfor.
Når du mottar/lager PCB -en, er det på tide å fylle den ut. Hold kretsdiagrammet klart og begynn å lodde komponentene i henhold til silketrykket.
Rengjør kretskortet etter lodding med Iso Propyl Alcohol for å fjerne fluksresten.
Trinn 4: Å sette ting sammen
Du trenger ikke en fancy 3D -skriver. Delene kan lett bygges med riktige verktøy. Jeg har nylig fått en 3D -skriver og var ivrig etter å bruke den i prosjektet mitt. Jeg fant noen av delene fra Thingiverse.
GoPro Mount:
Servo Horn:
Loddetråder til strømbryteren, gryte og trykknapp med hunnhoder og koble dem til hannhodene på kretskortet.
Last ned og åpne den vedlagte filen i Arduino IDE og last opp koden til Arduino. Etter at du har lastet opp koden, fjerner du IC -en fra Arduino -kortet og setter den inn på PCB -en.
/*Forfatter: IndoorGeek YouTube: www.youtube.com/IndoorGeek Takk for at du lastet ned. Håper du liker prosjektet. */
#inkludere
Servo xServo;
Servo yServo;
int potPin = A0;
int val, xStart, xStop, yStart, yStop; int -knapp = 2; usignert lang tidInterval;
ugyldig oppsett () {
pinMode (knapp, INNGANG); xServo.attach (3); yServo.attach (4); }
void loop () {
xAxis (); forsinkelse (1000); xStart = val; yAxis (); forsinkelse (1000); yStart = val; xAxis (); forsinkelse (1000); xStop = val; yAxis (); forsinkelse (1000); yStop = val; setTimeInterval (); forsinkelse (1000); timelapseStart (); }
void xAxis () {
mens (digitalRead (knapp)! = HIGH) {val = analogRead (A0); val = kart (val, 0, 1023, 0, 180); xServo.write (val); }}
ugyldig yAxis () {
mens (digitalRead (knapp)! = HIGH) {val = analogRead (A0); val = kart (val, 0, 1023, 0, 180); yServo.write (val); }}
void setTimeInterval () {// Endre tidsintervallene i henhold til kameraets timelapse -innstillinger
mens (digitalRead (knapp)! = HIGH) {val = analogRead (A0); hvis (val> = 0 && val = 171 && val = 342 && val = 513 && val = 684 && val = 855 && val <1023) {timeInterval = 60000L; }}}
void timelapseStart () {
usignert lang lastMillis = 0; xServo.write (xStart); yServo.write (yStart); while (xStart! = xStop || yStart! = yStop) {if (millis () - lastMillis> timeInterval) {if (xStart xStop) {xServo.write (xStart); lastMillis = millis (); xStart--; } hvis (yStart xStop) {yServo.write (yStart); lastMillis = millis (); yStart--; }}}}
Trinn 5: Arbeid
Slå PÅ hovedbryteren.
X-aksen vil være aktiv. Vri potten til posisjonen der du vil starte timelapse. Trykk på Select -knappen for å bekrefte startposisjonen. Etter det vil Y-aksen være aktiv. Gjør det samme for å velge startposisjonen for Y-aksen.
Gjenta prosedyren ovenfor for stopp -posisjonen for X- og Y -aksen.
Nå, ved å bruke potten, velg tidsintervallet mellom hvert skudd. Rotasjonen av potten er delt inn i 6 deler i intervaller 1 sek, 2 sek, 5 sek, 10 sek, 30 sek og 60 sek. Du kan endre intervallene i setTimeInterval () -funksjonen som vist på bildet. Trykk på Select -knappen for å bekrefte det.
Servoene kommer til startposisjonen og beveger seg med 1 grad etter tidsintervallet.
Sekvens:
- Angi startposisjon for X-aksen
- Angi startposisjon for Y-aksen
- Angi stoppunktet for X-aksen
- Still inn stoppstilling for Y-aksen
- Angi tidsintervallet
Trinn 6: Fremtidige oppgraderinger
1) For øyeblikket, på grunn av 1 skudd/grad, er det flest antall bilder vi kan få 180 da servoer kan rotere fra 0 til 180 grader. Ved å legge til gir vil oppløsningen øke. Dermed vil vi få flere bilder og dermed jevne tidsforløp. Jeg er ganske komfortabel med elektronikk, men ikke så mye med mekaniske ting. Ser frem til å forbedre den.
2) Potensiometeret kan erstattes av en roterende encoder.
3) Trådløs kontroll, kanskje ?!
Det er mye å lære
Trinn 7: Kos deg
Takk for at du holdt ut til slutten. Håper dere alle liker dette prosjektet og lærte noe nytt i dag. Gi meg beskjed hvis du lager en selv. Abonner på YouTube -kanalen min for flere kommende prosjekter. Takk igjen!