ShareYourFlat

Aus HRW FabLab MediaWiki
Wechseln zu: Navigation, Suche
Gegen Einsamkeit, für den persöhnlichen Austausch! 
Ein Roboter mit dem Dich Deine Liebsten ohne Risiko besuchen können.

ShareYourFlat ist ein IoT Projekt, dass 2020/21 für das Modul Eingebette Systeme ins Leben gerufen wurde. Entwickelt wurde es von Amina Kurbanova, Simon Schnieder, Leon Schierbach und Anne Holletschke.

ShareYourFlat Logo.png

Entwickler

Amina, Simon, Leon, Anne

Projektdateien

HRW Gitlab

Verwendete Programmiersprache

Arduino JavaScript HTML5 CSS AngularJs

Verwendete externe Bibliotheken

Tone32

Eingesetzte Software

Arduino IDE Node ngrok


ShareYourFlat

Projektidee[Bearbeiten]

Ziel[Bearbeiten]

„Entwicklung von verteilten Eingebetteten Systemen zur (sozialen) Interaktion während der Corona-Zeit“.

Interpretation[Bearbeiten]

In Zeiten, in denen soziale Distanz großgeschrieben wird und Kontaktbeschränkungen gelten, fehlt eins ganz besonders: der persönliche Kontakt und Austausch! Plötzlich soll man von geliebte Menschen, zu deren und zu seinem eigenen Schutz, körperlichen Abstand nehmen. Festliche Tage mit der ganzen Familie können nur noch vereinzelt in kleinen Kreisen oder alleine verbracht werden. Die Oma oder den Opa einfach mal persönlich besuchen ist leider auch nicht mehr möglich.

Damit der soziale Kontakt trotz körperlichem Abstand nicht abbricht, hatten wir die Idee von ShareYourFlat! Mit dem Roboter von ShareYourFlat wird es möglich, seine Wohnung mit anderen zu teilen! Über den kleinen Roboter können dich nun deine geliebten Menschen besuchen kommen! Und das ganze ohne Risiko der Ansteckungsgefahr!


ShareYourFlat! Gegen Einsamkeit, für den persöhnlichen Austausch!

Hardware[Bearbeiten]

Anzahl Komponente Bestellung über Preis
1 Robot03 von Joy-it mit 4 DC Motoren Conrad 18,51 Euro
1 SBC-Motodriver2 von Joy-it Conrad 4,86 Euro
1 ESP-32 Cam von AZ-Delivery Amazon 8,29 Euro
1 FTDI Adapter von AZ-Delivery Amazon 6,29 Euro
2 TTGO Esp32 - 0 Euro
1 9V Batterie plus Halter - 0 Euro
1 Lautsprecher - 0 Euro
2 LED - 0 Euro
2 Power Banks Media Markt 29,90 Euro
2 Versand Amazon + Conrad 6,49 Euro
Gesamtpreis 66,02 Euro

Konzept[Bearbeiten]

ShareYourFlat Konzept.PNG

Die Idee ist, dass man sich mit zwei Robotern gegenseitig besuchen kann. Aus Kosten- und Zeitgründen wird in diesem Projekt nur ein Roboter umgesetzt.

Technische Dokumentation zu einem Roboter[Bearbeiten]


Architektur[Bearbeiten]

RoboterArchitektur.png

Das System besteht aus vier Komponenten:

  • Der Roboter besteht aus zwei ESP32 TTGOs und einem ESP32 Cam Modul mit FTDI Adapter. Die ESP32-Module kommuniziert über MQTT mit der Businesslogik und übermittelt ihr die Daten des Roboters. Außerdem steuert der Roboter nach Anfrage der Businesslogik die Motoren über den Motoren ESP32 TTGO. Zudem wird nach Anfrage der Businesslogik auf dem zweiten Nachrichten ESP32 TTGO eine erhaltene Nachricht auf dem integrierten Display angezeigt oder Musik abgespielt.
  • Die Businesslogik erhält die Eingaben der Nutzer über den Webserver und steuert den Roboter. Außerdem wird in der Businesslogik entschieden, welcher verbundene Nutzer den Roboter steuert. Des weiteren verfolgt sie den Status des Roboters und bereitet diesen auf.
  • Der Webserver bietet eine Schnittstelle über HTTP, damit Nutzer sicher über jeden Internetbrowser mit der Businesslogik verbinden kann. Außerdem verteilt der Webserver Statusinformationen und das Video an alle verbundenen Nutzer, damit die Businesslogik entlastet wird.
  • Das Frontend bietet eine Schnittstelle zum Nutzer und kann über jeden Internetbrowser aufgerufen werden und im nächsten Schritt auch als WebApp exportiert werden.

