Morpheus

Aus HRW FabLab MediaWiki
Wechseln zu: Navigation, Suche


Morpheus ist ein Kollisionserkennungs-System für Rollstühle, das dem Benutzer eine sichere und kollisionsfreie Fortbewegung ermöglicht.
Das System umfasst mehrere Ultraschallsensoren, sowie zwei Mikrocontroller und 3D-gedruckte Halterungen und Boxen, um mögliche Gefahrenobjekte
zuverlässig zu erkennen.

Morpheus

MorpheusLogo.png

Entwickler

Fabio Pietryga, Philipp Student, Vivian Schuster

Projektdateien

Thingiverse

Verwendete Programmiersprache

Arduino C/C++

Eingesetzte Software

Arduino IDE, Autodesk Fusion 360 , Cura Xcode

Eingesetzte Hardware

Ultimaker 2+


Projektbeschreibung[Bearbeiten]

Plakat für das Projekt Morpheus
Eingebautes System am Rollstuhl von Sebastian Bücker



Aufgrund der nicht immer möglichen Rundumsicht und der fehlenden Flexibilität müssen sich gerade Rollstuhlfahrer sehr intensiv mit ihrer Umgebung auseinandersetzen, um potenzielle Gefahrenquellen von Anfang an minimieren zu können.

Dies reicht allerdings nicht immer aus. So stellen vor allem schon kleinste Gegenstände in der direkten Umgebung
des Rollstuhls eine große Gefahr beim Manövrieren dar.
Neben dem Schutz des Rollstuhls ist hier insbesondere die Sicherheit des Nutzers sicherzustellen, falls es zu einer Gefahrensituation kommen sollte.

Die Lösung für genau dieses Problem soll Morpheus sein - ein System zur Kollisionserkennung für Rollstühle,
das anhand von individuell angebrachten Sensoren am Rollstuhl sowohl nähergelegene, als auch weiter entfernte Gegenstände erkennen und bei Gefahr den Nutzer alarmieren kann.

Die Einstellung und Konfiguration des Systems ist dabei über eine Smartphone-App möglich.





Projektidee[Bearbeiten]

Im Rahmen des Moduls "Eingebettete Systeme" im Wintersemester 2018/19 stand die Entwicklung von Assistenzsystemen im Vordergrund.
Um einen ersten Eindruck zu vermitteln, besuchten Frau Hirtz und Sebastian Bücker von den Bottroper Werkstätten die HRW.
Während ihrer Präsentation erhielten wir einen Einblick auf die Bedürfnisse und Wünsche der Zielgruppe des Moduls.
Insbesondere Sebastian hatte eine Idee: Er wollte ein System für seinen Rollstuhl, das ihm ermöglicht, problemlos durch engere Gänge und Räume zu fahren.
Dies würde ihm insbesondere an seinem Arbeitsplatz zugute kommen, da er öfter mit dem Rollstuhl gegen etwas stößt.

Nach einem Gespräch mit Sebastian haben wir beschlossen uns seiner Idee zu widmen und begannen das System "Morpheus" zu entwickeln.

Hardware[Bearbeiten]

Kostenaufstellung[Bearbeiten]

Materialliste
Beschreibung Kosten pro Stück in € Anzahl
HC-SR04 Ultraschallsensor 1,00 9
Arduino Uno 7,00 1
ESP-32 7,00 1
Treiber ICs SN5406 0,77 3
Powerbank 22,00 1
Arduino Jumper Wires Paket 5,90 1
Micro USB-Verlängerung 5,55 1
Micro USB-Kabel 3er Paket 7,00 1
Runde Magneten 0,50 16
Aluminium-Stange, 1m 7,00 1
Summer 1,99 1
Gesamtkosten: 82,75€

3D-Druck[Bearbeiten]

Wir haben uns entschieden, den Großteil des Systems mithilfe des 3D-Drucks zu erstellen, da so eine genaue Anpassung für den Rollstuhl möglich war.
Die benötigte Teilmenge kann natürlich individuell angepasst werden, hier ist eine Übersicht, wie viel wir gedruckt haben:

