Nanoroot

Aus HRW FabLab MediaWiki
Wechseln zu: Navigation, Suche
Nanoroot

Nanoroot logo.png

Team

Robin Beckmann, Nils Steingräber, Felix Thomsen, Felix Weleda

Projekt

Git

Web-App

Link

Verwendete Programmiersprachen

Arduino, TypeScript

Software und Frameworks

Hardware

  • ESP 32,
  • Neopixel Ringe,
  • Potentionmeter,
  • Bewegungsmelder,
  • weiße Transparenzfolie,
  • 30x30cm Spanplatte,
  • diverse Kabel


Nanoroot ist ein smartes Lichtsystem, bestehend aus beliebig vielen Leuchtkomponenten die in das System integriert und dann über eine Web-App angesteuert werden können. Diese müssen sich nicht im selben lokalen Netzwerk befinden, sondern können überall sein. Nur eine Internetverbindung ist erforderlich. Es können verschiedene Modi gewählt werden, auf die die Lampen dynamisch reagieren.


Grundsätzliche Idee[Bearbeiten]

Präsentationsplakat nanoroot

Mit Nanoroot wollten wir eine Verbindung der Lichtsysteme über das eigene lokale Netzwerk hinaus schaffen. Es sollte möglich sein, gemeinsam mit mehreren Leuten, auch über eine größere Distanz, die gleiche Simmung durch Licht zu erzeugen. Gerade in der Zeit von Corona fühlt man sich so stärker verbunden und nicht so einsam.
Dafür stellt sich jeder Nutzer eine oder mehrere der Nanoroot Einheiten auf und kann anschließend alle (auch die der anderen) über eine zentrale Web-Applikation steuern.

Funktionsweise und Modi[Bearbeiten]

Grundlegende Funktionsweise[Bearbeiten]

Kommunikationsplan
Auf dem Backend-Server gibt es einen zentralen Node.js Prozess der Schnittstellen für sowohl MQTT als auch Websockets bereitstellt. So können die verschiedenen Clients die benötigten Informationen in Echtzeit vom Server erhalten und auch an diesen Senden. Der Server wertet alle erhaltenen Informationen aus und sendet den Clients nur die Informationen die sie benötigen. Dadurch verfügen die Clients immer über den aktuellen Status.


Aufbau[Bearbeiten]

Offener Prototyp Lilaner Prototyp Güner Prototyp

Das Gehäuse der Lampen ist 15x15x5cm groß und wurde aus einer 30x30cm Spanplatte ausgeschnitten und mit Heißkleber zusammengeklebt. Neben dem esp32 befinden sich in jeder Lampe noch ein Bewegunsmelder sowie ein Potentionmeter. Der Bewegungsmelder registriert Bewegungen und setzt einen Timer, damit die Lampe aus geht, wenn sich keine Person in der Nähe befindet. Die Länge dieses Timers kann über die Web-App eingestellt werden. Über das Potentiometer kann die Helligkeit der Lampe gesteuert werden, da dieser an den Helligkeitswert des LED Rings gekoppelt ist. Um das Licht möglichst stark zu streuen, wird die offene Seite dann noch mit einer Transparenzfolie oder milchigem Plexiglas überzogen und das Licht dadurch gleichmäßiger verteilt.

Verwendete Technologien[Bearbeiten]

Frontend[Bearbeiten]

Webseite

Svelte[Bearbeiten]

Im Frontend haben wir uns für das Javascript Framework Svelte entschieden, da sich dieses gut zum Erstellen von Singlepage Applications eignet. Auch das Delegieren der aktuellen Informationen in die einzelnen Komponenten wurde dadurch deutlich erleichtert.

iroColorPicker[Bearbeiten]

Der iroColorPicker ermöglichte es uns einfach und schnell eine, sowohl an Desktop als auch am Smartphone, gut aussehende Lösung zur Farbauswahl zu integrieren. Dieser wurde noch um eine Eingabefeld erweitert, damit der Nutzer auch Farben im Hexadezimalcode eingeben oder die aktuelle Farbe in diesem Format auslesen kann.

socket.io[Bearbeiten]

Socket.io ist eine Javascript Bibliothek, die eine Kommunikation über Websockets aufbaut. Also einen konstanten Informationsfluss zwischen den Webclients und dem Server ermöglicht. Dadurch können die aktualisierten Statusinformationen vom Client in Echtzeit zum Server übertragen werden. Ebenfalls werden die Änderungen aller anderen Nutzer über den Server mit dem eigenen Client synchronisiert.


