Hugo aktualisiert (#29)

epvpn
Robert Jacob 2 years ago
commit 4f0520e4b2
  1. 4
      .drone.yml
  2. 3
      .gitignore
  3. 112
      config.toml
  4. 2
      content/news/2016/1_Jahr_Jubilaeum.md
  5. 0
      content/news/2017/feinstaub/basteln.jpg
  6. 8
      content/news/2017/feinstaub/index.md
  7. 0
      content/news/2017/feinstaub/vortrag.jpg
  8. 3
      content/news/2018/tag-der-offenen-tuer-2018/index.md
  9. 0
      content/news/2018/tag-der-offenen-tuer-2018/tag-der-offenen-tuer-flyer-2018.png
  10. 0
      content/news/2018/technik-tueftel-nachmittag-2018/flyer_bastelnachmittag_2018.jpg
  11. 4
      content/news/2018/technik-tueftel-nachmittag-2018/index.md
  12. 0
      content/projekt/1dpong/1DPongBausatz.png
  13. 0
      content/projekt/1dpong/1Dpong.png
  14. 6
      content/projekt/1dpong/index.md
  15. 0
      content/projekt/HolzLEDLampe/IMG_20190206_225915.jpg
  16. 0
      content/projekt/HolzLEDLampe/IMG_20190220_130452.jpg
  17. 0
      content/projekt/HolzLEDLampe/IMG_20190220_130531.jpg
  18. 0
      content/projekt/HolzLEDLampe/IMG_20190220_130642.jpg
  19. 0
      content/projekt/HolzLEDLampe/IMG_20190220_130724.jpg
  20. 0
      content/projekt/HolzLEDLampe/IMG_20190221_133653.jpg
  21. 0
      content/projekt/HolzLEDLampe/IMG_20190221_133710.jpg
  22. 0
      content/projekt/HolzLEDLampe/IMG_20190221_133720.jpg
  23. 0
      content/projekt/HolzLEDLampe/IMG_20190221_164613.jpg
  24. 0
      content/projekt/HolzLEDLampe/IMG_20190221_182619.jpg
  25. 0
      content/projekt/HolzLEDLampe/IMG_20190221_182631.jpg
  26. 0
      content/projekt/HolzLEDLampe/IMG_20190222_112506.jpg
  27. 74
      content/projekt/HolzLEDLampe/index.md
  28. 0
      content/projekt/NodeMCU_Neopixel/MASTER_script.jpg
  29. 0
      content/projekt/NodeMCU_Neopixel/NodeMCU_Neopixel.jpg
  30. 0
      content/projekt/NodeMCU_Neopixel/font_sample1.jpg
  31. 0
      content/projekt/NodeMCU_Neopixel/font_sample2.jpg
  32. 0
      content/projekt/NodeMCU_Neopixel/font_vorlage.jpg
  33. 64
      content/projekt/NodeMCU_Neopixel/index.md
  34. 0
      content/projekt/NodeMCU_Neopixel/overview.jpg
  35. 0
      content/projekt/NodeSP/NodeSP_App.png
  36. 0
      content/projekt/NodeSP/NodeSP_Aufbau.jpg
  37. 0
      content/projekt/NodeSP/NodeSP_Bohrschablone.png
  38. 0
      content/projekt/NodeSP/NodeSP_Overview.jpg
  39. 54
      content/projekt/NodeSP/index.md
  40. 98
      content/projekt/PimpedWebcam/index.md
  41. 0
      content/projekt/PimpedWebcam/webcam_blank.jpg
  42. 0
      content/projekt/PimpedWebcam/webcam_modified.jpg
  43. 21
      content/projekt/Rundumlicht/index.md
  44. 0
      content/projekt/Rundumlicht/rundumlicht_flasche.resized.jpg
  45. 0
      content/projekt/Rundumlicht/rundumlicht_lampe.resized.jpg
  46. 0
      content/projekt/Rundumlicht/rundumlicht_off_closeup.resized.jpg
  47. 0
      content/projekt/Rundumlicht/rundumlicht_ohne_diffusor.resized.jpg
  48. 0
      content/projekt/Rundumlicht/rundumlicht_on.resized.jpg
  49. 0
      content/projekt/Rundumlicht/rundumlicht_schrauben.resized.jpg
  50. 84
      content/projekt/StromMonitor/index.md
  51. 0
      content/projekt/StromMonitor/liste.png
  52. 0
      content/projekt/StromMonitor/material1.png
  53. 0
      content/projekt/StromMonitor/power24.png
  54. 0
      content/projekt/StromMonitor/power7d.png
  55. 0
      content/projekt/StromMonitor/s0.png
  56. 0
      content/projekt/StromMonitor/schaltplan-testaufbau2.gif
  57. 0
      content/projekt/StromMonitor/schaltplan.gif
  58. 0
      content/projekt/StromMonitor/testaufbau.png
  59. 0
      content/projekt/StromMonitor/zaehler.png
  60. 4
      content/projekt/bewegungsappar.at.md
  61. 14
      content/projekt/motivationswaage/index.md
  62. 0
      content/projekt/motivationswaage/motivatingscale.fzz
  63. 0
      content/projekt/motivationswaage/motivatingscale1.jpg
  64. 0
      content/projekt/motivationswaage/motivatingscale2.jpg
  65. 0
      content/projekt/motivationswaage/motivatingscale3.jpg
  66. 16
      content/projekt/mpaxlora/index.md
  67. 0
      content/projekt/mpaxlora/osm_create_sensor.png
  68. 0
      content/projekt/mpaxlora/osm_general.png
  69. 0
      content/projekt/mpaxlora/osm_ttn.png
  70. 0
      content/projekt/mpaxlora/osm_ttn_settings.png
  71. 0
      content/projekt/mpaxlora/osm_uebersicht1.png
  72. 0
      content/projekt/mpaxlora/osm_uebersicht2.png
  73. 0
      content/projekt/mpaxlora/osm_werte.png
  74. 0
      content/projekt/mpaxlora/tbeam.png
  75. 0
      content/projekt/mpaxlora/ttn_add_app.png
  76. 0
      content/projekt/mpaxlora/ttn_register_device.png
  77. 0
      content/projekt/sparkduino/fertig.jpg
  78. 0
      content/projekt/sparkduino/groesse.jpg
  79. 24
      content/projekt/sparkduino/index.md
  80. 0
      content/projekt/sparkduino/schaltplan.png
  81. 0
      content/projekt/sparkduino/versuchsaufbau.jpg
  82. 0
      content/projekt/wetterbimmler/bimmler.jpg
  83. 4
      content/projekt/wetterbimmler/index.md
  84. 12
      content/projekt/zeedee/index.md
  85. 0
      content/projekt/zeedee/zeedee1.jpg
  86. 0
      content/projekt/zeedee/zeedee2.jpg
  87. 0
      content/projekt/zeedee/zeedee3.jpg
  88. 0
      content/projekt/zeedee/zeedee4.jpg
  89. 0
      content/projekt/zeedee/zeedee5.jpg
  90. 2
      content/treffpunkt.md
  91. 23
      content/verein/_index.md
  92. 11
      content/vortrag/feinstaub.md
  93. 0
      content/vortrag/feinstaub/flyer.jpg
  94. 11
      content/vortrag/feinstaub/index.md
  95. 0
      content/vortrag/klangerzeugung/3dspectrum.png
  96. 2
      content/vortrag/klangerzeugung/index.md
  97. 2
      content/vortrag/rsa/index.md
  98. 0
      content/vortrag/rsa/rsa.pdf
  99. 4
      content/vortrag/wrf/index.md
  100. 0
      content/vortrag/wrf/nwp.pdf
  101. Some files were not shown because too many files have changed in this diff Show More

@ -7,7 +7,7 @@ steps:
commands:
- git submodule update --init --recursive
- name: build
image: xperimental/hugo:0.58.3
image: xperimental/hugo:0.72.0
commands:
- hugo
- name: publish
@ -23,7 +23,7 @@ steps:
branch:
- master
- name: verify
image: xperimental/linky:0.3.0
image: xperimental/linky:0.4.0
commands:
- linky https://www.hacknology.de
when:

3
.gitignore vendored

@ -1,4 +1,5 @@
_site
.sass-cache
/public/
*~
/resources/
*~

@ -11,14 +11,14 @@ pygmentsstyle = "friendly"
pygmentsuseclasses = true
[permalinks]
news = "/news/:year/:month/:day/:filename"
projekt = "/projekt/:year/:filename"
vortrag = "/vortrag/:year/:filename"
news = "/news/:year/:month/:day/:filename"
projekt = "/projekt/:year/:filename"
vortrag = "/vortrag/:year/:filename"
[params]
brand = "hacKNology"
subtitle = "Hackerspace in Konstanz"
dateFormat = "02. Jan 2006"
brand = "hacKNology"
subtitle = "Hackerspace in Konstanz"
dateFormat = "02. Jan 2006"
[markup.goldmark.renderer]
unsafe=true
@ -26,71 +26,71 @@ unsafe=true
[menu]
[[menu.main]]
name = "Home"
pre = "<i class='fa fa-home fa-fw'></i>"
weight = 1
identifier = "home"
url = "/"
name = "Home"
pre = "<i class='fa fa-home fa-fw'></i>"
weight = 1
identifier = "home"
url = "/"
[[menu.main]]
name = "Treffpunkt"
pre = "<i id='my-thumbs-up' class='fa fa-thumbs-up fa-fw'></i>"
weight = 5
identifier = "treffpunkt"
url = "/treffpunkt/"
name = "Treffpunkt"
pre = "<i id='my-thumbs-up' class='fa fa-thumbs-up fa-fw'></i>"
weight = 5
identifier = "treffpunkt"
url = "/treffpunkt/"
[[menu.main]]
name = "Aktuelles"
pre = "<i class='fa fa-newspaper-o fa-fw'></i>"
weight = 10
identifier = "blog"
url = "/news/"
name = "Aktuelles"
pre = "<i class='fa fa-newspaper-o fa-fw'></i>"
weight = 10
identifier = "blog"
url = "/news/"
[[menu.main]]
name = "Vorträge"
pre = "<i class='fa fa-slideshare fa-fw'></i>"
weight = 20
identifier = "vortraege"
url = "/vortrag/"
name = "Vorträge"
pre = "<i class='fa fa-slideshare fa-fw'></i>"
weight = 20
identifier = "vortraege"
url = "/vortrag/"
[[menu.main]]
name = "Projekte"
pre = "<i class='fa fa-flask fa-fw'></i>"
weight = 30
identifier = "projekte"
url = "/projekt/"
name = "Projekte"
pre = "<i class='fa fa-flask fa-fw'></i>"
weight = 30
identifier = "projekte"
url = "/projekt/"
[[menu.main]]
name = "Verein"
pre = "<i class='fa fa-book fa-fw'></i>"
weight = 40
identifier = "verein"
url = "/verein/"
name = "Verein"
pre = "<i class='fa fa-book fa-fw'></i>"
weight = 40
identifier = "verein"
url = "/verein/"
[[menu.main]]
name = "Shop"
pre = "<i class='fa fa-shopping-cart fa-fw'></i>"
weight = 50
identifier = "shop"
url = "http://hacknology.spreadshirt.de"
name = "Shop"
pre = "<i class='fa fa-shopping-cart fa-fw'></i>"
weight = 50
identifier = "shop"
url = "https://hacknology.spreadshirt.de"
[[menu.main]]
name = "Kontakt"
pre = "<i class='fa fa-comments fa-fw'></i>"
weight = 55
identifier = "kontakt"
url = "/kontakt/"
name = "Kontakt"
pre = "<i class='fa fa-comments fa-fw'></i>"
weight = 55
identifier = "kontakt"
url = "/kontakt/"
[[menu.main]]
name = "Impressum"
pre = "<i class='fa fa-bank fa-fw'></i>"
weight = 60
identifier = "impressum"
url = "/impressum/"
name = "Impressum"
pre = "<i class='fa fa-bank fa-fw'></i>"
weight = 60
identifier = "impressum"
url = "/impressum/"
[[menu.main]]
name = "Datenschutz"
pre = "<i class='fa fa-user-secret fa-fw'></i>"
weight = 65
identifier = "datenschutz"
url = "/datenschutz"
name = "Datenschutz"
pre = "<i class='fa fa-user-secret fa-fw'></i>"
weight = 65
identifier = "datenschutz"
url = "/datenschutz"

@ -61,7 +61,7 @@ Wir bekamen 3d Drucker und druckten alles kaputt.
Wir bastelten an einem Logo und haben nun folgendes Schmuckstück:
{{< fluid_img alt="hacKNology Logo" src="/images/hacKNology_Logo_small.png" >}}
{{< image alt="hacKNology Logo" src="/images/hacKNology_Logo_small.png" >}}
Wir redeten mit dem Zebrakino und schafften so den Weg in die Öffentlichkeit.

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 133 KiB

@ -7,10 +7,10 @@ date: 2017-10-21
Am 21.10.2017 besuchte uns Frank Riedel vom [OK Lab Stuttgart](https://codefor.de/stuttgart/), um deren Projekt ["Feinstaub-Rohr"](http://luftdaten.info/) vorzustellen.
Wo sonst könnte ein solches Projekt auch seinen Ursprung haben?
Im gut gefüllten Veranstaltungsraum des [Technologiezentrum Konstanz](http://www.tz-konstanz.de/) (zur Verfügung gestellt mit freundlicher Unterstützung von [CyberLago](https://cyberlago.net/)) startete die Veranstaltung mit einem kurzweiligen Vortrag, der die verschiedenen Aspekte rund ums Thema Feinstaub
Im gut gefüllten Veranstaltungsraum des [Technologiezentrum Konstanz](http://www.tz-konstanz.de/) (zur Verfügung gestellt mit freundlicher Unterstützung von [CyberLago](https://cyberlago.net/)) startete die Veranstaltung mit einem kurzweiligen Vortrag, der die verschiedenen Aspekte rund ums Thema Feinstaub
beleuchtete und die Motivation hinter dem "Feinstaub-Rohr" zeigte.
{{< fluid_img src="/images/feinstaub/vortrag.jpg" alt="Vortragsbild" >}}
{{< image src="vortrag.jpg" alt="Vortragsbild" >}}
<!--more-->
@ -46,7 +46,7 @@ Daher auch die liebevolle Bezeichnung "Paten" - denn ohne ein wenig Pflege und d
Im Anschluss an den Vortrag ging es daher ans Selber-Basteln.
Die Teilnehmer konnten die von hacKNology mitgebrachten Bauteile zum Selbstkostenpreis erwerben und gleich vor Ort ihren Sensor zusammenbauen (an dieser Stelle der Hinweis, dass dank des regen Zuspruchs **alle** unsere Bausätze verteilt sind). In den nächsten Tagen sollte sich die [Konstanzer Luftdatenkarte](http://konstanz.maps.luftdaten.info) also mit Leben füllen.
{{< fluid_img src="/images/feinstaub/basteln.jpg" alt="Beim Basteln" >}}
{{< image src="basteln.jpg" alt="Beim Basteln" >}}
Ist ein Sensor erst einmal aktiviert, muss er nur noch ans heimische WLAN angeschlossen werden, damit er regelmäßig seine Daten in die Datenbank von luftdaten.info eintragen kann.
@ -54,7 +54,7 @@ Die genaue Bauanleitung, sowie Video-Tutorials und FAQs finden sich auf der offi
Wer bei der Bestellung oder dem Zusammenbau Hilfe benötigt, kann sich natürlich jederzeit an hacKNology wenden, wir unterstützen gerne!
## Datenschutz
## Datenschutz
Noch ein Wort zum Datenschutz der Aktion: die Position jedes Sensors im Messnetzwerk wird anonymisiert, indem die Sensoren lediglich Zellen von ca. 150mx150m zugeordnet werden.
Die eigentliche Datenübermittlung findet über das heimische WLAN-Netzwerk statt, die Zugangsdaten bleiben natürlich auf dem Sensor und werden nirgends sonst gespeichert.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 148 KiB

@ -8,7 +8,6 @@ Am 29. September 2018 veranstalten wir zusammen mit der [Innovationswerkstatt Ko
<!--more-->
{{< fluid_img src="/images/tag-der-offenen-tuer-2018/tag-der-offenen-tuer-flyer-2018.png" alt="Flyer für den Tag der offenen Tür 2018" >}}
{{< image src="tag-der-offenen-tuer-flyer-2018.png" alt="Flyer für den Tag der offenen Tür 2018" >}}
Alle Interessierten sind herzlichst eingeladen!

@ -4,9 +4,9 @@ author: tecer
date: 2018-04-08
---
Auch 2018 bieten wir wieder einen *Technik-Tüftel-Nachmittag* für Kinder und Jugendliche im Quartierszentrum an!
Auch 2018 bieten wir wieder einen *Technik-Tüftel-Nachmittag* für Kinder und Jugendliche im Quartierszentrum an!
{{< fluid_img src="/images/technik-tueftel/flyer_bastelnachmittag_2018.jpg" alt="Technik-Tüftel-Nachmittag 2018" >}}
{{< image src="flyer_bastelnachmittag_2018.jpg" alt="Technik-Tüftel-Nachmittag 2018" >}}
Am *Samstag, den 28.4.2018 von 14 Uhr bis 17 Uhr* dreht sich bei uns alles um Technik-Basteleien, wie z.B. einen Wechselblinker oder ein heißer-Draht-Spiel.

Before

Width:  |  Height:  |  Size: 335 KiB

After

Width:  |  Height:  |  Size: 335 KiB

Before

Width:  |  Height:  |  Size: 285 KiB

After

Width:  |  Height:  |  Size: 285 KiB

@ -5,7 +5,7 @@ status: Aktiv
difficulty: einfach
time: ~1h
date: 2018-11-17
image: /images/1DPongBausatz.png
image: 1DPongBausatz.png
---
# 1D Pong
@ -14,7 +14,7 @@ Die diesjährige Maker Faire haben wir zum Anlass genommen, ein Selbstbastel-Pro
Auf der Maker Faire Bodensee 2018 haben auch bereits einige Leute die Chance genutzt und sich ihr eigenes 1D Pong gebastelt. Wir haben immer einige Selbstbastel-Kits verfügbar, tritt einfach mal mit uns in [Kontakt]({{< ref "/kontakt.md" >}}). Dann können wir dir gerne dabei helfen, ein eigenes 1D Pong Kit zu bauen.
{{< fluid_img alt="1D Pong Plakat" src="/images/1Dpong.png" >}}
{{< image alt="1D Pong Plakat" src="1Dpong.png" >}}
## Voraussetzungen um die Firmware zu flashen
@ -25,4 +25,4 @@ Die Firmware sowie alle weitere Infos sind unter https://git.hacknology.de/proje
### HINWEIS: Anders als auf den Grafiken dargestellt muss der DIN-Pin des LED-Streifens NICHT mit A7 verbunden werden sonder mit Pin D13 (wird manchmal auch nur als Pin 13 bezeichnet)
{{< fluid_img alt="" src="/images/1DPongBausatz.png" >}}
{{< image alt="" src="1DPongBausatz.png" >}}

@ -5,91 +5,97 @@ status: Aktiv
difficulty: einfachst
time: ~24h
date: 2019-02-22
image: /images/Holz-LED-Lampe/IMG_20190221_182619.jpg
image: IMG_20190221_182619.jpg
keywords: LED-Applikation, Holzmöbel
---
## Motivation ##
## Motivation
Seit einiger Zeit gibt es LED-Lampen im 'Holz-Design' zu 'Manufactum'-Preisen im Handel
(400-800€ je nach Ausführung, Stand 4Q2018).
Das geht preiswerter - und mit eigenem Design!
{{< fluid_img alt="Optik" src="/images/Holz-LED-Lampe/IMG_20190221_133720.jpg" >}}
{{< image alt="Optik" src="IMG_20190221_133720.jpg" >}}
## Planung
## Planung ##
Die ursprüngliche Planung sah eine LED-Nutzung mit Neopixel-LEDs vor, diese
erwiesen sich jedoch als zu lichtschwach (um wirklich als Beleuchtung zu taugen)
und nicht wirklich 'warmweiss' (Farbtemperatur < 3000K).
und nicht wirklich 'warmweiss' (Farbtemperatur < 3000K).
Im vorliegenden Fall habe ich MaxiLED 1500 warmweiss von Paulmann verwendet (mit
dem Seiteneffekt, daß - leider - gar keine MCU mehr erforderlich ist ...).
{{< fluid_img alt="In Action ..." src="/images/Holz-LED-Lampe/IMG_20190221_182619.jpg" >}}
{{< image alt="In Action ..." src="IMG_20190221_182619.jpg" >}}
Die LEDs sind in Gruppen zu dritt in Reihe geschaltet, diese Gruppen
sind dann jeweils parallel geschaltet. Die Spannungsversorgung 24V DC ist auf
sind dann jeweils parallel geschaltet. Die Spannungsversorgung 24V DC ist auf
beiden Seiten außen, GND sind die drei mittleren Anschlüsse. Grundsätzlich
kann also an jeder Trennstelle angeschlossen werden ...
{{< fluid_img alt="LED-Streifen" src="/images/Holz-LED-Lampe/IMG_20190221_164613.jpg" >}}
{{< image alt="LED-Streifen" src="IMG_20190221_164613.jpg" >}}
Die LED-Streifen werden außen in die Nut mit Ausrichtung zur Mitte eingeklebt.
Auf die Schräge der Nut kommt eine Spiegelfolie als Reflektor.
Die Berechnung der Mantelabwicklung erfolgt mit
Die Berechnung der Mantelabwicklung erfolgt mit
R=130mm, r=110mm und h=20mm nach den Formeln auf http://mathematik-online.de/F114.htm
wodurch sich für m 28,3mm, M 183,8mm und alpha 255° ergeben.
{{< fluid_img alt="LED-Streifen" src="/images/Holz-LED-Lampe/IMG_20190222_112506.jpg" >}}
## Ausführung ##
{{< image alt="LED-Streifen" src="IMG_20190222_112506.jpg" >}}
## Ausführung
Der vorliegende Aufbau beinhaltet auch eine Dimmfunktion mit Infrarot-Fernsteuerung,
auf diese kann aber durchaus verzichtet werden. Die Teile werden einfach mit
Heißkleber im Deckel einer einfachen Alubox fixiert. Die Alubox bekommt noch
zwei 8mm Auslässe (1x Infrarot-Empfänger und 1x Spannungsversorgungskabel 230V AC)
und 3x 3mm Bohrungen für die Lampenaufhängung (und Spannungsversorgung).
und 3x 3mm Bohrungen für die Lampenaufhängung (und Spannungsversorgung).
{{< fluid_img alt="Deckelaufbau" src="/images/Holz-LED-Lampe/IMG_20190220_130452.jpg" >}}
{{< image alt="Deckelaufbau" src="IMG_20190220_130452.jpg" >}}
Die Aufhängung erfolgt mit den Einzeladern eines Lampenkabels (je ca. 1,5m-1,8m).
{{< fluid_img alt="Alubox Deckenaufhängung" src="/images/Holz-LED-Lampe/IMG_20190221_182631.jpg" >}}
{{< image alt="Alubox Deckenaufhängung" src="IMG_20190221_182631.jpg" >}}
Die Fixierung erfolgt auf beiden Seiten (im Alubox-Deckel und auf der Lampenseite) mit einfach umwickelten Unterlegscheiben (12mm außen).
{{< fluid_img alt="Im Deckel" src="/images/Holz-LED-Lampe/IMG_20190220_130531.jpg" >}}
{{< image alt="Im Deckel" src="IMG_20190220_130531.jpg" >}}
Anschlußdetail: +24V-Anschluss
{{< fluid_img alt="In der Lampe: +24V" src="/images/Holz-LED-Lampe/IMG_20190220_130642.jpg" >}}
{{< image alt="In der Lampe: +24V" src="IMG_20190220_130642.jpg" >}}
Anschlußdetail: GND-Anschluss
{{< fluid_img alt="In der Lampe: GND" src="/images/Holz-LED-Lampe/IMG_20190220_130724.jpg" >}}
{{< image alt="In der Lampe: GND" src="IMG_20190220_130724.jpg" >}}
Vorher sollte man - zum 'Aufhübschen' - Langmuttern auffädeln ...
{{< fluid_img alt="Von oben ..." src="/images/Holz-LED-Lampe/IMG_20190221_133653.jpg" >}}
{{< image alt="Von oben ..." src="IMG_20190221_133653.jpg" >}}
## Produktion
## Produktion ##
Die Fräsarbeiten waren ursprünglich als zwei Gänge mit 8er- bzw. 3er-Fräskopf geplant
(die G-Code-Programme stammen aus FreeCad).
Die Gesamttiefe des Werkstücks beträgt jedoch 40mm und der vorhandene 3er-Fräskopf
Die Gesamttiefe des Werkstücks beträgt jedoch 40mm und der vorhandene 3er-Fräskopf
konnte die notwendige Tiefe nicht erreichen. Kurzerhand haben wir dann beide Gänge
mit dem 8er-Fräskopf ausgeführt ...
mit dem 8er-Fräskopf ausgeführt ...
{{< fluid_img alt="Auf der Fräse" src="/images/Holz-LED-Lampe/IMG_20190206_225915.jpg" >}}
{{< image alt="Auf der Fräse" src="IMG_20190206_225915.jpg" >}}
Da das Finish nicht wirklich zufriedenstellend war (2x Multiplex-Platte aufeinander
verleimt), wurden noch 'Blenden' mit dem Lasercutter erstellt (Vorlage: SVG aus
verleimt), wurden noch 'Blenden' mit dem Lasercutter erstellt (Vorlage: SVG aus
Inkscape).
Eine verbesserte Lösung würde auf einfacher MDF-Platte basieren, das Finish könnte
man dann mit Spraydose oder (Holz-Imitat-)Klebefolie machen ...
## Materialien & Preise ##
* 1x 6,79€ Lampenversorgungskabel (transparent) 5m
* 1x 10,00€ Kaffeekasse Schreinerei für Reste (Furnier 2x 800x160mm, MFD-Platte 1m x 0,4m)
* 1x 35,99€ MaxiLED 1500 (1,5m) warmweiß komplett mit 60W-Netzteil etc.
* 1x 13,99€ Spiegelfolie Silber (reicht für mehrere Lampen)
* 3x 0,89€ 3x Langmutter 5x20
* 6x 0,15€ 3x Unterlegscheibe 12mm
* 2x 1,00€ A4-Format Kieferplatte h=4mm
* 1x 5,95€ Alubox ca. 50x140x220 mm
## Materialien & Preise
Summe: ~80€ (ohne Dimm-Funktion)
| Anzahl | Preis | Beschreibung |
| -----: | -----: | :----------------------------------------------------------------------------- |
| 1 | 6,79€ | Lampenversorgungskabel (transparent) 5m |
| 1 | 10,00€ | Kaffeekasse Schreinerei für Reste (Furnier 2x 800x160mm, MFD-Platte 1m x 0,4m) |
| 1 | 35,99€ | MaxiLED 1500 (1,5m) warmweiß komplett mit 60W-Netzteil etc. |
| 1 | 13,99€ | Spiegelfolie Silber (reicht für mehrere Lampen) |
| 3 | 0,89€ | 3x Langmutter 5x20 |
| 6 | 0,15€ | 3x Unterlegscheibe 12mm |
| 2 | 1,00€ | A4-Format Kieferplatte h=4mm |
| 1 | 5,95€ | Alubox ca. 50x140x220 mm |
Summe: ~80€ (ohne Dimm-Funktion)

Before

Width:  |  Height:  |  Size: 331 KiB

After

Width:  |  Height:  |  Size: 331 KiB

Before

Width:  |  Height:  |  Size: 377 KiB

After

Width:  |  Height:  |  Size: 377 KiB

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 218 KiB

Before

Width:  |  Height:  |  Size: 344 KiB

After

Width:  |  Height:  |  Size: 344 KiB

@ -5,22 +5,24 @@ status: Aktiv
difficulty: einfach
time: ~1h
date: 2019-11-14
image: /images/NodeMCU_Neopixel/overview.jpg
image: overview.jpg
keywords: NodeMCU,ESP8266,ESP32,Lua,Neopixel,Font-Design
---
## Motivation ##
Phail hat eine Lampe gebaut (s. anderes Projekt). Hierfür fehlte
## Motivation
Phail hat eine Lampe gebaut (s. anderes Projekt). Hierfür fehlte
zunächst etwas, mit dem man Text anzeigen kann. Mit einem einfachen
Lua-Script und der WS2812 Bibliothek der NodeMCU sollte so etwas
leicht herstellbar sein.
{{< fluid_img alt="Showtime" src="/images/NodeMCU_Neopixel/NodeMCU_Neopixel.jpg" >}}
{{< image alt="Showtime" src="NodeMCU_Neopixel.jpg" >}}
## Planung
## Planung ##
Die Lampe besteht aus einer Kette Neopixel. Diese sind aufgeteilt
in einzelne Ringe à 16 Stück. Die Tücke für dies Vorhaben liegt
im Versatz der LEDs. Die aktuelle Lampenmatrix ist also wie folgt
in einzelne Ringe à 16 Stück. Die Tücke für dies Vorhaben liegt
im Versatz der LEDs. Die aktuelle Lampenmatrix ist also wie folgt
aufgebaut (von oben nach unten gibt es insgesamt 20 Ringe - es würde
aber auch mit z.Bsp. 10 Ringen funktionieren):
@ -40,22 +42,23 @@ aber auch mit z.Bsp. 10 Ringen funktionieren):
|01|__001,002,003,004,005,006,007,008,009,010,011,012,013,014,015,016,|
Für den Lampenversatz von Ring zu Ring braucht es einen speziellen
Font (ein Test mit 'Schrägstellen' eines herkömmlichen Fonts ergab
gruselige Resultate ...).
Font (ein Test mit 'Schrägstellen' eines herkömmlichen Fonts ergab
gruselige Resultate ...).
## Font-Design
## Font-Design ##
In der Font-Erstellung liegt die Hauptarbeit in diesem Projekt.
Dazu habe ich ganz traditionell eine Leermatrix mit LibreOffice Draw
Dazu habe ich ganz traditionell eine Leermatrix mit LibreOffice Draw
gemalt und als Vorlage für die ersten 127 Zeichen benutzt (ebenfalls
im Draw nach Gefühl 'gemalt').
im Draw nach Gefühl 'gemalt').
{{< fluid_img alt="Font Vorlage" src="/images/NodeMCU_Neopixel/font_vorlage.jpg" >}}
{{< image alt="Font Vorlage" src="font_vorlage.jpg" >}}
{{< fluid_img alt="Fontbeispiel 1" src="/images/NodeMCU_Neopixel/font_sample1.jpg" >}}
{{< fluid_img alt="Fontbeispiel 2" src="/images/NodeMCU_Neopixel/font_sample2.jpg" >}}
{{< image alt="Fontbeispiel 1" src="font_sample1.jpg" >}}
{{< image alt="Fontbeispiel 2" src="font_sample2.jpg" >}}
Anschließend werden die Pixel einzeln ausgezählt, zunächst binär, dann hex.
Für den hier vorgesehenen 7x9 Font werden je Zeichen 9 Bytes mit 7 Bits
Anschließend werden die Pixel einzeln ausgezählt, zunächst binär, dann hex.
Für den hier vorgesehenen 7x9 Font werden je Zeichen 9 Bytes mit 7 Bits
verwendet (Bits 7-1, Bit0 wird nicht verwendet).
Die Hex-Werte werden in einer Beschreibungsdatei gesammelt (eigentlich
@ -64,11 +67,11 @@ eines kleinen (Lua-)Scripts wird daraus ein Binärfile ('np_codes.bin')
auf dem PC erzeugt und zur NodeMCU hochgeladen. Die Datei dient dann
als 'Character-ROM' (wie schon zu C64er Zeiten ...).
## Font-Anzeige ##
## Font-Anzeige
Um ein leidlich sanftes Durchschieben des Textes zu erreichen, wird
mit einem vergrößerten Puffer gearbeitet. Dies ermöglicht das verdeckte
Laden und Einblenden eines neuen Zeichens. Durch zyklisches Schieben
mit einem vergrößerten Puffer gearbeitet. Dies ermöglicht das verdeckte
Laden und Einblenden eines neuen Zeichens. Durch zyklisches Schieben
wird jetzt das neue Zeichen (und alle anderen Zeichen) langsam (Spalte
für Spalte) in den sichtbaren Bereich geschoben.
@ -82,31 +85,32 @@ für Spalte) in den sichtbaren Bereich geschoben.
|7|181,182,183,184,185,186,187, |188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,|204,205,206,207,208,209,210,|
|6|151,152,153,154,155,156,157, |158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,|174,175,176,177,178,179,180,|
|5|121,122,123,124,125,126,127, |128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,|144,145,146,147,148,149,150,|
|4|091,092,093,094,095,096,097, |098,099,100,101,102,103,104,105,106,107,108,109,110,111,112,113,|114,115,116,117,118,119,120,|
|3|061,062,063,064,065,066,067, |068,069,070,071,072,073,074,075,076,077,078,079,080,081,082,083,|084,085,086,087,088,089,090,|
|4|091,092,093,094,095,096,097, |098,099,100,101,102,103,104,105,106,107,108,109,110,111,112,113,|114,115,116,117,118,119,120,|
|3|061,062,063,064,065,066,067, |068,069,070,071,072,073,074,075,076,077,078,079,080,081,082,083,|084,085,086,087,088,089,090,|
|2|031,032,033,034,035,036,037, |038,039,040,041,042,043,044,045,046,047,048,049,050,051,052,053,|054,055,056,057,058,059,060,|
|1|001,002,003,004,005,006,007, |008,009,010,011,012,013,014,015,016,017,018,019,020,021,022,023,|024,025,026,027,028,029,030,|
Die Zeichen werden jetzt ganz rechts geladen (Indizes Quadrat 24-30 bis 264-270 für die Ringe 1-9).
Die Zeichen werden jetzt ganz rechts geladen (Indizes Quadrat 24-30 bis 264-270 für die Ringe 1-9).
Ring 10 wird für eine doppelt so schnell umlaufende 'Spur' genutzt.
Ring 11-19 wird analog mit einer zweiten Textmeldung geladen, in Ring 20 gibt es dann noch eine 'Spur'.
Das Schieben geschieht dann nach links, jeweils um eine Spalte (also zu Indizes 23,53,83 etc. bis 593).
## Hier noch ein Demo-Filmchen ... ##
## Hier noch ein Demo-Filmchen ...
<video width="500px" controls>
<source src="//media.hacknology.de/images/NodeMCU_Neopixel/NodeMCU_Neopixel.webm" type="video/webm">
Your browser does not support the video tag.
</video>
## Erweiterungen ##
Sofern die NodeMCU Firmware mit Multicast-Erweiterungen genutzt wird,
## Erweiterungen
Sofern die NodeMCU Firmware mit Multicast-Erweiterungen genutzt wird,
kann der NodeMCU-Client auf einfache Weise mit anzuzeigenden Texten versorgt
werden.
werden.
Hier wird z.Bsp. ein Lua-Script auf einem (PC-)Server ausgeführt, das (z.Bsp.) einen
Heise RSS-Feed mitliest und die jeweils zwei aktuellsten Meldungen an alle
Heise RSS-Feed mitliest und die jeweils zwei aktuellsten Meldungen an alle
Multicast-Clients sendet. Im vorliegenden Beispiel erscheinen sie also oben (Ring
11-19) bzw. unten (Ring 1-9).
{{< fluid_img alt="Master" src="/images/NodeMCU_Neopixel/MASTER_script.jpg" >}}
{{< image alt="Master" src="MASTER_script.jpg" >}}

Before

Width:  |  Height:  |  Size: 345 KiB

After

Width:  |  Height:  |  Size: 345 KiB

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Before

Width:  |  Height:  |  Size: 376 KiB

After

Width:  |  Height:  |  Size: 376 KiB

Before

Width:  |  Height:  |  Size: 182 KiB

After

Width:  |  Height:  |  Size: 182 KiB

Before

Width:  |  Height:  |  Size: 312 KiB

After

Width:  |  Height:  |  Size: 312 KiB

@ -5,7 +5,7 @@ status: Aktiv
difficulty: geht so ...
time: ~4h
date: 2020-02-20
image: /images/NodeSP/NodeSP_Overview.jpg
image: NodeSP_Overview.jpg
keywords: NodeMCU,ESP32,FFT,Assembler
---
@ -13,7 +13,8 @@ keywords: NodeMCU,ESP32,FFT,Assembler
ein Beitrag zum Thema *'Wieder versuchen./Wieder scheitern./Besser scheitern'* (Samuel Becket)
## Motivation ##
## Motivation
Phail hat mir - temporär - ein ESP32-Dev-Board überlassen. Auf diesem
ist ein FTDI-Chip zwecks Bereitstellung eines JTAG-Interfaces verbaut.
Seit Sommer 2019 hat PlatformIO seinen Debugger für die Öffentlichkeit
@ -22,34 +23,35 @@ Source-Level Debugging möglich ist, sondern auch auf die
(Dis-)Assembler-Ebene gewechselt werden kann.
Da ließe sich doch vielleicht etwas mit anfangen?
{{< fluid_img alt="Showtime" src="/images/NodeSP/NodeSP_Overview.jpg" >}}
{{< image alt="Showtime" src="NodeSP_Overview.jpg" >}}
Wie wäre es mit einer Fingerübung in ESP32-Assembler? Eine FFT hätte
den Charme einer späteren Nutzbarkeit für verschiedenste Projekte und
wäre doch ein überschaubarer Aufwand ...
## Planung ##
## Planung
Wichtig ist zunächst einmal, einen brauchbaren Algorithmus zu finden.
Wenn ein Schneller gefunden ist, könnte dieser als Re-Implementierung
in ESP32-Assembler vermutlich alle anderen wegblasen?!
+ Anforderungen:
Anforderungen:
+ Der verwendete Algorithmus sollte hinreichend allgemein einsetzbar sein,
d.h. die Meßwertblöcke sollten als 2er-Potenzen formuliert werden
können.
- Der verwendete Algorithmus sollte hinreichend allgemein einsetzbar sein,
d.h. die Meßwertblöcke sollten als 2er-Potenzen formuliert werden
können.
+ Außerdem sollte mit echten Fließkommazahlen gearbeitet werden
(der ESP32 unterstützt 32-Bit IEEE754 mit 16 Registern native).
- Außerdem sollte mit echten Fließkommazahlen gearbeitet werden
(der ESP32 unterstützt 32-Bit IEEE754 mit 16 Registern native).
+ Für die Meßwerte sollen keine Vorinformationen vorliegen (d.h. beliebige
Daten sollen verarbeitet werden können).
- Für die Meßwerte sollen keine Vorinformationen vorliegen (d.h. beliebige
Daten sollen verarbeitet werden können).
+ Neben der Fourier-Transformation soll auch die Inverse berechnet werden
können.
- Neben der Fourier-Transformation soll auch die Inverse berechnet werden
können.
## Ausführung Testprogramm FFT
## Ausführung Testprogramm FFT ##
Für die Geschwindigkeitsmessung habe ich zunächst ein Testprogramm in C(99)
erstellt. Dies soll zunächst verschiedene Algorithmen bzw. deren Implementierungen vergleichen,
später wird hiermit auch die Effizienz der eigenen Implementierung getestet. Es soll immer der
@ -78,18 +80,18 @@ Der Speedup sinkt sehr schnell von 2.2 (für 8 Meßwerte) auf 1.1 (ab 256 Meßwe
nicht so überzeugend (nur 10%) für den Aufwand (ich hatte mit einem Speedup von 2-5 gerechnet!). Nach einigem
Kopfkratzen bin ich zu folgenden Erkenntnissen gelangt:
+ Der limitierende Faktor ist vermutlich der Speicherzugriff. Der ESP32 hat keinen Cache, d.h. alle
- Der limitierende Faktor ist vermutlich der Speicherzugriff. Der ESP32 hat keinen Cache, d.h. alle
Speicherzugriffe bremsen unmittelbar. Bei größeren Meßwertmengen schlägt das überproportional durch
(Speicherzugriffe von C<->Assembler sind aufgrund der leistungsfähigen Befehle des 'Instruction Sets'
gleich schnell, d.h. der Compiler wählt bereits die optimalen Befehle).
+ Moderne Prozessoren (ESP32 gemäß Doku eine 'post-RISC Architecture') haben sehr leistungsfähige
- Moderne Prozessoren (ESP32 gemäß Doku eine 'post-RISC Architecture') haben sehr leistungsfähige
Befehle & vergleichsweise viele Register (hier 16 'universelle' in einem Registerfile von 64 und
16 FP-Register - sowie diverse andere hier nicht so Relevante). Früher war das mal anders ... (6510 et al.)!
Letztlich kann dadurch der Compiler recht gut optimieren, der Gewinn durch 'Metawissen' seitens
des Programmierers (also was man weglassen darf u.ä.) ist marginal.
+ Die speziellen Matrix-Support Operationen (multiply/add w/ storage pointer increment etc.)
- Die speziellen Matrix-Support Operationen (multiply/add w/ storage pointer increment etc.)
passten leider nicht zu dem von mir favorisierten Algorithmus (dumm gelaufen!).
Fazit: Nett, aber (weitgehend) sinnfrei! Eigentlich ist das zwar der Stand der Erkenntnisse (in der
@ -97,18 +99,18 @@ Informatik), aber schön, das wir das noch einmal überprüft haben ...
Jetzt brauchen wir noch etwas 'zum Anfassen' ...
## Ausführung 'Spectrum Analyzer' (SP) ##
## Ausführung 'Spectrum Analyzer' (SP)
Naheliegend für einen Realitätscheck ist natürlich der Aufbau eines 'Spectrum Analyzers', so eine
Art Equalizer wie man es von Audio-Apps, Hifi-Anlagen (oder dem Autoradio) kennt - nur ohne
Eingriffsmöglichkeit.
{{< fluid_img alt="Aufbaubild" src="/images/NodeSP/NodeSP_Aufbau.jpg" >}}
{{< image alt="Aufbaubild" src="NodeSP_Aufbau.jpg" >}}
Aus alten Beständen hatte ich noch die LED-Streifen (WS2812) aus einem Sonderangebot. Hier fällt etwas
Lötarbeit an (& die Heißklebepistole kommt auch zu ihrem Recht).
{{< fluid_img alt="Bohrschablone" src="/images/NodeSP/NodeSP_Bohrschablone.png" >}}
{{< image alt="Bohrschablone" src="NodeSP_Bohrschablone.png" >}}
Für das Gehäuse habe ich eine Bohrschablone mit FreeCAD erstellt, die wir auf der neuen 'Großfräse' der
Innovationswerkstatt dann ausgeführt haben.
@ -148,8 +150,7 @@ Die Aufnahme der Meßwerte benötigt ca. 45ms, das Umrechnen per FFT ca. 0,8 ms!
Da ich gerade keine Schalter zur Hand hatte, habe ich zum Feintuning eine Flutter-App per Multicast
angebunden - die ich auf meinen 'NodeSwarm Devices' standardmäßig vorhalte.
## NodeSP Android App ##
## NodeSP Android App
Die App sendet Konfigurationsdaten an die NodeMCU per Multicast, am wichtigsten natürlich
für das Einstellen der Empfindlichkeit. Wenn die Umgebung sehr laut ist, sollte man runterregeln können ...
@ -157,10 +158,10 @@ Die restlichen Parameter dienen der Konfiguration der LED-Ausgabe.
<img style="max-width: 200px"
alt="App picture"
src="/images/NodeSP/NodeSP_App.png"
src="NodeSP_App.png"
/>
## Showtime! ##
## Showtime!
Hier mal ein (kurzes) Beispiel mit Musik:
@ -170,11 +171,10 @@ Hier mal ein (kurzes) Beispiel mit Musik:
</video>
## Schwächen dieser Implementierung ##
## Schwächen dieser Implementierung
Das Sampling ist nicht 'sustained rate' sondern intermittierend (wenn auch kaum spürbar).
Es gibt lt. 'ESP32 - Technical Reference Manual' eine Betriebsart (LCD-Mode -> ADC/DAC-Mode) die hier Abhilfe schaffen könnte? Mal schaun ... (ein Tipp von Wolfgang).
Eine verbesserte Version werde ich zu einem späteren Zeitpunkt mittels I2S-Mikrofon (ein Tip von Markus) nachreichen
(der ESP32 unterstützt den I2S-Bus mit DMA-Transfer - da sollte was gehen ... sagt auch das Internet :-).

@ -5,7 +5,7 @@ status: Aktiv
difficulty: einfach
time: ~1h
date: 2020-05-07
image: /images/PimpedWebcam/webcam_modified.jpg
image: webcam_modified.jpg
keywords: webcam, opencv, akvcam
---
@ -45,15 +45,17 @@ werden (ja, auch auf die Konsole ... ;). Damit stehen einfachen Manipulationen T
Hier mal die Resultate, zwecks Vergleich
vorher:
<img style="max-width: 300px"
alt="ohne"
src="/images/PimpedWebcam/webcam_blank.jpg"
src="webcam_blank.jpg"
/>
und nachher:
<img style="max-width: 300px"
alt="ohne"
src="/images/PimpedWebcam/webcam_modified.jpg"
src="webcam_modified.jpg"
/>
Hint: Die Kamera war wohl abgeklebt ...
@ -100,66 +102,66 @@ vorgesehen mit folgendem Ablauf:
virtcam.sh:
```Bash
echo "Installing video4 (output) / video5 (capture) virtual devices ..."
cd ~/akvcam/src
sudo modprobe videodev
sudo insmod akvcam.ko
echo "Starting 'stream modifier' application ..."
echo "Activating (cv) environment ..."
source ~/cv/bin/activate
cd ~/cv
ls /dev/video?
python3 funcam.py > /dev/video4 # video4 is output device -> video4 is capture
echo "Removing virtual (camera) devices ..."
sudo rmmod akvcam.ko
echo "Done."
```bash
echo "Installing video4 (output) / video5 (capture) virtual devices ..."
cd ~/akvcam/src
sudo modprobe videodev
sudo insmod akvcam.ko
echo "Starting 'stream modifier' application ..."
echo "Activating (cv) environment ..."
source ~/cv/bin/activate
cd ~/cv
ls /dev/video?
python3 funcam.py > /dev/video4 # video4 is output device -> video4 is capture
echo "Removing virtual (camera) devices ..."
sudo rmmod akvcam.ko
echo "Done."
```
Die eigentliche Action erfolgt im Python-Script ('funcam.py'):
```Python
import numpy as np
import datetime, time
import sys
import cv2
```python
import numpy as np
import datetime, time
import sys
import cv2
# Hint: print() to stderr (fh#2) as the actual video stream goes to stdout (fh#1)!
print("funcam started ...",file=sys.stderr)
# Hint: print() to stderr (fh#2) as the actual video stream goes to stdout (fh#1)!
print("funcam started ...",file=sys.stderr)
cap = cv2.VideoCapture(0) # TODO: You have to verify, if /dev/video0 is your actual webcam!
if not cap.isOpened(): # if not open already
cap.open() #make sure, we will have data
# Adjust channel resolution & use actual
cap.set(3, 640)
cap.set(4, 480)
cap = cv2.VideoCapture(0) # TODO: You have to verify, if /dev/video0 is your actual webcam!
if not cap.isOpened(): # if not open already
cap.open() #make sure, we will have data
# Adjust channel resolution & use actual
cap.set(3, 640)
cap.set(4, 480)
while(cap.isOpened()):
try:
ret, frame = cap.read()
if ret==True:
while(cap.isOpened()):
try:
ret, frame = cap.read()
if ret==True:
frame4 = cv2.cvtColor(frame.copy(),cv2.COLOR_BGRA2RGB) # Correct color space
frame4 = cv2.cvtColor(frame.copy(),cv2.COLOR_BGRA2RGB) # Correct color space
# Now: The fun stuff! -------------------------------------------------------------------------------------------
# Now: The fun stuff! -------------------------------------------------------------------------------------------
# ... <your job in here, use cv2.line/cv2.rectangle etc. freely but be careful w/ time consuming operations!> ...
# ... <your job in here, use cv2.line/cv2.rectangle etc. freely but be careful w/ time consuming operations!> ...
# As a sample, we display the current time
t = time.strftime("%H:%M:%S", time.localtime())
cv2.putText(frame4, t, (505,472), (cv2.FONT_HERSHEY_DUPLEX), 1.4, (0, 0, 0), 4, cv2.LINE_AA)
# As a sample, we display the current time
t = time.strftime("%H:%M:%S", time.localtime())
cv2.putText(frame4, t, (505,472), (cv2.FONT_HERSHEY_DUPLEX), 1.4, (0, 0, 0), 4, cv2.LINE_AA)
# End of fun stuff! ---------------------------------------------------------------------------------------------
# End of fun stuff! ---------------------------------------------------------------------------------------------
# Write raw output (pipe/redirect to video device externally!)
sys.stdout.buffer.write(frame4.tobytes())
else:
break
except:
# Write raw output (pipe/redirect to video device externally!)
sys.stdout.buffer.write(frame4.tobytes())
else:
break
except:
break
cap.release()
print("\nfuncam terminated.",file=sys.stderr)
cap.release()
print("\nfuncam terminated.",file=sys.stderr)
```
## Arbeitsablauf

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

@ -5,16 +5,14 @@ status: Entwurf
difficulty: Einfach
time: 10 Minuten
date: 2017-09-03
image: /images/rundumlicht_on.resized.jpg
image: rundumlicht_on.resized.jpg
---
## Ziel
{{< fluid_img alt="" src="/images/rundumlicht_on.resized.jpg" >}}
{{< image alt="" src="rundumlicht_on.resized.jpg" >}}
Weisses Rundumlicht zum Kajak fahren welches den Fahrer nicht blendet. Basierend auf der Idee von Claudia Funck aus dem KCR Radolfzell: Fahrradhelm + Lampe + Joghurtbecher = 1a Beleuchtung.
## Material
Nachbau mit Materialien die schnell verfügbar waren:
@ -23,24 +21,25 @@ Nachbau mit Materialien die schnell verfügbar waren:
- Rundes LED Zeltlampe aus dem lokal ansässigen Elektromarkt
- Müller Milch Flasche als Leuchtkörper
{{< fluid_img alt="" src="/images/rundumlicht_lampe.resized.jpg" >}}
{{< image alt="" src="rundumlicht_lampe.resized.jpg" >}}
## Aufbau
Entfernen des mittigen Knopfes auf dem Basecap mit einem Seitenschneider
Das Gehäuse der Zeltbeleuchtung war mit 2 Schrauben verschlossen, diese habe ich entfernt und durch den Stoff wieder angeschraubt. (Ein Gewinde war schon beschädigt und musste mit Heisskleber aufgefüllt werden.
{{< fluid_img alt="" src="/images/rundumlicht_schrauben.resized.jpg" >}}
{{< fluid_img alt="" src="/images/rundumlicht_ohne_diffusor.resized.jpg" >}}
{{< fluid_img alt="" src="/images/rundumlicht_flasche.resized.jpg" >}}
Reinigen und halbieren der weissen PET Kakaoflasche.
{{< image alt="" src="rundumlicht_schrauben.resized.jpg" >}}
{{< image alt="" src="rundumlicht_ohne_diffusor.resized.jpg" >}}
{{< image alt="" src="rundumlicht_flasche.resized.jpg" >}}
Fxierung mit Klebefilm
{{< fluid_img alt="" src="/images/rundumlicht_off_closeup.resized.jpg" >}}
Reinigen und halbieren der weissen PET Kakaoflasche.
Fixierung mit Klebefilm
{{< image alt="" src="rundumlicht_off_closeup.resized.jpg" >}}
## Verbesserungsvorschläge
DIe Fixierung mit 2 Schräubchen ist nicht optimal, ich würde empfehlen ein dünnes Stück Kunststoff als Unterlegscheibe zwischen Mütze und Schraube zu machen. So wird die Gefahr für das ausreissens des Stoffes minimiert.
Der Versuch mit Heisskleber zusätzlichen Halt zwischen Mütze und Lampe zu machen war erfolglos. Die Oberfläche der Lampe ist sehr Kleberesistent, die Mütze dafür verschmiert.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 121 KiB

@ -5,10 +5,9 @@ status: in Vorbereitung
difficulty: Einfach bis Medium, je nach Vorkenntnissen
time: 4 Stunden bis 4 Wochen ;-)
date: 2017-03-19
image: /images/Strom-Monitor-s0.png
image: s0.png
---
## Ziel und Funktionsweise
Bau eines Netzwerkfähigen lokalen StromMonitors, der via
@ -24,7 +23,7 @@ für den genaueren Überblick muss man loggen...
Klassisch geht das per Papier und Schreibzeug, aber man verliert
schnell die Lust.
{{< fluid_img alt="Liste von Hand" src="/images/Strom-Monitor-liste.png" >}}
{{< image alt="Liste von Hand" src="liste.png" >}}
Alternative:
Elektronisch
@ -33,12 +32,12 @@ Wie geht das?
Das hängt vom Stromzähler ab, der vor Ort ist. In Konstanz dieser:
{{< fluid_img alt="Konstanzer Stromzaehler" src="/images/Strom-Monitor-zaehler.png" >}}
{{< image alt="Konstanzer Stromzaehler" src="zaehler.png" >}}
Der hat zwar keine bidirektionale Schnittstelle mit Abfragemöglichkeit,
aber eine kleine unscheinbare Öffnung,
{{< fluid_img alt="IR-LED der S0-Schnittstelle" src="/images/Strom-Monitor-s0.png" >}}
{{< image alt="IR-LED der S0-Schnittstelle" src="s0.png" >}}
Hier verbirgt sich eine IR-LED, die also 10000 mal blinkt,
bis 1 KWh bezogen wurde,
@ -55,33 +54,31 @@ Let's test
- Spannungsquelle 5-6 Volt (1 x 1,5 V Batterien, Netzteil, o. ä.)
- zum Verbinden oder aufbauen Kabel, Krokoklemmen, Breadboard,
(was Ihr so nehmt)
- Pappe, Kabelbinder, Tesafilm, etc zum Fixieren
{{< fluid_img alt="Schaltplan Testaufbau" src="/images/Strom-Monitor-schaltplan-testaufbau2.gif" >}}
- Pappe, Kabelbinder, Tesafilm, etc zum Fixieren
{{< image alt="Schaltplan Testaufbau" src="schaltplan-testaufbau2.gif" >}}
Beim Verbinden auf die Polarität achten
- LED langes Bein plus
- IR-Transistor Langes Bein minus
- LED langes Bein plus
- IR-Transistor Langes Bein minus
IR-Transistor in Reihe mit dem Vorwiderstand und der LED an die Spannungsquelle hängen.
{{< fluid_img alt="Testaufbau mit 5V Spannung IR-Transistor und LED" src="/images/Strom-Monitor-testaufbau.png" >}}
{{< image alt="Testaufbau mit 5V Spannung IR-Transistor und LED" src="testaufbau.png" >}}
Alles Richtig? Dann muss die LED (Verbrauch vorausgesetzt) blinken ...
## zusätzliches Material für den StromMonitor
{{< fluid_img alt="Raspberry Pi" src="/images/Strom-Monitor-material1.png" >}}
{{< image alt="Raspberry Pi" src="material1.png" >}}
- 1 Raspberry PI oder ähnliches Embedded System, egal welches,
(Hauptsache, Ihr könnt ein OS aufsetzen und kommt an die GPIOs,
bei mir lag ein PI B + rum) (zwischen 6 und 36 Euro Neuwert)
- SD-Karte ( 4-10 Euro Neuwert)
- Netzteil ( ca 8 Euro Neuwert)
- LAN/WLAN-Anschluss (0 - 8 Euro, je nach Modell uind lokalen Möglichkeiten)
- 1 Raspberry PI oder ähnliches Embedded System, egal welches,
(Hauptsache, Ihr könnt ein OS aufsetzen und kommt an die GPIOs,
bei mir lag ein PI B + rum) (zwischen 6 und 36 Euro Neuwert)
- SD-Karte ( 4-10 Euro Neuwert)
- Netzteil ( ca 8 Euro Neuwert)
- LAN/WLAN-Anschluss (0 - 8 Euro, je nach Modell uind lokalen Möglichkeiten)
## Vorbereitung
@ -91,7 +88,7 @@ wer steht schon gern im Keller mit Monitor und Keyboard).
## Verkabelung
{{< fluid_img alt="Schaltplan Strom-Monitor" src="/images/Strom-Monitor-schaltplan.gif" >}}
{{< image alt="Schaltplan Strom-Monitor" src="schaltplan.gif" >}}
Damit der PI auch die Daten empfangen kann, hängen wir den IR-Transistor
an GPIO 23/ PIN 16 und verbinden ihn mit auf der anderen Seite mit
@ -101,16 +98,16 @@ Damit wir uns wohlfühlen und eine optische Rückmeldung im Keller haben,
kommt zwischen Pin 1 (3.3V) und PIN 11 /GPIO 17 die LED mit dem Vorwiderstand von eben.
## Software
ich habe die Software in 2 Häppchen zerlegt.
Ich habe die Software in 2 Häppchen zerlegt.
- Strom.py arbeitet kontinuierlich. Zum einen wird ein Thread
angestossen, der die LED als Rückmeldung kurz triggert,
zum anderen wird eine Logzeile mit
Standard-Linux Zeitstempel und den Sensor-Datenstrom
(Anzahl der Impulse/ Minute) jede Minute in die Datei
(Anzahl der Impulse/ Minute) jede Minute in die Datei
imp_min.txt geschrieben.
### Quelltext:
```python
@ -119,9 +116,9 @@ ich habe die Software in 2 Häppchen zerlegt.
#
# strom.py
#
# StromMonitor Anzeige, konkret:
# StromMonitor Anzeige, konkret:
# SENSOR in imp/min wandeln
#
#
# Author: Kresse
#
#
@ -278,7 +275,6 @@ diese wird ebenfalls minütlich beschickt
### Quelltext:
```python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
@ -371,23 +367,20 @@ for x in range(1,len(liste_imp)):
# print x # Anzahl der Datensätze
print time.ctime(liste_zeit[x-1])[0:16],": "," {p:8.3F} KWh ".format(p=(imp_d/10000.0))
print "*** LETZTER Tag nicht vollstaendig! ***"
```
```
Zum Schluss wird das ganze per Bash zur Ausgabe gedrängt ;)
Zum einen werden zwei RRDTOOL Graphiken erzeugt:
Impulse/min über 24 h
Mittlere Impulse/Min über 7 Tage.
Als Drittes gibt es eine Textausgabe mit der KWh-Abnahme pro Tag.