Benötigte Teile
Name Dateiname Anzahl
LED-Panel Box LED-Panel_Box.stl 1
LED-Panel Deckel LED-Panel_Top.stl 1
Powerbank Box Arduino_Powerbank_Box 1
Powerbank Box Deckel Arduino_Powerbank_Box_Top 1
Vorderteil Sensorhalterung* front_00.stl 10
Hinterteil Sensorhalterung* back_00.stl 10
Ring Sensorhalterung* ring_00.stl 20
Halter Cradle_Edit.stl 10
Druckeinstellungen: 10% Infill, 0.2mm Schichtdicke
*Teile finden sich im Original-Thing unter dem verlinkten Cradle-Edit


Sensorhalterung[Bearbeiten]

Nachdem alle benötigten Teile ausgedruckt wurden, geht es an die Zusammensetzung.
Für eine Sensorhalterung benutzt man jeweils ein Vorder- und Hinterteil, zwei Ringe und eine Halterung.
Durch das Vorderteil können die zwei Sensoren des Ultraschallsensors hinausschauen. Es sollte so weit wie möglich hineingedrückt werden, damit das Hinterteil möglichst flach aufliegen kann.
Danach können die zwei Teile durch die Ringe zusammengehalten werden. Der Sensor kann nun in die Halterung hineingedrückt werden und lässt sich nun komplett frei ausrichten.
Für das Projekt ist es gewünscht, die Sensoren genau parallel zum Boden auszurichten.

LED Panel[Bearbeiten]

Das LED Panel hat Platz für den ESP-32, die benötigte Verkabelung und die LED's. Die Löcher im Deckel sind groß genug, sodass die LED's von oben nach unten eingesetzt werden können und aufliegen.
Wie die Verkabelung angebracht wird, wird im Elektronik-Teil genauer beschrieben.
Die kleinen Löcher an den Ecken der Box und im Deckel erlauben es, kleine Magneten einzusetzen. Mit diesen wird der Deckel verschlossen aber ermöglicht es immernoch, bei Bedarf das System einfach zu öffnen.

Powerbank-Box[Bearbeiten]

Die Powerbank-Box hat Platz für die Powerbank, den Arduino und die benötigte Verkabelung. Die Powerbank passt von der Breite her genau hinein und gehört an das Ende
mit der kleinen rechteckigen Vertiefung an der oberen Kante. In diese Vertiefung passt der Micro-Usb-Anschluss, der so ein einfaches Aufladen der Powerbank ermöglicht.
Auch hier wird der Deckel wieder mittels kleiner Magneten an allen Ecken verschlossen.
Die Maße der Box wurden passgenau für Sebastians Rollstuhlsitz festgelegt. Deshalb ist es für Nachbauer empfehlenswert, selbst noch einmal nachzumessen und Anpassungen zu treffen.

Elektronik[Bearbeiten]

Verkabelung der LED-Box

Die Elektronik dieses Projektes umfasst neben den 9 Ultraschallsensoren einen ESP-32 und einen Arduino Uno. Der ESP-32 übernimmt mit seiner Bluetooth-Low-Energy (BLE) Schnittstelle die Kommunikation mit dem Nutzer, der das System über die selbst programmierte App steuern kann, während der Arduino Uno für die Auswertung der Ultraschallsensoren verantwortlich ist.

Kollisionswarnung[Bearbeiten]

Um dem Nutzer die Gefahren deutlich anzuzeigen, wurde pro Sensor ein Block aus 4 LEDs gewählt. Zusammen mit der Status-LED, die den aktuellen Systemstatus anzeigt, ergibt dies eine Gesamtanzahl von 29 LEDs. Da die Anzahl der I/O Pins der Mikroprozessoren jedoch begrenzt ist, wurde eine kleine Platine mit drei Treiber-ICs installiert, damit pro IC-Pin bis zu 2 LEDs betrieben werden können. So war es uns möglich über einen einzigen I/O Pins des ESP-32 4 LEDs anzusteuern. Um vor einer möglichen Kollision auch eine akustische Warnung zu ermöglichen, wurden zusätzlich 2 Piezo-Summer in die Box mit den LEDs integriert. Sie werden ebenfalls über den ESP-32 angesteuert.

