CamRead

Aus HRW FabLab MediaWiki
Wechseln zu: Navigation, Suche

CamReadLogo.jpeg

Entwickler
Jannik Schremmer, Ajdin Hakic, Yauheni Dretskin

Verwendete Software
Autodesk Fusion 360, Arduino IDE, AutoCAD

Links
3D-Modelle
Source Code


CamRead bietet die Möglichkeit Printmedien und Dokumente auf ein beliebiges Ausgabegerät in vergrößerter Form zu streamen. Die Kameraposition lässt sich per Joystick verändern.
Es besteht aus zwei Komponenten, dem Gestell sowie dem Joystick.

Materialliste[Bearbeiten]

Joystick (links) und Gestell (rechts)
Name Anzahl Bezugsquelle/Preis pro Stück
ESP32 2 FabLab
Stromversorgungsmodul 12V -> 3.3V & 5V 1 1€
Schrittmotor 28BYJ-48 5V & ULN2003 Driver Board 2 3€
Analog Joystick 1 2.50€
Makerbeam Set FabLab
Filament für 7 Elemente FabLab
Netzteil 1 5€

Umsetzung[Bearbeiten]

Die beiden Systeme (Joystick und Kameraverschiebung) werden von jeweils einem ESP32 Mikrocontroller gesteuert. Diese werden verwendet, da sie ab Werk mit Bluetooth ausgestattet sind.

Zur Kommunikation zwischen den Systemen wird Bluetooth Low Energy (BLE) verwendet, da die benötigten Datenmengen sehr gering sind. Außerdem verbraucht BLE im Vergleich zu klassichem Bluetooth deutlich weniger Strom.

Das System der Kommunikation funktioniert wie folgt: Ein ESP verschickt die korrigierten Eingangssignale des Joysticks. Der empfangende ESP passt daraufhin die Bewegungsrichtung der Schrittmotoren an, welche mittels Zahnriemen die Kameraposition steuern.

Die Kamera ist über ein Microusb-Kabel oder wahlweise WIFI mit einem Ausgabegerät (Computer oder Smartdevice) verbunden und überträgt auf diese den zu darstellenden Text in skalierter Form. So ist CamRead in der Lage eine für den Nutzer angepasste und dynamische Darstellungsweise zu garantieren.

Gestell[Bearbeiten]

Schaltung der Motorsteuerungseinheit
Platine zur Motorsteuerung

Das Gestell besteht aus zwei Komponenten, der Mechanik und der Elektronik.

Mechanik[Bearbeiten]

Das Grundgestell ist aus MakerBeam-Elementen gefertigt. Dieses steht auf einem Holzkasten, in dem die Elektronik verstaut ist. Mittels 3D-Druck-Objekten, konstruiert mit Autodesk Fusion 360 wurde eine Konstruktion erstellt, um die Kamera auf der X- und Y-Achse verschieben zu können. Diese Konstruktion ist jeweils in den 4 Ecken an dem MakerBeam-Gestell über 3D-Druck-Elemente montiert. Die Kamera ist an einer im 3D-Drucker gefertigten Halterung befestigt. Diese Halterung ist geführt auf 2 Stäben zur Verschiebung in die Y-Richtung. Die Halterung, welche selbst auch nochmal geführt auf 2 Stäben ist, kann zusätzlich in X-Richtung verschoben werden. Die Verschiebung wird über einen Keilriemen ermöglicht, welche von den Motoren angetrieben werden.

Elektronik[Bearbeiten]

Betrieben wird die Konstruktion zur Verschiebung der Kamera mittels eines 5V Netzteils sowie eines Stromversorgungsmoduls. Das Modul bietet einen Eingang für das Netzteil sowie 3.3V und 5V Ausgänge. Daher können sowohl die Motoren mit den benötigten 5V, als auch der ESP mit 3.3V versorgt werden.

Ein ESP alleine kann nicht genug Strom für einen Schrittmotor liefern. Aus diesem Grund werden ULN2003 Driver Boards zur Steuerung der Schrittmotoren verwendet. Ein solches Board bietet Eingänge für einen Arduino, Ausgänge für einen Schrittmotor sowie 5V und GND Pins zur Stromversorgung. Der ESP ändert, abhängig vom zuletzt empfangenen X und Y des Joysticks, die Geschwindigkeit der Schrittmotoren und steuert so die Position der Kamera.

