Forum: Projekte & Code Zeitraffer Slider mit Arduino BLE (Artikel)


von Tom (Gast)


Angehängte Dateien:

Lesenswert?

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

: Bearbeitet durch User
von Jemand (Gast)


Lesenswert?

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 !

von Tom (Gast)


Lesenswert?

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.

von Anal Phabet (Gast)


Lesenswert?

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
------------------------------------------

von Tom (Gast)


Lesenswert?

Anal Phabet schrieb:
> Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Habe ich übersehen, sorry, nächstes Mal

von Michael U. (amiga)


Lesenswert?

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};
3
 ...
4
5
 BLYNK_WRITE(V4) //Auswahl des Intervals
6
 {
7
    interval = intwerte[param.asInt()];
8
 }

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Tom (Gast)


Lesenswert?

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

von Tom (Gast)


Lesenswert?

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ß

von Joachim S. (oyo)


Lesenswert?

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.

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

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

von Tom (Gast)


Lesenswert?

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ß

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Wolfgang (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Tom (Gast)


Lesenswert?

Wolfgang schrieb:
> Insofern wäre es wichtig, die benötigten Libraries aufzulisten, falls
> sie nicht zum Standard gehören, mit Link.

Ich habe einmal die StepperDriver library verwendet:

https://github.com/laurb9/StepperDriver

und die Blynk library:

https://github.com/blynkkk/blynk-library/releases/tag/v0.5.2

Rufus Τ. F. schrieb:
> Ansonsten habe ich einen Dateianhang draus gemacht, den kann man jetzt
> mit der Sourcecodeansicht des Forums betrachten:

Super Danke

von Alex (Gast)


Lesenswert?

Sieht sehr interessant aus und gar nicht mal so teuer im Gegensatz zu 
den ganzen fertigen Teilen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.