Schaltplan Sensoren

Sensoren[Bearbeiten]

Die Ultraschallsensoren vom Typ HC-SR04 verfügen über zwei Pins für die Spannungsversorgung (5V & GND) und nochmal zwei für die Daten (Trigger & Echo). Da die für die Programmierung verwendete Bibliothek zur Ansteuerung der Sensoren für Ultraschallsensoren mit 3 Pins ausgelegt ist, und sich so die Anzahl der benötigten Kabel reduzieren ließen, wurden die beiden Datenpins gebrückt. Damit benötigt jeder Sensor lediglich eine Datenleitung, sowie die für alle Sensoren gemeinsame Spannungsversorgung.

Serielle Kommunikation[Bearbeiten]

Die Kommunikation zwischen den beiden Mikroprozessoren erfolgt über das I2C Protokoll. Dies ist relativ einfach umzusetzten, da auch hier zwei Datenleitungen ausreichen. Jedoch ist zu beachten, dass die Kabellänge möglichst kurz gehalten wird, um Störungen in der Kommunikation zu vermeiden.

Erste Schritte beim Einbau der Elektronik



Einbau in die 3D-Boxen[Bearbeiten]

Eingebaute Elektronik in der Elektronik-Box

Für die Unterbringung der Elektronik wurden speziell dafür zwei Boxen konstruiert und 3D gedruckt. In den Deckel der kleine Box, die im Sichtbereich des Nutzers angebracht ist, wurden die bereits angesprochenen LEDs eingelassen. Im inneren der Box befindet sich eine Lochrasterplatine, auf welcher die Treiber ICs mit den LEDs verbunden sind. Außerdem sind die Piezo-Summer mit in diesem Gehäuse untergebracht.

Die Datenleitungen zur Ansteuerung der LEDs sowie die Spannungsversorgung für alle Bausteine innerhalb dieser Box erfolgt über ein langes, geschirmtes Kabel, welches zu der zweiten Elektronik-Box führt. Hier ist neben den Mikroprozessoren auch die Spannungsversorgung des Gesamtsystems, eine Powerbank mit 20000mAh, untergebracht. Der Micro-USB Eingang zum Laden der Powerbank wurde für den praktischen Gebrauch durch eine USB-Verlängerung in das Gehäuse der 3D gedruckten Box integriert.

Software[Bearbeiten]

App-Entwicklung[Bearbeiten]

Die Smartphone-App wurde in der Xcode-IDE entwickelt und ist somit mit allen iOS-Geräten kompatibel, mit Ausnahme von iPads.

Hauptseiten der App

Beschreibung & Ablauf[Bearbeiten]

Nach dem Start der App wird zunächst eine Initialisierungs-Seite angezeigt, die darauf hinweist, dass die App initialisiert und die BLE-Verbindung zum Morpheus-System hergestellt wird. Bei fehlerhafter Initialisierung oder nicht möglicher Verbindung wird eine Fehlermeldungs-Seite angezeigt, die Informationen über den Fehler liefert und es so dem Nutzer ermöglicht, diesen zu beheben und das System korrekt zu starten.

Wurde das System erfolgreich initialisiert und die Verbindung aufgebaut, wird der Nutzer zur Hauptroutine der App weitergeleitet, die aus lediglich zwei verschiedenen Seiten besteht, zwischen denen man durch einfaches Swipen wechseln kann.

Die erste Seite ist die Anzeige-Seite. Hier werden die aktuellen Sensordaten, sowie der momentane Systemstatus angezeigt. Der Systemstatus kann hier auch durch Tippen auf das Rollstuhl-Symbol geändert werden. Die zweite Seite stellt die Einstellungs-Seite dar, auf der die Eigenschaften des Systems konfiguriert werden können. Im oberen Teil kann durch Tippen auf das Sensitivitäts-Symbol die Sensitivität des Systems eingestellt werden, welche sich in 3 verschiedene Stufen unterteilen lässt. Unten links befindet sich ein Lautsprecher-Symbol, das durch Tippen die akustische Warnung des Systems ausschalten, auf leise oder auf laut stellen kann. Unten rechts sieht man eine Glühbirne, die durch Tippen den Lichtmodus des Systems verändern kann. So kann der Nutzer bei Gefahr zwischen lediglich aufleuchtenden oder blinkenden LEDs entscheiden.

