Water Drop (Pro) – Sensor Add-On

Wie ich es bereits im Water Drop (Pro) Beitrag (diesen sollte man zuerst lesen) angekündigt habe folgt hier das Sensor Add-On. Da die Hardware der Pro-Version bereits für einen Sensor ausgelegt ist, waren nur noch kleinere Änderungen in der Software zu erledigen und ein funktionierender Sensor zu bauen. Wer den Beitrag über die Advanced-Version gelesen hat, der wird bereits einen Verdacht haben, was nun folgt. Die Idee des Sensors beruht nämlich auf der selben wie in der älteren Version der Water Drop Reihe – einer Laserlichtschranke.

Um auch alles Zusatzmaterial auf einmal zu bekommen, habe ich das Projektverzeichnis auf dem Webserver aktualisiert. Die neuen Dateien können hier heruntergeladen werden.

Der Sensor

Für eine Laserlichtschranke braucht man einen Sender und einen Empfänger. Da ich keine Reflexlichtschranke baue sind beide Geräte in unterschiedlichen Gehäusen verbaut. Als Sender nutze ich einen alten Laserpointer, aus dem ich die Batterien entfernt habe, und diese durch zwei Kabel ersetzt habe.

Sensor_Laserpointer.jpg

Der Laserpointer benötigt 3V Spannung und 15mA Strom. Deshalb kann ich ihn direkt mit einem digitalen Output-Pin des Arduinos (max. 40mA) betreiben. Wer einen Laserpointer mit mehr Leistung nutzen will, der muss, um das Arduino nicht zu zerstören, ein Relais oder einen Transistor zwischenschalten. Der Kabelbinder am Gehäuse dient dazu, den Schalter permanent gedrückt zu halten. Wem das stört, der kann auch das Gehäuse öffnen und die Kontakte des Schalters gemeinsam verlöten.

Da der Laserpointer mit 3V arbeitet, das Arduino jedoch 5V ausgibt, benötigt man zusätzlich einen Spannungsteiler (im Grunde die einfache Variante des Logic Level Shifters).

Spannungsteiler_Sensor

Als Empfänger nutze ich einen Phototransistor (620-960nm). Dieser sitzt in einem anderen Gehäuse, doch das Gesamtpaket wird nur mit einem Kabel mit der Switchbox verbunden. Der Schaltplan unten zeigt das gesamte System, für welches ich die folgenden Komponenten verbaut habe:

  • 1 1kΩ Widerstand für den Spannungsteiler
  • 1 2.2kΩ Widerstand für den Spannungsteiler
  • 1 10kΩ Pull-Down Widerstand für den Phototransistor
  • 1 Phototransistor (620-960nm) (BPW 16N oder ähnlich)
  • 1 alten Laserpointer mit rotem Licht (Hier als LED dargestellt)

Water_Drop_Pro_Sensor_Shematic

Achtung, ich nutze einen Laserpointer mit rotem Licht! Falls jemand einen mit grünen Licht nutzen will, so muss er auch den Phototransistor dementsprechend anpassen, da dieser hier nur auf rotes Licht reagiert! Um die Auswahl des Phototransistors zu erleichtern, gibt es hier eine gute Tabelle.

Der Sensor Jack ist ein einfacher 5-poliger Mikrofonstecker, der an die passende Buchse an der Switchbox gesteckt werden kann. Man kann natürlich auch die beiden GND-Leitungen zusammenfassen, da sie an der Platine sowieso am selben Pin landen, doch dann würde es an der Switchbox zwei 4-polige Buchsen geben, was zu einer Verwechslung führen könnte, und so Schäden am Gerät verursachen würde.

Switchbox_Sensor_Interface

Der Stecker wird direkt mit den passende Terminal-Block-Pins an der Platine verbunden. Man muss dann nur noch darauf achten, am anderen Ende des Steckers auch die richtigen Kabel mit dem Phototransistor oder dem Laserpointer zu verbinden. Hierfür nutze ich den akustischen Diodenprüfer eines Multimeters.

Sensor_Pinout_Real.jpg

Achtung, wer hier unachtsam ist könnte einen Kurzschluss verursachen. Also lieber alles zweimal prüfen!

Zur Sicherheit sollte man das Fritzing-File im Projektverzeichnis (der Link am Beginn des Beitrags) zu Rate ziehen.

Fritzing_Sensor

Das Gehäuse des Phototransistors ist ein kleines, günstiges Kunststoffgehäuse. Ich habe drei Bohrungen angebracht:

  • Die Bohrung für das 5-polige Kabel von der Switchbox
  • Eine kleinere Bohrung für das 2-polige Versorgungskabel des Lasers
  • Eine Bohrung als Öffnung für den Laser

Der Rahmen

Um den Rahmen der Pro-Version nur gering umzubauen, habe ich mich für die einfachste Variante entschieden den Sensor zu montieren: Ein dünnes Brett wird an den mittleren Balken geschraubt. So muss man nichts weiteres tun, als zwei Bohrungen (D=12mm) in den Balken zu bohren, und darin jeweils eine Gewindemutter (M8) zu fixieren. So kann man später das Brett einfach mit zwei M8-Flügelschrauben befestigen.