Backend[Bearbeiten]

Express[Bearbeiten]

Express stellt die statischen Dateien zum Aufruf über den Browser sowie den Web-Clients die benötigten Endpunkte der Websockets bereit.

aedes Broker[Bearbeiten]

Der aedes Broker bildet auf dem Server die MQTT Schnittstelle ab, die benötigt wird um mit den einzelnen esp32 zu kommunizieren und somit die Lampen zu steuern.


Controller[Bearbeiten]

Adafruit_NeoPixel[Bearbeiten]

Da wir uns für den NeoPixel 5V RGB LED Ring entschieden haben, haben wir die Adafruit Neo_Pixel Bibliothek verwendet. Diese Bibliothek vereinfacht das Ansteuern des Ringes enorm, da der NeoPixel 5V RGB LED Ring nicht wie RGB LEDs über drei Pins für Rot, Grün und Blau verfügt, sondern neben einem Ground und einem 5V Anschluss nur einen Input Pin verwendet. Die Kosten für den NeoPixel 5V RGB LED Ring belaufen sich auf 15,99€ für fünf Ringe.

PubSubClient[Bearbeiten]

Der PubSubClient ist eine einfache Möglichkeit auf einen MQTT Server zu Subscriben. Dies ist auch die Bibliothek welche in der Vorlesung verwendet wurde.

Probleme[Bearbeiten]

Im Laufe der Entwicklung sind einige Probleme aufgetreten. So gab es zu beginn Probleme bei der Synchronisierung des Frontends. Um dies zu lösen haben wir die Synchronisierung des Frontends von MQTT auf Websockets umgestellt und dann die Verwaltung und Synchronisierung der Daten über den Server vorgenommen. Dabei sind uns auch einige Probleme und Schwierigkeiten der Datenverwaltung im Frontend aufgefallen, weshalb wir von reinem HTML/CSS und JavaScript zu Svelte gewechselt sind.

Da wir dieses Semester nicht die 3D-Drucker des FabLab benutzen konnten, mussten wir das Gehäuse aus Holz bauen. Damit wurde auch das Design von einem Dreieck in ein Rechteck verändert. Ursprünglich sollte Nanoroot durch mehrere RGB LEDs beleuchtet werden. Da allerdings die Umsetzung im Gehäuse schwierig war und das ausgestrahlte Licht nicht gleichmäßig war, haben wir uns für den NeoPixel 5V RGB LED Ring entschieden. Die Abdeckung sollte ursprünglich durch Plexiglas realisiert werden, da allerdings Geschäfte nur begrenzt geöffnet hatten und Probleme beim schneiden auftraten wurde die Abdeckung durch durchsichtiges Bastelpapier ersetzt.

Um damit alle zeitlich unabhängig voneinander arbeiten konnten, aber dennoch immer Zugriff auf den aktuellen Code haben, haben wir uns dazu entschieden das Projekt in einem GitHub Repository zu speichern. Dadurch konnten wir bei Problemen auch auf frühere Versionen zugreifen.

Zukunftsaussichten[Bearbeiten]

In Zukunft könnte man die Lampen nicht alle fest mit einem Netzwerk verbinden, welches man nur im Quellcode ändern kann, sondern eine Eingabemaske zur Verfügung stellen, über die eine eigenes Netzwerk erstellt und Lampen zu diesem hinzugefügt werden können. Außerdem könnten die Lampen weiter miteinander verbunden werden, sodass man weitere Effekte bereitstellen kann, die sich über mehrere Lampen erstrecken. Durch eine Mikrofon könnt darüber hinaus auch dynamisch auf Musik reagiert werden und die Lichter entsprechend anpassen. In diesem Zuge könnten die Lampen in zwei Kategorien aufgeteilt werden. Die eine ist eine Master-Lampe, die dann den Bewegungsmelder und das Potentionmeter beinhaltet. Die darüber vorgenommenen Einstellungen würden dann an die anderen Lampen im Verbund weiter gegeben werden, sodass nicht jede Lampe einzeln in ihrer Helligkeit angepasst werden muss.
Hardwareseitig gibt es Optimierungsbedarf beim Gehäuse. Dies könnte deutlich kleiner und hochwertiger aufgebaut werden. An Stelle des Klebers könnte man die Platten miteinander verschrauben oder zusammen tackern. Außerdem könnten weitere smarte Sensoren verbaut werden, um den Nutzen der Lampen in einem Smarthome zu maximieren.