Hallo,
hier kommt mein ausführlicher Artikel zu meinem Timelapse Slider
(Schlitten für Zeitrafferaufnahmen), welcher mit Hilfe eines Arduinos
und BLE (Bluetooth Low Energy) angesteuert wird.
Das Projekt hat mich etwa 100€ gekostet, was sehr viel günstiger ist als
wenn man einen solchen Slider kauft.
Man muss hier jedoch noch die Teile, welche ich schon hatte
hinzurechnen:
- 10x 1,2V AA Akkus
- Stative
- Diverse Schrauben
Da der Artikel etwas länger ist hier ein kleiner Überblick über das was
folgt:
1. Mechanischer Aufbau
2. Elektronik
3. Software
4. Code
5. Weiterentwicklung
6. Kaufen
———————————————————————————
1 Mechanischer Aufbau
Der Slider besteht aus einem 100cm langen 60x20 V-Slot Profil, diese
benutzt man meistens für CNC Maschinen, da sie sehr stabil sind.
Jedem der einen Slider bauen möchte kann ich diese sehr empfehlen.
Zuerst wollte ich es über Rundstangen und Linearführungen realisieren,
jedoch musste ich feststellen dass die Stangen sich unter dem Gewicht
der Kamera doch sehr durchbiegen und so eine gute Aufnahme nicht möglich
ist.
Auf der Unterseite der Schiene befinden sich an den Enden jeweils eine
Halterung um den Slider auf ein 3/8“ Stativgewinde zu schrauben. Hier
kann man auch Stative mit 1/4“ nutzen, welche man mit einem 3/8“ Adapter
ausstattet.
Der Schlitten, welcher auf der Schiene sitzt gehört auch zum V-Slot
System. Die Basis bildet eine Gantry Plate, welche schon viele passende
Bohrungen hat. An dieser habe ich 4 Dual Laufrollen befestigt. Diese
Kombination hält sehr fest und wackelt so gut wie garnicht.
An der Platte ist seitlich noch eine Motorhalterung angebracht an
welcher ein NEMA 17 (12V 0.4A) Schrittmotor befestigt ist. Dieser ist
von Nöten, da ich einen Slider haben wollte, welcher beim Belichten der
Kamera anhält, sodass man auch längere Belichtungszeiten verwenden kann.
Über den Motor läuft ein Zahnriemen, welcher an den Enden befestigt ist.
Es bewegt sich also das ganze Paket aus Kamera und Motor. Dies habe ich
so gewählt, da man sich so am Ende eine Umlenkrolle spart und man so nur
einen Kabelstrang (Motorkabel und Auslösekabel) hat.
Auf der Platte befindet sich noch ein Kugelkopf auf dem die Kamera
montiert wird. Hier muss man jedoch beachten, dass unter der Platte zum
Schlitten so gut wie kein Platz mehr ist und man deshalb eine Schraube
mit einem sehr flachen Kopf verwenden muss.
2 Elektronik
Das Herz des Sliders ist ein Arduino Nano. Der Controller eignet sich
sehr gut, da er klein ist und wenig Strom verbraucht. Um eine Verbindung
über BLE herzustellen wird ein HM-10 BLE Modul verwendet.
Der Motor wird über ein A4988 Schrittmotor Treiber angesteuert und
braucht nur 2 Datenkabel zum Arduino.
Die Kamera wird über ein Relay und die Fernauslöserbuchse angesteuert
und löst aus wenn das Relay sich schließt.
Hier sollte auch ein Optokoppler ausreichen, welcher auch deutlich
weniger Strom verbrauchen würde. Ich hatte jedoch keinen zur Hand und
habe erstmal ein Relay eingebaut.
All diese Sachen befinden sich auf einer Lochrasterplatine, sodass es
nicht ganz so viel Kabelsalat gibt.
Das ganze System wird mit etwa 12V über 10 AA Akkus betrieben um mobil
zu sein. Man könnte jedoch bis 30V anschließen. Hier muss dann jedoch in
den vorgesehenen Platz ein L7812 eingesteckt werden, sonst würde der
Arduino der Spannung unterliegen.
Die Spannungsversorgung wird noch durch einen einfachen Schalter
unterbrochen.
3 Software
Da ich noch keine Erfahrung mit Swift habe bin ich erstmal den einfachen
Weg mit Blynk gegangen um meinen Slider anzusteuern.
Ganz oben hat man zwei Button um den Wagen entweder an das linke oder
rechte Ende zu bewegen.
Es ist nicht möglich eine rechtsseitige Bewegung auszulösen, wenn sich
der Wagen schon am rechten Ende befindet. Man hat hier eine
elektronische Sperre, weshalb Endschalter nicht nötig sind (Spart
Gewicht, Kabel und Geld).
Des Weiteren gibt es zwei Felder in welchen man die Anzahl der Bilder
und das Intervall einstellt.
Meine Videos haben am Ende 25 fps, weshalb man immer ein vielfaches von
25 auswählen kann. Zum Beispiel ergeben 250 Bilder 10 Sekunden fertiges
Video.
Hat man alles eingestellt, so kann man den Start Button drücken.
Im 16x2 LCD wird der Fortschritt der Aufnahme angezeigt, also wie viele
Bilder schon gemacht wurden.
—> 2 von 250
Über die Blynk App lässt sich sehr leicht eine Verbindung zum Smartphone
herstellen und durch die eigene Library ist die Programmierung recht
leicht. Einziger Nachteil ist, dass man stets eine aktive
Internetverbindung benötigt (Über mobiles Netz kein Problem, da der
Datenverbrauch sehr gering ist). Außerdem muss man das Program immer
Neustarten wenn man das BLE Modul verbinden möchte.
4 Code
Durch Blynk und den A4988 Motortreiber ist das Arduino Sketch recht
kurz.
Man muss jedoch beachten, dass ich kein Profi im Programmieren bin und
ich nach dem Motto „Hautsache es läuft“ arbeite.
Ich dachte mir ich poste einfach den ganzen Code, da man es so am besten
versteht. Im Code befinden sich Anmerkungen was die einzelnen Sachen
bewirken.
Man muss jedoch das Verhältnis zwischen den Schritten die der Motor
machen muss und den Bildern die gemacht werden beachten.
Bei mir muss der Motor 5500 Schritte machen um die ganze Strecke
zurückzulegen. Mache ich 250 Bilder, so werden pro Bild 22 Schritte
gemacht.
Würde ich mein Video mit 30 fps abspielen, so würde ich 300 Bilder
machen, was 18,33 Schritte pro Bild ergeben würde. Da der Motor
natürlich keine 0,33 Schritte machen kann, würde er diese verlieren.
Dies macht bei 300 Bildern schon 99 Schritte die fehlen. So würde der
Schlitten nicht am Ende ankommen. Es ist also wichtig, dass
Schritte/Bilder eine ganze Zahl ergibt.
Hier der Code:
[siehe Dateianhang --rufus]
5 Weiterentwicklung
Punkte die ich noch verbessern werde:
- Gehäuse der Elektronik, da es noch nicht sehr passgenau ist.
- Kabel zum Motor, da man es nicht von der Elektronik-Box abnehmen kann.
Hier soll eventuell ein 6 poliger Stecker zum Einsatz kommen.
- Befestigung des Zahnriemen, da die Schrauben recht lose sitzen
- Weitere Modi: Video (Echtzeit)
6 Kaufen
Die mechanischen Bauteile (V-Slot) habe ich alle von:
http://www.watterott.com
Die elektronischen von Ebay. Wenn man noch etwas Geld sparen möchte kann
man die auch direkt aus China bestellen, dauert dann aber natürlich
deutlich länger.
———————————————————————————
Für eure Kommentare, Fragen, Anmerkungen, Kritiken bin ich gerne da
Gruß Tom
Großes Daumen hoch - schönes Projekt und guter Artikel.
Besonderen Dank für die benennung der mechanischen Komponenten die auch
schon in so manchen ähnlichen Projekten gezeigt wurden, aber nicht so
benannt wurden das man sich weitere Info ergoogeln konnte.
Danke auch für den Hinweis für die Quelle der mechanischen Bauteile die
erfreulicher Weise nicht so teuer sind wie ich es befürchtet habe.
Auch gut ist es das dein Projekt ohne eine Drehbank, Fräse oder
ähnliches Werkzeug auskommen was leider bei vielen verwandten Projekten
nicht der Fall ist und für die meisten Nachbauer oder sich Ideen
Beschaffer (ja kein schönes Deutsch aber was soll's) die Sache leider
sinnlos macht.
Aber nicht bei dir, daher nochmals:
Vielen Dank !
Jemand schrieb:> Auch gut ist es das dein Projekt ohne eine Drehbank, Fräse oder> ähnliches Werkzeug auskommen was leider bei vielen verwandten Projekten> nicht der Fall ist
Vielen Dank!
Genau dies war auch mein Problem, da ich keines dieser Werkzeuge habe.
Aus diesem Grund habe ich gezielt versucht diesem Problem aus dem Weg zu
gehen und trotzdem ein genaues Ergebnis zu erzielen.
Tom schrieb:> Für eure Kommentare, Fragen, Anmerkungen, Kritiken bin ich gerne da
Preisfrage:
Was steht hier im Forum über jedem Textfeld zum Posten von Beiträgen?
Preisantwort:
Zum Beispiel:
------------------------------------------
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
------------------------------------------
Hallo,
@Anal Phabet (Gast):
Preisfrage: was ist manchmal flüssiger als Wasser?
Tom schrieb:
1
> BLYNK_WRITE(V4) //Auswahl des Intervals
2
> {
3
interval = param.asInt() * 1000;
4
}
hätte hier den gleichen Zweck erfüllt.
Ohne BLYNK zu kennen gehe ich davon aus, daß nur Werte ankommen können,
die in der App vereinbart sind.
Falls beliebige Werte gewünscht sind:
oben bei den Variable:
1
//Variablen
2
int intwerte[19] = {0,1000,1500,2000,3000, ... ,30000};
Michael U. schrieb:>> BLYNK_WRITE(V4) //Auswahl des Intervals>> {> interval = param.asInt() * 1000;> }
So wie du es hier beschrieben hast würde es nicht gehen da er nur die
Nummer vom case weiter gibt. So lange der case gleich der Sekunde ist
würde das glaube ich gehen. Ich habe jedoch bei case 18 30 Sekunden.
Wenn man einen Slider anstatt der Liste verwendet, dann würde es genau
so gehen wie du es beschrieben hast
Michael U. schrieb:> //Variablen> int intwerte[19] = {0,1000,1500,2000,3000, ... ,30000};> ...>> BLYNK_WRITE(V4) //Auswahl des Intervals> {> interval = intwerte[param.asInt()];> }
Ist das hier mit einem Array und dann wählt er die Werte aus dem Array
aus?
Gruß
Schönes Projekt - auch von mir ein dickes Lob für die tolle Anleitung
etc.!
Die Art und Weise, wie Du den Slider bewegst, ist übrigens echt clever -
das hatte ich so bislang noch nie gesehen.
Hallo,
Tom schrieb:> Michael U. schrieb:>> //Variablen>> int intwerte[19] = {0,1000,1500,2000,3000, ... ,30000};>> ...>>>> BLYNK_WRITE(V4) //Auswahl des Intervals>> {>> interval = intwerte[param.asInt()];>> }>> Ist das hier mit einem Array und dann wählt er die Werte aus dem Array> aus?
genau. Array mit den geünschten Werten erstellen und dann den Wert mit
dem von BLYNK kommenden als Index zuweisen.
Aufpassen mit der Arrayanlage, der erste Wert ist Index 0.
Gruß aus Berlin
Michael
Michael U. schrieb:> genau. Array mit den geünschten Werten erstellen und dann den Wert mit> dem von BLYNK kommenden als Index zuweisen.> Aufpassen mit der Arrayanlage, der erste Wert ist Index 0.
Alles klar, also wär es einfach um einen versetzt.
Gruß
Die Formatierung Deines Sourcecodes ist irgendwie ziemlich kaputt.
Auch bindest Du keine "Libarys" ein, sondern nur Headerdateien. Eine
Library ist etwas komplett anderes, auch wenn die ... Herrschaften, die
die Arduino-Welt geschaffen haben, das nicht kapieren wollen.
Ansonsten habe ich einen Dateianhang draus gemacht, den kann man jetzt
mit der Sourcecodeansicht des Forums betrachten:
https://www.mikrocontroller.net/attachment/highlight/366287
Rufus Τ. F. schrieb:> Auch bindest Du keine "Libarys" ein, sondern nur Headerdateien. Eine> Library ist etwas komplett anderes, auch wenn die ... Herrschaften, die> die Arduino-Welt geschaffen haben, das nicht kapieren wollen.
Im C Sprachgebrauch vielleicht.
Bei Arduino werden die Libraries teilweise über den Bibliotheksverwalter
gehandelt und die IDE kümmert sich drum, dass sie mit eingebunden
werden.
Insofern wäre es wichtig, die benötigten Libraries aufzulisten, falls
sie nicht zum Standard gehören, mit Link.
Wolfgang schrieb:> Im C Sprachgebrauch vielleicht.
In C++ (das die Grundlage für Arduinos ist) ist das nicht anders.
Es ist eine hochgradig unglückliche Entscheidung von den Arduino-Machern
gewesen, weil sie es Programmierern, die versuchen, den
Arduino-Suppenteller zu verlassen, vor unerwartete und schwer zu
kommunizierende Verständnisprobleme stellt, wie man in diesem Forum (in
dem auch ich schon einige Jährchen mitlese) nur zu oft feststellen kann.