{"id":5377,"date":"2019-01-16T10:02:42","date_gmt":"2019-01-16T09:02:42","guid":{"rendered":"https:\/\/www.commander1024.de\/wordpress\/?p=5377"},"modified":"2020-04-17T09:40:20","modified_gmt":"2020-04-17T07:40:20","slug":"arduino-led-fackel","status":"publish","type":"post","link":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/","title":{"rendered":"Arduino LED Fackel"},"content":{"rendered":"\n<div class=\"wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-drop-cap\">Seit der <a rel=\"noreferrer noopener\" aria-label=\"OHM2013 (\u00f6ffnet in neuem Tab)\" href=\"https:\/\/ohm2013.org\/\" target=\"_blank\">OHM2013<\/a> habe ich immer wieder auf Chaos Events LED-Fackeln gesehen, die von einem Mikrocontroller angetrieben wurden. H\u00e4ufig basieren diese auf Arduino-Development-Boards, bzw. Chips wie sie bei dort zum Einsatz kommen. <\/p> \n\n\n\n <p> Leider bin ich nie dazu gekommen, dahingehend Kontakte zu kn\u00fcpfen und mich \u00fcber die Funktionsweise zu informieren &#8211; bis zum <a rel=\"noreferrer noopener\" aria-label=\"35C3 (\u00f6ffnet in neuem Tab)\" href=\"https:\/\/events.ccc.de\/category\/congress\/35c3\/\" target=\"_blank\">35C3<\/a> dieses Jahr. <\/p> \n\n\n\n <p> Ermutigt durch den (erfolgreichen) Bau meines <a href=\"https:\/\/www.commander1024.de\/wordpress\/2018\/12\/spiegelschranktuer-ersetzen\/\">SmartMirrors<\/a>, dachte ich mir, dass es nun endlich mal angegangen werden sollte. <\/p> \n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-video alignleft\"><video height=\"1920\" style=\"aspect-ratio: 1080 \/ 1920;\" width=\"1080\" autoplay controls loop src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch.webm\"><\/video><figcaption>Arduino LED Fackel<\/figcaption><\/figure>\n\n\n\n <p>  <\/p> \n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Vorbereitungen<\/h2>\n\n\n\n <p> Ben\u00f6tigt werden f\u00fcr ein derartiges Projekt LED Streifen mit WS2812(b) oder APA102 Chips, bzw. SK6813 in den LEDs. Diese erm\u00f6glichen die Ansteuerung der einzelnen LEDs mit Bitshift-Register \u00fcber eine Datenleitung, bzw. 2 f\u00fcr SPI (f\u00fcr die APAs\/SKs). <\/p> \n\n\n\n <p> Ein vollkommen \u00fcberdimensionierter Arduino MEGA 2560 (mit Ethernet-Shield) lag noch in einer Schublade. Dieser ist nat\u00fcrlich viel zu gro\u00df und leistungsstark f\u00fcr so ein primitives Projekt, zum Code und Hardware testen reicht es aber allemal. F\u00fcr das fertige Produkt habe ich 3 Arduino nanos mit Atmega 328P bestellt. Diese sind hinreichend klein, dass er sp\u00e4ter in der Facker verbaut werden kann. LED Reste zum Testen w\u00fcrden sich bestimmt bei den <a rel=\"noreferrer noopener\" aria-label=\"warpzone (\u00f6ffnet in neuem Tab)\" href=\"https:\/\/warpzone.ms\" target=\"_blank\">warpzone<\/a>-Mitgliedern abschnorcheln lassen.  <\/p> \n\n\n\n <p> Fehlt nun noch die Software. Ich halte mich wohl f\u00fcr f\u00e4hig, Code zu lesen, habe aber wenig Routine im Programmieren und tats\u00e4chlich au\u00dfer einfachen Skripten noch nie etwas vollst\u00e4ndig selbst gemacht. <\/p> \n\n\n\n <p> Daher lie\u00df ich mich von diesen beiden Projekten inspirieren, welche beide auch die WS2812er verwenden: <\/p> \n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" aria-label=\"Flame (\u00f6ffnet in neuem Tab)\" href=\"https:\/\/github.com\/simon-budig\/flame\" target=\"_blank\">Flame<\/a> von Simon Budig<\/li><li><a rel=\"noreferrer noopener\" aria-label=\"Portable RGB LED Torch (\u00f6ffnet in neuem Tab)\" href=\"http:\/\/devblog.twisted-artwork.de\/portable-rgb-led-torch-using-arduino\/\" target=\"_blank\">Portable RGB LED Torch<\/a> von Sebastian Pohl<\/li><\/ul>\n\n\n\n <p> Das war f\u00fcr mich Grund genug, nicht die teureren APA102s zu kaufen. Die werde ich dann m\u00f6glicherweise in Zukunft&#x2122; f\u00fcr abgefahrenere Sachen verwenden, die schnellere Schaltung ben\u00f6tigen. <\/p> \n\n\n\n<h2 class=\"wp-block-heading\">Entwicklungsumgebung einrichten<\/h2>\n\n\n\n<div class=\"wp-block-media-text alignwide is-stacked-on-mobile\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"450\" src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/sublime_build_environment-400x450.png\" alt=\"Sublime Text mit ge\u00f6ffneter Deviot Konsole\" class=\"wp-image-5397\" srcset=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/sublime_build_environment-400x450.png 400w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/sublime_build_environment-534x600.png 534w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/sublime_build_environment-267x300.png 267w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/sublime_build_environment-768x863.png 768w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/sublime_build_environment-133x150.png 133w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/sublime_build_environment-200x225.png 200w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/sublime_build_environment-945x1062.png 945w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/sublime_build_environment-600x674.png 600w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/sublime_build_environment.png 961w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"has-regular-font-size\">Zuallererst brauche ich eine vern\u00fcnftige Entwicklungsumgebung. Ich mag die Arduino IDE nicht. Sie ist bloatige Kackscheisse und kann nix. Ich verwende Sublime Text seit einigen Jahren und etwas Vollintegriertes h\u00e4tte ich schon ganz gerne. <\/p> \n\n\n\n <p> Package Control liefert unter dem Stichwort &#8222;Arduino&#8220; 2 sinnvolle Treffer: &#8222;Arduino-like IDE&#8220;, welche Teile der offiziellen IDE verwendet, aber seit 1,5+ Jahren nicht mehr aktualisiert wurde und Deviot. <\/p> \n<\/div><\/div>\n\n\n\n <p> Letzteres basiert auf Platform.io und zieht alle Abh\u00e4ngigkeiten vollautomatisch nach. Au\u00dferdem bietet es eine Paketverwaltung f\u00fcr Bibliotheken und Libraries. Nach der Installation war ich sofort in der Lage einen Testsketch zu kompilieren und auf den Mega hochzuladen. Au\u00dferdem gibt es &#8211; wie von Sublime gewohnt &#8211; vern\u00fcnftige Auto-completion und Syntaxhighlighting. <\/p> \n\n\n\n<h2 class=\"wp-block-heading\">Arduino Testsetup<\/h2>\n\n\n\n<figure class=\"wp-block-image alignwide\"><a href=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"756\" height=\"425\" src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-756x425.jpg\" alt=\"Testsetup mit WS2812B Streifen - nur echt mit Spule for scale.\" class=\"wp-image-5379\" srcset=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-756x425.jpg 756w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-800x450.jpg 800w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-1920x1080.jpg 1920w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-300x169.jpg 300w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-768x432.jpg 768w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-1536x864.jpg 1536w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-2048x1152.jpg 2048w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-2000x1125.jpg 2000w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-1600x900.jpg 1600w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-150x84.jpg 150w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-945x532.jpg 945w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-600x338.jpg 600w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0349-550x309.jpg 550w\" sizes=\"auto, (max-width: 756px) 100vw, 756px\" \/><\/a><figcaption>Testsetup mit WS2812B Streifen &#8211; nur echt mit Spule for scale.<\/figcaption><\/figure>\n\n\n\n <p> Mit den zusammengeschnorrten LEDs kann ich nun die Software testen &#8211; soweit m\u00f6glich mit 16 LEDs. Wie man sieht ist die Schaltung denkbar einfach. Die Spannungsversorgung f\u00fcr die kleine Anzahl an LEDs ziehe ich \u00fcber den Arduino direkt aus dem USB-Port des Notebooks. Das wird mit deutlich mehr LEDs nicht mehr gehen, dann ben\u00f6tigt man eine externe Quelle. <\/p> \n\n\n\n <p> Anfangs hatte ich Probleme, den Sketch von Simon zu bauen, weil der eine angepasste NeoPixel libary voraussetzte. Diese Anpassungen waren n\u00f6tig, um Probleme auf den Atmega32u4 zu umschiffen. Leider waren diese nicht dokumentiert. Auf Nachfrage teilte er mir mit, dass er mittlerweile einen besseren Workaround habe, und pflegte diesen auch prompt im <a href=\"https:\/\/github.com\/simon-budig\/flame\">git-Repository<\/a> ein. <\/p> \n\n\n\n <p> Simons Sketch unterst\u00fctzt auch einen Taster, der &#8211; gegen GND gezogen &#8211; die Animationspresets durchschaltet. <\/p> \n\n\n\n <p> Im Sketch m\u00fcssen mindestens die folgenden Parameter passend gesetzt werden: <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Arduino\" data-shcb-language-slug=\"arduino\"><span><code class=\"hljs language-arduino\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> PIN_BUTTON   3      <span class=\"hljs-comment\">\/\/ Input pin f\u00fcr Button<\/span><\/span>\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> PIN_LED      6      <span class=\"hljs-comment\">\/\/ Output pin f\u00fcr Led-Strip<\/span><\/span>\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> NUM_PIXELS (5 * 60) <span class=\"hljs-comment\">\/\/ Anzahl der LEDs<\/span><\/span>\n\n<span class=\"hljs-comment\">\/\/ Framebuffer-Dimensions. Depends on the tube radius<\/span>\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> FLAME_WIDTH  5      <span class=\"hljs-comment\">\/\/ LEDS pro Zeile<\/span><\/span>\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> FLAME_HEIGHT 27     <span class=\"hljs-comment\">\/\/ Anzahl der Zeilen<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Arduino<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">arduino<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Migration auf Arduino nano<\/h2>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Arduino-Nano-Pinout-756x353.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"756\" height=\"353\" src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Arduino-Nano-Pinout-756x353.jpg\" alt=\"Arduino Nano Pinout\" data-id=\"5394\" data-link=\"https:\/\/www.commander1024.de\/wordpress\/?attachment_id=5394\" class=\"wp-image-5394\" srcset=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Arduino-Nano-Pinout-756x353.jpg 756w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Arduino-Nano-Pinout-800x373.jpg 800w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Arduino-Nano-Pinout-300x140.jpg 300w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Arduino-Nano-Pinout-768x359.jpg 768w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Arduino-Nano-Pinout-150x70.jpg 150w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Arduino-Nano-Pinout-945x441.jpg 945w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Arduino-Nano-Pinout-600x280.jpg 600w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Arduino-Nano-Pinout.jpg 1281w\" sizes=\"auto, (max-width: 756px) 100vw, 756px\" \/><\/a><figcaption class=\"blocks-gallery-item__caption\">Pinout<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-649x450.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"649\" height=\"450\" src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-649x450.jpg\" alt=\"Arduino nano mit angel\u00f6teten Stiftleisten\" data-id=\"5392\" data-link=\"https:\/\/www.commander1024.de\/wordpress\/?attachment_id=5392\" class=\"wp-image-5392\" srcset=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-649x450.jpg 649w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-800x555.jpg 800w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-1731x1200.jpg 1731w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-300x208.jpg 300w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-768x533.jpg 768w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-1536x1065.jpg 1536w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-2048x1420.jpg 2048w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-1600x1109.jpg 1600w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-150x104.jpg 150w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-945x655.jpg 945w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/20190106_210207-600x416.jpg 600w\" sizes=\"auto, (max-width: 649px) 100vw, 649px\" \/><\/a><figcaption class=\"blocks-gallery-item__caption\">Arduino nano mit angel\u00f6teten Stiftleisten<\/figcaption><\/figure><\/li><\/ul><\/figure>\n\n\n\n <p> Die Arduino Klone kamen mit lose in der Packung liegenden Stiftleisten. Bei einem der 3 habe ich diese f\u00fcr die weiteren Tests und Anpassungen angel\u00f6tet. Bei den 2 f\u00fcr die finalen Fackeln, werde ich die paar Kabel direkt am PCB fest l\u00f6ten. <\/p> \n\n\n\n <p> Da ich den Sketch mit Simons Hilfe bereits auf dem Mega kompilierf\u00e4hig gemacht hatte, war die Migration auf den Arduino nano mit seinem Atmega 328P sehr einfach. Ich musste lediglich ein neues Board als Zielplattform und den passenden Serial Port ausw\u00e4hlen. Nun wird die Rekompilierung und der Upload mit &#8222;Deviot: Hochladen&#8220; angesto\u00dfen. <\/p> \n\n\n\n <p> Dann kann man den nano nach diesem Schema verkabeln (Pins passend zum Sketch). <\/p> \n\n\n\n<figure class=\"wp-block-image alignwide\"><img loading=\"lazy\" decoding=\"async\" width=\"727\" height=\"450\" src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch_Steckplatine-727x450.jpg\" alt=\"Arduino nano Schaltung\" class=\"wp-image-5406\" srcset=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch_Steckplatine-727x450.jpg 727w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch_Steckplatine-800x495.jpg 800w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch_Steckplatine-1920x1189.jpg 1920w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch_Steckplatine-300x186.jpg 300w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch_Steckplatine-768x476.jpg 768w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch_Steckplatine-1536x951.jpg 1536w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch_Steckplatine-1600x991.jpg 1600w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch_Steckplatine-150x93.jpg 150w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch_Steckplatine-945x585.jpg 945w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch_Steckplatine-600x372.jpg 600w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/Torch_Steckplatine.jpg 1923w\" sizes=\"auto, (max-width: 727px) 100vw, 727px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Bau der Fackel<\/h2>\n\n\n\n <p> Als Tr\u00e4ger habe ich etwas g\u00fcnstiges, wetterfestes im lokalen Baumarkt gesucht. Gefunden habe ich <a rel=\"noreferrer noopener\" aria-label=\" (\u00f6ffnet in neuem Tab)\" href=\"https:\/\/www.bauhaus.info\/ht-rohre\/marley-ht-rohr\/p\/13624665\" target=\"_blank\">HT-Rohr mit 50mm Durchmesser<\/a>. Das praktische dran ist, dass es auch passende wasserdichte Verschlusskappen gibt. Rohr und Abdeckung kosten jeweils weniger als 1\u20ac. <\/p> \n\n\n\n <p> Die Fackel wird gebaut, indem man den LED-Streifen von oben herab auf das Rohr aufwickelt. Ich habe alle paar Windungen den Streifen auf dem Rohr mit Hei\u00dfkleber fixiert. Damit der Kleber besser haftet, habe ich das Rohr zuvor mit feinem Schleifpapier angeraut. Der Eingang des Datensignals (der dunkle Teil der Fackel) muss dabei oben sein. <\/p> \n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-756x425.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"756\" height=\"425\" src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-756x425.jpg\" alt=\"\" data-id=\"5436\" data-link=\"https:\/\/www.commander1024.de\/wordpress\/dsc_0373\/\" class=\"wp-image-5436\" srcset=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-756x425.jpg 756w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-800x450.jpg 800w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-1920x1080.jpg 1920w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-300x169.jpg 300w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-768x432.jpg 768w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-1536x864.jpg 1536w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-2048x1152.jpg 2048w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-2000x1125.jpg 2000w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-1600x900.jpg 1600w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-150x84.jpg 150w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-945x532.jpg 945w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0373-600x338.jpg 600w\" sizes=\"auto, (max-width: 756px) 100vw, 756px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-756x425.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"756\" height=\"425\" src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-756x425.jpg\" alt=\"\" data-id=\"5435\" data-link=\"https:\/\/www.commander1024.de\/wordpress\/dsc_0374\/\" class=\"wp-image-5435\" srcset=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-756x425.jpg 756w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-800x450.jpg 800w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-1920x1080.jpg 1920w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-300x169.jpg 300w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-768x432.jpg 768w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-1536x864.jpg 1536w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-2048x1152.jpg 2048w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-2000x1125.jpg 2000w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-1600x900.jpg 1600w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-150x84.jpg 150w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-945x532.jpg 945w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0374-600x338.jpg 600w\" sizes=\"auto, (max-width: 756px) 100vw, 756px\" \/><\/a><\/figure><\/li><\/ul><\/figure>\n\n\n\n <p> Der Spannungsabfall auf den 5m PCB ist so hoch, dass ich an beiden Enden einspeisen muss, damit die Fackel homogen leuchtet. Daher habe ich mich dazu entschieden, das Rohr ober- und unterhalb des aufgewickelten LED-Streifens seitlich anzubohren und die Kabel so nach innen zu f\u00fchren. Die L\u00f6cher dichte ich  sp\u00e4ter wieder mit Silikon oder Hei\u00dfkleber ab. <\/p> \n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"756\" height=\"425\" src=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-756x425.jpg\" alt=\"An die offen liegenden Dr\u00e4hte (D3, GND) kann der Taster angeschlossen werden\" class=\"wp-image-5433\" srcset=\"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-756x425.jpg 756w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-800x450.jpg 800w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-1920x1080.jpg 1920w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-300x169.jpg 300w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-768x432.jpg 768w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-1536x864.jpg 1536w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-2048x1152.jpg 2048w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-2000x1125.jpg 2000w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-1600x900.jpg 1600w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-150x84.jpg 150w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-945x532.jpg 945w, https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0376-600x338.jpg 600w\" sizes=\"auto, (max-width: 756px) 100vw, 756px\" \/><\/a><figcaption>An die offen liegenden Dr\u00e4hte (D3, GND) kann der Taster angeschlossen werden<\/figcaption><\/figure>\n\n\n\n <p> Oben habe ich den Arduino im Rohr versteckt. Dort ist Vin und GND mit den d\u00fcnnen Kabeln des LED Streifens (da, wo der Stecker aufgecript war) verl\u00f6tet. Das Datenkabel ist ebenfalls direkt mit dem PIN_LED verbunden. Die dickeren Kabel an beiden Enden habe ich jeweils verl\u00e4ngert und nach unten gef\u00fchrt. <\/p> \n\n\n\n<h2 class=\"wp-block-heading\">Hinweise zur Stromversorgung<\/h2>\n\n\n\n <p> Da der Voltage Drop auf mehrere Meter Zuleitung nicht unerheblich ist, ist es evtl. sinnvoll einen Step-Down Wandler unten in die Fackel zu setzen und die Zuleitung mit h\u00f6herer Spannung zu realisieren. Beachten sollte man ebenfalls, dass je nach Farbe, Helligkeit und Anzahl der leuchtenden LEDs 30-40W Leistung ben\u00f6tigt werden. Der Wandler sollte also entsprechend dimensioniert sein. Die Fackelanimation selbst liegt bei ~10W. Dies k\u00f6nnte so gerade ein 2A Handyladeger\u00e4t liefern. Sinkt die Spannung am Arduino aber auf unter ~3,3V, crasht dieser und die Animation stoppt. <\/p> \n\n\n\n <p> Hat die Fackel die gew\u00fcnschte Gr\u00f6\u00dfe, kann man LED Streifen k\u00fcrzen und \/ oder das Rohr abs\u00e4gen. Ich lasse das Rohr bewusst l\u00e4nger, da ich die Fackeln direkt am Balkon an der Br\u00fcstung befestigen m\u00f6chte. <\/p> \n\n\n\n<h2 class=\"wp-block-heading\">Quellcode<\/h2>\n\n\n\n <p> Auch wenn es Sinn macht, den aktuellen Code aus Simons Repo zu beziehen, dokumentiere ich hier den Stand zur Zeit der Artikelerstellung. Ich habe zwar quick-and-diry einige Animationen erg\u00e4nzt, dennoch bin ich mir nicht sicher, ob ich Euch mit meinem Spaghetti-Code belasten m\u00f6chte <span class=\"wp-font-emots-emo-grin\"><\/span> <\/p> \n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Arduino\" data-shcb-language-slug=\"arduino\"><span><code class=\"hljs language-arduino\"><span class=\"hljs-comment\">\/*\n * Flaming Torch  (c) 2013-2019 Simon Budig &lt;simon@budig.de&gt;\n *\/<\/span>\n\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">include<\/span> <span class=\"hljs-meta-string\">&lt;EEPROM.h&gt;<\/span><\/span>\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">include<\/span> <span class=\"hljs-meta-string\">&lt;Adafruit_NeoPixel.h&gt;<\/span><\/span>\n\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> MIN(x, y) ((x) &lt; (y) ? (x) : (y))<\/span>\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> MAX(x, y) ((x) &gt; (y) ? (x) : (y))<\/span>\n\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> PIN_BUTTON   3  <span class=\"hljs-comment\">\/\/ Input pin f\u00fcr Button<\/span><\/span>\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> PIN_LED      6  <span class=\"hljs-comment\">\/\/ Output pin f\u00fcr Led-Strip<\/span><\/span>\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> NUM_PIXELS (5 * 60)<\/span>\n\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> NUM_MODES 6<\/span>\n\n<span class=\"hljs-comment\">\/\/ Framebuffer-Dimensions. Depends on the tube radius<\/span>\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> FLAME_WIDTH  5<\/span>\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> FLAME_HEIGHT 27<\/span>\n\n<span class=\"hljs-comment\">\/\/ Intensity buffer for flames and sparks<\/span>\n<span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">uint16_t<\/span> flamebuffer&#91;FLAME_HEIGHT]&#91;FLAME_WIDTH] = { { <span class=\"hljs-number\">0<\/span>, }, };\n<span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">uint16_t<\/span> sparkbuffer&#91;FLAME_WIDTH] = { <span class=\"hljs-number\">0<\/span>, };\n\n<span class=\"hljs-comment\">\/\/ Gamma-Lookup-Table<\/span>\n<span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">uint8_t<\/span> glut&#91;<span class=\"hljs-number\">256<\/span>];\n\n<span class=\"hljs-comment\">\/\/ Neo-Pixel Framebuffer<\/span>\nAdafruit_NeoPixel pixels = Adafruit_NeoPixel (NUM_PIXELS, PIN_LED,\n                                              NEO_GRB | NEO_KHZ800);\n\n<span class=\"hljs-comment\">\/\/ Function to show the torch flame<\/span>\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span>\n<span class=\"hljs-title\">render_flame<\/span> <span class=\"hljs-params\">()<\/span>\n<\/span>{\n  <span class=\"hljs-keyword\">uint16_t<\/span> i, val;\n  <span class=\"hljs-keyword\">uint8_t<\/span> x, y;\n\n  <span class=\"hljs-comment\">\/\/ Random values at the bottom end, random seeded sparks<\/span>\n  <span class=\"hljs-keyword\">for<\/span> (x = <span class=\"hljs-number\">0<\/span>; x &lt; FLAME_WIDTH; x++)\n    {\n      val = rand() &amp; <span class=\"hljs-number\">0xff<\/span>;\n      val = (val * val) &gt;&gt; <span class=\"hljs-number\">8<\/span>;\n      flamebuffer&#91;FLAME_HEIGHT<span class=\"hljs-number\">-1<\/span>]&#91;x] = val;\n\n      <span class=\"hljs-keyword\">if<\/span> (sparkbuffer&#91;x] == <span class=\"hljs-number\">0<\/span>)\n        {\n          <span class=\"hljs-keyword\">if<\/span> (rand() % <span class=\"hljs-number\">512<\/span> == <span class=\"hljs-number\">0<\/span>)\n            sparkbuffer&#91;x] = FLAME_HEIGHT<span class=\"hljs-number\">-1<\/span>;\n        }\n      <span class=\"hljs-keyword\">else<\/span>\n        {\n          sparkbuffer&#91;x] -= <span class=\"hljs-number\">1<\/span>;\n        }\n    }\n\n  <span class=\"hljs-comment\">\/\/ propagate enegy and blur. Damping is a fiddle factor.<\/span>\n  <span class=\"hljs-keyword\">for<\/span> (y = <span class=\"hljs-number\">0<\/span>; y &lt; FLAME_HEIGHT<span class=\"hljs-number\">-1<\/span>; y++)\n    {\n      <span class=\"hljs-keyword\">for<\/span> (x = <span class=\"hljs-number\">0<\/span>; x &lt; FLAME_WIDTH; x++)\n        {\n          val  = flamebuffer&#91;(y+<span class=\"hljs-number\">1<\/span>) % FLAME_HEIGHT]&#91;x];\n          val += flamebuffer&#91;(y+<span class=\"hljs-number\">1<\/span>) % FLAME_HEIGHT]&#91;(x+<span class=\"hljs-number\">1<\/span>) % FLAME_WIDTH];\n          val += flamebuffer&#91;(y+<span class=\"hljs-number\">1<\/span>) % FLAME_HEIGHT]&#91;(x+FLAME_WIDTH<span class=\"hljs-number\">-1<\/span>) % FLAME_WIDTH];\n          val += flamebuffer&#91;(y+<span class=\"hljs-number\">2<\/span>) % FLAME_HEIGHT]&#91;x];\n          val &lt;&lt;= <span class=\"hljs-number\">5<\/span>;\n          val \/= <span class=\"hljs-number\">140<\/span>;\n\n          flamebuffer&#91;y]&#91;x] = val;\n          <span class=\"hljs-keyword\">if<\/span> (sparkbuffer&#91;x] &amp;&amp; sparkbuffer&#91;x] == y)\n            flamebuffer&#91;y]&#91;x] = <span class=\"hljs-number\">255<\/span>;\n        }\n    }\n\n  <span class=\"hljs-keyword\">for<\/span> (i = <span class=\"hljs-number\">0<\/span>; i &lt; NUM_PIXELS; i++)\n    {\n      val = flamebuffer&#91;i \/ FLAME_WIDTH]&#91;i % FLAME_WIDTH];\n      val = MIN (<span class=\"hljs-number\">255<\/span>, val * <span class=\"hljs-number\">3<\/span>);\n\n      pixels.setPixelColor (i,\n                            glut&#91;val],\n                            glut&#91;val * <span class=\"hljs-number\">3<\/span> \/ <span class=\"hljs-number\">4<\/span>],\n                            glut&#91;val * <span class=\"hljs-number\">3<\/span> \/ <span class=\"hljs-number\">8<\/span>]);\n    }\n}\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span>\n<span class=\"hljs-title\">render_blueyellow<\/span> <span class=\"hljs-params\">(<span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-keyword\">uint16_t<\/span> t)<\/span>\n<\/span>{\n  <span class=\"hljs-keyword\">uint16_t<\/span> i;\n  <span class=\"hljs-keyword\">uint8_t<\/span> pos;\n\n  <span class=\"hljs-keyword\">for<\/span> (i = <span class=\"hljs-number\">0<\/span>; i &lt; NUM_PIXELS; i++)\n    {\n      pos = (t + i) % <span class=\"hljs-number\">64<\/span>;\n      <span class=\"hljs-keyword\">if<\/span> (pos &lt; <span class=\"hljs-number\">32<\/span>)\n        pixels.setPixelColor (i, <span class=\"hljs-number\">255<\/span>, <span class=\"hljs-number\">200<\/span>, <span class=\"hljs-number\">0<\/span>);\n      <span class=\"hljs-keyword\">else<\/span>\n        pixels.setPixelColor (i, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">255<\/span>);\n    }\n}\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span>\n<span class=\"hljs-title\">render_rainbow<\/span> <span class=\"hljs-params\">(<span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-keyword\">uint16_t<\/span> t)<\/span>\n<\/span>{\n  <span class=\"hljs-keyword\">uint16_t<\/span> i;\n  <span class=\"hljs-keyword\">uint8_t<\/span> pos, pos2;\n\n  <span class=\"hljs-keyword\">for<\/span> (i = <span class=\"hljs-number\">0<\/span>; i &lt; NUM_PIXELS; i++)\n    {\n      pos = (t + i) % <span class=\"hljs-number\">255<\/span>;\n      pos2 = (pos % <span class=\"hljs-number\">85<\/span>) * <span class=\"hljs-number\">3<\/span>;\n      <span class=\"hljs-keyword\">if<\/span> (pos &lt; <span class=\"hljs-number\">85<\/span>)\n        pixels.setPixelColor (i, glut&#91;pos2], glut&#91;<span class=\"hljs-number\">0<\/span>], glut&#91;<span class=\"hljs-number\">255<\/span> - pos2]);\n      <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (pos &lt; <span class=\"hljs-number\">170<\/span>)\n        pixels.setPixelColor (i, glut&#91;<span class=\"hljs-number\">255<\/span> - pos2], glut&#91;pos2], glut&#91;<span class=\"hljs-number\">0<\/span>]);\n      <span class=\"hljs-keyword\">else<\/span>\n        pixels.setPixelColor (i, glut&#91;<span class=\"hljs-number\">0<\/span>], glut&#91;<span class=\"hljs-number\">255<\/span> - pos2], glut&#91;pos2]);\n    }\n}\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span>\n<span class=\"hljs-title\">render_redblue<\/span> <span class=\"hljs-params\">(<span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-keyword\">uint16_t<\/span> t)<\/span>\n<\/span>{\n  <span class=\"hljs-keyword\">uint16_t<\/span> i;\n  <span class=\"hljs-keyword\">uint8_t<\/span> pos;\n\n  <span class=\"hljs-keyword\">for<\/span> (i = <span class=\"hljs-number\">0<\/span>; i &lt; NUM_PIXELS; i++)\n    {\n      pos = (t + i) % <span class=\"hljs-number\">400<\/span>;\n      <span class=\"hljs-keyword\">if<\/span> (pos &lt; <span class=\"hljs-number\">85<\/span>)\n        pixels.setPixelColor (i, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>, glut&#91;pos * <span class=\"hljs-number\">3<\/span>]);\n      <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (pos &lt; <span class=\"hljs-number\">136<\/span>)\n        pixels.setPixelColor (i, glut&#91;<span class=\"hljs-number\">255<\/span> - ((pos - <span class=\"hljs-number\">85<\/span>) * <span class=\"hljs-number\">5<\/span>)], <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>);\n      <span class=\"hljs-keyword\">else<\/span>\n        pixels.setPixelColor (i, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>);\n    }\n}\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span>\n<span class=\"hljs-title\">render_kitt<\/span> <span class=\"hljs-params\">(<span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-keyword\">uint16_t<\/span> t)<\/span>\n<\/span>{\n  <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">uint8_t<\/span> basecolor = <span class=\"hljs-number\">0<\/span>;\n  <span class=\"hljs-keyword\">uint16_t<\/span> i;\n  <span class=\"hljs-keyword\">uint16_t<\/span> pos, pos2, p;\n  <span class=\"hljs-keyword\">uint8_t<\/span> *pixdata = pixels.getPixels ();\n\n  pos = (t*<span class=\"hljs-number\">2<\/span>) % (NUM_PIXELS * <span class=\"hljs-number\">2<\/span> - <span class=\"hljs-number\">2<\/span>);\n  \n  <span class=\"hljs-keyword\">for<\/span> (i = <span class=\"hljs-number\">0<\/span>; i &lt; NUM_PIXELS * <span class=\"hljs-number\">3<\/span>; i++)\n    {\n      pixdata&#91;i] = (((<span class=\"hljs-keyword\">uint16_t<\/span>) pixdata&#91;i]) * <span class=\"hljs-number\">7<\/span>) \/ <span class=\"hljs-number\">8<\/span>;\n    }\n\n  <span class=\"hljs-keyword\">if<\/span> (pos &gt;= NUM_PIXELS)\n    p = <span class=\"hljs-number\">2<\/span> * NUM_PIXELS - <span class=\"hljs-number\">2<\/span> - pos;\n  <span class=\"hljs-keyword\">else<\/span>\n    p = pos;\n    \n  basecolor = basecolor + <span class=\"hljs-number\">1<\/span> + <span class=\"hljs-number\">0<\/span> * ((rand() % <span class=\"hljs-number\">12<\/span>) + <span class=\"hljs-number\">249<\/span>) &amp; <span class=\"hljs-number\">0xff<\/span>;\n  pos = (t*<span class=\"hljs-number\">1<\/span>) % <span class=\"hljs-number\">256<\/span>;\n  pos = basecolor % (<span class=\"hljs-number\">85<\/span>*<span class=\"hljs-number\">3<\/span>);\n  pos2 = (pos % <span class=\"hljs-number\">85<\/span>) * <span class=\"hljs-number\">3<\/span>;\n  <span class=\"hljs-keyword\">if<\/span> (pos &lt; <span class=\"hljs-number\">85<\/span>)\n    {\n      pixels.setPixelColor (p,   glut&#91;pos2], glut&#91;<span class=\"hljs-number\">0<\/span>], glut&#91;<span class=\"hljs-number\">255<\/span> - pos2]);\n      pixels.setPixelColor (p+<span class=\"hljs-number\">1<\/span>, glut&#91;pos2], glut&#91;<span class=\"hljs-number\">0<\/span>], glut&#91;<span class=\"hljs-number\">255<\/span> - pos2]);\n    }\n  <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (pos &lt; <span class=\"hljs-number\">170<\/span>)\n    {\n      pixels.setPixelColor (p,   glut&#91;<span class=\"hljs-number\">255<\/span> - pos2], glut&#91;pos2], glut&#91;<span class=\"hljs-number\">0<\/span>]);\n      pixels.setPixelColor (p+<span class=\"hljs-number\">1<\/span>, glut&#91;<span class=\"hljs-number\">255<\/span> - pos2], glut&#91;pos2], glut&#91;<span class=\"hljs-number\">0<\/span>]);\n    }\n  <span class=\"hljs-keyword\">else<\/span>\n    {\n      pixels.setPixelColor (p,   glut&#91;<span class=\"hljs-number\">0<\/span>], glut&#91;<span class=\"hljs-number\">255<\/span> - pos2], glut&#91;pos2]);\n      pixels.setPixelColor (p+<span class=\"hljs-number\">1<\/span>, glut&#91;<span class=\"hljs-number\">0<\/span>], glut&#91;<span class=\"hljs-number\">255<\/span> - pos2], glut&#91;pos2]);\n    }\n}\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span>\n<span class=\"hljs-title\">render_rgbsparks<\/span> <span class=\"hljs-params\">(<span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-keyword\">uint16_t<\/span> t)<\/span>\n<\/span>{\n  <span class=\"hljs-keyword\">uint8_t<\/span> x, y;\n\n  <span class=\"hljs-comment\">\/\/ Random values: factor 3 differentiates between R\/G\/B<\/span>\n\n  x = rand() % FLAME_WIDTH;\n  y = rand() % FLAME_HEIGHT;\n  flamebuffer&#91;y]&#91;x] = rand() % (<span class=\"hljs-number\">255<\/span> * <span class=\"hljs-number\">3<\/span>);\n\n  <span class=\"hljs-keyword\">for<\/span> (y = FLAME_HEIGHT; y &gt; <span class=\"hljs-number\">0<\/span>; )\n    {\n      y--;\n\n      <span class=\"hljs-keyword\">for<\/span> (x = <span class=\"hljs-number\">0<\/span>; x &lt; FLAME_WIDTH; x++)\n        {\n          <span class=\"hljs-keyword\">switch<\/span> (flamebuffer&#91;y]&#91;x] % <span class=\"hljs-number\">3<\/span>)\n            {\n              <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">0<\/span>:\n                pixels.setPixelColor (y * FLAME_WIDTH + x,\n                                      glut&#91;flamebuffer&#91;y]&#91;x] \/ <span class=\"hljs-number\">3<\/span>], <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>);\n                <span class=\"hljs-keyword\">break<\/span>;\n              <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">1<\/span>:\n                pixels.setPixelColor (y * FLAME_WIDTH + x,\n                                      <span class=\"hljs-number\">0<\/span>, glut&#91;flamebuffer&#91;y]&#91;x] \/ <span class=\"hljs-number\">3<\/span>], <span class=\"hljs-number\">0<\/span>);\n                <span class=\"hljs-keyword\">break<\/span>;\n              <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">2<\/span>:\n                pixels.setPixelColor (y * FLAME_WIDTH + x,\n                                      <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>, glut&#91;flamebuffer&#91;y]&#91;x] \/ <span class=\"hljs-number\">3<\/span>]);\n                <span class=\"hljs-keyword\">break<\/span>;\n            }\n\n          <span class=\"hljs-comment\">\/\/ Deal with multiples of three, this ensures the same base color<\/span>\n          <span class=\"hljs-comment\">\/\/ the condition here is false always, if enabled this makes the<\/span>\n          <span class=\"hljs-comment\">\/\/ colorful sparks go up.<\/span>\n          <span class=\"hljs-keyword\">if<\/span> (t % <span class=\"hljs-number\">6<\/span> == <span class=\"hljs-number\">7<\/span>)\n            {\n              <span class=\"hljs-keyword\">if<\/span> (y &gt; <span class=\"hljs-number\">1<\/span>)\n                flamebuffer&#91;y]&#91;x] = MAX (<span class=\"hljs-number\">9<\/span>, flamebuffer&#91;y<span class=\"hljs-number\">-1<\/span>]&#91;x]) - <span class=\"hljs-number\">9<\/span>;\n              <span class=\"hljs-keyword\">else<\/span>\n                flamebuffer&#91;y]&#91;x] = <span class=\"hljs-number\">0<\/span>;\n            }\n          <span class=\"hljs-keyword\">else<\/span>\n            {\n              flamebuffer&#91;y]&#91;x] = MAX (<span class=\"hljs-number\">9<\/span>, flamebuffer&#91;y]&#91;x]) - <span class=\"hljs-number\">9<\/span>;\n            }\n        }\n    }\n}\n\n\n<span class=\"hljs-comment\">\/\/ Arduino init.<\/span>\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span>\n<span class=\"hljs-title\">setup<\/span> <span class=\"hljs-params\">()<\/span>\n<\/span>{\n  <span class=\"hljs-keyword\">uint16_t<\/span> i;\n  <span class=\"hljs-keyword\">uint8_t<\/span> state;\n  <span class=\"hljs-keyword\">float<\/span> rf;\n\n  <span class=\"hljs-comment\">\/\/ calculate Gamma-Table<\/span>\n  <span class=\"hljs-keyword\">for<\/span> (i = <span class=\"hljs-number\">0<\/span>; i &lt; <span class=\"hljs-number\">256<\/span>; i++)\n    {\n      rf = i \/ <span class=\"hljs-number\">255.0<\/span>;\n      rf = <span class=\"hljs-built_in\">pow<\/span> (rf, <span class=\"hljs-number\">2.2<\/span>);\n      glut&#91;i] = <span class=\"hljs-number\">255.0<\/span> * rf;\n    }\n\n  <span class=\"hljs-comment\">\/\/ Button Pin Input, internal Pullup<\/span>\n  <span class=\"hljs-built_in\">pinMode<\/span> (PIN_BUTTON, <span class=\"hljs-literal\">INPUT_PULLUP<\/span>);\n\n  <span class=\"hljs-comment\">\/\/ initial button test to make it possible<\/span>\n  <span class=\"hljs-comment\">\/\/ to skip modes taking too much power (--&gt; reset<\/span>\n\n   <span class=\"hljs-keyword\">if<\/span> (!<span class=\"hljs-built_in\">digitalRead<\/span> (PIN_BUTTON))\n     {\n       state = <span class=\"hljs-built_in\">EEPROM<\/span>.<span class=\"hljs-built_in\">read<\/span>(<span class=\"hljs-number\">0<\/span>);\n       state = (state + <span class=\"hljs-number\">1<\/span>) % NUM_MODES;\n       <span class=\"hljs-built_in\">EEPROM<\/span>.<span class=\"hljs-built_in\">write<\/span> (<span class=\"hljs-number\">0<\/span>, state);\n     }\n\n  <span class=\"hljs-comment\">\/\/ initialize Neopixel library<\/span>\n  pixels.<span class=\"hljs-built_in\">begin<\/span>();\n}\n\n\n<span class=\"hljs-comment\">\/\/ Arduino Loop function. Repeats continuously<\/span>\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span>\n<span class=\"hljs-title\">loop<\/span> <span class=\"hljs-params\">()<\/span>\n<\/span>{\n  <span class=\"hljs-keyword\">uint16_t<\/span> i;\n  <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">uint16_t<\/span> t = <span class=\"hljs-number\">0xffff<\/span>;\n  <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">uint8_t<\/span> pressed = <span class=\"hljs-number\">0<\/span>;\n  <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">uint8_t<\/span> state = <span class=\"hljs-number\">0xff<\/span>;\n  <span class=\"hljs-keyword\">uint8_t<\/span> delay_value = <span class=\"hljs-number\">0<\/span>;\n\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> MAGIC_KEY_POS<\/span>\n  <span class=\"hljs-comment\">\/\/ for atmega32u4 based Arduinos:<\/span>\n  <span class=\"hljs-comment\">\/\/<\/span>\n  <span class=\"hljs-comment\">\/\/ check if the bootloader has been activated.<\/span>\n  <span class=\"hljs-comment\">\/\/ avoid doing any rendering to prevent the<\/span>\n  <span class=\"hljs-comment\">\/\/ MAGIC_KEY getting overridden which in turn<\/span>\n  <span class=\"hljs-comment\">\/\/ would prevent entering the bootloader properly.<\/span>\n\n  <span class=\"hljs-keyword\">if<\/span> (*((<span class=\"hljs-keyword\">uint16_t<\/span> *) MAGIC_KEY_POS) == MAGIC_KEY &amp;&amp;\n      WDTCSR &amp; (<span class=\"hljs-number\">1<\/span> &lt;&lt; WDE))\n    {\n      <span class=\"hljs-keyword\">return<\/span>;\n    }\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span>\n    \n  <span class=\"hljs-keyword\">if<\/span> (state &gt;= NUM_MODES)\n    state = <span class=\"hljs-built_in\">EEPROM<\/span>.<span class=\"hljs-built_in\">read<\/span>(<span class=\"hljs-number\">0<\/span>);\n  <span class=\"hljs-keyword\">if<\/span> (state &gt;= NUM_MODES)\n    state = <span class=\"hljs-number\">0<\/span>;\n\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> MAGIC_KEY_POS<\/span>\n  <span class=\"hljs-comment\">\/\/ Now, this is quite unfortunate:<\/span>\n  <span class=\"hljs-comment\">\/\/<\/span>\n  <span class=\"hljs-comment\">\/\/ for the atmege32u4 based arduinos (Leonardo, pro micro etc.)<\/span>\n  <span class=\"hljs-comment\">\/\/ entering the bootloader is initiated in the USB interrupt<\/span>\n  <span class=\"hljs-comment\">\/\/ handler (i.e. can happen at any time).<\/span>\n  <span class=\"hljs-comment\">\/\/<\/span>\n  <span class=\"hljs-comment\">\/\/ This does two things: writes MAGIC_KEY to MAGIC_KEY_POS and<\/span>\n  <span class=\"hljs-comment\">\/\/ enables the watchdog reset.<\/span>\n  <span class=\"hljs-comment\">\/\/<\/span>\n  <span class=\"hljs-comment\">\/\/ If the watchdog fires the atmega32u4 resets and the bootloader<\/span>\n  <span class=\"hljs-comment\">\/\/ code checks for the MAGIC_KEY at MAGIC_KEY_POS. If it finds<\/span>\n  <span class=\"hljs-comment\">\/\/ the MAGIC_KEY it sticks in the bootloader mode.<\/span>\n  <span class=\"hljs-comment\">\/\/<\/span>\n  <span class=\"hljs-comment\">\/\/ for larger LED strips it is quite likely that MAGIC_KEY_POS<\/span>\n  <span class=\"hljs-comment\">\/\/ resides in the middle of the framebuffer. And if the USB interrupt<\/span>\n  <span class=\"hljs-comment\">\/\/ happens while the code is rendering stuff to the framebuffer,<\/span>\n  <span class=\"hljs-comment\">\/\/ it then might happen that the MAGIC_KEY immediately gets overwritten<\/span>\n  <span class=\"hljs-comment\">\/\/ by the rendering code. This prevents that the bootloader gets<\/span>\n  <span class=\"hljs-comment\">\/\/ entered upon the watchdog reset. For some effects the AVR is mostly<\/span>\n  <span class=\"hljs-comment\">\/\/ rendering, making it basically impossible to enter the bootloader<\/span>\n  <span class=\"hljs-comment\">\/\/ via the IDE.<\/span>\n  <span class=\"hljs-comment\">\/\/<\/span>\n  <span class=\"hljs-comment\">\/\/ As a workaround we disable all interrupts during the rendering code<\/span>\n  <span class=\"hljs-comment\">\/\/ which is quite a brute force method. This delays the writing of the<\/span>\n  <span class=\"hljs-comment\">\/\/ MAGIC_KEY to the point of the sei() (since this is now the point where<\/span>\n  <span class=\"hljs-comment\">\/\/ the USB interrupt gets handled), giving the MAGIC_KEY precedence over<\/span>\n  <span class=\"hljs-comment\">\/\/ the rendered effect.<\/span>\n  <span class=\"hljs-comment\">\/\/<\/span>\n  <span class=\"hljs-comment\">\/\/ and since we basically avoid running loop() when the<\/span>\n  <span class=\"hljs-comment\">\/\/ bootloader-conditions are met (see above) the switch to the bootloader<\/span>\n  <span class=\"hljs-comment\">\/\/ now is more reliable again.<\/span>\n\n  cli ();\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span>\n\n  <span class=\"hljs-keyword\">switch<\/span> (state)\n    {\n      <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">0<\/span>:\n        render_flame ();\n        <span class=\"hljs-keyword\">break<\/span>;\n\n      <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">1<\/span>:\n        render_blueyellow (t);\n        delay_value = <span class=\"hljs-number\">10<\/span>;\n        <span class=\"hljs-keyword\">break<\/span>;\n\n      <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">2<\/span>:\n        render_rainbow (t);\n        delay_value = <span class=\"hljs-number\">10<\/span>;\n        <span class=\"hljs-keyword\">break<\/span>;\n\n      <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">3<\/span>:\n        render_redblue (t);\n        delay_value = <span class=\"hljs-number\">10<\/span>;\n        <span class=\"hljs-keyword\">break<\/span>;\n\n      <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">4<\/span>:\n        render_kitt (t);\n        delay_value = <span class=\"hljs-number\">20<\/span>;\n        <span class=\"hljs-keyword\">break<\/span>;\n        \n      <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">5<\/span>:\n        render_rgbsparks (t);\n        delay_value = <span class=\"hljs-number\">10<\/span>;\n        <span class=\"hljs-keyword\">break<\/span>;\n\n      <span class=\"hljs-keyword\">default<\/span>:\n        render_flame ();\n        <span class=\"hljs-keyword\">break<\/span>;\n    }\n\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">ifdef<\/span> MAGIC_KEY_POS<\/span>\n  sei ();\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">endif<\/span><\/span>\n\n  <span class=\"hljs-comment\">\/\/ the actual delay relies on interupts, hence<\/span>\n  <span class=\"hljs-comment\">\/\/ we have to do the per-frame-waiting after the sei();<\/span>\n  \n  <span class=\"hljs-keyword\">if<\/span> (delay_value)\n    {\n      <span class=\"hljs-built_in\">delay<\/span> (delay_value);\n    }\n\n  <span class=\"hljs-comment\">\/\/ Time-Tick. Needed for moving stripes<\/span>\n  t--;\n\n  <span class=\"hljs-comment\">\/\/ update Pixels<\/span>\n  pixels.show ();\n\n  <span class=\"hljs-comment\">\/\/ Button-Handling  (inverted logic: 0 = button pressed)<\/span>\n  <span class=\"hljs-keyword\">if<\/span> (!<span class=\"hljs-built_in\">digitalRead<\/span> (PIN_BUTTON))\n    {\n      <span class=\"hljs-comment\">\/\/ for software-debouncing on a pressed button we count down to 0<\/span>\n      <span class=\"hljs-comment\">\/\/ for each frame.<\/span>\n      pressed = MAX (pressed, <span class=\"hljs-number\">1<\/span>) - <span class=\"hljs-number\">1<\/span>;\n\n      <span class=\"hljs-comment\">\/\/ at 1 we clear the framebuffer and switch mode.<\/span>\n      <span class=\"hljs-keyword\">if<\/span> (pressed == <span class=\"hljs-number\">1<\/span>)\n        {\n          <span class=\"hljs-built_in\">memset<\/span> (flamebuffer, <span class=\"hljs-number\">0x00<\/span>, <span class=\"hljs-keyword\">sizeof<\/span> (flamebuffer));\n          <span class=\"hljs-built_in\">memset<\/span> (sparkbuffer, <span class=\"hljs-number\">0x00<\/span>, <span class=\"hljs-keyword\">sizeof<\/span> (sparkbuffer));\n          state = (state + <span class=\"hljs-number\">1<\/span>) % NUM_MODES;\n          <span class=\"hljs-built_in\">EEPROM<\/span>.<span class=\"hljs-built_in\">write<\/span> (<span class=\"hljs-number\">0<\/span>, state);\n          <span class=\"hljs-keyword\">for<\/span> (i = <span class=\"hljs-number\">0<\/span>; i &lt; NUM_PIXELS; i++)\n            {\n              pixels.setPixelColor (i, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>);\n            }\n        }\n    }\n  <span class=\"hljs-keyword\">else<\/span>\n    {\n      pressed = <span class=\"hljs-number\">5<\/span>;\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Arduino<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">arduino<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n <p> Ich hoste den Fork von Simons Software mit meinen Anpassungen nun auch bei mir in einem <a href=\"https:\/\/git.commander1024.de\/Commander1024\/flame1024\" target=\"_blank\" rel=\"noreferrer noopener\">Git-Repository<\/a>. <\/p> \n","protected":false},"excerpt":{"rendered":" <p> Seit der OHM2013 habe ich immer wieder auf Chaos Events LED-Fackeln gesehen, die von einem Mikrocontroller angetrieben wurden. H\u00e4ufig basieren diese auf Arduino-Development-Boards, bzw. Chips wie sie bei dort zum Einsatz kommen. Leider bin ich nie dazu gekommen, dahingehend Kontakte zu kn\u00fcpfen und mich \u00fcber die Funktionsweise zu informieren &#8211; bis zum 35C3 dieses Jahr.&hellip; <\/p> \n","protected":false},"author":1,"featured_media":5423,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[299,474,6,10],"tags":[403,447,373,445,379,448,446],"class_list":["post-5377","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-do-it-yourself","category-hardware","category-software","tag-arduino","tag-fackel","tag-hardware","tag-led","tag-software","tag-torch","tag-ws2812b","comments-open","has-comments"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Arduino LED Fackel &#8211; Commander1024<\/title>\n<meta name=\"description\" content=\"Inspiriert durch LED Fackeln auf der OHM2013 und nachfolgenden Chaos Events, habe ich mich dazu entschlossen, selbst eine auf Arduino-Basis zu bauen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marcus Scholz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"12\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/\"},\"author\":{\"name\":\"Marcus Scholz\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/#\\\/schema\\\/person\\\/aebb61d9f57867e2234becde6d99da8d\"},\"headline\":\"Arduino LED Fackel\",\"datePublished\":\"2019-01-16T09:02:42+00:00\",\"dateModified\":\"2020-04-17T07:40:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/\"},\"wordCount\":1121,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/#\\\/schema\\\/person\\\/aebb61d9f57867e2234becde6d99da8d\"},\"image\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/DSC_0351-e1547112592112-scaled.jpg\",\"keywords\":[\"Arduino\",\"Fackel\",\"Hardware\",\"LED\",\"Software\",\"Torch\",\"WS2812B\"],\"articleSection\":[\"Arduino\",\"Do-It-Yourself\",\"Hardware\",\"Software\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/\",\"url\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/\",\"name\":\"Arduino LED Fackel &#8211; Commander1024\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/DSC_0351-e1547112592112-scaled.jpg\",\"datePublished\":\"2019-01-16T09:02:42+00:00\",\"dateModified\":\"2020-04-17T07:40:20+00:00\",\"description\":\"Inspiriert durch LED Fackeln auf der OHM2013 und nachfolgenden Chaos Events, habe ich mich dazu entschlossen, selbst eine auf Arduino-Basis zu bauen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/DSC_0351-e1547112592112-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/DSC_0351-e1547112592112-scaled.jpg\",\"width\":2560,\"height\":1104},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/2019\\\/01\\\/arduino-led-fackel\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Arduino LED Fackel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/\",\"name\":\"Dem Commander1024 sein Blog\",\"description\":\"A Network Engineer&#039;s life\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/#\\\/schema\\\/person\\\/aebb61d9f57867e2234becde6d99da8d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/#\\\/schema\\\/person\\\/aebb61d9f57867e2234becde6d99da8d\",\"name\":\"Marcus Scholz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Underground-Tour-89-scaled.jpg\",\"url\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Underground-Tour-89-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Underground-Tour-89-scaled.jpg\",\"width\":1707,\"height\":2560,\"caption\":\"Marcus Scholz\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Underground-Tour-89-scaled.jpg\"},\"description\":\"Seit Kindheitstagen ist der Computer sein Begleiter. Was mit Linux anfing, wurde 2005 ein\\\/e Beruf\\\/ung, die weit \u00fcber den Arbeitsplatz hinausgeht. Durch stetige Weiterentwicklung fasste er auch im *BSD Segment Fu\u00df und bietet mittlerweile professionelle L\u00f6sungen im Bereich Hosting, Networking und Infrastruktur an. Als Ausgleich besch\u00e4ftigt er sich neben Computerspielen mit der Fotografie.\",\"sameAs\":[\"https:\\\/\\\/www.commander1024.de\",\"https:\\\/\\\/www.facebook.com\\\/Commander1024\",\"https:\\\/\\\/x.com\\\/Commander1024\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCG_WzkCMycoSH7lEcvKHnmA\"],\"url\":\"https:\\\/\\\/www.commander1024.de\\\/wordpress\\\/author\\\/commander1024\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Arduino LED Fackel &#8211; Commander1024","description":"Inspiriert durch LED Fackeln auf der OHM2013 und nachfolgenden Chaos Events, habe ich mich dazu entschlossen, selbst eine auf Arduino-Basis zu bauen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/","twitter_misc":{"Verfasst von":"Marcus Scholz","Gesch\u00e4tzte Lesezeit":"12\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/#article","isPartOf":{"@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/"},"author":{"name":"Marcus Scholz","@id":"https:\/\/www.commander1024.de\/wordpress\/#\/schema\/person\/aebb61d9f57867e2234becde6d99da8d"},"headline":"Arduino LED Fackel","datePublished":"2019-01-16T09:02:42+00:00","dateModified":"2020-04-17T07:40:20+00:00","mainEntityOfPage":{"@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/"},"wordCount":1121,"commentCount":4,"publisher":{"@id":"https:\/\/www.commander1024.de\/wordpress\/#\/schema\/person\/aebb61d9f57867e2234becde6d99da8d"},"image":{"@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/#primaryimage"},"thumbnailUrl":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0351-e1547112592112-scaled.jpg","keywords":["Arduino","Fackel","Hardware","LED","Software","Torch","WS2812B"],"articleSection":["Arduino","Do-It-Yourself","Hardware","Software"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/","url":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/","name":"Arduino LED Fackel &#8211; Commander1024","isPartOf":{"@id":"https:\/\/www.commander1024.de\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/#primaryimage"},"image":{"@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/#primaryimage"},"thumbnailUrl":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0351-e1547112592112-scaled.jpg","datePublished":"2019-01-16T09:02:42+00:00","dateModified":"2020-04-17T07:40:20+00:00","description":"Inspiriert durch LED Fackeln auf der OHM2013 und nachfolgenden Chaos Events, habe ich mich dazu entschlossen, selbst eine auf Arduino-Basis zu bauen.","breadcrumb":{"@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/#primaryimage","url":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0351-e1547112592112-scaled.jpg","contentUrl":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2019\/01\/DSC_0351-e1547112592112-scaled.jpg","width":2560,"height":1104},{"@type":"BreadcrumbList","@id":"https:\/\/www.commander1024.de\/wordpress\/2019\/01\/arduino-led-fackel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.commander1024.de\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Arduino LED Fackel"}]},{"@type":"WebSite","@id":"https:\/\/www.commander1024.de\/wordpress\/#website","url":"https:\/\/www.commander1024.de\/wordpress\/","name":"Dem Commander1024 sein Blog","description":"A Network Engineer&#039;s life","publisher":{"@id":"https:\/\/www.commander1024.de\/wordpress\/#\/schema\/person\/aebb61d9f57867e2234becde6d99da8d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.commander1024.de\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":["Person","Organization"],"@id":"https:\/\/www.commander1024.de\/wordpress\/#\/schema\/person\/aebb61d9f57867e2234becde6d99da8d","name":"Marcus Scholz","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2020\/11\/Underground-Tour-89-scaled.jpg","url":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2020\/11\/Underground-Tour-89-scaled.jpg","contentUrl":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2020\/11\/Underground-Tour-89-scaled.jpg","width":1707,"height":2560,"caption":"Marcus Scholz"},"logo":{"@id":"https:\/\/www.commander1024.de\/wordpress\/wp-content\/uploads\/2020\/11\/Underground-Tour-89-scaled.jpg"},"description":"Seit Kindheitstagen ist der Computer sein Begleiter. Was mit Linux anfing, wurde 2005 ein\/e Beruf\/ung, die weit \u00fcber den Arbeitsplatz hinausgeht. Durch stetige Weiterentwicklung fasste er auch im *BSD Segment Fu\u00df und bietet mittlerweile professionelle L\u00f6sungen im Bereich Hosting, Networking und Infrastruktur an. Als Ausgleich besch\u00e4ftigt er sich neben Computerspielen mit der Fotografie.","sameAs":["https:\/\/www.commander1024.de","https:\/\/www.facebook.com\/Commander1024","https:\/\/x.com\/Commander1024","https:\/\/www.youtube.com\/channel\/UCG_WzkCMycoSH7lEcvKHnmA"],"url":"https:\/\/www.commander1024.de\/wordpress\/author\/commander1024\/"}]}},"_links":{"self":[{"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/posts\/5377","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/comments?post=5377"}],"version-history":[{"count":52,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/posts\/5377\/revisions"}],"predecessor-version":[{"id":6442,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/posts\/5377\/revisions\/6442"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/media\/5423"}],"wp:attachment":[{"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/media?parent=5377"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/categories?post=5377"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.commander1024.de\/wordpress\/wp-json\/wp\/v2\/tags?post=5377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}