CamRead: Unterschied zwischen den Versionen

Aus HRW FabLab MediaWiki
Wechseln zu: Navigation, Suche
(Umsetzung)
(Gehäuse)
Zeile 79: Zeile 79:
  
 
==== Gehäuse ====
 
==== Gehäuse ====
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 neu gefertigt werden. Dabei wurde aus Zeitmangel improvisiert. Die Konstruktion orientiert sich dennoch stark am ursprünglichen 3D-Modell.
+
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 neu improvisiert werden. Die Konstruktion orientiert sich dennoch stark am ursprünglichen 3D-Modell.
  
 
==== Elektronik ====
 
==== Elektronik ====

Version vom 10. April 2019, 09:27 Uhr

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 zu streamen. Es besteht aus zwei Komponenten, dem Kameragehäuse sowie dem Joystick.

Das Medium wird dafür in ein hierfür angefertigtes Kameragehäuse gelegt. Bei Bedarf lässt sich die Kameraposition per Joystick via Bluetooth anpassen.

Materialliste

Name Anzahl Preis pro Stück
ESP32 2 5-10€
Stromversorgungsmodul 12V -> 3.3V & 5V 1 1€
Schrittmotor 28BYJ-48 5V & ULN2003 Driver Board 2 3€
Analog Joystick 1 2.50€

Umsetzung

Die beiden Systeme (Joystick und Kameragehäuse) bestehen aus jeweils einem ESP32 Mikrocontroller. Für diese haben wir uns entschieden, 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 so: 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. Die Skalierung der Textgröße wird aufgrund von der qualitätsmindernden internen Zoomfunktion der Kamera Digital über die auf den Endgeräten vorhandene Software reguliert. So ist CamRead in der Lage eine für den Nutzer angepasste und dynamische Darstellungsweise zu garantieren.

Kameragehäuse

Schaltung der Motorsteuerungseinheit

Das Gehäuse besteht aus zwei Komponenten, der Elektronik und der Mechanik.

Elektronik

Betrieben wird das Gehäusesystem 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 Signal 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.

Mechanik

Das Grundgestell ist aus MakerBeam-Elementen gefertigt. Mittels 3D-Druck-Objekten, konstruiert mit Autodesk Fusion 360 wurde das Kameragehäuse erstellt, um die Kamera auf der X- und Y-Achse verschieben zu können. Die Konstruktion ist jeweils in den 4 Ecken an dem MakerBeam-Gestell über 3D-Druck-Elemente befestigt. 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.

Joystick

Schaltung des Joysticks

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

Gehäuse

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 neu improvisiert werden. Die Konstruktion orientiert sich dennoch stark am ursprünglichen 3D-Modell.

Elektronik

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 im Gehäusesystem verschickt. Ein Kommunikationsversuch findet nur statt, wenn die neu gemessenen Werte nicht mit den alten übereinstimmen.

Bluetooth Kommunikation

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.

Problematiken

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

Motorsteuerung

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 scheinbar nicht Teil der Kennnummer ist und diese Motoren in 5V und 12V Varianten existieren.

Joystick

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 gleiche Art und Weise mit Strom versorgen lassen, wird ein USB Kabel für den Betrieb verwendet.

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

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

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, haben wir nicht immer die höchste Einstellung nehmen können. Dadurch ist es zu diesen Un……... 3D-ELemente die auf den Stäben geführt werden haben sich verkanntet, da die Konstruktion nicht starr genug war.