misc
This commit is contained in:
parent
1928593710
commit
aa05eb3ba6
23
make_artikel/anleitung.md
Normal file
23
make_artikel/anleitung.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
|
||||||
|
# Anleitung
|
||||||
|
|
||||||
|
0) Organisiere dir an deinem lokalen makerspace folgende Fertigungsmöglichkeiten: Ein 3D-Drucker mit mindestens 25cm Bauraumhöhe. Ein Lasercutter oder eine andere Möglichkeit, um 3mm dickes Sperrholz zuzuschneiden. Ein Lötkolben.
|
||||||
|
1) Baue an deinem 3D-Drucker eine 0.8mm-Düse ein.
|
||||||
|
2) Drucke Boden und Deckel mit normalen Druckeinstellungen mit hellem PLA, support ist nicht nötig. Drucke die Kralle in einer anderen Farbe, support ist ebenfalls nicht nötig.
|
||||||
|
3) Drucke das mittlere Teil im Vasenmodus mit hellem PLA.
|
||||||
|
4) Schneide die Holzteile zurecht.
|
||||||
|
5) Presse die Muttern in die kleinen Ringe und klebe die kleinen Ringe mit Muttern an die großen Ringe. Beachte die Bilder, um die richtige Seite zu treffen.
|
||||||
|
6) Montiere die Holzteile innerhalb der Vase zusammen und verklebe die Holz-Holz-Kontakte mit Holzleim.
|
||||||
|
7) Stecke das LED-Band in einen Kanal, und schneide es so ab, dass es oben noch 10mm heraus schaut. Ziehe es wieder heraus und schneide für die weiteren Kanäle LED-Streifen mit der selben Länge ab.
|
||||||
|
8) Löte 3-polige Steckverbinder an das obere Ende der LED-Streifen. Das obere Ende erkennt man so, dass die aufgedruckten Pfeile vom oberen Ende wegschauen.
|
||||||
|
9) Ziehe die LED-Streifen in die Kanäle ein.
|
||||||
|
10) Schraube den Boden am Mittelteil fest.
|
||||||
|
11) Verlöte Mikrofon, ESP, Beschleunigungssensor, Spannungsversorgung und die Anschlussleitungen für die LEDs gemäß der Darstellung (Todo).
|
||||||
|
12) Montiere die gelöteten Teile auf dem gelochten Holzbrett, z.B. mit Hilfe von dünnen Kabelbindern und Heißkleber.
|
||||||
|
13) Schraube die Kralle an den Boden.
|
||||||
|
14) Stecke das Holzbrett in die dafür vorgesehene Aussparung im Inneren des Bodens.
|
||||||
|
15) Verbinde die Steckverbinder der LEDs.
|
||||||
|
16) Schließe den Deckel und schraube ihn fest.
|
||||||
|
17) Erinnere dich daran, dass du den Akku nicht geladen hast.
|
||||||
|
18) Wiederhole Schritte 14 bis 16.
|
||||||
|
19) Stecke die Kralle auf den Stab.
|
@ -19,25 +19,12 @@ Fusion Zauberstab
|
|||||||
- Lasercutter (Bild Lasercutter)
|
- Lasercutter (Bild Lasercutter)
|
||||||
- Verschraubung Boden und Deckel (Bild einpressen Einschlagmutter)
|
- Verschraubung Boden und Deckel (Bild einpressen Einschlagmutter)
|
||||||
|
|
||||||
# Elektronik
|
|
||||||
- (Übersichtszeichnung (Fritzing))
|
|
||||||
- (Bild Elektronikschlitten)
|
|
||||||
- ESP32
|
|
||||||
- Mikrofon
|
|
||||||
- Beschleunigungssensor
|
|
||||||
- Akku
|
|
||||||
- WS2812
|
|
||||||
|
|
||||||
# Platformio (streichen?)
|
|
||||||
|
|
||||||
# Software-Struktur
|
# Software-Struktur
|
||||||
- Verwendete Bibliotheken
|
- Verwendete Bibliotheken
|
||||||
- FastLED
|
- FastLED
|
||||||
- ADXL345 Bibliothek
|
- ADXL345 Bibliothek
|
||||||
- Aufbau des Projekts
|
- Aufbau des Projekts
|
||||||
- Apps
|
- Apps
|
||||||
|
|
||||||
# Bedienung (Teil von Software?)
|
|
||||||
- Double tap
|
- Double tap
|
||||||
- Verwendung von Interrupts
|
- Verwendung von Interrupts
|
||||||
- ESP32 Deep Sleep
|
- ESP32 Deep Sleep
|
||||||
@ -51,6 +38,11 @@ Fusion Zauberstab
|
|||||||
- "Seeding" mit Sound
|
- "Seeding" mit Sound
|
||||||
- (Blockdiagramm)
|
- (Blockdiagramm)
|
||||||
|
|
||||||
|
# Anleitung
|
||||||
|
- hardware
|
||||||
|
- software
|
||||||
|
- plattformIO
|
||||||
|
|
||||||
# Praxistest
|
# Praxistest
|
||||||
- (Fusion Bilder)
|
- (Fusion Bilder)
|
||||||
- beaterkennung funktioniert je nach musik, fackel immer
|
- beaterkennung funktioniert je nach musik, fackel immer
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 1.6 MiB |
@ -3,7 +3,7 @@ import matplotlib.pyplot as plt
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
n_plots = 5
|
n_plots = 8
|
||||||
endtime = 4
|
endtime = 4
|
||||||
size = 1000
|
size = 1000
|
||||||
|
|
||||||
@ -11,11 +11,23 @@ time = np.linspace(0,endtime,size)
|
|||||||
audio = 1023*np.random.random(size=(size))
|
audio = 1023*np.random.random(size=(size))
|
||||||
audio = 512+(audio-512)*(0.2)*np.sin(np.linspace(0,endtime*2*3.14*2, size))+(audio-512)*0.3
|
audio = 512+(audio-512)*(0.2)*np.sin(np.linspace(0,endtime*2*3.14*2, size))+(audio-512)*0.3
|
||||||
|
|
||||||
fig, axs = plt.subplots(n_plots, 1)
|
#fig, axs = plt.subplots(n_plots, 1, sharex=True)
|
||||||
|
fig = plt.figure(figsize=(10,10))
|
||||||
|
gs = fig.add_gridspec(n_plots, hspace=0)
|
||||||
|
axs = gs.subplots(sharex=True)
|
||||||
|
|
||||||
|
axs[0].set_xlim((-0,4))
|
||||||
|
|
||||||
|
|
||||||
|
titlex = 0.5
|
||||||
|
titley = 0.5
|
||||||
|
|
||||||
axs[0].plot(time,audio)
|
axs[0].plot(time,audio)
|
||||||
|
axs[0].set_ylabel("Mikrofon\n-signal", x=titlex, y=titley)
|
||||||
|
|
||||||
audio_norm = audio-512
|
audio_norm = audio-512
|
||||||
axs[1].plot(time,audio_norm)
|
axs[1].plot(time,audio_norm)
|
||||||
|
axs[1].set_ylabel("Mikrofon\n-signal\nnormiert", x=titlex, y=titley)
|
||||||
|
|
||||||
spc = size/endtime
|
spc = size/endtime
|
||||||
|
|
||||||
@ -25,6 +37,7 @@ audio_norm = np.array(audio_norm)
|
|||||||
audio_squared = np.square(audio_norm)
|
audio_squared = np.square(audio_norm)
|
||||||
|
|
||||||
axs[2].plot(time, audio_squared)
|
axs[2].plot(time, audio_squared)
|
||||||
|
axs[2].set_ylabel("Signal\n-energie", x=titlex, y=titley)
|
||||||
|
|
||||||
spc = int(size/endtime/40)
|
spc = int(size/endtime/40)
|
||||||
|
|
||||||
@ -42,8 +55,93 @@ for sample, timepoint in zip(audio_squared, time):
|
|||||||
energy = 0
|
energy = 0
|
||||||
|
|
||||||
axs[3].plot(chunktimes, chunks)
|
axs[3].plot(chunktimes, chunks)
|
||||||
|
axs[3].set_ylabel("Signale\n-nergie\nchunks", x=titlex, y=titley)
|
||||||
|
|
||||||
|
n_BP = 5
|
||||||
|
SAMPLING_FREQUENCY_BP = 40
|
||||||
|
import math
|
||||||
|
|
||||||
|
|
||||||
|
filter_outputs = list()
|
||||||
|
|
||||||
|
angles = list()
|
||||||
|
angles2 = list()
|
||||||
|
|
||||||
|
delayed = list()
|
||||||
|
|
||||||
|
|
||||||
|
for i in range(n_BP):
|
||||||
|
filter_output = list()
|
||||||
|
Q = 10
|
||||||
|
frequency = 2.2 + i * 0.2
|
||||||
|
w0 = 2. * 3.1415 * frequency / SAMPLING_FREQUENCY_BP
|
||||||
|
a = math.sin(w0 / (2. * Q))
|
||||||
|
b0 = a
|
||||||
|
b1 = 0.
|
||||||
|
b2 = -a
|
||||||
|
a0 = 1. + a
|
||||||
|
a1 = -2. * math.cos(w0)
|
||||||
|
a2 = 1. - a
|
||||||
|
|
||||||
|
x, xn1, xn2, yn1, yn2 = 0,0,0,0,0
|
||||||
|
yn3, yn4, yn5 = 0,0,0
|
||||||
|
angle2 = 0
|
||||||
|
for chunk in chunks:
|
||||||
|
y = b0 * chunk + b1 * xn1 + b2 * xn2 - yn1 * a1 - yn2 * a2
|
||||||
|
|
||||||
|
xn2 = xn1
|
||||||
|
xn1 = x
|
||||||
|
|
||||||
|
yn5 = yn4
|
||||||
|
yn4 = yn3
|
||||||
|
yn3 = yn2
|
||||||
|
yn2 = yn1
|
||||||
|
yn1 = y
|
||||||
|
|
||||||
|
if i==1:
|
||||||
|
angle = math.atan2(yn5, y)
|
||||||
|
angles.append(angle)
|
||||||
|
delayed.append(yn5)
|
||||||
|
|
||||||
|
|
||||||
|
PI = 3.141592
|
||||||
|
if (PI < abs(angle - angle2) and abs(angle - angle2) < 3 * PI):
|
||||||
|
|
||||||
|
angle2 = angle + 2 * PI
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
angle2 = angle
|
||||||
|
|
||||||
|
angles2.append(angle2)
|
||||||
|
|
||||||
|
|
||||||
|
filter_output.append(y)
|
||||||
|
|
||||||
|
axs[4].plot(chunktimes, filter_output, color="#1f77b4" if i == 1 else "grey")
|
||||||
|
|
||||||
|
if i == 1:
|
||||||
|
axs[5].plot(chunktimes, filter_output)
|
||||||
|
|
||||||
|
filter_outputs.append(filter_output)
|
||||||
|
|
||||||
|
axs[4].set_ylabel("Band\n-pässe", x=titlex, y=titley)
|
||||||
|
|
||||||
|
axs[5].plot(chunktimes, delayed, color="grey")
|
||||||
|
axs[5].set_ylabel("Delay", x=titlex, y=titley)
|
||||||
|
|
||||||
|
axs[6].plot(chunktimes, angles)
|
||||||
|
axs[6].set_ylabel("Geschätzter\nPhasen\nwinkel", x=titlex, y=titley)
|
||||||
|
|
||||||
|
axs[7].plot(chunktimes, angles2)
|
||||||
|
axs[7].set_ylabel("Halbierte\nFrequenz", x=titlex, y=titley)
|
||||||
|
|
||||||
|
for i in range(n_plots):
|
||||||
|
axs[i].set_yticks(())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
plt.savefig("beaterkennung.svg")
|
||||||
|
plt.savefig("beaterkennung.png", dpi=500)
|
||||||
plt.show()
|
plt.show()
|
6199
make_artikel/grafiken/illustrationen/beaterkennung.svg
Normal file
6199
make_artikel/grafiken/illustrationen/beaterkennung.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 152 KiB |
0
make_artikel/grafiken/illustrationen/debug.log
Normal file
0
make_artikel/grafiken/illustrationen/debug.log
Normal file
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
# Holzskelett
|
# Holzskelett
|
||||||
|
|
||||||
Um dem Ei trotz der dünnen Schalt ausreichend Steifigkeit zu verleihen, wird es innen durch ein Holzskelett verstärkt.
|
Um dem Ei trotz der dünnen Schale ausreichend Steifigkeit zu verleihen, wird es innen durch ein Holzskelett verstärkt.
|
||||||
Dieses ist so konstruiert, dass es sich im Inneren des Vasenteils zusammenbauen und verkleben lässt und es so von innen aussteift.
|
Dieses ist so konstruiert, dass es sich im Inneren des Vasenteils zusammenbauen und verkleben lässt und es so von innen aussteift.
|
||||||
Gleichzeitig sind alle Teile des Holzskelett prismatisch, lassen sich also im Lasercutter herstellen. Das ist hier dargestellt:
|
Gleichzeitig sind alle Teile des Holzskelett prismatisch, lassen sich also im Lasercutter herstellen. Das ist hier dargestellt:
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
# Konzept
|
# Konzept
|
||||||
|
|
||||||
Der weiße Teil des Eis besteht aus drei vertikal gestapelten Teilen, die jeweils 3D-gedruckt sind. Das mittlere dieser Teile ist für schnellen Druck im Vasenmodus ausgeführt - mehr dazu später.
|
Die Hülle des Eis besteht aus drei vertikal gestapelten 3D-Druckteilen. Die mittlere Komponente ist für schnellen Druck im Vasenmodus ausgeführt - mehr dazu später.
|
||||||
|
|
||||||
Im Inneren der Vase befindet sich zur Stabilisierung ein geklebtes Skelett aus lasergeschnittenem Holz. Dieses ist formschlüssig mit der Vase verbunden und mit den anderen beiden weißen Teilen verschraubt.
|
Im Inneren der Vase befindet sich zur Stabilisierung ein geklebtes Skelett aus lasergeschnittenem Holz. Dieses ist formschlüssig mit der Vase verbunden und mit dem Boden und Deckel verschraubt.
|
||||||
|
|
||||||
Im Inneren des Holzskeletts ist eine Holzplatte eingespannt, welche als Träger der Elektronik fungiert.
|
Im Inneren des Holzskeletts ist eine Holzplatte eingespannt, welche als Träger der Elektronik fungiert.
|
||||||
|
|
||||||
@ -15,6 +15,8 @@ Das Ei sitzt verschraubt auf einem gedruckten Sockel. Dieser enthält einen krei
|
|||||||
|
|
||||||
Im Inneren befindet sich ein ESP32 Mikrocontroller, ein Mikrofon, ein Beschleunigungssensor, ein 10Ah Reiseakku und drei WS2812 LED-Bänder.
|
Im Inneren befindet sich ein ESP32 Mikrocontroller, ein Mikrofon, ein Beschleunigungssensor, ein 10Ah Reiseakku und drei WS2812 LED-Bänder.
|
||||||
|
|
||||||
|
(DSC07978.JPG)
|
||||||
|
|
||||||
Auf dem ESP32 läuft ein in C++ geschriebenes Programm, welches zwischen verschiedenen Animationen umschaltet. Die Umschaltung erfolgt durch den Beschleunigungssensor - ein doppeltes Aufstampfen des Stabes auf dem Boden wird hier als Umschaltsignal interpretiert.
|
Auf dem ESP32 läuft ein in C++ geschriebenes Programm, welches zwischen verschiedenen Animationen umschaltet. Die Umschaltung erfolgt durch den Beschleunigungssensor - ein doppeltes Aufstampfen des Stabes auf dem Boden wird hier als Umschaltsignal interpretiert.
|
||||||
|
|
||||||
Auf dem Festival hatten wir zwei verschiedene Animationen implementiert, die wir hier "Beaterkennung" und "Fackel" nennen. Die Beaterkennung lässt auf jeden zweiten Beat eine Lichtwelle über das Ei laufen, die Fackel bildet ein Feuer nach, welches durch hohe Lautstärke angefacht wird. Nach den beiden Animationen geht das Ei in einen deep sleep, ein weiteres Doppelstampfen bringt es dann wieder auf die erste Animation.
|
Auf dem Festival hatten wir zwei verschiedene Animationen implementiert, die wir hier "Beaterkennung" und "Fackel" nennen. Die Beaterkennung lässt auf jeden zweiten Beat eine Lichtwelle über das Ei laufen, die Fackel bildet ein Feuer nach, welches durch hohe Lautstärke angefacht wird. Nach den beiden Animationen geht das Ei in einen deep sleep, ein weiteres Doppelstampfen bringt es dann wieder auf die erste Animation.
|
||||||
|
7
make_artikel/todo.md
Normal file
7
make_artikel/todo.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
1) ringe in die lasercutter-pdf und in die explosionszeichung
|
||||||
|
2) fotos machen beim aufbau
|
||||||
|
3) explosionszeichnung labeln
|
||||||
|
4) fritzing
|
||||||
|
5) komponentenliste (stab (20mm außen, 17mm innen), schrauben (TODO), akkupack, steckverbinder, esp, mikro, beschleunigungssensor, litzen, schrumpfschläuche, sperrholz, 2 sorten pla, einpressmuttern 4x4), dünne lange kabelbinder
|
||||||
|
6) (optional) obere 3 verbindungen zwischen kralle und ei weg
|
Loading…
Reference in New Issue
Block a user