Motivation[Bearbeiten]

Die Einteilung in die verschiedenen Komponenten beruht darauf, dass sich so eine bessere Wartbarkeit des Projektes erzielen lässt. Dadurch, dass der Roboter lediglich Befehle zum steuern von Motoren annimmt, und in regelmäßigen Abständen den Status all seiner Aktoren und Sensoren dem Backend sendet, lassen sich so Änderungen in der Businesslogik durchführen, ohne, dass man das Programm auf dem Roboter ändern muss, was durch dessen Gehäuse mit viel Aufwand und potentiellen Fehlerquellen beim interagieren mit der Hardware verbunden ist. So kann man beispielsweise die Geschwindigkeit des Roboters ändern oder neue Melodien hinzufügen, ohne, das Programm auf dem Roboter zu updaten.

Der Webserver entlastet die Businesslogik, indem sie die für Nutzer relevanten Informationen in Intervallen sammelt und sie über eine HTTP Schnittstelle zur Verfügung stellt. Immer dann, wenn sich ein neuer Nutzer über die Weboberfläche anmeldet, wird ein separater Thread für ihn gestartet. Die Informationen (z.B. der Video-Stream) werden dabei nur einmalig im Speicher gehalten, und jeder Thread leitet eine Kopie dieser Informationen an seinen Nutzer weiter, was zu einer effizienteren Arbeitsspeicherauslastung führt.

Ein weiterer Vorteil dieser Architektur ist, dass so mehrere Personen effizient am Projekt arbeiten können. Das Frontend kann so z.B. unabhängig zur Businesslogik erweitert werden. Im Zweifel muss lediglich eine Schnittstelle im Webserver implementiert werden, die dem Frontend die, für das Feature benötigten, Informationen anbietet.

GUI Konzeption[Bearbeiten]


Funktionale Anforderungen:[Bearbeiten]
  • Steuerung der Motoren mithilfe von Pfeiltasten
  • 1 Textfeld zur Eingabe von Nachrichten
  • 2 Buttons zum Abspeilen vordefinierter Musik
  • Streaming
Nicht funktionale Anforderungen:[Bearbeiten]
  • Farblich passend zur Präsentation passen
  • Intuitive Bedienung
  • Responsive Design

Erster Entwurf:[Bearbeiten]

Die ersten Entwürfe eines möglichen Layouts wurde mithilfe von Draw.io erstellt und sollten vor allem die Anforderungen wiederspiegeln.
ShareYourFlat LayoutGUI Entwurf1.png

Der erste tatsächliche Entwurf der GUI sah so aus:
ShareYourFlat GUI Entwurf1.PNG

Gehäuse Konzeption[Bearbeiten]


Erster Entwurf aus Papier

Als Grundlage für das Gehäuse diente das Fargestell des Joy-it Robot03.

Anforderungen an das Gehäuse:

  • leicht, wenig Gewicht
  • Platz für alle Komponenten
  • flexible -> Abnembar, halboffen?
  • Vorderfront für Display, LEDs und Camera
  • leicht zu bauen


Erster Entwurf[Bearbeiten]

Zunächst wurde das Fargestell ausgemessen und Skizzen zu einem möglichen Gehäuse getätigt. Dann wurde aus Papier ein erstes Gehäuse entworfen und probehalber zusammen geklebt.


Finalisierung[Bearbeiten]

Damit das Gehäuse nicht an die Räder stößt, wurden Abstandshalter aus Holz gesägt und an den Seiten befestigt, Nach den Einbau der Abstandshalter, wurde das Fahrgestell erneut ausgemessen. Aus den Werten der neuen Ausmessung wurden Schablonen angefertigt. Die Polystyrol-Platten wurden mithilfe eines Cutters und einem Metall-Linial zugeschnitten und anschließend mit Heißkleber zusammen geklebt. Aus Holz wurde ein Rahmen gesägt, der den Deckel tragen soll. In den vorderen Rahmen wurden Löcher für die LEDs gebort. Anschließend wurden im Gehäuse Halterungen für Kabel, Lautsprecher und ESP32 angebracht.