Storyboard-Design in Xcode


Storyboard-Design[Bearbeiten]

Die gesamte App mit all ihren Seiten wird durch einen Tab-Bar-Controller verwaltet. Dieser ist vergleichbar mit einem Array: Er verwaltet alle Seiten (auch View-Controller genannt) mit Hilfe einer Indexstruktur und besitzt zusätzlich noch eine Eigenschaft, die speichert, welche Seite mit welchem Index gerade angezeigt wird. Jeder View-Controller besitzt seinen eigenen Index, mit dem man ihn referenzieren und anzeigen kann. Beim Starten der App wird zunächst der View-Controller mit Index 0 angezeigt. Je nach Verlauf wird ein anderer View-Controller in den Vordergrund gerückt, der durch die Änderung des aktuell ausgewählten Index angezeigt werden kann.

Struktur des Morpheus-Peripherals

BLE-Verbindung[Bearbeiten]

Die Bluetooth-Low-Energy-Verbindung wurde mit Hilfe der CoreBluetooth-Bibiliothek realisiert. Die Verbindung basiert letztendlich auf der Kommunikation zwischen einem Central-Device und einem Peripheral-Device. Das Central-Device stellt im konkreten Anwendungsfall den Anwender der App dar. Das Morpheus-System selbst ist das Peripheral-Device, das im Fall von Morpheus einen Service mit mehreren Characteristics anbietet. Diese Characteristics stellen letztendlich die Systemvariablen wie Status, Sensitivitätsstufe oder den Lichtmodus dar, die von der App gelesen und geschrieben werden.


Der gesamte Sourcecode der App ist im zugehörigen Gitlab zu finden.




Mikrocontroller-Programmierung[Bearbeiten]

Für die Entwicklung der Mikrocontroller-Programme wurde die Arduino IDE genutzt. Zusätzlich wurden für den Arduino Uno die Newping Bibliothek zur Auswertung der Sensoren, sowie die Arduino interne Bibliothek Wire zur Nutzung der I2C Kommunikation eingebunden. In der I2C Kommunikation fungiert der ESP-32 als Master, während der Arduino Uno als Slave eingesetzt wird.

Arduino Uno[Bearbeiten]

Der Arduino wird in diesem Projekt ausschließlich für die Auswertung der Ultraschallsensoren eingesetzt. Damit ergibt sich ein relativ simpler Programmablauf. Im Loop des Programmes werden in einem Intervall von 33ms alle Ultraschallsensoren nacheinander angesteuert. Die ermittelten Distanzen werden anschließend mit der Referenzdistanz der ausgewählten Sensivitäts-Stufe verglichen, und die Ergebnisse in ein Array zwischengespeichert. Parallel reagiert der Arduino auf vom ESP gesendete Daten oder Datenanfragen. Ändert der Nutzer über die App zum Beispiel die Sensivität des Systems, so schickt der ESP ein Datenpaket an den Arduino, der die Schwelle, ab der ein Hindernis erkannt wird, daraufhin anpasst. Ansonsten beantwortet er die regelmäßigen Status-Anfragen des ESP mit dem aktuellen Sensor-Stand.

ESP-32[Bearbeiten]

Im Programm des ESP-32 wird die BLE-Schnittstelle mit dem benötigten Service und den verwendeten Charakteristika definiert. Dadurch können die Systemeinstellungen wie Leuchtmodus der LEDs, Sensitivtät der Sensoren oder das Aktivieren bzw. Deaktivieren der akustischen Warnung angepasst werden. Außerdem fragt der ESP in regelmäßigen Abständen von 500 ms den aktuellen Stand der Sensoren vom Arduino Uno ab, um die Gefahren-LEDs dementsprechend anzusteuern.


Der vollständige Code für die beiden Mikrocontroller ist im Gitlab zu finden.