Leuchtender Shisha-Schlauch DIY Personal Fabrication

Leuchtender Shisha-Schlauch
DIY Personal Fabrication
Lucas Grunenberg
Michaela Wensing
Christian Schlumberger
Zusammenfassung—Ziel des Projektes Leuchtender ShishaSchlauch ist es einen Handelsüblichen Latex Shisha Schlauch
so zu modifizieren, dass er abhängig von der Dichte des Shisha
Rauchs leuchtet. Dabei sollen
Die konkreten Leuchteigenschaften durch eine einfache
Programmierung variabel gehalten werden.
• Notwendige Elektronik inklusive Stromversorgung soll möglichst unauffällig und robust am Schlauch selbst angebracht
werden.
• Die Reinigung aller dem Rauch ausgesetzten Teile leicht
möglich sein.
• Der gesamte Aufbau portabel bleiben.
In diesem Dokument wird zunächst das Konzept und der generelle Aufbau des Projekts beschrieben. Darauf folgt jeweils ein
Kapitel zur erläuterung der verwendeten Mechanik, Elektronik
und Informatik.
•
I. KONZEPT
A. Genereller Aufbau
Shisha
Es wird eine Handelsübliche Shisha verwendet. Wichtig
ist lediglich, dass ein herkömmlicher Silikonschlauch,
Durchmesser ca. 19mm ansteckbar ist. Kleinere Schläuche
sind zu eng um den LED-Schlauch zu beherbergen.
LED − Streif en
Um eine zusätzliche Stromquelle zur Versorgung der LEDs
zu vermeiden empfiehlt es sich einen LED-Streifen zu wählen
der vom Microcontroller selbst versorgt werden kann. In
unserem Projekt wurden LEDs vom Typ W S2812 mit 5V
Versorgungspannung gewählt.
Sensorik
Die Dichte des Rauchs im Schlauch wird mit Hilfe einer
Steuerungs-LED und gegenüberliegendem Lichtwiderstand
im Schlauch selbst gemessen.
P latine
Tragendes Element der Elektronik ist eine mit Eagle CAD
entworfene Platine.
M icrocontroller
Als Microcontroller wurde aus platztechnischen Gründen der
AtTiny13 von Atmel gewählt.
Auf bau
Die Sensorik ist komplett im Adapter zwischen Shisha
und Schlauch versenkt. Über den Adapter wird ein mit
dem 3D-Drucker erstellter Ring geschoben, welcher
die Platine einschliesslich Microcontroller enthält. Der
LED-Streifen wird durch den Schlauch gezogen um
Abbildung 1. Konzept
diesen von innen zu beleuchten. Im eingeschalteten
Zustand misst der Lichtwiderstand wieviel Licht der
gegenüberliegenden Steuerungs-LED durch den Rauch
ankommt. Im Microcontroller wird diese Information
periodisch ausgelesen, verarbeitet und seriell an die
Datenleitung des LED-Streifens weitergegeben.
II. M ECHANIK
A. Robustheit
Eine Shisha wird meist von mehreren Menschen geteilt,
wodurch oft an ihr gerüttelt wird. Beim Aufbau wird
mit glühenden Kohlen und Wasser hantiert. Bei der
Abbildung 2. OpenSCAD
Abbildung 3. Hülle und Platine
Benutzung ist der Shisha-Schlauch selbst in Beweung
und wird in verschiedene Richtungen gebogen. Um die
Sensorik zu schützen und von Bewegungen des Schlauchs
möglichst unabhängig zu machen haben wir beschlossen
die Steuerungs-LED und den lichtabhängigen Widerstand
direkt im soliden Verbindungsstück zwischen Shisha und
Schlauch zu versenken. Der Abstand zwischen LED und
Sensor bleibt dadurch bei Bewegungen im Schlauch konstant
und der Schlauch selbst schützt die Sensorik vor äusseren
Einwirkungen.
Um die Platine vor Feuchtigkeit und anderen äußeren
Einflüssen zu schützen, wurde mit OpenSCAD eine Hülle
erstellt, die mit dem U ltimaker2 gedruckt wurde. Die
Datei kann man zum erleichterten Nachbau inklusive Text
in Abbildung 2 sehen. Sie besteht aus 2 Teilen, welche
die Platine umschließen und am Ende zusammengeklebt
werden. In Abbildung 3 sieht man die Platine und die Hüllen
nebeneinander, in Abbildung 4 ineinander gelegt. In die
Platine wurde anschließend noch ein Loch der Größe des
Schlauchs gesägt, damit beides über den Schlauch geschoben
werden kann.
B. Reinigung
Ein Shisha-Schlauch verklebt bei der Benutzung leider
schnell. Es ist demnach wünschenswert sowohl den Schlauch
selbst als auch alle dem Rauch ausgesetzten Teile nach dem
Rauchen ordentlich zu reinigen. Solange sich der LED-Stripe
im Schlauch befindet kann weder der Schlauch gebürstet, noch
der LED-Stripe gewaschen werden. Die Verbindung zwischen
Platine und LED-Stripe muss allerdings durch die Hülle des
Schlauchs gehen und ist um wasserdicht zu bleiben extra versiegelt. Möglich wäre eine Steckverbindung zwischen LEDStripe und den Kabeln der Platine innerhalb des Schlauchs,
welche allerdings schwer zu benutzen wäre und potentiell
anfällig für die im Schlauch vorherrschende Feuchtigkeit. Wir
haben uns stattdessen entschieden ein ca 10cm breites Stück
Abbildung 4. Platine in Hülle
des Schlauchs abzutrennen und mit einem gedrehten Adapter
aus Aluminium wieder zu verbinden. So kann die Sensorik,
die Platine als auch der LED-Stripe fest verbunden montiert
werden. Zum Reinigen muss man nur das lange Ende abziehen
und danach der LED-Stripe wieder einführen.
Als praktischer Nebeneffekt kann so auch der lange Schlauch
ausgetauscht werden um Länge oder Lichtdurchlässigkeit zu
ändern.
C. Energieversorgung
Für die Energieversorgung wurde bei der Platinenerstellung
der Anschluss zu einem micro USB-Port gelegt. So können
die LED sowohl über Kabel, als auch über eine Powerbank
betrieben werden, wenn keine Steckdose in der Nähe ist.
Durch diese Möglichkeit, kann der Schlauch auch problemlos
im Freien beleuchtet werden.
III. E LEKTRONIK
A. Voraussetzungen
Zunächst muss festgelegt werden, welche Eigenschaften die
im Projekt enthaltene Elektronik aufweisen muss. Zu diesen
zählt folgendes:
• Kleine Abmessungen: da der modifizierte ShishaSchlauch optisch so wenig wie möglich von einem handelsüblichen zu unterscheiden sein soll, muss Elektronik
möglichst klein und und unauffällig sein.
• Messung der Lichtdurchlässigkeit im Schlauch
• Ansteuerung eines LED-Streifens
• Möglichkeit zur portablen Stromversorgung
Wie die einzelnen Anforderungen bewerkstelligt wurden,
soll nun im Einzelnen beschrieben werden.
B. Messung der Lichtdurchlässigkeit
Die Lichtdurchlässigkeit des Schlauchinhalts wird über eine
Lichtschranke bestehend aus einer LED und einem lichtabhängigen Widestand (engl. light-dependent resistor, LDR)
bewerkstelligt.
Die LED der Lichtschranke ist wie üblich mit einem einfachen
Vorwiderstand zum Einstellen des Stromes durch sie ausgestattet. Auf eine aktive Stromquelle wurde zum Zweck der Platzund Aufwandsersparnis verzichtet. Da die Eingangsspannung
der Elektronik mit nahezu 5 Volt kaum schwankt, gehen
damit keine nennenswerten Nachteile einher. Lediglich die
Dimensionierung des Vorwiderstands muss geklärt werden.
Unter Berücksichtung der Gegebenheiten von 5 Volt Versorgungsspannung, einer Diodenspannung von 1,6 Volt und einem
maximalen Strom durch die LED von 20 Miliampere ergibt
sich für den Wert des Widerstands
UR
Uges − UD
5V − 1, 6V
=
=
= 170Ω
RV =
I
I
20mA
Dieser Widerstandswert wird durch ein Poti und einen Festwiderstand realisiert. Der Festwiderstand von 150 Ohm setzt
den maximalen Strom durch die LED und mit dem 470 Ohm
Poti kann der Strom bei Bedarf reduziert werden.
Die Beschaltung des lichtabhängigen Widerstandes stellt
einen Spannungsteiler dar.
Die
Mittelspannung
ADC
dieses
Spannungsteilers
PH1
R1
GND
ist
dementsprechend
+5V
lichtabhängig
und
kann mit dem AnalogAbbildung 5. caption
Digital-Wandler
eines
Mikrocontrollers gemessen und anschließend ausgewertet
werden.
Als idealer Widerstand für R1 hat sich ein Wert um 50
Kiloohm ergeben. Laut Datenblatt des verwendeten Mikrocontrollers besitzen dessen Ein- und Ausgangspins einen PullUp-Widerstand welcher per Software aktiviert werden kann.
Dieser hat einen Wert zwischen 30 und 50 Kiloohm und
kann dementsprechend als Widerstand für den Spannungsteiler
dienen und somit Platz auf der Platine einsparen. Zwar ist
ein Mischbetrieb aus Pull-Up-Widerstand und Analog-DigitalWandlung nicht vorgesehen, ein Test hat jedoch ergeben, dass
dies ohne Einschränkungen funktioniert.
C. LED-Beleuchtung
Als Beleuchtung für den Schlauch soll ein moderner, frei
adressierbarer LED-Streifen auf Basis der WS2812 Bausteine
zum Einsatz kommen. Diese Bausteine können in einer individuellen Farbe pro LED beleuchtet werden und können dadurch
beliebige Muster erzeugen.
Die genaue Funktionsweise dieser LEDs soll hier nicht weiter erläutert werden, da diese schon mehrfach im Rahmen
der DIY-Vorlesung verwendet und entsprechend dokumentiert
wurden.
Was jedoch zu klären ist, ist der Strombedarf. Eine EinzelLED benötigt bei voller Helligkeit einen Strom von ca. 60
mA. Da zur Stromversorgung die USB-Schnittstelle verwendet
wird, welche laut Spezifikation einen maximalen Strom von
500 mA liefern kann wären hierbei nur weniger als 10 LEDs
möglich. Da der Shisha-Schlauch aber sowieso hauptsächlich
in schlecht Beleuchter Atmosphäre benutzt wird, kann ohne
Probleme die Leuchtstärke der LEDs verringert werden. Es
hat sich ergeben, dass ein Helligkeitswert von unter 25 Prozent
für den Zweck immernoch ausreichend hell ist und sich die
Stromaufnahme pro LED dabei auf ca. 10 mA reduziert.
D. Mikrocontroller
Als Mikrocontroller soll ein AVR-Chip des Herstellers
Atmel zum Einsatz kommen. Für diesen spricht vorallem die
einfache Programmierbarkeit.
Abbildung 6. AtTiny13
Da ein signifikanter Einflussfaktor die Platinengröße sein
soll, wurde der kleineste von Atmel hergestellte Chip aus
dieser Serie gewählt. Dies ist der AtTiny 13 im DFN-Gehäuse.
Dieser Chip hat eine sehr kleine Abmessung von nur 3 x 3
mm.
Mit der Wahl dieses Mikrocontrollers gehen allerdings auch
Nachteile einher.
Zum Einen besitzt er einen sehr kleinen Abstand der Kontakte
von nur 0.5 mm, was hohe Anforderungen an die Fertigung
der Platine stellt und diese somit im FAU FabLab nur schwer
hergestellt werden kann. Ausserdem sind die Kontakte ohne
Lötbeine ausgeführt, was das Löten entsprechend erschwert.
R2
R3
Zum Anderen besitzt der Mikrocontroller einen sehr eingeschränkten Programmspeicherplatz von nur 1 Kilobyte,
2C
weshalb bei der Programmierung des Mikrocontrollerprogramms auf eine Speicherplatzsparende Arbeitsweise geachtet
werden muss.
Durch die Wahl des MikroconAbbildung 7. Platine
trollers und anderer platzsparender Kniffe konnte die Platine auf eine Kreisform mit 27,5 mm Durchmesser und 19
mm Mittelloch reduziert werden, die auf den Shisha-Schlauch
gesteckt werden kann.
TPB1,27
TPB1,27
TPB1,27
TPB1,27
TPB1,27
1C
X1
TPB1,27
Setup
Im Setup werden die benötigten Pins als IN;- bzw. OUTPUT
definiert um später einfach darauf zugreifen zu können.
In diesem Fall wird je ein digitaler Pin als Output für
die Steuerungs-LED und den LED-Schlauch benötigt. Der
Lichtsensor befindet sich an einem Analogen Eingang und
muss nicht im Setup definiert werden. Da die Steuerungs-LED
immer mit demselben festen Wert leuchtet kann diese bereits
im Setup auf die gewählte Helligkeit gesetzt werden.
1
2
3
4
5
6
int LED = 8; //Steuerungsled
#define helligkeit 64
void setup()
{
pinMode (LED, OUTPUT);
pinMode (schlauch, OUTPUT);
7
analogWrite(LED, helligkeit);
8
9
IV. I MPLEMENTIERUNG
Die Anforderungen an den Mikrocontroller sind beim leuchtenden Shisha-Schlauch denkbar gering. Er muss:
•
•
•
Eine Steuerungs-LED versorgen um den Lichtsensor zu
bestrahlen
Regelmässig den Lichtwiderstand messen
Gemäss dem gemessenen Licht LED’s im Schlauch anschalten
}
Loop
Der Loop wird als Endlosschleife ausgeführt und stöst in
jedem Durchlauf das Auslesen der Lichtwerte (analogRead)
und das Setzen der LEDs im Schlauch (setLeds) an. Wenn
man für verschiedene Effekte wie Beispielsweise “fading”
die vorherigen Lichtwerte benötigt empfiehlt es sich die
alten Werte hier zu speichern und an die setLeds Methode
weiterzureichen.
A. Arduino Variante
1
Arduino bietet sich dank einer einfach benutzbare IDE
(hier verwendet Arduino 1.6.7), mit vielen Codebeispielen und
einfachem Übertragen der Software auf einen Arduino per
USB mithilfe des integrierten Bootloaders für eine schnelle
und einfache Lösung an. Im folgenden werden die für einen
leuchtenden Shisha-Schlauch benötigten Funktionen und ihre
Zusammenarbeit dokumentiert.
LEDSetup
Der WS2812 LED-Schlauch hat eine Datenleitung welches
sich leider nicht gemäß eines standardisierten seriellen Interfaces verhält. Stattdessen ist das WS2812 Interface sehr
Zeitkritisch. Logisch 1 und 0 werden als Rechteckimpuls
dargestellt. Die Länge des Impulses bestimmt hierbei den
Wert.
Für
den
Arduino
existieren fertige Libraries
zum
Ansteuern
des
Schlauches,
z.B.
die
“Adafruit_NeoPixel”
Library,
welche
die
Zeitliche Abstimmung mit
Abbildung 8. timing diagram
dem Schlauch für uns
übernimmt.
2
3
4
5
6
8
3
4
int schlauch = 7; //LED-Schlauch
#define max = 87; //Anzahl LEDs im Schlauch
Adafruit_NeoPixel leds = Adafruit_NeoPixel
(LED_COUNT, PIN, NEO_GRB + NEO_KHZ800);
old = new;
9
10
}
setLeds
Die setLED Methode bestimmmt das gesamte Verhalten
des Shisha-Schlauchs. Der verwendete Sensor liefert Werte
zwischen 0 und 1024. Im oben beschriebenen Aufbau liegen
die tatsächlich gemessenen Werte zwischen 0 und 500. Der
LED-Schlauch is mit 87 LEDs bestückt. Eine sehr einfache
Implementierung setzt einfach mit Hilfe der setP ixelColor
library new/6 LEDs.
1
2
3
4
5
6
7
8
9
2
setLeds(new, old);
7
10
1
int in = A0; //Lichtsensor
int old = 0;
void loop()
{
int new = analogRead(eingang);
11
12
13
14
voi setLED(int new, int old)
{
int thresh = new / 6;
if(thresh > max)
tresh = max;
int i;
for(i = 0; i < max; i++){
if(i < thresh) {
leds.setPixelColor(0,0,64);
} else {
leds.setPixelColor(0,0,10);
}
}
}
Anhand des vorherigen Werts kann man aber ausgefallenere
Muster wie zB. “fading” einbauen oder bei besonders starken
Zügen ausgefallene Muster anzeigen lassen.
ausgeführt werden muss um die geforderten 0.35µs zu
warten, bevor das Bit zurückgesetzt wird und die restlichen
0.8µs gewartet wird (siehe Abb. 8).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if ((new - old) > 50) {
rainbow();
}
int fade = 54 / (old - new);
int tmp = 54;
for(i = 0; i < max; i++){
if(i < thresh) {
if(i > old) {
leds.setPixelColor(0,0,10 + tmp);
tmp -= fade;
} else {
leds.setPixelColor(0,0,64);
}
} else {
if(i < old) {
leds.setPixelColor(0,0,10 + tmp);
tmp -= fade;
} else {
leds.setPixelColor(0,0,10);
}
}
}
Generell sind beim Arduino der Kreativität des Programmierers (kaum) Grenzen gesetzt. Erweiterungen durch zusätzliche
Taster und Sensoren sind leicht realisierbar.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
__asm__ volatile (
"sbi %[port], %[bit] \n\t"
".rept %[onCycles] \n\t"
"nop \n\t"
".endr \n\t"
"cbi %[port], %[bit] \n\t"
".rept %[offCycles] \n\t"
"nop \n\t"
".endr \n\t"
::
[port]
"I" (_SFR_IO_ADDR(PORTB)),
//Port des Schlauchs^
[bit]
"I" (3), //Bit des Schlauch Pins
[onCycles]
"I" (NS_TO_CYCLES(350) - 2),
[offCycles]
"I" (NS_TO_CYCLES(800) - 2)
);
wrapper
Der WS2812 LED-Schlauch erwartet die Helligkeiten seiner
LEDs in der Reihenfolge grün, rot, blau, beginnend mit dem
jeweils höchsten Bit. Die sendBit Methode sendet aber
immer nuer ein einzelnes Bit auf den Datenkanal. Es muss
also eine einfache Wrapperfunktion erstellt werden welche
sendBit für jedes Byte der Farbcodierung 8 mal in der
richtigen Reihenfolge aufruft.
B. AtTiny13 Variante
Die Programmierung auf dem AtTiny13 Microchip verläuft
ähnlich wie auf dem Arduino. Es gibt aber auf dem AtTiny13
deutlich weniger Arbeitsspeicher und deshalb passende
Bibliothek zur Steuerung der NeoPixel, welche einfach
vorgeladen werden kann. Stattdessen muss der Zeitkritische
Teil der Kommunikation selbst per Assembler realisiert
werden.
def ines
Um den Assembler-Teil einigermassen übersichtlich zu gestalten und die Verzögerungen in Nanosekunden angeben zu
können sind einige defines zur Umrechnung notwendig.
1
2
3
4
5
#define NS_PER_SEC (1000000000L)
#define CYCLES_PER_SEC (F_CPU)
#define NS_PER_CYCLE ( NS_PER_SEC /
CYCLES_PER_SEC )
#define NS_TO_CYCLES(n) ((n)/NS_PER_CYCLE)
Jetzt können Verzögerungen gemäs der Spezifikation
in
Nanosekunden
angegeben
werden
und
mit
N S_T O_CY CLES in Taktzyklen umgerechnet werden.
sendBit
Das Anschalten und Abschalten der LEDs funktioniert
analog, nur die Wartezeiten müssen entsprechend geändert
werden. Hier wird das Abschalten einer LED im Schlauch
beschrieben.
Die Kommunikation mit dem Led-Schlauch ist Zeitkritisch,
weshalb hier per Inline Assembler nach dem Setzen des
Bits am entsprechenden Port die richtige Menge an NOPs
timeouts
Wird dem LED-Schlauch mindestens 50µs keine weitere
LED-Farbe mitgeteilt interpretiert dieser die Pause als Reset
und wird den nächsten Befehl wieder auf die erste LED
anwenden. Für die setLed Methode bedeutet dies einerseits,
dass am Ende der Methode ein simples _delay_us(50)
genügt um das Setzen der LEDs zu beenden. Leider muss
aber auch die Komplexität der Berechnungen beim setzen der
LEDs gering genug gehalten werden, dass der auf 9.6MHz
getaktete AtTiny nicht länger als 50µs für seine Berechnungen
braucht. Die oben skizierte ausführlichere setLed Methode
überschreitet diesen Wert in unseren Tests regelmässig. Der
geringe Arbeitsspeicher eines AtTiny13 lässt auch nicht zu
die Helligkeitswerte jeder LED vor der Schleife zu berechnen
und zwischen zu speichern. Es ist aber durch durch einfache
lineare Schleifenrestrukturierung möglich Berechnungen für
ein binäres Fading vor die Schleife zu ziehen, oder Werte für
Gruppen von LEDs zu speichern ohne über die Zeit;- bzw.
Platzbegrenzung zu kommen.
V. S CHLUSSFOLGERUNG
Zum aktuellen Stand des Projektes kann man als Ausblick
und Verbesserungsmaßnahme folgendes anbringen:
A. Probleme
•
•
•
Abschirmen des Photowiderstandes um den Einfluss von
Tageslicht zu verringern - hierfür soll eine größere Hülle
gedruckt werden, die sowohl die Platine schützt, als
auch LED und Widerstand einschließen um so das Licht
abzuschirmen
Der Rauch im Schlauch verflüchtigt sich nicht schnell
genug damit ein schöner Rückgang der Lichtintensität
entsteht; er wird nie ganz auf Null sinken, da der Rauch
im Bauch der Shisha auch nie ganz verschwindet
der Mikrocontroller ist nicht Leistungsfähig genug um
interessantere Effekte als einen einfachen Bargrafen auf
dem LED-Streifen darzustellen.
B. Wünschenswertes
Ausserdem sind noch diverese Erweiterungen zum aktuellen
Stand denkbar.
die Hülle in einer Farbe passend zur Shisha (erst möglich,
wenn es neues Filament gibt)
• ein schnellerer Mikrocontroller um die möglichen Abfolgen und Farben variieren zu können. Hier bietet sich ein
ARM-Mikrocontroller, da sämtliche Mikrocontroller der
verwendeten Serie größere Gehäuseabmessungen haben.
• das erwähnte Zwischenstück einbauen, um bessere Reinigung und Portabilität zu gewährleisten
• Durchfluss- oder Komponentensensoren bilden eine weitere Möglichkeit, den Rauch zu messen. Die Programmierung müsste dann an die neuen Werte angepasst werden.
• Der Einbau einer Programmiermöglichkeit direkt in das
Gehäuse, damit man den Mikrocontroller je nach Stimmung oder Umgebungshelligkeit leicht umprogrammieren kann. so kann man z.B. an einem Abend auf eine
Farbe beschränken oder die Leuchtintensität anpassen, je
nachdem wo man sich befindet und wie hell ist, damit der
Schlauch nicht blendet, in hellen Räumen aber trotzdem
zur Geltung kommt
•