Frame_006.jpg

Das Brett kann man gestallten wie man es gerne möchte, und da ich nicht davon ausgehe, dass jeder die selben Gehäuse für Sender und Empfänger der Laserlichtschranke zur Verfügung hat, habe ich das Brett auch nicht in das Zip-File hinzugefügt. Einzige „Bedingung“ ist, dass die beiden Flügelschrauben einen Abstand von 130mm zur Mitte des Balkens haben (also 260mm Abstand zueinander).

Der Code

Natürlich befindet sich die neueste Version des Programmcodes auch in dem Zip-File. Für all‘ jene, die sich das Programm gerne auf GitHub ansehen möchten: Der Sensor wird erst ab der Version 1.3.0 unterstützt, und läuft ohne Probleme seit der Version 1.3.2.

Um den Sensor auch nutzen zu können, muss, sobald der Host mit der Switchbox verbunden ist, das Häkchen neben dem Start-Button gesetzt werden.

Software_Sensor_Mask

Danach kann man links in der Software die Parameter einstellen.

  • Height 1: Dies ist die Distanz zwischen dem Fallobjekt und dem Sensor oberhalb des Sensors. Hält man beispielsweise einen Apfel 10cm über dem Sensor, bevor man ihn fallen lässt, so muss man hier 100mm einstellen.
  • Height 2: Hier wird die Distanz zwischen Sensor und Boden festgelegt.
  • Delay: Das Delay wird automatisch berechnet, jedoch kann man es noch zusätzlich variieren, je nachdem wie das Bild später aussehen soll.

Ist das Häkchen gesetzt, so werden beim Vorgang die Ventile nicht genutzt! Sollte ich Anfragen bekommen, die Ventile und den Sensor gleichzeitig nutzen zu können, dann werde ich das ins Programm bringen, ansonsten sehe ich für mich keinen Sinn beides gleichzeitig zu nutzen.

Ist der Sensor zu empfindlich, also löst die Kamera aus, ohne dass etwas durch den Sensor fällt? Kein Problem, in den Optionen (Tools -> Options) kann die Empfindlichkeit eingestellt werden. Null ist hierbei die maximale Empfindlichkeit, und 10 die niedrigste (ich weiß, konträr, aber das liegt an meiner Faulheit).

Software_Sensor_Options_Mask

Der Sensortyp gibt an, ob man einen analogen oder einen digitalen Sensor nutzt. Der Sensor, den ich hier vorgestellt habe ist ein analoger, da er den Spannungswert direkt an den Controller schickt (ohne weitere Verarbeitung). Ein digitaler Sensor bereitet das Signal vorher auf, bevor er einen digitalen Wert (5V oder 0V) an den Controller schickt.

Ein solcher Sensor kann zum Beispiel als Reflexlichttaster ausgeführt sein.

Light_Sensor_Advanced

Hierbei muss man darauf achten, dass das digitale Signal LOW wird, wenn ein Objekt erkannt wird, ansonsten funktioniert der Sensor nicht mit der Switchbox.

Das Ergebnis

Um es zu testen habe ich in der Software das Delay auf Null gesetzt, und den Blitz die Arbeit machen lassen. Soll heißen, ich habe die Kamera 4 Sekunden in einem halbdunklen Raum belichten lassen, und der Blitz hat dann das Fallobjekt „eingefangen“.

In_Flight.jpg

Das Bild ist jetzt nicht gerade das schönste, aber es zeigt recht gut wie schnell das System reagieren kann. Wer die Kamera die Arbeit machen lässt, der muss die Verzögerung des Verschlusses mit einrechnen (trotz aktivierter Spiegelverriegelung). Hat man diese Zeit erst einmal durch Probieren gefunden, kann man sie als mehr oder weniger konstant annehmen und damit arbeiten.

Ein paar letzte Worte. Man kann neben diesem Sensor auch noch andere anschließen, etwa Schallsensoren. Wer mehr dazu wissen will, der kann mich gerne per Mail oder in einem Kommentar dazu fragen. Sollten mehrere Anfragen kommen, so schreibe ich gerne einen weiteren Blogeintrag zu diesem Thema.

Edit (22.06.2016)

Wer das Fallobjekt immer aus der gleichen Höhe fallen lassen, und zwar ohne es zudem noch halten zu müssen, der findet die Idee von Resterampe Berlin sicher genau so fein wie ich! Entweder man nutzt dazu einen separaten Mikrocontroller oder legt die Versorgung (Vcc & GND) des Lasers mit der des Phototransistors zusammen (Relais oder Transistor dazwischen und eine eigene Versorgung wegen des maximalen Stroms). Bei dem zweiten Punkt muss man allerdings das Programm des Arduinos etwas ändern, sodass das Servo auch arbeitet. Wer dazu Fragen hat: Einfach ein Kommentar!

So, das war’s.

.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s