Abstandshalter aus Holz einbauen Schablonen anfertigen Polystyrol Platten zuschneiden Platten zusammen kleben Zwischenstand
ShareYourFlat Gehäuse4.jpg IMG 20210329 165353-min.jpg ShareYourFlat Gehäuse1.jpg ShareYourFlat Gehäuse2.jpg ShareYourFlat Gehäuse3.jpg


Vorderfront Dach Innenleben
ShareYourFlat Gehäuse7.jpg ShareYourFlat Gehäuse6.jpg ShareYourFlat Gehäuse5.jpg

Zukunfst Visionen[Bearbeiten]


Der Roboter könnte noch wie folgt erweitert werden:

  • mobile Nutzung des Webservers in einer Webbasierten App
  • Netzwerk Sicherheit (https statt http)
  • Mikrofonaufnahme und Wiedergabe über den Webserver

ESP32-Cam Modul[Bearbeiten]

Verkabelung mit dem FTDI-Adapter
Streaming mit der Camera, auf den internen Webserver über ngrok aufgerufen
ngrok-Tunnel

Zum Streamen der Videos wurde das ESP32-Cam Modul verwendet. Da dieses Modul keinen eigenen Datenanschluss besitzt, wird ein FTDI Adapter benötigt, der einen USB zu Serial Datenport besitzt.

Die Module wurden bei AZ-Delivery bestellt. Mit dem Modul und dem Beispielcode "CameraWebserver" wird ein Stream innerhalb eines internen Webserver erzeugt. Dies wird über eine Applikation "ngrok" getunnelt, sodass der Stream in der GUI eingebaut werden kann.

Für den Adapter musste unter Windows ein neuer Treiber installiert werden.


Achtung! Beim Hochladen muss Pin IO0 und GND kurzgeschlossen werden. Nach dem Hochladen muss der Kurzschluss entfernt und der Reset-Knopf gedrückt werden.

Vorgehen[Bearbeiten]

  1. Unter Windows 10 muss ein Treiber für den FTDI-Adapter selbstständig installiert werden
    1. Dazu muss der Adapter angeschlossen werden.
    2. Den Treiber[1] installieren
    3. Unter "Geräte-Manager" auf das Gerät mit der rechten Maus klicken und auf "Treiber aktualisieren" klicken.
    4. Auf "Auf dem Computer nach Treibersoftware suchen" klicken. Und den Treiber auswählen.
  2. ESP32 Cam
    1. wie in der Abbildung nach bauen
  3. Im Arduino IDE
    1. Als Board unter "Werkzeuge" auf "Boardverwaltung", "ESP Boards" und dann auf "AI Thinker ESP32 CAM"
    2. Auf "Beispiele" auf "ESP32", "Camera" und dann auf "CameraWebserver" klicken.
    3. Im Code Das richtige Camera Modul anwählen "#define CAMERA_MODEL_AI_THINKER" und Wlan Informationen eintragen
      1. const char* ssid = "WLAN Name";
      2. const char* password = "Passwort";
    4. Dann auf "Werkzeuge" -> auf "Seriellen Monitor" klicken und den Code hochladen
    5. Sobald das Hochladen gelungen ist, die Brücke (das Kabel zwischen dem GND und Dem IO0) entfernen und am Board "Reset" drücken
    6. im Seriellen Monitor wird nach erfolgreicher Verbindung mit dem Internet die IP angezeigt für den interenen Webserver. Diese kann man im Browser als URL (IP-Adresse:81/stream) eingeben und schauen ob alles geklappt hat.
  4. Tunneln mit ngrok
    1. Die Applikation[2] nach Anleitung herunterladen und dann folgenden Befehl in der ngrok.exe (unter Windows) absetzen:
      1. ngrok http IP-Adresse:81
    2. Sobald die Session den Status "online" hat, kann mit dem generierten Link von der Applikation auf dem Stream zugegriffen werden:
      1. IO.Link/stream

ESP32 TTGO - Motoren[Bearbeiten]

Damit der Roboter fahren kann, benötigten wir Motoren. Wir haben uns für einen Fahrgestell mit vier DC Motoren und vier Reifen von Joy-it entschieden. Zusätzlich haben wir noch eine H-Bridge von Joy-it zum Steuern der Motoren intergriert.