Zur Steuerung der Motoren wurde eine überarbeitete Version vom Arduino Forennutzer kerimil der AccelStepper Bibliothek von Mike McCauley verwendet, da diese normalerweise nicht mit den verwendeten Schrittmotoren funktioniert. Die Bibliothek unterliegt der GPL-2.0 Lizenz.

Joystick[Bearbeiten]

Schaltung des Joysticks

Die Steuereinheit besteht aus einem Gehäuse, einem ESP und einem analogen Joystick.

Gehäuse[Bearbeiten]

Das Gehäuse wurde ursprünglich mittels 3D-Druck gefertigt, jedoch mussten die ESP Module nach einem Arbeitsunfall ausgetauscht werden. Die neuen Module passten dementsprechend nicht mehr ins Gehäuse und es musste improvisiert werden. Die Konstruktion orientiert sich dennoch stark am ursprünglichen 3D-Modell.

Elektronik[Bearbeiten]

Der Joystick belegt 4 Pins am ESP, zwei zur Stromversorgung und jeweils einer für X- und Y-Ausgangssignale.

Im ESP sind Analog zu Digital Converter (ADC) verbaut, welche die Eingangsspannung an bestimmten Pins auf einen maximal 12 Bit großen Ausgangswert abbilden. Je nach Use-Case ist hierbei zu beachten, dass die Converter lediglich bis 3.3V entsprechende Ausgangswerte produzieren. Jede Eingangsspannung darüber erzeugt den maximalen Ausgangswert (z.B. 255 bei 8 Bit).

Die Eingangswerte werden nun eingelesen, mittels einer Funktion auf die Werte -1, 0 oder 1 abgebildet und anschließend an den ESP verschickt. Ein Kommunikationsversuch findet nur statt, wenn die neu gemessenen Werte nicht mit den alten übereinstimmen.

Bluetooth Kommunikation[Bearbeiten]

Bluetooth Low Energy funktioniert, anders als klassisches Bluetooth, mithilfe von Services welche Daten über Characteristics zur Verfügung stellen. Jeder Service und jede Characteristic ist über eine UUID identifizierbar, welche vom Programmierer festgelegt wird. Um eine Verbindung zwischen zwei ESP32 herzustellen, benötigt der Client die Gerätenummer des Servers. Anschließend registriert der Client beim Server sein Interesse an Benachrichtigungen.

Sobald der Server nun eine Benachrichtigung herausschickt, wird beim Client der Benachrichtigungs Callback aufgerufen, welcher die Characteristic mit den aktuellsten Daten als Parameter erhält und verarbeiten kann.

Es wird die ESP32 BLE Bibliothek von nkolban verwendet.

Problematiken[Bearbeiten]

Im nachfolgenden beschreiben wir die bei der Entwicklung entstandenen Probleme und ihre Lösungsansätze.

Motorsteuerung[Bearbeiten]

Aufgrund eines Unfalls, vermutlich durch noch geladene Kondensatoren auf dem Stromversorgungsmodul, mussten die ESP Module ausgetauscht werden. Da extrem viele Varianten, und auch keine einheitlichen Standards zur Pinverteilung unter den Herstellern von ESP Boards, existieren wurde daraufhin das Layout der Hauptplatine überarbeitet.

Desweiteren wurde das Stromversorgungsmodul ausgetauscht, da dieses zunächst von einem 12V Netzteil, und die 5V Motoren vom 5V Pin, betrieben wurde. Vor dem 5V Pin ist ein AMS1117-5.0V geschaltet, auf welchem daher 7V Spannung abfällt. Durch den hohen Stromverbrauch (ca. 200mA) der Motoren ist der AMS1117 überhitzt und das Modul wurde unbrauchbar.

Beim Kauf von 28BJY-48 Motoren sollte unbedingt auf die Betriebsspannung geachtet werden, da diese nicht Teil der Kennnummer ist und diese Motoren in 5V und 12V Varianten existieren.

Joystick[Bearbeiten]

Ursprünglich war ein völlig kabelloser, batteriebetriebener Joystick geplant. Der vor dem Unfall verwendete ESP konnte über einen VIN Pin problemlos mit einem 3.7V Akku betrieben werden. Da die neuen Module sich jedoch nicht mehr auf die selbe Art und Weise mit Strom versorgen lassen, wird ein USB Kabel für den Betrieb verwendet. Um das neue Modul dennoch mittels eines 3.7V Akkus mit Strom versorgen zu können, wird ein Regler benötigt (bspw. der LT1763, siehe Schaltung).

Desweiteren können die Sensorwerte des Joysticks auch im Ruhezustand schwanken, weshalb dieser zunächst kalibriert werden muss. Hierfür wurden die Werte ausgegeben und der niedrigste und höchste Wert der Ruhestellung notiert. Anschließend wurden die bestimmten Werte im Programm implementiert.

Bluetooth[Bearbeiten]

Zu Beginn konnte der ESP beim Scan nicht gefunden werden. Die Lösung des Problems ist es die Bereitschaft des Servers manuell anzukündigen und dieser Ankündigung den vom Client gesuchten Service hinzuzufügen.

#define SERVICE_UUID "UUID from https://www.uuidgenerator.net/"
...
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->start();

Mechanik[Bearbeiten]

Die Layer-Höhe der 3D-Druck Objekte hat manchmal dazu geführt, dass Löcher nicht groß genug waren. Um eine kürzere Druckzeit zu erhalten wurde nicht immer die optimalste Einstellung verwendet. Daher konnte der Drucker nicht das exakte Modell drucken und es kam zum beschriebenen Problem. 3D-Elemente, die auf den Stäben geführt werden, haben sich verkanntet, da die Konstruktion nicht starr genug war.

Kamera[Bearbeiten]

Neben dem Erstellen einer passenden und kompakten Halterung der Kamera war das Verbinden von Hard- und Software eines der Hauptprobleme im Bezug auf die Kameratechnik. Um den Rahmen des Budgets von 50€ nicht zu überschreiten mussten wir zu einem kostengünstigeren, technisch nicht allzu hochwertigem Produkt greifen. Das Hauptaugenmerk in der Problemlösung galt also dem Erstellen einer nicht vorhandenen Übertragungsfunktion der Kamera für Windows oder Mac Nutzer. Zur Lösung des Problems wurde die Kamera über ein USB Kabel an das Endgerät angeschlossen und auf diesem als solche erkannt. Das Bild wird dann mittels einer Software auf dem Bildschirm ausgegeben.

Da die interne Zoomfunktion der Kamera zu einer deutlichen Qualitätsminderung führt, geschieht die Skalierung des Textes im Falle eines Computernutzers über die auf dem Endgerät vorhandene Software. Erste Versuche Text in einer skalierten und gut lesbaren Form darzustellen scheiterten häufig, da die Kamera keinen Autofokus besitzt und dadurch nicht in der Lage war Buchstaben oder Zahlen scharf darzustellen. Um uns diesem Problem zu entledigen musste sowohl das Gestell, als auch der Befestigungspunkt der Kamera modifiziert werden.

Zukunft[Bearbeiten]

Bei der Produktvorstellung sind wir auf positive Redundanz gestoßen und haben einige Vorschläge für eventuelle Nutzer bekommen, daher haben wir uns überlegt unseren Prototypen in der Zukunft noch ein wenig zu verbessern.

Kamera und Übertragung[Bearbeiten]

Seit Anfang 2019 existieren spezielle ESP Module inklusive Kamera (OV2640) für etwa 5-10€ aus China. Die Kamera bietet ebenfalls eine ausreichende Bildqualität und stellt daher eine kostengünstige Alternative zur Actioncam dar. Das Bild kann über einen Webserver im ESP auf ein Ausgabegerät gestreamt werden. Dadurch erreicht man volle Plattformunabhängigkeit auf Seiten des Endgeräts, da lediglich ein Webbrowser zum Abrufen des Livestreams benötigt wird.

Gestell[Bearbeiten]

Das Gestell ist zur Zeit sehr robust. Durch den Einsatz von mehr 3D-gedruckten Teilen wollen wir das ganze kompakter gestalten. Das Gehäuse für die Elektronik soll daher 3D-gedruckt werden, was das massive Gehäuse aus Holz ersetzen würde.

Joystick[Bearbeiten]

Durch neue ESPs können wir den Joystick wieder auf Akkubetrieb umrüsten, so wie wir es von Anfang an geplant hatten.