ShareYourFlat Schaltkreis Motoren.png


Bedeutung Pins H-Bridge Pins ESP32 TTGO Pins Arduino
Motor Links vorne Input1 33 8
Motor Links vorne Input2 32 7
Motor Rechts vorne Input3 15 5
Motor Rechts vorne Input4 2 4

MQTT-Kodierung[Bearbeiten]

Topic: "ES/WS20/gruppe1/movement-change"

Bedeutung Published Integer char
motorsOff() Motoren sind aus 00 4848
turnForward() Vorwärts fahren 10 4948
turnLeft() Nach Links fahren 02 4850
turnRight() Nach Rechts fahren 01 4849
turnBackward() Rückwärts fahren 20 5048

ESP32 TTGO - Nachrichten[Bearbeiten]

Message ESP32.jpeg

Der zweite ESP32 TTGO kann Nachrichten empfangen, diese auf seinem integrierten Display anzeigen und Musik abspielen.

ShareYourFlat Schaltkreis LEDs Lautsprecher.png

Pin Belegungen[Bearbeiten]

Hardware Pin
Led1 21, GND
Led2 22,GND
buzzer 32, GND

MQTT-Kodierung[Bearbeiten]

In der GUI kann ein Zeichenstring eingegeben werden. Dieser wird über den MQTT-Webserver unter dem Topic "ES/WS20/gruppe1/message-send" gepublished. Der ESP32 hat dieses Topic subscriped und erhält den Zeichenstring. Der String wir byte für byte durchgegangen und überprüft und auf dem integrierten Display des ESP32 angezeigt.

Desweiteren ist es möglich, zwei Musikstücke abspielen zu lassen. In der GUI ist es möglich zwei Buttons zu drücken. Unter dem Topic "ES/WS20/gruppe1/play-music" wird ein Code gepublished, der von dem ESP32 verarbeitet wird.


Topic: "ES/WS20/gruppe1/play-music"

Bedeutung published Integer
Happy Birthday spielen 1 49
Jingle Bells spielen 2 50


Topic: "ES/WS20/gruppe1/message-send"

Zeichenstring von max. 60 Zeichen.

Webserver mit MQTT[Bearbeiten]

MQTT-Server, die Verbindung wird über node realisiert. Zudem soll auch ein HTTP-Server exisitieren, welche HTTP Request an den MQTT-Server verschickt, die dann auf dem jeweiligen Board verarbeitet werden sollen, z.B. das Verschicken von Nachrichten an den Roboter, der diese auf dem ESP Display anzeigen soll.

Webserver über die Konsole starten
MQTT Explorer

MQTT Topics[Bearbeiten]

TopicName ESP Funktion
movement-change Motoren ESP32 TTGO Stererung der Motoren, erlaubte Eingabe: 00,01,10,11,02,20,
message-send Nachrichten ESP32 TTGO Nachrchten anzeigen
play-music Nachrichten ESP32 TTGO Musik Spielen
MessageESP_Status Nachrichten ESP32 TTGO Status Rücksendung des ESP32 TTGOs
MotorESP_Status Motoren ESP32 TTGO Status Rücksendung des ESP32 TTGOs

GUI-Client[Bearbeiten]

Die GUI bietet eine Steuerung des Roboters sowohl, über die Tastatur, als auch über Knöpfe. Man kann über ein Textfeld Nachrichten an den Roboter versenden und durch Knopfdruck den Roboter verschiedene Lieder spielen lassen. Den größten Bereich der GUI nimmt der Videostream des Roboters ein. Die GUI wurde mit HTML5, CSS, JavaScript und AngularJS umgesetzt.


ShareYourFlat Webserver GUI finished.PNG

Gehäuse[Bearbeiten]

Als Grundlage diente das mitgelieferte Fahrzeuggestell des Joy-it RobotCar03. Da es uns dieses Jahr leider nicht möglich ist ins FabLab zu gehen und wir keine Möglichkeit eines funktionierenden 3D Druckers hatten, haben wir uns dazu entscheiden, das Gehäuse aus Holz-, und geklebte Polystyrol Platten zu bauen. Das Gehäuse ist komplett abnehmbar und wird nur auf das Fahrgestell aufgesetzt. Zusätzlich lässt sich der Deckel abnehmen.


ShareYourFlat Gehäuse.jpeg