<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arduino Projekte Archives - Nerd Corner</title>
	<atom:link href="https://nerd-corner.com/de/category/arduino-projekte/feed/" rel="self" type="application/rss+xml" />
	<link>https://nerd-corner.com/de/category/arduino-projekte/</link>
	<description>Craft your dreams!</description>
	<lastBuildDate>Sun, 22 Jun 2025 17:30:00 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://nerd-corner.com/wp-content/uploads/2019/10/cropped-LogoNerdCorner-2-32x32.png</url>
	<title>Arduino Projekte Archives - Nerd Corner</title>
	<link>https://nerd-corner.com/de/category/arduino-projekte/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>DIY Tastenfeldschloss &#8211; 3D Druck und Programmierung</title>
		<link>https://nerd-corner.com/de/diy-tastenfeldschloss-3d-druck-und-programmierung/</link>
					<comments>https://nerd-corner.com/de/diy-tastenfeldschloss-3d-druck-und-programmierung/#respond</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Tue, 17 Dec 2024 15:10:58 +0000</pubDate>
				<category><![CDATA[Arduino Projekte]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Hardware-DE]]></category>
		<category><![CDATA[Software-DE]]></category>
		<category><![CDATA[SolidWorks-DE]]></category>
		<category><![CDATA[3D Druck]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C Programmierung]]></category>
		<category><![CDATA[CAD]]></category>
		<category><![CDATA[Fritzing]]></category>
		<category><![CDATA[Gehäuse]]></category>
		<category><![CDATA[Genauigkeit]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Präzision]]></category>
		<category><![CDATA[Schloss]]></category>
		<category><![CDATA[Solid Works]]></category>
		<category><![CDATA[Tastenfeld]]></category>
		<category><![CDATA[Tastenfeldschloss]]></category>
		<category><![CDATA[Verkabelung]]></category>
		<category><![CDATA[Version 1]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=1642</guid>

					<description><![CDATA[<p>Ein Schrank, der immer abgeschlossen sein soll, und fünf Personen, die darauf zugreifen müssen – eine klassische Herausforderung. Die naheliegenden Lösungen? Fünf Schlüssel im Umlauf &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/diy-tastenfeldschloss-3d-druck-und-programmierung/">DIY Tastenfeldschloss &#8211; 3D Druck und Programmierung</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p data-start="111" data-end="523">Ein Schrank, der immer abgeschlossen sein soll, und fünf Personen, die darauf zugreifen müssen – eine klassische Herausforderung. Die naheliegenden Lösungen? Fünf Schlüssel im Umlauf oder eine einzige Person, die den Schlüssel verwaltet, sodass man ihn sich jedes Mal ausleihen muss. Doch wir kennen das alle: Am Ende liegt der Schlüssel dann doch auf dem Schrank, unter dem Teppich oder hinter dem Blumentopf.</p>
<p data-start="525" data-end="926">Aber wäre es nicht viel praktischer, ganz auf physische Schlüssel zu verzichten? Heutzutage gibt es zahlreiche Möglichkeiten, ein Schloss zu öffnen: Fingerabdruckscanner, Gesichtserkennung, NFC, Zahlencodes, Stellräder – oder natürlich brachiale Methoden wie Sprengstoff und rohe Gewalt. Doch wenn man eine preiswerte, gewaltfreie und einfache Lösung sucht, rückt das Tastenfeldschloss in den Fokus.</p>
<p data-start="928" data-end="1117">Überraschenderweise gibt es im Internet kaum wirklich gute DIY-Lösungen für Hobbybastler. Also packe ich es selbst an – mein erstes Tastenfeld-Schloss, das ich schlicht „Version 1“ nenne.</p>
<p data-start="928" data-end="1117"><em><strong>Das könnte dich auch interessieren: </strong><a href="https://nerd-corner.com/de/diy-powerbank-mit-spannungsregler-und-voltmeter/">DIY Powerbank mit Spannungsregler und Voltmeter</a></em></p>
<h2>Konstruktion des Gehäuses</h2>
<p data-start="89" data-end="285">Zunächst liegt der Fokus auf dem Gehäuse und der Aufnahme für das Tastenfeld. Die erste Frage, die sich dabei immer stellt: Wie groß soll es sein? Die Antwort hängt von mehreren Faktoren ab:</p>
<ul data-start="287" data-end="664">
<li data-start="287" data-end="390">Welche Komponenten werden benötigt? Jedes Bauteil nimmt Platz ein und beeinflusst die Bauweise.</li>
<li data-start="391" data-end="529">Wie viel Raum beanspruchen die Komponenten? Ein kompaktes Design ist vorteilhaft, darf aber nicht die Funktionalität einschränken.</li>
<li data-start="530" data-end="664">Wie sind Haptik und Bedienbarkeit? Das Tastenfeld sollte angenehm zu bedienen sein, ohne dass es zu eng oder unpraktisch wird.</li>
</ul>
<p data-start="666" data-end="784">Diese Überlegungen bilden die Grundlage für das Gehäusedesign – denn eine gute Planung spart später Zeit und Nerven.</p>
<h3 data-start="98" data-end="130">Was kommt ins Gehäuse?</h3>
<p data-start="132" data-end="238">Zentraler Bestandteil ist natürlich das Membrantastenfeld (1.0.1). Es hat die folgenden Abmessungen:</p>
<ul data-start="240" data-end="335">
<li data-start="240" data-end="261">Breite: 69 mm</li>
<li data-start="262" data-end="282">Länge: 76 mm</li>
<li data-start="283" data-end="335">Dicke: 0,6 mm (bzw. 0,95 mm über den Tasten)</li>
</ul>
<p data-start="337" data-end="515">Zusätzlich verfügt das Tastenfeld über ein Flachbandkabel mit DuPont-Buchsen zum Anschluss an einen Mikrocontroller. Das Kabel selbst ist 85 mm lang und 17,78 mm breit.</p>
<p data-start="517" data-end="773">Die Schaltzentrale des Schlosses bildet der Nano (1.0.2). Um ihn sauber im Gehäuse unterzubringen und die Kabelverbindungen möglichst komfortabel zu gestalten, habe ich mich für ein Nano-Expansionsboard mit Schraubklemmen (1.0.4) entschieden.</p>
<p data-start="775" data-end="938">Für die Notstromversorgung kommt eine Hohlbuchse (5,5 x 2,1 mm, 1.0.4) zum Einsatz, damit das Schloss auch bei einem Stromausfall weiterhin funktioniert.</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter wp-image-1671 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/1-0-1.jpg" alt="tastenfeldschloss Bauteile" width="2310" height="1324" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/1-0-1.jpg 2318w, https://nerd-corner.com/wp-content/uploads/2024/12/1-0-1-300x172.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/1-0-1-1024x587.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/1-0-1-768x440.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/1-0-1-1536x881.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/1-0-1-2048x1174.jpg 2048w" sizes="(max-width: 2310px) 100vw, 2310px" /></p>
<p>Die Stift- und Buchsenleisten (1.1.1) dienen als zentrale Stromverteilung und werden später auf die Lochrasterplatte (1.1.2) gelötet. Damit alle Komponenten zuverlässig verbunden werden, kommen Jumperkabel (1.1.3) zum Einsatz. Je nach Position der Bauteile sind unterschiedliche Längen erforderlich – in diesem Fall 10 cm und 20 cm.</p>
<p><img decoding="async" class="aligncenter wp-image-1670 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/1-1.jpg" alt="" width="2310" height="1327" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/1-1.jpg 2321w, https://nerd-corner.com/wp-content/uploads/2024/12/1-1-300x172.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/1-1-1024x588.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/1-1-768x441.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/1-1-1536x882.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/1-1-2048x1176.jpg 2048w" sizes="(max-width: 2310px) 100vw, 2310px" /></p>
<p data-start="71" data-end="316">Für die Statusanzeige des Tastenfeldschlosses setze ich auf Neo-Pixel – adressierbare LEDs vom Typ WS2812b (1.2.1). Damit lassen sich verschiedene Farben und Effekte steuern, um den aktuellen Zustand des Schlosses visuell darzustellen.</p>
<p data-start="318" data-end="394">Auf die Positionierung der Schrauben gehe ich später noch genauer ein.</p>
<p><img decoding="async" class="aligncenter wp-image-1669 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/1-2.jpg" alt="" width="2320" height="1324" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/1-2.jpg 2331w, https://nerd-corner.com/wp-content/uploads/2024/12/1-2-300x171.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/1-2-1024x584.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/1-2-768x438.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/1-2-1536x876.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/1-2-2048x1169.jpg 2048w, https://nerd-corner.com/wp-content/uploads/2024/12/1-2-1400x800.jpg 1400w" sizes="(max-width: 2320px) 100vw, 2320px" /></p>
<p data-start="99" data-end="320">Nachdem die Komponenten nun feststehen, kann ich mir Gedanken über die Größe des Gehäuses machen. Diese wird nicht nur durch die verbauten Elemente bestimmt, sondern vor allem durch die Bedienbarkeit und Haptik.</p>
<p data-start="322" data-end="804">Tastenfelder begegnen uns täglich – an Bankautomaten, Telefonen, Türschlossanlagen und natürlich Smartphones. Die Entscheidung für die Tiefe des Gehäuses basiert auf einer positiven Erinnerung an meinen vorletzten Arbeitsplatz: Das dortige Tastenfeldschloss am Eingang war erhöht und von beiden Seiten gut zugänglich. Man konnte es bequem mit dem rechten oder linken Daumen bedienen, und die abgerundeten Ecken sorgten für eine angenehme Haptik beim Auflegen der Hand.</p>
<h2 data-start="806" data-end="829">Tastenfeldschloss Gehäusedesign</h2>
<p data-start="830" data-end="1165">Daraus ergibt sich eine Tiefe von 45 mm (2.0.3). Für eine bessere Ergonomie erhalten die Ecken einen Radius von 15 mm (R15) und die umlaufenden oberen Kanten einen Radius von 10 mm (R10). Mir ist bewusst, dass diese Verrundungen den Innenraum leicht verkleinern, aber der Komfort und die Optik überwiegen diesen Nachteil.</p>
<p data-start="1167" data-end="1511">Die Breite und Höhe des Gehäuses ergeben sich aus den einzubauenden Komponenten. Dabei muss auch der Platz für die Verkabelung berücksichtigt werden. Besonders wichtig: Der Nano sollte im eingebauten Zustand weiterhin mit einem handelsüblichen USB-Mini-Kabel erreichbar sein, um beispielsweise neue Programme aufspielen zu können.</p>
<h3 data-start="1513" data-end="1546">Montage und Befestigung</h3>
<ul data-start="1547" data-end="2275">
<li data-start="1547" data-end="1646">Vier M3-Gewinde (2.0.1) an der Innenseite ermöglichen das Anschrauben der Trägerplatte.</li>
<li data-start="1647" data-end="1787">Zusätzlich gibt es vier Montagepunkte mit Ø4,2 mm Bohrungen zur Befestigung des Gehäuses an einer Tür, einem Deckel oder einer Wand.</li>
<li data-start="1788" data-end="1941">Das Gehäuse erhält ein Fenster (2.0.2) mit 60 × 67 mm, das für das Tastenfeld vorgesehen ist. Dieses wird später mit der Trägerplatte ausgefüllt.</li>
<li data-start="1942" data-end="2080">Haltesäulen mit M2-Gewinde sowie die Öffnung für die Hohlbuchse (1.0.4) sind mit orangen Ellipsen markiert (2.0.1, 2.0.3).</li>
<li data-start="2081" data-end="2165">Das nächste Bild (2.0.4) zeigt die Außenmaße: 110 mm Breite und 117 mm Höhe.</li>
<li data-start="2166" data-end="2275">Außerdem ist ein Durchbruch bzw. Schlitz von 50 mm Länge für die LED-Blende (2.0.5) erforderlich.</li>
</ul>
<p data-start="2277" data-end="2405">Für die Wandstärke des Gehäuses habe ich durchgehend 2 mm vorgesehen – stabil genug für den vorgesehenen Einsatzzweck.</p>
<p data-start="2407" data-end="2508">Mit der abgeschlossenen Gehäusekonstruktion können wir nun mit den weiteren Komponenten fortfahren.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1668 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/2-0-1.jpg" alt="Tastenfeldschloss Gehäuse" width="2310" height="1330" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/2-0-1.jpg 2316w, https://nerd-corner.com/wp-content/uploads/2024/12/2-0-1-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/2-0-1-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/2-0-1-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/2-0-1-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/2-0-1-2048x1179.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<h3 data-start="91" data-end="147">Die Trägerplatte – das zentrale Montageelement</h3>
<p data-start="149" data-end="389">Die nächste wichtige Komponente ist die Trägerplatte. Der Name erklärt sich von selbst: Bis auf die Hohlbuchse werden hier alle Bauteile befestigt. Dieses System bietet mehrere Vorteile gegenüber einer direkten Montage im Gehäuse:</p>
<p data-start="391" data-end="771"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Einfache Montage außerhalb des Gehäuses – Mehr Platz und bessere Handhabung bei der Verkabelung.<br data-start="493" data-end="496" /><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Modularität – Verschiedene Trägerplatten mit unterschiedlichen Komponenten sind möglich.<br data-start="590" data-end="593" /><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Schlichtes Gehäusedesign – Die Gehäusekonstruktion bleibt einfacher und flexibler.<br data-start="681" data-end="684" /><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Leichter Austausch – Komponenten lassen sich einfacher ersetzen oder erweitern.</p>
<p data-start="773" data-end="870">Doch speziell für das Tastenfeldschloss gibt es noch einen weiteren entscheidenden Vorteil:</p>
<p data-start="872" data-end="1185">Das Tastenfeld wird direkt in eine vorgesehene Vertiefung der Trägerplatte (2.1.1) geklebt. Anschließend wird die Trägerplatte samt Tastenfeld von hinten in das Gehäuse eingesetzt und mit M3-Schrauben fixiert. Dabei verdeckt der Rahmen des Fensters im Gehäuse den Rand und die Kabel vollständig.</p>
<p data-start="1187" data-end="1485"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Sicherheitsaspekt: Das Fenster ist so dimensioniert, dass zwar der Rand und die Kabel verborgen bleiben, aber die Tasten vollständig sichtbar und bedienbar sind. Dadurch lässt sich das Tastenfeld nicht zerstörungsfrei entfernen – ein wichtiger Schutzmechanismus gegen Manipulation.</p>
<h3 data-start="1487" data-end="1545">Befestigung der Komponenten auf der Trägerplatte</h3>
<p data-start="1547" data-end="1663">Auf der Rückseite (2.1.2) der Trägerplatte befinden sich diverse Befestigungsmöglichkeiten für die Elektronik:</p>
<p data-start="1665" data-end="2043"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> M3-Gewinde für den Nano-Adapter (2.1.3) – Da Nano-Adapter im Internet oft unterschiedliche Lochabstände haben, gibt es auf der rechten Seite (2.1.2) ein zusätzliches Befestigungsgewinde zur flexiblen Anpassung. Falls die Bohrungen dennoch nicht exakt passen, lassen sie sich vorsichtig aufweiten – allerdings ohne dabei Leiterbahnen des Adapters zu beschädigen.</p>
<p data-start="2045" data-end="2177"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f534.png" alt="🔴" class="wp-smiley" style="height: 1em; max-height: 1em;" /> M2-Gewinde für den Nano R3 ATMEGA168P (2.1.4) – Eine alternative, kostengünstige Lösung anstelle eines Nano R3 mit Adapter.</p>
<p data-start="2179" data-end="2366"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /> M2-Gewinde für die Lochrasterplatte (20×80 mm, 1.1.2, 2.1.5) – Diese dient zur Energieverteilung und verbindet alle Stromversorgungsleitungen sauber an einem zentralen Punkt.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1667 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/2-1-1.jpg" alt="" width="2310" height="1329" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/2-1-1.jpg 2317w, https://nerd-corner.com/wp-content/uploads/2024/12/2-1-1-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/2-1-1-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/2-1-1-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/2-1-1-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/2-1-1-2048x1178.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<h3 data-start="95" data-end="140">Die LED-Blende und ihre Befestigung</h3>
<p data-start="142" data-end="442">Die LED-Blende (2.2.1) wurde so konstruiert, dass sie von der Rückseite in den Schlitz (2.0.5) des Gehäuses eingeklickt wird. Der Radius an der Außenseite der LED-Blende entspricht dem Gehäuseradius, wodurch ein weicher Übergang entsteht und sich die Blende optisch nahtlos einfügt.</p>
<p data-start="444" data-end="602">Die Montagebrücke (Vorderseite 2.2.2, Rückseite 2.2.3) muss ich nicht neu entwerfen, da ich sie bereits in anderen Projekten erfolgreich verwendet habe.</p>
<h3 data-start="604" data-end="638">Die Befestigung der LEDs</h3>
<p data-start="640" data-end="814">Nun bleibt noch die Montage der drei WS2812b-LEDs (1.2.1). Warum genau drei LEDs benötigt werden, werde ich später im Programmierteil dieses Artikels erläutern.</p>
<p data-start="816" data-end="1039">Die Entwicklung des LED-Halters (SMD50, 2.2.4) war aufwendiger als erwartet. Natürlich könnte man die LED-Streifen einfach kleben, klemmen oder mit Heißkleber befestigen – doch das erschien mir zu unprofessionell.</p>
<p data-start="1041" data-end="1179">Daher habe ich viel Zeit und Mühe investiert, um eine perfekte Halterung zu entwerfen. Das Resultat ist auf Bild 2.2.5 zu sehen.</p>
<p data-start="1181" data-end="1300"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Weiterführende Informationen:<br data-start="1217" data-end="1220" /><a href="https://nerd-corner.com/de/klick-und-klemmsystem-smd5050-klammer-2/">Für Details zur Konstruktion gibt es einen eigenen Artikel auf NerdCorner.</a></p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1666 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/2-2-1.jpg" alt="" width="2310" height="1330" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/2-2-1.jpg 2316w, https://nerd-corner.com/wp-content/uploads/2024/12/2-2-1-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/2-2-1-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/2-2-1-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/2-2-1-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/2-2-1-2048x1179.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<h2 data-start="91" data-end="122">3D-Druck der Bauteile</h2>
<p data-start="124" data-end="211">Nachdem die Konstruktion abgeschlossen ist, müssen die Teile nun gedruckt werden.</p>
<p data-start="213" data-end="265"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Materialwahl für die einzelnen Komponenten:</p>
<ul data-start="267" data-end="719">
<li data-start="267" data-end="359">Gehäuse (3.0.1): gedruckt mit ABS-Filament, bestehend aus Vorder- und Rückseite.</li>
<li data-start="360" data-end="421">Trägerplatte (3.0.2): gefertigt aus PLA-Filament.</li>
<li data-start="422" data-end="525">LED-Blende (3.0.3): stehend im Drucker hergestellt, gedruckt mit PLA+ in der Farbe „Natur“.</li>
<li data-start="526" data-end="628">LED-Klemmen (3.0.4): ebenfalls aus PLA+, gefertigt im selben Verfahren wie die LED-Blende.</li>
<li data-start="629" data-end="719">Brücke für die Hohlbuchse: gedruckt aus PLA-Filament, analog zur Trägerplatte.</li>
</ul>
<p data-start="721" data-end="868">Mit diesen Materialien sind die mechanischen und thermischen Eigenschaften der Bauteile optimal auf ihre jeweiligen Einsatzzwecke abgestimmt.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1665 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/3-0-1.jpg" alt="" width="2310" height="1329" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/3-0-1.jpg 2317w, https://nerd-corner.com/wp-content/uploads/2024/12/3-0-1-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/3-0-1-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/3-0-1-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/3-0-1-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/3-0-1-2048x1178.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<h2 data-start="80" data-end="118">Nachbearbeitung der Bauteile</h2>
<p data-start="120" data-end="224">Nach dem Druck müssen sowohl die gedruckten Teile als auch einige Kaufteile bearbeitet werden.</p>
<h4 data-start="226" data-end="266">1&#x20e3; Säubern der 3D-Druckteile</h4>
<ul data-start="267" data-end="342">
<li data-start="267" data-end="342">Entfernen von Stützmaterial und überstehenden Druckrückständen.</li>
</ul>
<h4 data-start="344" data-end="376">2&#x20e3; Gewinde schneiden</h4>
<ul data-start="377" data-end="820">
<li data-start="377" data-end="563">Gehäuse (4.0.1):
<ul data-start="404" data-end="563">
<li data-start="404" data-end="528">Vier M3-Gewinde (Achtung: Sacklöcher! Beim Schneiden vorsichtig vorgehen, um den Boden nicht nach außen zu drücken).</li>
<li data-start="531" data-end="563">Zwei M2-Gewinde (4.0.2).</li>
</ul>
</li>
<li data-start="564" data-end="820">Trägerplatte (4.0.3):
<ul data-start="596" data-end="820">
<li data-start="596" data-end="676">Die blau markierten M2-Gewinde müssen auf jeden Fall geschnitten werden.</li>
<li data-start="679" data-end="820">Bei Verwendung eines Nano-Adapters mit Schraubklemmen (2.1.4) müssen zusätzlich die rot markierten M2-Gewinde geschnitten werden.</li>
</ul>
</li>
</ul>
<h4 data-start="822" data-end="860">3&#x20e3; Lochrasterplatte kürzen</h4>
<ul data-start="861" data-end="1029">
<li data-start="861" data-end="954">Die Lochrasterplatte (4.0.4) muss auf 8 bis maximal 10 Lochraster gekürzt werden.</li>
<li data-start="955" data-end="1029">Wichtig: Die Montagelöcher sollten erhalten bleiben (siehe 4.0.5).</li>
</ul>
<h4 data-start="1031" data-end="1064">4&#x20e3; Stiftleiste kürzen</h4>
<ul data-start="1065" data-end="1152">
<li data-start="1065" data-end="1152">Die Stiftleiste mit einem Seitenschneider auf acht Pins kürzen (4.0.6).</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1664 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/4-0-2.jpg" alt="" width="2310" height="1394" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/4-0-2.jpg 2316w, https://nerd-corner.com/wp-content/uploads/2024/12/4-0-2-300x181.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/4-0-2-1024x618.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/4-0-2-768x464.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/4-0-2-1536x927.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/4-0-2-2048x1236.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<h3 data-start="89" data-end="115">Löten der Bauteile</h3>
<p data-start="117" data-end="221">Nun geht es ans Löten der Teile. Zuerst konzentrieren wir uns auf die Energieversorgungsplatine:</p>
<h4 data-start="223" data-end="273">1&#x20e3; Löten der Energieversorgungsplatine</h4>
<ul data-start="274" data-end="730">
<li data-start="274" data-end="375">Lochrasterplatte (4.0.5): Lötung der Sockelleiste (1.1.1) und der Pin-Leiste (4.0.6).</li>
<li data-start="376" data-end="730">Pin-Leiste (4.1.2): Eine zweireihige Pin- und Sockelleiste wird aufgelötet. Auf der Rückseite verbinden wir die beiden Reihen jeweils mit Lötzinn.
<ul data-start="541" data-end="730">
<li data-start="541" data-end="730">Die Reihen unterscheiden sich in Männchen und Weibchen sowie in den Farben: Rot für Plus und Schwarz für Minus. Dies erleichtert den Anschluss der Energieversorgung.</li>
</ul>
</li>
</ul>
<h4 data-start="732" data-end="773">2&#x20e3; Verlötung der WS2812B LEDs</h4>
<ul data-start="774" data-end="844">
<li data-start="774" data-end="844">Verlöten der Anschlüsse des WS2812B LED-Streifens (4.1.3).</li>
</ul>
<h4 data-start="846" data-end="884">3&#x20e3; Verlöten der Hohlbuchse</h4>
<ul data-start="885" data-end="1126">
<li data-start="885" data-end="952">Zum Abschluss wird die Hohlbuchse (1.0.4) verlötet (4.1.4).</li>
<li data-start="953" data-end="1126">Eine detaillierte Anleitung <a href="https://nerd-corner.com/de/hohlbuchse-als-schalter-verwenden/">zum Verlöten der Hohlbuchse</a> findest du in einem separaten Artikel. Es ist wichtig, die genaue Vorgehensweise zu kennen, um Fehler zu vermeiden.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1663 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/4-1-2.jpg" alt="" width="2310" height="1329" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/4-1-2.jpg 2317w, https://nerd-corner.com/wp-content/uploads/2024/12/4-1-2-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/4-1-2-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/4-1-2-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/4-1-2-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/4-1-2-2048x1178.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<h2 data-start="75" data-end="118">Zusammenbau des Tastenfeldschlosses</h2>
<h4 data-start="120" data-end="152">1&#x20e3; LED-Blende einbauen</h4>
<ul data-start="153" data-end="332">
<li data-start="153" data-end="217">Zuerst klicke die LED-Blende (2.2.1) in das Gehäuse ein.</li>
<li data-start="218" data-end="332">Verklebe die LED-Blende an den vorgesehenen Stellen, wie auf den Bildern 5.0.1 und 5.0.2 abgebildet.</li>
</ul>
<h4 data-start="334" data-end="365">2&#x20e3; Nano R3 einstecken</h4>
<ul data-start="366" data-end="447">
<li data-start="366" data-end="447">Stecke den Nano R3 (1.0.2) in den Nano-Adapter (5.0.3) deiner Wahl ein.</li>
</ul>
<h4 data-start="449" data-end="484">3&#x20e3; Nano-Adapter montieren</h4>
<ul data-start="485" data-end="759">
<li data-start="485" data-end="617">Schraube den Nano-Adapter (1.0.3) mit dem eingesteckten Nano R3 (1.0.2) auf der Trägerplatte-Rückseite (4.0.3) fest.</li>
<li data-start="618" data-end="759">Verwende dafür die M3-Gewinde auf der Trägerplatte und die Schrauben (1.2.2), wie auf den Bildern 5.0.4 und 5.0.5 zu sehen.</li>
</ul>
<h4 data-start="761" data-end="801">4&#x20e3; Energieversorgung anbringen</h4>
<ul data-start="802" data-end="955">
<li data-start="802" data-end="922">Befestige die Energieversorgung (4.1.2) mit den Schrauben (1.2.4) an der Trägerplatte-Rückseite (4.0.3).</li>
<li data-start="923" data-end="955">Siehe dazu das Bild 5.0.6.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1662 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/5-0-1.jpg" alt="" width="2310" height="1330" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/5-0-1.jpg 2316w, https://nerd-corner.com/wp-content/uploads/2024/12/5-0-1-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/5-0-1-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/5-0-1-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/5-0-1-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/5-0-1-2048x1179.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<h3 data-start="75" data-end="127">Montage des Tastenfelds auf der Trägerplatte</h3>
<h4 data-start="129" data-end="165">1&#x20e3; Wahl der Schraubenlänge</h4>
<ul data-start="166" data-end="437">
<li data-start="166" data-end="258">Achte darauf, wie auf Bild 5.1.1 dargestellt, die richtige Schraubenlänge zu wählen.</li>
<li data-start="259" data-end="437">Schrauben dürfen nicht zu lang sein, da sie sonst beim Anbringen des Tastenfelds aus der Klebefläche herausragen und das Tastenfeld nicht sauber aufgeklebt werden kann.</li>
</ul>
<h4 data-start="439" data-end="474">2&#x20e3; Tastenfeld vorbereiten</h4>
<ul data-start="475" data-end="780">
<li data-start="475" data-end="532">Entferne die Schutzfolie des Tastenfelds (1.0.1).</li>
<li data-start="533" data-end="689">Um die Folie zu entfernen, benutze ein Teppichmesser, um vorsichtig an einer Ecke zwischen Klebeschicht und Schutzfolie zu kommen (siehe 5.1.2).</li>
<li data-start="690" data-end="780">Nachdem du die Ecke erreicht hast, ziehe die ganze Schutzfolie ab (siehe 5.1.3).</li>
</ul>
<h4 data-start="782" data-end="815">3&#x20e3; Tastenfeld aufkleben</h4>
<ul data-start="816" data-end="1144">
<li data-start="816" data-end="942">Setze das Tastenfeld (1.0.1) in die Vertiefung auf der Trägerplatte-Vorderseite (2.1.1) ein und drücke es fest an.</li>
<li data-start="943" data-end="1060">Das Tastenfeld muss komplett versenkt werden und darf nicht über den Rand hinausstehen (siehe 5.1.4).</li>
<li data-start="1061" data-end="1144">Achte darauf, dass auch die Kabel in der Vertiefung liegen (siehe 5.1.5).</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1661 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/5-1-1.jpg" alt="" width="2340" height="1327" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/5-1-1.jpg 2350w, https://nerd-corner.com/wp-content/uploads/2024/12/5-1-1-300x170.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/5-1-1-1024x581.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/5-1-1-768x436.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/5-1-1-1536x871.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/5-1-1-2048x1162.jpg 2048w" sizes="auto, (max-width: 2340px) 100vw, 2340px" /></p>
<h3 data-start="64" data-end="123">Verkabelung des Tastenfelds mit dem Arduino Nano R3</h3>
<h4 data-start="125" data-end="160">1&#x20e3; Jumper-Kabel verwenden</h4>
<ul data-start="161" data-end="309">
<li data-start="161" data-end="309">Jumper-Kabel (10 cm lang, Männchen-Männchen) werden verwendet, um das Tastenfeld mit dem Arduino Nano R3 zu verbinden (siehe 5.2.1).</li>
</ul>
<h4 data-start="311" data-end="343">2&#x20e3; Anschluss der Kabel</h4>
<ul data-start="344" data-end="622">
<li data-start="344" data-end="420">Achte darauf, dass du die Kabel nicht verdrehst, sondern nur biegst.</li>
<li data-start="421" data-end="522">Das linke Kabel wird an D2 des Arduino angeschlossen, und das rechte Kabel an D8.</li>
<li data-start="523" data-end="622">Insgesamt sind es sieben Kabel, die die Anschlüsse D2 bis D8 belegen (siehe 5.2.3).</li>
</ul>
<h4 data-start="624" data-end="658">3&#x20e3; Pin-Leisten verwenden</h4>
<ul data-start="659" data-end="815">
<li data-start="659" data-end="815">Da das Rastermaß des Arduino-Adapters und des Tastenfelds nicht übereinstimmen, kannst du Pin-Leisten verwenden, um die Verbindung herzustellen.</li>
</ul>
<h4 data-start="817" data-end="857">4&#x20e3; Befestigung der LED-Klemmen</h4>
<ul data-start="858" data-end="1023">
<li data-start="858" data-end="944">Die Klammern (3.0.4) für die WS2812B LEDs werden an den LEDs festgeklickt.</li>
<li data-start="945" data-end="1023">Am besten machst du das auf einer ebenen Oberfläche (siehe 5.2.4).</li>
</ul>
<h4 data-start="1025" data-end="1065">5&#x20e3; Anbringen des LED-Streifens</h4>
<ul data-start="1066" data-end="1214">
<li data-start="1066" data-end="1214">Der WS2812B Streifen wird nun mittig an der Oberseite der Trägerplatte aufgeschoben (siehe 5.2.5 Vorderseite und 5.2.6 Rückseite).</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1660 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/5-2.jpg" alt="" width="2310" height="1330" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/5-2.jpg 2316w, https://nerd-corner.com/wp-content/uploads/2024/12/5-2-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/5-2-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/5-2-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/5-2-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/5-2-2048x1179.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<h3 data-start="86" data-end="134">Zusammenbau der Trägerplatte und Gehäuse</h3>
<h4 data-start="136" data-end="202">1&#x20e3; Verschrauben der Trägerplatte mit dem Gehäuse (5.3.1)</h4>
<ul data-start="203" data-end="660">
<li data-start="203" data-end="382">Achte darauf, dass du M3 Schrauben verwendest, die nicht zu lang sind. Andernfalls könnten sie beim Anziehen eine Erhöhung in die Vorderseite des Gehäuses drücken.</li>
<li data-start="383" data-end="525">Die Ausrichtung der Trägerplatte im Gehäuse ist wichtig: Der LED-Streifen sollte auf der gleichen Seite wie die LED-Blende sein.</li>
<li data-start="526" data-end="660">Nach dem Verschrauben sollte das Tastenfeld leicht an den inneren Rahmen des Gehäuses gepresst sein (siehe 5.3.2 und 5.3.3).</li>
</ul>
<h4 data-start="662" data-end="727">2&#x20e3; Vormontage der Hohlbuchse für die Notstromversorgung</h4>
<ul data-start="728" data-end="1069">
<li data-start="728" data-end="833">Für die Notstromversorgung musst du die Hohlbuchse vormontieren und an das Gehäuse schrauben.</li>
<li data-start="834" data-end="1069">Die Hohlbuchse mit Brücke und Mutter wird in Bild 5.3.4 dargestellt.
<ul data-start="917" data-end="1069">
<li data-start="917" data-end="984">Stecke die Hohlbuchse in die runde Vertiefung der Brücke.</li>
<li data-start="989" data-end="1066">Kontere die Hohlbuchse mit der Mutter auf der anderen Seite der Brücke.</li>
</ul>
</li>
</ul>
<h4 data-start="1070" data-end="1120">3&#x20e3; Befestigung der Hohlbuchse im Gehäuse</h4>
<ul data-start="1121" data-end="1275">
<li data-start="1121" data-end="1275">Die Hohlbuchse mit der Brücke wird dann an die im Gehäuse vorgesehenen Haltesäulen mit M2 Schrauben verschraubt (siehe 5.3.5 und 5.3.6).</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1659 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/5-3.jpg" alt="" width="2310" height="1329" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/5-3.jpg 2317w, https://nerd-corner.com/wp-content/uploads/2024/12/5-3-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/5-3-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/5-3-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/5-3-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/5-3-2048x1178.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<h3 data-start="106" data-end="172">Anschluss der Kabel und Fertigstellung der Stromversorgung</h3>
<h4 data-start="174" data-end="232">1&#x20e3; Anschluss des Steuerkabels für den Servomotor</h4>
<ul data-start="233" data-end="335">
<li data-start="233" data-end="335">Das Steuerkabel für den Servomotor wird an Pin D9 des Nano R3 angeschlossen (5.4.1).</li>
</ul>
<h4 data-start="337" data-end="395">2&#x20e3; Anschluss der Stromversorgung für den Nano R3</h4>
<ul data-start="396" data-end="520">
<li data-start="396" data-end="520">Die Stromversorgung des Nano R3 wird an den GND-Pin und den VIN-Pin des Nano R3 angeschlossen (5.4.2).</li>
</ul>
<h4 data-start="522" data-end="577">3&#x20e3; Anschluss des Steuerkabels für den WS2812B</h4>
<ul data-start="578" data-end="691">
<li data-start="578" data-end="691">Das Steuerkabel für den WS2812B LED-Streifen wird an Pin D10 des Nano R3 angeschlossen (5.4.3).</li>
</ul>
<h4 data-start="693" data-end="737">4&#x20e3; Verkabelung des Stromverteilers</h4>
<ul data-start="738" data-end="1010">
<li data-start="738" data-end="1010">Alle restlichen Kabel müssen an den Stromverteiler angeschlossen werden:
<ul data-start="821" data-end="1010">
<li data-start="821" data-end="847">Servomotor-Anschluss</li>
<li data-start="852" data-end="873">Arduino Nano R3</li>
<li data-start="878" data-end="904">WS2812B LED-Streifen</li>
<li data-start="909" data-end="1010">Hohlbuchse Alle Verbindungen erfolgen mit Plus und Minus (siehe 5.4.4 und 5.4.5).</li>
</ul>
</li>
</ul>
<h4 data-start="1012" data-end="1103">5&#x20e3; Verwendung von unterschiedlichen Farben und Anschlussarten für die Verkabelung</h4>
<ul data-start="1104" data-end="1349">
<li data-start="1104" data-end="1222">Es hilft, unterschiedliche Kabel-Farben zu verwenden:
<ul data-start="1168" data-end="1222">
<li data-start="1168" data-end="1190">Rot für Plus</li>
<li data-start="1195" data-end="1222">Schwarz für Minus</li>
</ul>
</li>
<li data-start="1223" data-end="1349">Der Stromverteiler hat unterschiedliche Anschlussarten:
<ul data-start="1289" data-end="1349">
<li data-start="1289" data-end="1316">Männlich für Plus</li>
<li data-start="1321" data-end="1349">Weiblich für Minus</li>
</ul>
</li>
</ul>
<h4 data-start="1351" data-end="1386">6&#x20e3; Hinweis zur Hohlbuchse</h4>
<ul data-start="1387" data-end="1512">
<li data-start="1387" data-end="1512"><a href="https://nerd-corner.com/de/hohlbuchse-als-schalter-verwenden/">Zur Verkabelung und Anschluss der Hohlbuchse gibt es einen eigenen Artikel, den du unbedingt lesen solltest</a></li>
</ul>
<h4 data-start="1514" data-end="1601">7&#x20e3; Anbringen der Stecker-Gehäuse für den Servomotor und die Energieversorgung</h4>
<ul data-start="1602" data-end="1885">
<li data-start="1602" data-end="1680">Für den Servomotor-Anschluss wird ein drei-poliger Stecker benötigt.</li>
<li data-start="1681" data-end="1885">Für die externe Energieversorgung wird ein zwei-poliger Stecker benötigt.
<ul data-start="1767" data-end="1885">
<li data-start="1767" data-end="1885">Weitere Details zum Konstruktionsprozess und den Download-Links für <a href="https://nerd-corner.com/de/3d-gedruckte-dupont-steckverbindung-fuer-jumper-kabel/">Stecker-Gehäuse</a> findest du hier.</li>
</ul>
</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1658 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/5-4.jpg" alt="" width="2310" height="1330" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/5-4.jpg 2316w, https://nerd-corner.com/wp-content/uploads/2024/12/5-4-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/5-4-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/5-4-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/5-4-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/5-4-2048x1179.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<p>Im Bild 5.5.1 ist nochmal die ganze Verkabelung dargestellt.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1657 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/5-5.jpg" alt="fritzing keypad lock" width="2310" height="1330" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/5-5.jpg 2316w, https://nerd-corner.com/wp-content/uploads/2024/12/5-5-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/5-5-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/5-5-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/5-5-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/5-5-2048x1179.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<h2>Arduino Code</h2>
<p>Nach der intensiven Arbeit mit der Hardware und dem 3D-Drucker widmen wir uns nun der Strategie und der Programmierung des Tastenfeldschlosses. Warum ist eine Strategie für ein Tastenfeldschloss wichtig? Eine durchdachte Handlungsabfolge – also die Reihenfolge, in der das Tastenfeldschloss bedient wird, welche Ereignisse sich aus bestimmten Aktionen ergeben und welches Ziel verfolgt wird – bildet die Grundlage für eine funktionale Steuerung. Dieser Leitfaden ist daher auch entscheidend für die Programmierung des Tastenfeldschlosses: Er legt fest, was wann passieren soll und welche Hardware dabei zum Einsatz kommt. Ziel ist es, eine logische und nachvollziehbare Abfolge von Ereignissen zu schaffen, die in diesem Fall auch optisch nachzuvollziehen ist.</p>
<p>Beispiel 1:<br />
Das Tastenfeldschloss soll anzeigen, wie viele Stellen bereits eingegeben wurden. (Siehe Bilder 7.0.1 bis 7.0.4)</p>
<p>Beispiel 2:<br />
Das Tastenfeldschloss soll nach Betätigung einer bestimmten Taste mitteilen, ob das eingegebene Kennwort korrekt ist. (Siehe Bild 7.0.5)</p>
<p>Beispiel 3:<br />
Das Tastenfeldschloss soll anzeigen, wenn etwas falsch eingegeben wurde, wie etwa ein falsches Kennwort oder zu viele Tastenanschläge. (Siehe Bild 7.0.8)</p>
<p>Beispiel 4:<br />
Das Tastenfeldschloss soll den aktuellen Zustand anzeigen. (Siehe Bilder 7.0.5 bis 7.0.7)</p>
<p>Kommen wir nun zur Programmierung des Tastenfeldschlosses, die sich in einigen Punkten von herkömmlichen Programmen im Internet unterscheidet. Zu Beginn werden die drei notwendigen Bibliotheken eingebunden: &lt;Keypad.h&gt; für das Tastenfeld, &lt;Adafruit_NeoPixel.h&gt; für die WS2812B LEDs und &lt;Servo.h&gt; für den Servomotor (Bild 6.0.1). Im folgenden Abschnitt wird die Pin-Belegung für die LEDs festgelegt, wobei Pin D10 verwendet wird und die Anzahl der LEDs sowie das Farbschema bestimmt werden. Ebenso wird die Helligkeit der LEDs festgelegt – dieser Wert kann je nach Standort angepasst werden, wobei höhere Werte für mehr Helligkeit sorgen (Werte von 0 bis 255). (Siehe Bild 6.0.2) Der dritte Abschnitt widmet sich der Beschreibung des verwendeten Tastenfelds, einschließlich der Anzahl der Reihen und Spalten sowie der Belegung der Tasten. (Siehe Bild 6.0.3)</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1656 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/6-0-1.jpg" alt="" width="2310" height="1330" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/6-0-1.jpg 2316w, https://nerd-corner.com/wp-content/uploads/2024/12/6-0-1-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/6-0-1-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/6-0-1-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/6-0-1-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/6-0-1-2048x1179.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<p>Im vierten Abschnitt wird der Servomotor konfiguriert, indem der Gradbereich festgelegt wird, den er zurücklegen kann, sowie die Geschwindigkeit, mit der er sich bewegen soll (siehe Bild 6.1.1). Anschließend folgt der Abschnitt zur Kennworteingabe. Hier habt ihr die Möglichkeit, das Standardkennwort 1516 zu ändern, um ein neues vierstelliges Kennwort festzulegen. Das Programm funktioniert nur korrekt, wenn ein vierstelliger Code eingegeben wird. In diesem Abschnitt wird außerdem der Steuer-Pin für den Servomotor auf D9 gesetzt (siehe Bild 6.1.2). Der darauf folgende Abschnitt widmet sich der Festlegung der Farben für die verschiedenen Ereignisse.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1655 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/6-1-1.jpg" alt="" width="2310" height="1330" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/6-1-1.jpg 2316w, https://nerd-corner.com/wp-content/uploads/2024/12/6-1-1-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/6-1-1-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/6-1-1-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/6-1-1-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/6-1-1-2048x1179.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<p>In den letzten beiden Abschnitten wird das Verhalten des Tastenfeldschlosses bei bestimmten Handlungen erläutert. Diese Beschreibung stellt natürlich nur einen groben Überblick über das Programm dar. In einem zukünftigen Artikel für Tastenfeldschloss Version 2 werden wir dann das Programm detaillierter und umfassender erklären.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="c">//==========================================Librarys==============================================================
#include &lt;Keypad.h&gt;
#include &lt;Adafruit_NeoPixel.h&gt;
#include &lt;Servo.h&gt;
//========================================Neo-Pixel==============================================================
#define LED_PIN 10
#define LED_COUNT 3
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
int led_strength = 75; //controlls Brighttness (0 - 255)
//========================================Keypad=================================================================
const byte rows = 4;
const byte cols = 3;
char keys[rows][cols] = {
 {'1', '2', '3'},
 {'4', '5', '6'},
 {'7', '8', '9'},
 {'*', '0', '#'}
};
byte rowPins[rows] = {8, 7, 6, 5};
byte colPins[cols] = {4, 3, 2};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, rows, cols );
//=========================================Servo============================================================
Servo lock;
int pos = 0;
int servo_angle = 180;
int servo_speed = 15;
//======================================Password===============================================================
String input;
const String password = "1516"; //Set Password
int n = 1;

 

void setup() {
 input.reserve(password.length() +2);
 strip.begin();
 strip.show();
 lock.attach(9); //motor pin
}

void loop() {
//-------------------colours------------------------------------------------------------------- 
 uint32_t blue = strip.Color(0, 0, led_strength);
 uint32_t green = strip.Color(0, led_strength, 0);
 uint32_t red = strip.Color(led_strength, 0, 0);
 uint32_t orange = strip.Color(led_strength, led_strength/2, 0);

 char key = keypad.getKey();

if (key != NO_KEY) {
//-------------------------End conditions------------------------------------------------------
 if (key == '#') {
 if (input == password) {
 //unlock
 strip.clear();
 strip.fill(green, 0, LED_COUNT);
 strip.show();
 for (pos = 0; pos &lt;= servo_angle; pos += 1) {
 lock.write(pos);
 delay(servo_speed );
 }
 while (1 == 1)
 { char key = keypad.getKey();
 strip.clear();
 strip.fill(orange, 0, LED_COUNT);
 strip.show();
 if (key == '*')
 {
 strip.clear();
 strip.fill(green, 0, LED_COUNT);
 strip.show();
 break;
 }
 }

 for (pos = servo_angle; pos &gt;= 0; pos -= 1) {
 lock.write(pos);
 delay(servo_speed );
 }
 n = 1;
 input = "";
 delay (1000);
 strip.clear();
 strip.show();
 } else {
 //wrong password
 strip.clear();
 strip.fill(red, 0, LED_COUNT);
 strip.show();
 n = 1;
 input = "";
 delay (1000);
 strip.clear();
 strip.show();
 }
 }
 else if (n == password.length() + 1) {
 //Input too long
 strip.clear();
 strip.fill(red, 0, LED_COUNT);
 strip.show();
 n = 1;
 input = "";
 delay (1000);
 strip.clear();
 strip.show();
 }
//----------------------------------Buttons------------------------------------------
 else {
 input += key;
 if (n == password.length() ) {
 strip.clear();
 strip.fill(blue, 0, LED_COUNT); 
 strip.show();
 n++;
 }
 else {

 strip.clear();
 strip.setPixelColor(n-1, blue);
 strip.show();
 n++;
 }
 }
 }

}</pre>
<h2 data-start="14" data-end="438">Funktion</h2>
<p data-start="14" data-end="438">Die Bedienung des Tastenfeldschlosses ist sehr intuitiv. Sobald die erste Taste gedrückt wird, leuchtet die rechte LED blau (7.0.1). Beim zweiten Tastendruck wird die mittlere LED blau (7.0.2). Nach der dritten Taste strahlt die linke LED in Blau (7.0.3). Mit der vierten Taste leuchten schließlich alle drei LEDs blau (7.0.4). Wenn diese drei LEDs in Blau leuchten, weiß der Benutzer, dass die #-Taste gedrückt werden muss.</p>
<p data-start="440" data-end="897">Wird die #-Taste betätigt, erfolgt die Überprüfung des Passworts. Ist das Passwort korrekt, leuchten alle drei LEDs gleichzeitig grün, und der Servomotor wird aktiviert (7.0.5). Das grüne Licht bleibt so lange an, wie der Servomotor seine Endlage (offen) noch nicht erreicht hat. Sobald der Servomotor die Endlage (offen) erreicht, wechseln die LEDs von Grün zu Orange (7.0.6). Die orange Farbe bleibt so lange erhalten, bis der Benutzer die *-Taste drückt.</p>
<p data-start="899" data-end="1152">Nach dem Drücken der *-Taste wechseln die LEDs wieder auf Grün (7.0.7) und bleiben in dieser Farbe, bis der Servomotor die Endlage (geschlossen) erreicht hat. Ist dies der Fall, erlöschen die LEDs, und das Tastenfeldschloss ist bereit für neue Eingaben.</p>
<p data-start="1154" data-end="1383" data-is-last-node="">Falls jedoch das Passwort nach dem Drücken der #-Taste in Schritt 7.0.4 falsch ist, leuchten alle drei LEDs rot (7.0.8). Ebenso wird das rote Licht angezeigt, wenn mehr als vier Tasten, abgesehen von der #-Taste, gedrückt werden.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1654 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/7-0-1.jpg" alt="keypad lock step by step guide" width="2310" height="1329" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/7-0-1.jpg 2317w, https://nerd-corner.com/wp-content/uploads/2024/12/7-0-1-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/7-0-1-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/7-0-1-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/7-0-1-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/7-0-1-2048x1178.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<h2>Türmontage</h2>
<p>Natürlich ist diese Variante nicht für den Einsatz an einer gewöhnlichen Tür gedacht, bei der man einfach hindurchgeht und die Tür sich von selbst wieder schließt. Der Grund dafür liegt im offenbleiben des Schlosses, bis die *-Taste gedrückt wird. Doch wie kann man die *-Taste drücken, wenn man sich auf der anderen Seite des Tastenfeldschlosses befindet, hinter der Wand? Eine Verzögerung im Programm könnte zwar helfen, aber wer weiß schon, wie lange man braucht, um die Tür zu passieren und hinter sich zu schließen? Eine viel sinnvollere Lösung wäre es, einen zusätzlichen Schalter zu implementieren, der auf der anderen Seite der Tür angebracht wird. Dieser Schalter würde, ohne eine Passworteingabe, bei Betätigung direkt zu Punkt 7.0.6 führen und das Schloss öffnen, sodass die Tür von innen geöffnet werden kann.</p>
<p>Doch das ist Zukunftsmusik. Nun kommen wir zur Montage des Tastenfeldschlosses an einer Tür. Hierfür habe ich auf der Rückseite des Gehäuses vier Bohrungen vorgesehen. Diese Bohrungen haben an der Innenseite eine Vertiefung für herkömmliche Sechskantmuttern M4 DIN 934. Die entsprechenden Bohrungen sind in Bild 8.0.1 (Rückansicht) und Bild 8.0.2 (Vorderansicht) zu sehen, wobei das Gehäuse zur besseren Anschauung etwas transparent dargestellt ist. Die Installation der Muttern ist denkbar einfach: Nachdem sichergestellt wurde, dass sämtliches Supportmaterial entfernt ist, wird die Mutter von hinten in die vorgesehene Vertiefung gedrückt. Es sollten keine Einpressmuttern verwendet werden, da diese unnötig teuer sind.</p>
<p>Für die Befestigung an der Wand oder Tür habe ich eine Bohrschablone entwickelt (Bild 8.0.3). Diese Schablone enthält an den vier Ecken jeweils eine Bohrung mit einem Durchmesser von 4 mm. Der Abstand der Bohrungen entspricht dem Abstand der Bohrungen am Gehäuse. Man kann die Schablone bequem an der Oberfläche der Tür fixieren, zum Beispiel mit Klebeband (Bild 8.0.4). So spart man sich das mühsame Anreißen der Bohrlöcher und vermeidet Fehler.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1653 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/8-0-1.jpg" alt="" width="2310" height="1330" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/8-0-1.jpg 2316w, https://nerd-corner.com/wp-content/uploads/2024/12/8-0-1-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/8-0-1-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/8-0-1-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/8-0-1-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/8-0-1-2048x1179.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<p>Auf Bild 8.1.1 sehen wir die gebohrten Montagelöcher von der Vorderseite, markiert durch magentafarbene Kreise. Dank der Bohrschablone haben diese Löcher den richtigen Abstand zueinander. Falls beim Bohren die Position leicht verrutscht oder nicht ganz exakt eingehalten wurde, stellt das kein Problem dar. In diesem Fall kann man die Montagelöcher einfach etwas größer bohren, um das Tastenfeldschloss beim Anschrauben präzise auszurichten. Zusätzlich sind auf diesem Bild in gelben Kreisen zwei Bohrungen zu sehen, die leider etwas am Rand ausgebrochen sind. Diese Bohrungen sind für das Kabel des Servos und die Energieversorgung vorgesehen. Nachdem die Bohrungen fertiggestellt waren, habe ich das Tastenfeldschloss angebracht und die Kabel zuvor durch die vorgesehenen Bohrungen auf der Rückseite der Tür (Bild 8.1.2) geführt.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1652 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/8-1.jpg" alt="" width="2310" height="1330" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/8-1.jpg 2316w, https://nerd-corner.com/wp-content/uploads/2024/12/8-1-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/8-1-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/8-1-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/8-1-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/8-1-2048x1179.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<p>Die gesamte Montagearbeit des Tastenfeldschlosses ist auf der Vorderseite der Tür in Bild 8.2.1 zu sehen. Wer mit dieser Montagelösung nicht zufrieden ist, kann ich beruhigen: Als letzten Schritt habe ich einen Rückendeckel entworfen, der es ermöglicht, das Tastenfeldschloss an einer Wand oder einem Rahmen zu befestigen (Bild 8.2.2). Dazu steckt man einfach das Gehäuse des Tastenfeldschlosses auf den Rückendeckel und verschraubt es von hinten mit M4 Senkkopfschrauben (markiert durch magentafarbene Kreise in Bild 8.2.2). Danach wird das ganze Konstrukt an der Wand befestigt, wofür zwei Laschen mit jeweils zwei Bohrungen zur Verfügung stehen (gelbe Kreise in Bild 8.2.2).</p>
<p>Nicht zu vergessen ist, dass man am Gehäuse zusätzlich eine oder mehrere Bohrungen für die Kabel des Servos und der Energieversorgung anbringen muss. Dabei sollte man auch das Sicherheitsrisiko bedenken, dass eine unbefugte Person das Tastenfeldschloss über die zugänglichen Schrauben abschrauben könnte.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1651 zoooom" src="https://nerd-corner.com/wp-content/uploads/2024/12/8-2.jpg" alt="" width="2310" height="1330" srcset="https://nerd-corner.com/wp-content/uploads/2024/12/8-2.jpg 2316w, https://nerd-corner.com/wp-content/uploads/2024/12/8-2-300x173.jpg 300w, https://nerd-corner.com/wp-content/uploads/2024/12/8-2-1024x589.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2024/12/8-2-768x442.jpg 768w, https://nerd-corner.com/wp-content/uploads/2024/12/8-2-1536x884.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2024/12/8-2-2048x1179.jpg 2048w" sizes="auto, (max-width: 2310px) 100vw, 2310px" /></p>
<h2>Schließmechanismus</h2>
<p>Wer jetzt noch einen echten Schließmechanismus vermisst, der nicht nur einen Servo-Anschluss nutzt, kann sich auf den „Schließer“ freuen, der sich bereits in der Entwicklung befindet und in den kommenden Versionen des Tastenfeldschlosses präsentiert wird.</p>
<p>Die Entwicklung des Tastenfeldschlosses war eine spannende, aber auch herausfordernde Aufgabe. Besonders hervorzuheben sind einige Eigenschaften der VERSION 1 des Tastenfeldschlosses:</p>
<ul>
<li>Verschiedene Arduino Nano-Modelle und Adapter können verwendet werden – Flexibilität bei der Hardwarewahl.</li>
<li>Optisches Feedback – Über die Zahleneingabe und den Status des Tastenfeldschlosses wird der Benutzer direkt informiert.</li>
<li>Notstromversorgung über Hohlbuchse – Garantiert zuverlässige Funktion im Falle von Stromausfällen.</li>
<li>Stabiles Programm – Die Software wurde so entwickelt, dass sie zuverlässig funktioniert.</li>
<li>Optimale Haptik für Links- und Rechtshänder – Das Tastenfeldschloss wurde ergonomisch gestaltet, um allen Nutzern gerecht zu werden.</li>
</ul>
<h2>Dateien zum Herunterladen</h2>
<ul>
<li><a href="https://www.thingiverse.com/thing:6840254">Tastenfeldschloss Gehäuse</a></li>
</ul>
<p>The post <a href="https://nerd-corner.com/de/diy-tastenfeldschloss-3d-druck-und-programmierung/">DIY Tastenfeldschloss &#8211; 3D Druck und Programmierung</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/diy-tastenfeldschloss-3d-druck-und-programmierung/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WeMos D1 R2 &#8211; Ganze Webseite mit html, css &#038; js hosten</title>
		<link>https://nerd-corner.com/de/wemos-d1-r2-ganze-webseite-mit-html-css-js-hosten/</link>
					<comments>https://nerd-corner.com/de/wemos-d1-r2-ganze-webseite-mit-html-css-js-hosten/#respond</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Sat, 02 Mar 2024 23:11:48 +0000</pubDate>
				<category><![CDATA[Arduino Projekte]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Software-DE]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Arduino mit WLAN]]></category>
		<category><![CDATA[C Programmierung]]></category>
		<category><![CDATA[Datenübertragung]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[ESP8266 mit mDNS]]></category>
		<category><![CDATA[ganze Webseite]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[Klemmsystem]]></category>
		<category><![CDATA[Kommunikationstechnik]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[Lokales Netzwerk]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Schritt für Schritt Anweisung]]></category>
		<category><![CDATA[Webseite hosten]]></category>
		<category><![CDATA[Webserver]]></category>
		<category><![CDATA[WeMos]]></category>
		<category><![CDATA[WeMos D1]]></category>
		<category><![CDATA[WeMos D1 in Arduino IDE]]></category>
		<category><![CDATA[WeMos D1 mini]]></category>
		<category><![CDATA[WeMos D1 R2]]></category>
		<category><![CDATA[WeMOS D1 Webserver]]></category>
		<category><![CDATA[WIFI]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=1526</guid>

					<description><![CDATA[<p>Im ersten Teil der WeMos Reihe wurde die Einrichtung und Wlan Integration erklärt. Darauf aufbauend wird in diesem Artikel Schritt für Schritt beschrieben wie man &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/wemos-d1-r2-ganze-webseite-mit-html-css-js-hosten/">WeMos D1 R2 &#8211; Ganze Webseite mit html, css &#038; js hosten</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Im <a href="https://nerd-corner.com/de/wemos-d1-r2-erste-schritte-und-wlan-integration/">ersten Teil</a> der WeMos Reihe wurde die Einrichtung und Wlan Integration erklärt. Darauf aufbauend wird in diesem Artikel Schritt für Schritt beschrieben wie man eine komplette Webseite mit HTML Seiten, CSS Styling und JavaScript Funktionen auf einem WeMos hosten kann. Das ganze ist ziemlich einfach und unglaublich hilfreich! Ich kann es selbst kaum fassen wie schwer es ist eine vernünftige Anleitung für diese wichtige Funktion im Internet zu finden.</p>
<p>Ich sehe leider sehr oft Blogartikel in denen der HTML Code in der Arduino Datei eingebettet wird. Sowas kann man für eine Mini Demonstration zwar machen, ist aber im Alltag völliger Schwachsinn. Es ist viel zu unübersichtlich und sobald das Projekt wächst nicht mehr nutzbar.</p>
<p>Die ordentliche Alternative ist einen Ordner namens &#8222;data&#8220; einzurichten und in diesem die Webseiten als html Dateien abzulegen. Zusätzlich wird das Styling als CSS Datei gespeichert und es können sogar Funktionen per JavaScript Datei ausgeführt werden. Also alles 1:1 wie auf einem gewöhnlichem Webserver!</p>
<p><em><strong>Das könnte dich auch interessieren: </strong><a href="https://nerd-corner.com/de/wemos-d1-r2-erste-schritte-und-wlan-integration/">WeMos D1 R2 erste Schritte und Wlan Integration</a></em></p>
<h2>Liste der Komponenten</h2>
<ul>
<li>Arduino IDE (Entwicklungsumgebung)</li>
<li><a href="https://amzn.to/3tQPCjC" target="_blank" rel="noopener">WeMos D1 R2</a></li>
</ul>
<h3>Das Einrichten des Dateisystems (offiziell SPIFFS) geschieht einmalig und ist kinderleicht:</h3>
<p><a href="https://nerd-corner.com/de/wemos-d1-r2-erste-schritte-und-wlan-integration/">(Zunächst sollte man die grundlegende Einrichtung aus dem ersten Teil abgeschlossen haben!)</a></p>
<ol>
<li>Auf <a href="https://github.com/esp8266/arduino-esp8266fs-plugin/releases/tag/0.2.0">GitHub</a> eine Kopie der Datei &#8222;ESP8266FS-0.2.0.zip&#8220; herunterladen und entpacken</li>
<li>Die Datei esp8266fs.jar im Arduino-Tool-Verzeichnis ablegen. Der Pfad sieht etwa so aus: [home_dir]\Arduino\tools\ESP8266FS\tool\esp8266fs.jar (Siehe Bild) Ich musste den Pfadteil tools\ESP8266FS\tool\ im Arduino Ordner selbst erstellen. <img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-1531" src="https://nerd-corner.com/wp-content/uploads/2024/03/Screenshot-file-path-esp8266fs.jar-.png" alt="Screenshot file path esp8266fs.jar" width="1080" height="335" srcset="https://nerd-corner.com/wp-content/uploads/2024/03/Screenshot-file-path-esp8266fs.jar-.png 1190w, https://nerd-corner.com/wp-content/uploads/2024/03/Screenshot-file-path-esp8266fs.jar--300x93.png 300w, https://nerd-corner.com/wp-content/uploads/2024/03/Screenshot-file-path-esp8266fs.jar--1024x318.png 1024w, https://nerd-corner.com/wp-content/uploads/2024/03/Screenshot-file-path-esp8266fs.jar--768x238.png 768w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></li>
<li>Die Arduino IDE neustarten.</li>
</ol>
<p>Das wars auch schon! Man kann jetzt in der Arduino DIE unter Tools den neuen Punkt „ESP8266 Sketch Data Upload“ sehen.</p>
<h2>Wie kann man das neue Dateisystem jetzt nutzen?</h2>
<ol>
<li>Erstellen Sie in ihrem aktuellen WeMos Projekt Ordner einen zusätzlichen Ordner mit dem Namen „data“. So wie in dem nachfolgendem Bild</li>
</ol>
<p><img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-1528" src="https://nerd-corner.com/wp-content/uploads/2024/03/Wemos-data-folder.png" alt="Wemos data folder" width="1040" height="324" srcset="https://nerd-corner.com/wp-content/uploads/2024/03/Wemos-data-folder.png 1146w, https://nerd-corner.com/wp-content/uploads/2024/03/Wemos-data-folder-300x93.png 300w, https://nerd-corner.com/wp-content/uploads/2024/03/Wemos-data-folder-1024x319.png 1024w, https://nerd-corner.com/wp-content/uploads/2024/03/Wemos-data-folder-768x239.png 768w" sizes="auto, (max-width: 1040px) 100vw, 1040px" /></p>
<ol start="2">
<li>Legen Sie die Dateien, die Sie hochladen möchten, in das &#8218;data&#8216;-Verzeichnis</li>
<li>Wählen Sie in der Arduino IDE im Menü &#8218;Tools&#8216; den WeMos aus und wählen Sie eine Größe bei &#8218;Flash Size&#8216;</li>
<li>Das Dialogfeld für den seriellen Monitor schließen!</li>
<li>Wählen Sie aus dem Menü &#8218;Tools&#8216; die Option &#8218;ESP8266 Sketch Data Upload&#8216;.</li>
</ol>
<p><img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-1529" src="https://nerd-corner.com/wp-content/uploads/2024/03/data-folder-upload.png" alt="Data folder upload" width="805" height="518" srcset="https://nerd-corner.com/wp-content/uploads/2024/03/data-folder-upload.png 851w, https://nerd-corner.com/wp-content/uploads/2024/03/data-folder-upload-300x193.png 300w, https://nerd-corner.com/wp-content/uploads/2024/03/data-folder-upload-768x495.png 768w" sizes="auto, (max-width: 805px) 100vw, 805px" /></p>
<p>Sobald der Upload abgeschlossen ist zeigt das Nachrichtenfenster der Arduino IDE 100% Upload an.</p>
<h2>WeMos Beispielprogramm zum Ein- und Ausschalten der OnBoard LED</h2>
<p>Ähnlich wie im ersten Teil wird der Webserver die OnBoard LED steuern. Als Basis dient ebenfalls der Code aus dem ersten Teil. Der überarbeitete Code sieht so aus:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="atomic" data-enlighter-title="D1_webserver_filesystem">#include &lt;ESP8266WiFi.h&gt;
#include &lt;ESP8266WebServer.h&gt;
#include &lt;ESP8266mDNS.h&gt;

ESP8266WebServer server(80);

void setup() {
  Serial.begin(115200); //Baudrate
  Serial.println("ESP starts");

  WiFi.begin("NerdCornerWiFi","NerdCornerPassword");


  Serial.print("Connecting...");

  while(WiFi.status()!=WL_CONNECTED){ //Loop which makes a point every 500ms until the connection process has finished

    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected! IP-Address: ");
  Serial.println(WiFi.localIP()); //Displaying the IP Address

  if (MDNS.begin("nerd-corner")) {
    Serial.println("DNS started, available with: ");
    Serial.println("http://nerd-corner.local/");
  }

  server.serveStatic("/", SPIFFS, "/", "max-age=86400");
  SPIFFS.begin();

  server.onNotFound([](){ 
    server.send(404, "text/plain", "Landing page not found! Don't forget to name your landing page 'index.html'!");  
  });
 
  server.on("/led", HTTP_POST, []() {    
     
    const String ledState = server.arg("ledstate");
    if(ledState=="on"){
      switchLedOn();
    }
    else if(ledState=="off"){
      switchLedOff();
    }
    server.send(200, "text/json", "{\"result\":\"ok\"}");
  });

  server.begin();
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  server.handleClient();
  MDNS.update();

}

void switchLedOff(){ 
  digitalWrite(LED_BUILTIN, HIGH);   // turn the D1 LED off 
}

void switchLedOn(){ 
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED on 
}</pre>
<p>Auf ein paar Besonderheiten möchte ich dabei hinweisen. Wir haben beispielsweise folgendes hinzugefügt:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="atomic">server.serveStatic("/", SPIFFS, "/", "max-age=86400"); 
SPIFFS.begin();</pre>
<p>Ohne die beiden Zeilen wäre der Zugriff auf die Dateien im &#8222;data&#8220; Ordner nicht möglich. Bitte beachten, dass der Name &#8222;index.html&#8220; als default für die Landing Page eingestellt ist. Wenn man unbedingt möchte kann man das aber auch ändern.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="atomic">server.on("/led", HTTP_POST, []() {    
     
    const String ledState = server.arg("ledstate");
    if(ledState=="on"){
      switchLedOn();
    }
    else if(ledState=="off"){
      switchLedOff();
      }
      server.send(200, "text/json", "{\"result\":\"ok\"}");
  });</pre>
<p>Der &#8222;/led&#8220; Endpoint empfängt die Befehle vom Webserver. Lautet der Befehl &#8222;on&#8220; wird die LED eingeschaltet und bei &#8222;off&#8220; wird die LED ausgeschaltet.</p>
<h2>Wemos Webseite zum Ein- und Ausschalten der WeMos OnBoard LED</h2>
<p>Die Beispielwebseite ist ganz einfach aufgebaut. Sie besteht in erster Linie aus 2 Buttons zum Ein- und Ausschalten der LED.</p>
<p><img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-1536" src="https://nerd-corner.com/wp-content/uploads/2024/03/Webseite-Wemos-Control.jpeg" alt="Website Wemos control LED" width="875" height="1946" srcset="https://nerd-corner.com/wp-content/uploads/2024/03/Webseite-Wemos-Control.jpeg 921w, https://nerd-corner.com/wp-content/uploads/2024/03/Webseite-Wemos-Control-135x300.jpeg 135w, https://nerd-corner.com/wp-content/uploads/2024/03/Webseite-Wemos-Control-461x1024.jpeg 461w, https://nerd-corner.com/wp-content/uploads/2024/03/Webseite-Wemos-Control-768x1708.jpeg 768w, https://nerd-corner.com/wp-content/uploads/2024/03/Webseite-Wemos-Control-691x1536.jpeg 691w" sizes="auto, (max-width: 875px) 100vw, 875px" /></p>
<p>Die Ordnerstruktur der Webseite ist sehr übersichtlich gehalten. Es gibt eine Hauptseite mit dem Namen &#8222;index.html&#8220; Dieser Name ist weltweit üblich für die Hauptseiten und wird auch automatisch vom WeMos entsprechend erkannt. Darüber hinaus einen &#8222;CSS&#8220; Ordner fürs Styling und einen &#8222;JS&#8220; Ordner für Funktionen.</p>
<p><img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-1537" src="https://nerd-corner.com/wp-content/uploads/2024/03/Screenshot-data-file-system.png" alt="Screenshot esp8266 data file system" width="1045" height="347" srcset="https://nerd-corner.com/wp-content/uploads/2024/03/Screenshot-data-file-system.png 1152w, https://nerd-corner.com/wp-content/uploads/2024/03/Screenshot-data-file-system-300x100.png 300w, https://nerd-corner.com/wp-content/uploads/2024/03/Screenshot-data-file-system-1024x340.png 1024w, https://nerd-corner.com/wp-content/uploads/2024/03/Screenshot-data-file-system-768x255.png 768w" sizes="auto, (max-width: 1045px) 100vw, 1045px" /></p>
<p>Im Header Bereich der Webseite verlinken wir die Styles. Da wäre zum einen ein Standard Bootstrap, der alles automatisch bischen schöner macht und zusätzlich eine custom Styles Datei mit meinen eigenen Anpassungen. Außerdem werden im Header Bereich auch die Funktionen der Webseite verlinkt. Ich benutze den jQuery Standard um von der Webseite Requests an den WeMos zu senden. Meine eigenen custom Funktionen liegen in der &#8222;index.js&#8220;.</p>
<p>Bitte beachten, dass die jQuery Datei VOR der eigenen Datei eingebunden werden muss, sonst können keine jQuery Befehle im eigenen Code benutzt werden! Die eigenen Funktionen werden anschließend von den Buttons verwendet. Der HTML Code der Seite sieht insgesamt folgendermaßen aus:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="html" data-enlighter-theme="atomic">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;&lt;/html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;meta
      name="viewport"
      content="width=device-width, initial-scale=1, shrink-to-fit=no"
    /&gt;
    &lt;script type="text/javascript" src="js/jquery-3.5.1.min.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="./js/index.js"&gt;&lt;/script&gt;
    &lt;link rel="stylesheet" href="css/bootstrap.min.css" /&gt;
    &lt;link rel="stylesheet" href="css/custom-style.css" /&gt;
    &lt;title&gt;D1 Webserver&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;D1 Webserver with filesystem&lt;/h1&gt;
    &lt;p&gt;
      This is an example for a WeMos Webserver with a filesystem. You can easily
      create webpages with html, css and js!
    &lt;/p&gt;

    &lt;h3&gt;Example to turn on and off the built in LED&lt;/h3&gt;
    &lt;button class="button-style" onclick="changeLEDState('on')"&gt;Turn on&lt;/button&gt;
    &lt;button class="button-style" onclick="changeLEDState('off')"&gt;
      Turn off
    &lt;/button&gt;

    &lt;h3&gt;Example to demo a JS function&lt;/h3&gt;
    &lt;button class="button-style" onclick="showAlert()"&gt;Show alert&lt;/button&gt;
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Besonderes Augenmerk gilt der JavaScript Funktion &#8222;changeLEDState(value)&#8220;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="atomic">function changeLEDState(value) {
  $.post("/led", { ledstate: value });
}</pre>
<p>Dadurch, dass jQuery genutzt wird für die Kommunikation mit dem WeMos, reicht ein einfaches Dollarzeichen mit dem entsprechendem Request Befehl. Bei diesem POST Request wird ebenfalls ein Wert mit geschickt, welcher entweder &#8222;on&#8220; oder &#8222;off&#8220; ist zum ein- und ausschalten der LED.</p>
<p>Die Webseite kann nachfolgend als zip Datei heruntergeladen werden.</p>
<h2>Dateien zum Herunterladen</h2>
<ul>
<li><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://nerd-corner.com/de/download/1540/?tmstv=1756244246" rel="nofollow" id="download-link-1540" data-redirect="false" >
	Wemos example webserver to control OnBoard LED</a>
</li>
</ul>
<p>The post <a href="https://nerd-corner.com/de/wemos-d1-r2-ganze-webseite-mit-html-css-js-hosten/">WeMos D1 R2 &#8211; Ganze Webseite mit html, css &#038; js hosten</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/wemos-d1-r2-ganze-webseite-mit-html-css-js-hosten/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WeMos D1 R2 erste Schritte und Wlan integration</title>
		<link>https://nerd-corner.com/de/wemos-d1-r2-erste-schritte-und-wlan-integration/</link>
					<comments>https://nerd-corner.com/de/wemos-d1-r2-erste-schritte-und-wlan-integration/#comments</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Sun, 30 Jan 2022 09:31:57 +0000</pubDate>
				<category><![CDATA[Arduino Projekte]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Hardware-DE]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Arduino mit WLAN]]></category>
		<category><![CDATA[Arduino über Browser steuern]]></category>
		<category><![CDATA[C Programmierung]]></category>
		<category><![CDATA[Datenübertragung]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[ESP8266 mit mDNS]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[mDNS]]></category>
		<category><![CDATA[Schritt für Schritt Anweisung]]></category>
		<category><![CDATA[Steuerung]]></category>
		<category><![CDATA[Webserver]]></category>
		<category><![CDATA[WeMos]]></category>
		<category><![CDATA[WeMos D1]]></category>
		<category><![CDATA[WeMos D1 einrichten]]></category>
		<category><![CDATA[WeMos D1 in Arduino IDE]]></category>
		<category><![CDATA[WeMos D1 mDNS]]></category>
		<category><![CDATA[WeMos D1 mini]]></category>
		<category><![CDATA[WeMos D1 Pinbelegung]]></category>
		<category><![CDATA[WeMos D1 R2]]></category>
		<category><![CDATA[WeMOS D1 Webserver]]></category>
		<category><![CDATA[WIFI]]></category>
		<category><![CDATA[Wifi Modul]]></category>
		<category><![CDATA[WLAN]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=1165</guid>

					<description><![CDATA[<p>Ich habe mir schon häufig gedacht, dass es überaus praktisch wäre meine Arduino Projekte mit dem WLAN zu verbinden. Irgendwann bin ich zufällig auf den &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/wemos-d1-r2-erste-schritte-und-wlan-integration/">WeMos D1 R2 erste Schritte und Wlan integration</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Ich habe mir schon häufig gedacht, dass es überaus praktisch wäre meine Arduino Projekte mit dem WLAN zu verbinden. Irgendwann bin ich zufällig auf den WeMos D1 R2 gestoßen und bin begeistert! Im Prinzip lässt sich jedes Arduino Projekt auch mit dem D1 realisieren und man hat dabei immer die Möglichkeit Wlan zu nutzen. Wahrscheinlich wird der D1 zukünftig sogar den Arduino vom Markt verdrängen. Anbei erkläre ich die Unterschiede zwischen einem Arduino UNO R3 und einem WeMos D1. Anschließend beschreibe ich die Einrichtung des D1 anhand eines einfachen Beispiels. In dem Beispiel wird mit einem Browser eine LED gesteuert, welche fest auf dem D1 verbaut ist.</p>
<p><em><strong>Das könnte dich auch interessieren:</strong> <a href="https://nerd-corner.com/de/arduino-luefter-steuerung/">Wie man einen Lüfter mit einem Arduino steuert!</a></em></p>
<h2>Liste der Komponenten</h2>
<ul>
<li>Arduino IDE (Entwicklungsumgebung)</li>
<li><a href="https://amzn.to/3tQPCjC" target="_blank" rel="noopener">WeMos D1 R2</a></li>
</ul>
<h2>Unterschiede zwischen dem WeMos D1 R2 und dem Arduino UNO R3</h2>
<p>Ein Arduino UNO R3 ähnelt optisch sehr dem WeMos D1. Der Hauptunterschied ist, dass der D1 ein ESP2866 WIFI Modul auf seiner Platine integriert hat. Dadurch hat man die Möglichkeit den D1 mit dem Internet zu verbinden. Grob gesagt ist der D1 ein wlanfähiger Arduino!</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1175 zoooom" src="https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-und-Arduino-Uno-scaled.jpg" alt="Wemos D1 and Arduino Uno" width="2000" height="900" srcset="https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-und-Arduino-Uno-scaled.jpg 2560w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-und-Arduino-Uno-300x135.jpg 300w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-und-Arduino-Uno-1024x461.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-und-Arduino-Uno-768x346.jpg 768w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-und-Arduino-Uno-1536x691.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-und-Arduino-Uno-2048x922.jpg 2048w" sizes="auto, (max-width: 2000px) 100vw, 2000px" /></p>
<p>Man sollte allerdings beachten, dass die Taktfrequenz der beiden Prozessoren unterschiedlich sind. Der Arduino besitzt einen 8 bit Atmel Prozessor und der D1 einen Wlan fähigen ESP8266 Prozessor mit 32 bit Taktfrequenz. Die Pins des D1 sind zwar ähnlich angeordnet wie bei einem Arduino UNO, aber unterscheiden sich in der Betriebsspannung. Bei einem Arduino UNO liegt die Spannung der Pins bei 5V und bei dem D1 bei 3,3V. Zusätzlich ist aber auch auf dem D1 ein 5V Ausgang vorhanden. Aufgrund der Spannungsunterschiede an den Pins sollte man nicht blindlings ein Arduino Shield auf einen D1 stecken. Es empfiehlt sich zuerst die Kompatibilität zu prüfen!</p>
<p><img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-1166" src="https://nerd-corner.com/wp-content/uploads/2022/01/Pinout_D1_R2.png" alt="Pinout WeMos D1 R2 Pinbelegung" width="770" height="888" srcset="https://nerd-corner.com/wp-content/uploads/2022/01/Pinout_D1_R2.png 783w, https://nerd-corner.com/wp-content/uploads/2022/01/Pinout_D1_R2-260x300.png 260w, https://nerd-corner.com/wp-content/uploads/2022/01/Pinout_D1_R2-768x886.png 768w" sizes="auto, (max-width: 770px) 100vw, 770px" /></p>
<p>Außerdem sollte man beachten, dass der D1 im Gegensatz zum Arduino nur einen analog Pin besitzt und zusätzlich die Anzahl der digitalen Pins unterschiedlich ist. Der Arduino besitzt 20 digitale Pins und der D1 nur 16 digitale Pins. Allerdings haben die digitalen Pins des D1 mehr nützliche Zusatzfunktionen.</p>
<p>Bitte beachten: Auch die Bezeichnung der digitalen D1 Pins unterscheidet sich von denen des Arduino und müssen daher softwaretechnisch angepasst werden.</p>
<p>Als letztes noch der Hinweis, dass sich der USB Anschluss ebenfalls unterscheidet. Im Gegensatz zum Arduino besitzt der D1 den deutlich verbreiteteren Micro USB Standard.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1176 zoooom" src="https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-vs-Arduino-Uno-scaled.jpg" alt="Wemos D1 R2 vs Arduino Uno" width="2000" height="1500" srcset="https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-vs-Arduino-Uno-scaled.jpg 2560w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-vs-Arduino-Uno-300x225.jpg 300w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-vs-Arduino-Uno-1024x768.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-vs-Arduino-Uno-768x576.jpg 768w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-vs-Arduino-Uno-1536x1152.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-vs-Arduino-Uno-2048x1536.jpg 2048w" sizes="auto, (max-width: 2000px) 100vw, 2000px" /></p>
<h2>Einrichtung des D1</h2>
<p>Die Arduino IDE öffnen und den D1 mit dem Computer verbinden. Unter Tools &gt; Port den entsprechenden COM Port des D1 auswählen. Sollte der D1 hier nicht erkannt werden liegt das vermutlich an einem fehlenden Treiber.</p>
<p>Wenn nun der passende COM Port ausgewählt wurde und man einen Beispiel sketch auf den D1 lädt wird vorraussichtlich folgende Fehlermeldung auftauchen: „An error occurred while uploading the sketch avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x2e“. Der Grund für diesen Fehler ist, dass das falsche Board ausgewählt wurde. Der Name des ausgewählten Boards taucht rechts unten in der IDE auf:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1167 zoooom" src="https://nerd-corner.com/wp-content/uploads/2022/01/WEMOS-choosen-in-IDE.png" alt="WeMos D1 com Port IDE" width="1300" height="55" srcset="https://nerd-corner.com/wp-content/uploads/2022/01/WEMOS-choosen-in-IDE.png 1308w, https://nerd-corner.com/wp-content/uploads/2022/01/WEMOS-choosen-in-IDE-300x13.png 300w, https://nerd-corner.com/wp-content/uploads/2022/01/WEMOS-choosen-in-IDE-1024x43.png 1024w, https://nerd-corner.com/wp-content/uploads/2022/01/WEMOS-choosen-in-IDE-768x32.png 768w" sizes="auto, (max-width: 1300px) 100vw, 1300px" /></p>
<p>Um den D1 auswählen zu können muss der Boardmanager für den ESP8266 noch hinzugefügt werden. Hier folgenden Link in Preferences &gt; Board Manager einfügen: http://arduino.esp8266.com/stable/package_esp8266com_index.json</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1168 zoooom" src="https://nerd-corner.com/wp-content/uploads/2022/01/preferences-board-manager.png" alt="Preferences boardmananger WeMos D1 R2" width="910" height="703" srcset="https://nerd-corner.com/wp-content/uploads/2022/01/preferences-board-manager.png 921w, https://nerd-corner.com/wp-content/uploads/2022/01/preferences-board-manager-300x232.png 300w, https://nerd-corner.com/wp-content/uploads/2022/01/preferences-board-manager-768x593.png 768w" sizes="auto, (max-width: 910px) 100vw, 910px" /></p>
<p>Anschließend in Tools &gt; Board &gt; Board Manager nach ESP8266 suchen und die neuste Version installieren:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1169 zoooom" src="https://nerd-corner.com/wp-content/uploads/2022/01/Esp8266-in-boardsmanager.png" alt="WeMos D1 R2 ESP8266 boardmananger in Arduino IDE" width="1200" height="692" srcset="https://nerd-corner.com/wp-content/uploads/2022/01/Esp8266-in-boardsmanager.png 1213w, https://nerd-corner.com/wp-content/uploads/2022/01/Esp8266-in-boardsmanager-300x173.png 300w, https://nerd-corner.com/wp-content/uploads/2022/01/Esp8266-in-boardsmanager-1024x590.png 1024w, https://nerd-corner.com/wp-content/uploads/2022/01/Esp8266-in-boardsmanager-768x443.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></p>
<p>Jetzt in Tools &gt; Board &gt; ESP8266 Boards &gt; LOLIN (WEMOS D1 R2 &amp;mini) auswählen:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1170 zoooom" src="https://nerd-corner.com/wp-content/uploads/2022/01/Choose-ESP8266-board.png" alt="choose WeMos D1 board in Arduino IDE" width="1900" height="999" srcset="https://nerd-corner.com/wp-content/uploads/2022/01/Choose-ESP8266-board.png 1920w, https://nerd-corner.com/wp-content/uploads/2022/01/Choose-ESP8266-board-300x158.png 300w, https://nerd-corner.com/wp-content/uploads/2022/01/Choose-ESP8266-board-1024x539.png 1024w, https://nerd-corner.com/wp-content/uploads/2022/01/Choose-ESP8266-board-768x404.png 768w, https://nerd-corner.com/wp-content/uploads/2022/01/Choose-ESP8266-board-1536x808.png 1536w" sizes="auto, (max-width: 1900px) 100vw, 1900px" /></p>
<p>Nun kann man wieder ein Beispielprojekt unter File &gt; Examples &gt; 01.Basics &gt; Blink auswählen und mit einem Klick auf Upload funktioniert das Ganze. Das Beispielprojekt lässt jetzt die blaue LED auf dem ESP8266 Modul blinken.</p>
<p>Achtung: Dieses Setup war einmalig für die erstmalige Benutzung und muss nicht erneut wiederholt werden!</p>
<h2>WeMos D1 mit dem Internet verbinden</h2>
<p>Der Programmaufbau entspricht dem eines regulären Microcontrollers wie man es auch vom Arduino kennt. Es gibt eine setup() Funktion, welche nur einmal direkt zum Programmstart aufgerufen wird und eine loop() Funktion, welche nach dem setup() in Dauerschleife läuft.</p>
<p>Als erstes wird die ESP WiFi Bibliothek benötigt. Diese wird mittels #include &lt;ESP8266WiFi.h&gt; eingebunden. Sobald der ESP mit Strom versorgt wird, soll eine WLAN-Verbindung hergestellt werden. Daher wird der Code in die setup() Funktion geschrieben.</p>
<p>Wir brauchen den Seriellen Monitor um uns den aktuellen Stand des Verbindungsaufbaus anzeigen zu lassen. Die Baudrate kann selbst festgelegt werden. Für den D1 nehme ich 115200. Den Seriellen Monitor findet man unter Tools &gt; Serial Monitor. Im Fenster des Seriellen Monitors kann rechts unten die Baudrate eingestellt werden. Bitte hier ebenfalls 115200 auswählen. Wählt man nicht die gleiche Baudrate wie im setup() definiert, werden einem nur unleserliche Sonderzeichen angezeigt.</p>
<p>Um sich mit dem Wlan zu verbinden reicht der einfache Befehl WiFi.beginn(„WlanName“, „WlanPasswort“). Es kann sehr hilfreich sein wenn man sich hier gleich die IP Adresse des D1 anzeigen lässt. Dazu nutzt man den Befehl WiFi.localIP()</p>
<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="atomic">#include &lt;ESP8266WiFi.h&gt;

void setup() {
  Serial.begin(115200); //Baudrate
  Serial.println("ESP starts");

  WiFi.begin("NerdCornerWiFi","NerdCornerPassword");

  Serial.print("Connecting...");

  while(WiFi.status()!=WL_CONNECTED){ //Loop which makes a point every 500ms until the connection process has finished

    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected! IP-Address: ");
  Serial.println(WiFi.localIP()); //Displaying the IP Address

}

void loop() {
  // put your main code here, to run repeatedly:

}</pre>
<h2>Der D1 als Webserver und DNS-Server</h2>
<p>Nach den bisherigen Schritten ist der D1 zwar mit dem WiFi verbunden, aber selbst noch nicht über einen Browser erreichbar. Damit der D1 bequem über den Browser angesteuert werden kann braucht man die #include &lt;ESP8266WebServer.h&gt; Bibliothek. Anschließend wird mit dem Befehl ESP8266WebServer server(80) ein Webserver Objekt erstellt und der Port 80 festgelegt. Der Server lässt sich nun mit dem Befehl server.begin() starten. Damit der D1 zu jederzeit prüfen kann, ob Anfragen zu bearbeiten sind, wird der server.handleClient() in die loop() Funktion geschrieben.</p>
<p>Gibt man nun die IP Adresse des D1 in einem Browser ein, von einem Gerät, dass sich im selben WiFi befindet, ist der D1 bereits erreichbar. Es wurde nur noch nicht spezifiziert was bei einem Aufruf des D1 passieren soll.</p>
<p>Man kann sich hier auch vorgefertigte Funktionen anzeigen lassen. Für den Anfang beispielsweise einen Satz, wenn der Link nicht definiert wurde, oder einen Text für einen custom Link. Es können auch eigene Funktionen für bestimmte Links ausgeführt werden.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="atomic">server.onNotFound([](){ 
  server.send(404, "text/plain", "Link was not found!");  
});
 
server.on("/", []() {
  server.send(200, "text/plain", "Landing page!");
});
 
server.on("/custom", []() {
  server.send(200, "text/plain", "Just a custom route!");
  ownFunction();
});</pre>
<p>Die Webserver Einrichtung ist jetzt abgeschlossen. Da es aber meist sehr nervig ist jedesmal die IP-Adresse des D1 in den Browser einzutippen bzw. die sich auch ändern kann, macht es Sinn dem DNS des D1 einen Namen zuzuweisen. Dafür wird wieder eine Bibliothek verwendet, welche mittels #include &lt;ESP8266mDNS.h&gt; eingebunden wird. Der DNS wird einmalig definiert und daher in die setup() Funktion geschrieben. Um den DNS Namen festzulegen, nutzt man die Methode MDNS.begin(DNS Name), beispielsweise MDNS.begin(nerd-corner). Zusätzlich muss noch MDNS.update() in die loop Funktion geschrieben werden.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="atomic">#include &lt;ESP8266WiFi.h&gt;
#include &lt;ESP8266WebServer.h&gt;
#include &lt;ESP8266mDNS.h&gt;

ESP8266WebServer server(80);

void setup() {
  Serial.begin(115200); //Baudrate
  Serial.println("ESP starts");

  WiFi.begin("NerdCornerWiFi","NerdCornerPassword");

  Serial.print("Connecting...");

  while(WiFi.status()!=WL_CONNECTED){ //Loop which makes a point every 500ms until the connection process has finished

    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected! IP-Address: ");
  Serial.println(WiFi.localIP()); //Displaying the IP Address

  if (MDNS.begin("nerd-corner")) {
    Serial.println("DNS started, available with: ");
    Serial.println("http://nerd-corner.local/");
  }

  server.onNotFound([](){ 
    server.send(404, "text/plain", "Link was not found!");  
  });
 
  server.on("/", []() {
    server.send(200, "text/plain", "Landing page!");
  });
 
  server.on("/custom", []() {
    server.send(200, "text/plain", "Just a custom route!");
    ownFunction();
  });

  server.begin();

}

void loop() {
  server.handleClient();
  MDNS.update();

}

void ownFunction(){ //go to "IP-Adress/custom" to call this function
  Serial.println("Own function was called");

}</pre>
<p>Anschließend kann man im Browser http://nerd-corner.local eingeben und man erreicht den D1. Bitte beachten, dass die Endung immer &#8222;.local&#8220; sein muss! Manche Android Geräte unterstützen mDNS nicht, dann muss weiterhin die tatsächliche IP Adresse angegeben werden. Jetzt steht der Verwendung für eigene Projekte eigentlich nichts mehr im Weg! Hier findet Ihr ein paar spannende Anwendungsbeispiele: https://makesmart.net/tag/d1-mini/</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1171 zoooom" src="https://nerd-corner.com/wp-content/uploads/2022/01/custom-route-D1.png" alt="WeMos D1 R2 testing custom route functions" width="1240" height="737" srcset="https://nerd-corner.com/wp-content/uploads/2022/01/custom-route-D1.png 1249w, https://nerd-corner.com/wp-content/uploads/2022/01/custom-route-D1-300x178.png 300w, https://nerd-corner.com/wp-content/uploads/2022/01/custom-route-D1-1024x608.png 1024w, https://nerd-corner.com/wp-content/uploads/2022/01/custom-route-D1-768x456.png 768w, https://nerd-corner.com/wp-content/uploads/2022/01/custom-route-D1-890x530.png 890w, https://nerd-corner.com/wp-content/uploads/2022/01/custom-route-D1-445x265.png 445w" sizes="auto, (max-width: 1240px) 100vw, 1240px" /></p>
<h2>Beispielprogramm zum Ein- und Ausschalten der OnBoard LED</h2>
<p>Zum Abschluss des Blogposts noch ein simples Beispielprogramm bei dem wir das bisher gelernte anwenden. Wir schreiben zwei zusätzliche Funktionen. Eine um die fest verbaute BuiltIn Led einzuschalten und eine Funkton zum Ausschalten. Ein kleiner Hinweis, im Gegensatz zum Arduino wird die LED mit digitalWrite(LED_BUILTIN, LOW) eingeschalten statt ausgeschalten, also genau invertiert!</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1177 zoooom" src="https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-R2-build-in-LED-scaled.jpg" alt="Wemos D1 R2 blinking LED" width="2000" height="900" srcset="https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-R2-build-in-LED-scaled.jpg 2560w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-R2-build-in-LED-300x135.jpg 300w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-R2-build-in-LED-1024x461.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-R2-build-in-LED-768x346.jpg 768w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-R2-build-in-LED-1536x691.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2022/01/Wemos-D1-R2-build-in-LED-2048x922.jpg 2048w" sizes="auto, (max-width: 2000px) 100vw, 2000px" /></p>
<p>Die Funktionen können über <a href="http://nerd-corner.local/on">http://nerd-corner.local/on</a> und <a href="http://nerd-corner.local/offn">http://nerd-corner.local/off</a> aufgerufen werden. Anbei der vollständige Programmcode:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="cpp" data-enlighter-theme="atomic">#include &lt;ESP8266WiFi.h&gt;
#include &lt;ESP8266WebServer.h&gt;
#include &lt;ESP8266mDNS.h&gt;

ESP8266WebServer server(80);

void setup() {
  Serial.begin(115200); //Baudrate
  Serial.println("ESP starts");

  WiFi.begin("NerdCornerWiFi","NerdCornerPassword");

  Serial.print("Connecting...");

  while(WiFi.status()!=WL_CONNECTED){ //Loop which makes a point every 500ms until the connection process has finished

    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected! IP-Address: ");
  Serial.println(WiFi.localIP()); //Displaying the IP Address

  if (MDNS.begin("nerd-corner")) {
    Serial.println("DNS started, available with: ");
    Serial.println("http://nerd-corner.local/");
  }

  server.onNotFound([](){ 
    server.send(404, "text/plain", "Link was not found!");  
  });
 
  server.on("/", []() {
    server.send(200, "text/plain", "Landing page!");
  });
 
  server.on("/on", []() {
    server.send(200, "text/plain", "Switching LED on!");
    switchLedOn();
  });

  server.on("/off", []() {
    server.send(200, "text/plain", "Switching LED off!");
    switchLedOff();
  });

  server.begin();


  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  server.handleClient();
  MDNS.update();

}

void switchLedOff(){ 
  digitalWrite(LED_BUILTIN, HIGH);   // turn the D1 LED off 
}

void switchLedOn(){ 
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED on 
}</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>The post <a href="https://nerd-corner.com/de/wemos-d1-r2-erste-schritte-und-wlan-integration/">WeMos D1 R2 erste Schritte und Wlan integration</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/wemos-d1-r2-erste-schritte-und-wlan-integration/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Textnachrichten mittels Lichtsignale senden &#8211; Pi zu Arduino</title>
		<link>https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/</link>
					<comments>https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/#comments</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Sun, 20 Jun 2021 22:42:56 +0000</pubDate>
				<category><![CDATA[Arduino Projekte]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[Hardware-DE]]></category>
		<category><![CDATA[Linux-DE]]></category>
		<category><![CDATA[Software-DE]]></category>
		<category><![CDATA[Datenübertragung]]></category>
		<category><![CDATA[Datenübertragung per Licht]]></category>
		<category><![CDATA[Kommunikationstechnik]]></category>
		<category><![CDATA[LiFi]]></category>
		<category><![CDATA[LiFi Arduino Projekt]]></category>
		<category><![CDATA[LiFI Router]]></category>
		<category><![CDATA[Light Fidelity]]></category>
		<category><![CDATA[Textnachrichten]]></category>
		<category><![CDATA[Textnachrichten versenden]]></category>
		<category><![CDATA[Textnachrichten vom Pi zum Arduino]]></category>
		<category><![CDATA[visible Light communication]]></category>
		<category><![CDATA[visuelle Lichtkommunikation]]></category>
		<category><![CDATA[Visuelle Lichtkommunikation Arduino Projekt]]></category>
		<category><![CDATA[VLC]]></category>
		<category><![CDATA[VLC Arduino Projekt]]></category>
		<category><![CDATA[VLC Raspberry Pi Projekt]]></category>
		<category><![CDATA[zyklische Redundanzprüfung]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=935</guid>

					<description><![CDATA[<p>Mir gefällt die Idee Daten über sichtbarem Licht zu versenden. Allgemein wird Li-Fi (Light Fidelity) und VLC (Visible Light Communication) im Moment heiß diskutiert. Dabei &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/">Textnachrichten mittels Lichtsignale senden &#8211; Pi zu Arduino</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Mir gefällt die Idee Daten über sichtbarem Licht zu versenden. Allgemein wird Li-Fi (Light Fidelity) und VLC (Visible Light Communication) im Moment heiß diskutiert. Dabei ist VLC eine Visuelle Lichtkommunikation, also primär ein Kabel Ersatz und LiFi dagegen eine Anlehnung an WiFi. Ein LiFi Gerät wäre eine Art Internetfähiger Router, der Daten über Lichtsignale statt Radio Frequenzsignale überträgt. Gegenwärtig hat jedoch noch keine Firma einen Li-Fi Router entwickelt bzw. im Verkauf. Die VLC Technik wird aktuell von Elon Musks StarLink Projekt prominent eingesetzt. So können die Satelliten mittels Laserstrahlen Daten austauschen. Das habe ich vereinfacht in diesem Blogartikel nachgebaut.</p>
<p>Zunächst möchte ich nur einzelne Textnachrichten in eine Richtung übertragen. In einem nächsten Schritt kann dies dann ausgeweitet werden um ganze Dateien bidirektional zu übertragen. Zum Empfangen der Nachrichten habe ich einen Ardunio ausgewählt, da dieser im Gegensatz zum Raspberry Pi analoge Eingänge besitzt und somit leicht mit analogen Sensoren verbunden werden kann. Zum Senden eignet sich ein Raspberry Pi, da hier nur digitale Pins benötigt werden und ein Pi allgemein leistungsfähiger bzw. schneller Daten übertragen kann. Das wurde bereits in den vorrangegangenen Posts zum Definieren einer Taktfrequenz beim Arduino und beim Raspberry Pi getestet. Alle Skripte zum Betrieb der VLC Kommunikation können am Ende des Artikels heruntergeladen werden. Die folgenden drei Blogposts stehen in direktem Zusammenhang zu diesem Projekt:</p>
<p><em><strong>UPGRADE:</strong> <a href="https://nerd-corner.com/de/upgrade-datentransfer-mittels-vlc-und-lifi-pi-zu-pi-uebertragung/" target="_blank" rel="noopener">ALLE ARTEN VON DATEN MITTELS VISUELLER LICHTKUMMUNIKATION ÜBERTRAGEN</a></em></p>
<p><em><strong>So programmiert man die Taktfrequenz des Arduino:</strong> <a href="https://nerd-corner.com/de/arduino-timer-interrupts-arduino-register-programmieren/" target="_blank" rel="noopener">Timer Interrupts nutzen als Taktfrequenz.</a></em></p>
<p><em><strong>So programmiert man die Taktfrequenz des Pi:</strong> <a href="https://nerd-corner.com/de/wie-programmiert-man-einen-praezisen-timer-in-c-fuer-linux/" target="_blank" rel="noopener">Präzise Timer Funktion in C für den Pi.</a></em></p>
<p><em><strong>So verhinderst man Fehler in der Datenübertragung:</strong> <a href="https://nerd-corner.com/de/zyklische-redundanzpruefung-in-c/" target="_blank" rel="noopener">Mit CRC fehlerhafte Pakete erkennen.</a></em></p>
<h2>Liste der Bauteile</h2>
<ul>
<li><a href="https://amzn.to/3xUQSkZ" target="_blank" rel="noopener">Arduino Uno</a></li>
<li><a href="https://amzn.to/3zlaLSJ" target="_blank" rel="noopener">Raspberry Pi 4</a></li>
<li><a href="https://amzn.to/3zhH6to" target="_blank" rel="noopener">5V Solarzelle</a></li>
<li><a href="https://amzn.to/3rkpOZU" target="_blank" rel="noopener">5V Laserdiode</a></li>
<li><a href="https://amzn.to/2Uu9AkT" target="_blank" rel="noopener">Jumper Kabel</a></li>
</ul>
<h2>Verkabelung für die Visuelle Lichtkommunikation</h2>
<p><img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-939" src="https://nerd-corner.com/wp-content/uploads/2021/06/FritzingPi_Arduino.png" alt="Textnachrichten VLC Fritzing Verkabelung für Visuelle Lichtkommunikation" width="2770" height="1130" srcset="https://nerd-corner.com/wp-content/uploads/2021/06/FritzingPi_Arduino.png 2772w, https://nerd-corner.com/wp-content/uploads/2021/06/FritzingPi_Arduino-300x122.png 300w, https://nerd-corner.com/wp-content/uploads/2021/06/FritzingPi_Arduino-1024x418.png 1024w, https://nerd-corner.com/wp-content/uploads/2021/06/FritzingPi_Arduino-768x313.png 768w, https://nerd-corner.com/wp-content/uploads/2021/06/FritzingPi_Arduino-1536x627.png 1536w, https://nerd-corner.com/wp-content/uploads/2021/06/FritzingPi_Arduino-2048x836.png 2048w" sizes="auto, (max-width: 2770px) 100vw, 2770px" /></p>
<p>Die Verkabelung gestaltet sich eher simpel. Die 5V Solarzelle ist sehr gut geeignet um Lichtsignale zu detektieren. Daher wird die Solarzelle mit dem Empfänger, also dem Arduino verbunden. Der Ground der Solarzelle wird mit einem Ground des Arduinos verbunden. Die Plusleitung der Solarzelle wird mit einem analogen Pin des Arduinos verbunden. Hier eignet sich beispielsweise A0.</p>
<p>Vom Raspberry Pi aus werden die Nachrichten über Lichtsignale des Lasers an den Arduino übermittelt. Hierfür wird der Ground einer Laserdiode (5V) mit einen Ground Pin des Pi verbunden (siehe Grafik). Anschließend wird die Plusleitung der Laserdiode mit einer der digitalen Pins des Raspberry Pis verbunden. Hier habe ich den GPIO17 Pin gewählt, welcher in der „wiringPi“ Library Pin 0 entspricht (siehe Grafik).</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-940 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/06/pinbelegung-Pi.png" alt="VLC Textnachrichten visuelle Lichtkommunikation wiringPi" width="598" height="294" srcset="https://nerd-corner.com/wp-content/uploads/2021/06/pinbelegung-Pi.png 600w, https://nerd-corner.com/wp-content/uploads/2021/06/pinbelegung-Pi-300x148.png 300w" sizes="auto, (max-width: 598px) 100vw, 598px" /></p>
<p>Als Alternative zu dem Laser und der Solarzellen Kombination kann auch eine LED und ein Photowiderstand genutzt werden. Allerdings eignet sich ein Laser besser für schnellere und präzisere Datenübertragung. Dazu bietet eine Solarzelle eine große Fläche um die Laserstrahlen zu detektieren.</p>
<h2>Modulationsmethode On-Off-Keying</h2>
<p>Die Textnachrichten werden im Binärcode als „1“ oder „0“ übertragen. Es gibt verschiedene Möglichkeiten diese Daten zu modulieren. Eine der einfachsten Möglichkeiten ist es eine identische Taktfrequenz für den Sender und Empfänger festzulegen. Dann wird in jedem Takt entweder eine „1“ oder eine „0“ übertragen.</p>
<p>Die Vorgehensweise nennt sich Aplituden-Shift-Keying. Wenn die Laserdiode besonders stark die Solarplatte anleuchtet wird das vom Empfänger als binäre „1“ detektiert. Wenn aber die Laserdiode nur schwach leuchtet wird das als binäre „0“ detektiert.</p>
<p>Tatsächlich macht es aber Sinn die Laserdiode gar nicht leuchten zu lassen für eine binäre „0“. Dann spricht man von On-Off-Keying. Das ist sozusagen eine Vereinfachung des Amplituden-Shift-Keyings. Die nachfolgende Grafik verdeutlicht den Unterschied zwischen Amplituden-Shift-Keying und On-Off-Keying.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-942 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/06/OOK-ASK-1.jpg" alt="Modulationstechnik Visuelle Lichtkommunikation" width="848" height="587" srcset="https://nerd-corner.com/wp-content/uploads/2021/06/OOK-ASK-1.jpg 850w, https://nerd-corner.com/wp-content/uploads/2021/06/OOK-ASK-1-300x208.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/06/OOK-ASK-1-768x531.jpg 768w" sizes="auto, (max-width: 848px) 100vw, 848px" /></p>
<p>Das bedeutet, immer wenn die Solarzelle Licht detektiert, wird ein entsprechender Spannungswert an den analogen Pin des Arduino übergeben. Wenn dieser Spannungswert einen vordefinierten Wert übersteigt, registriert der Arduino es als eine binäre „1“, ansonsten als binäre „0“. Es macht durchaus Sinn den vordefinierten Wert an das Tageslicht anzupassen. Eventuell mit Hilfe eines zusätzlichen Lichtsensors.</p>
<h2>Arduino Code zum Nachrichten empfangen</h2>
<pre class="EnlighterJSRAW" data-enlighter-language="c" data-enlighter-group="Receiver" data-enlighter-title="Receiver.ino" data-enlighter-theme="beyond">//This is the "real" loop function
  switch (state)
  {
    case 0:
      //looking for synchronization sequence
      synchro_Done=false;
      lookForSynchro(data);

      if (synchro_Done== true)
      {
        state=1;
      }
      break;
    case 1:
      //receive Data
      receiveData_Done =false;
      receiveData(data);

      if (receiveData_Done==true)
      {
        state=0; 
      }
      break;
  }</pre>
<p>Die Software des Arduino ist im Prinzip als State Machine aufgebaut. Es gibt zwei States. Ein State für die Synchronisierung und einer für das Auslesen der Textnachricht. Im State Synchronisierung wartet der Empfänger auf eine festgelegte Bitsequenz (Preambel) beispielsweise „10101010101111111111“. Diese Sequenz bedeutet, dass der Empfänger jetzt zuhören muss, weil eine Textnachricht folgt. Der vollständige Arduino Code kann am Ende des Artikels heruntergeladen werden. Die nachfolgende Grafik zeigt den genauen Aufbau der Datenpakete.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-943 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/06/FrameVariableDataLength.jpg" alt="Aufbau Textnachrichten VLC" width="953" height="554" srcset="https://nerd-corner.com/wp-content/uploads/2021/06/FrameVariableDataLength.jpg 955w, https://nerd-corner.com/wp-content/uploads/2021/06/FrameVariableDataLength-300x174.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/06/FrameVariableDataLength-768x446.jpg 768w" sizes="auto, (max-width: 953px) 100vw, 953px" /></p>
<p>Sobald die Preambel erkannt wurde, wechselt der Empfänger automatisch in den zweiten State und empfangt die eigentliche Nachricht. Wobei jedoch die ersten 16 Bits der Textnachricht einer Dezimalzahl entsprechen, die dem Empfänger mitteilt, wie viele Zeichen die ankommende Textnachricht umfasst. Sobald diese Zahl erreicht wurde, wird der Text im Serial Monitor des Arduino ausgegeben und der State wechselt wieder zurück. Jetzt wird erneut auf die Synchronisierungsequenz gewartet. Der vollständige Softwarecode kann am Ende des Blog Artikels heruntergeladen werden. Zur Verbesserung der Übertragungsqualität kann noch eine <a href="https://nerd-corner.com/de/zyklische-redundanzpruefung-in-c/" target="_blank" rel="noopener">zyklische Redundanzprüfung</a> durchgeführt werden wie in der nachfolgenden Grafik.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-944 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/06/FrameVariableDataLengthAndCRC.jpg" alt="CRC Datenpakete Aufbau VLC" width="1264" height="555" srcset="https://nerd-corner.com/wp-content/uploads/2021/06/FrameVariableDataLengthAndCRC.jpg 1266w, https://nerd-corner.com/wp-content/uploads/2021/06/FrameVariableDataLengthAndCRC-300x132.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/06/FrameVariableDataLengthAndCRC-1024x450.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/06/FrameVariableDataLengthAndCRC-768x337.jpg 768w" sizes="auto, (max-width: 1264px) 100vw, 1264px" /></p>
<h2>Raspberry Pi Code zum Nachrichten senden</h2>
<pre class="EnlighterJSRAW" data-enlighter-language="c" data-enlighter-group="simpleLaser" data-enlighter-title="simpleLaser.c">//Read message
        char msg[3000]; 
        int len, k, length;
       
        printf("\n Enter the Message: ");
        scanf("%[^'\n']",msg);
        
        len=strlen(msg);
        
        
        int2bin(len*8, 16); //len*8, because 8 bits are one byte
        
        for(k=0;k&lt;len;k++)
        {
                chartobin(msg[k]);            
        }</pre>
<p>Der Programmcode des Raspberry Pi muss in C geschrieben werden. Python wäre zu langsam und würde keine stabile Taktfrequenz zum Senden der Daten erreichen. Der vollständige Programmcode kann am Ende der Artikels heruntergeladen werden. Damit der Pi die Laserdiode steuern kann wird die „wiringPi.h“ library benötigt. Über „digitalWrite(0, HIGH)“ kann so die Diode eingeschalten werden und mittels „digitalWrite(0, LOW)“ wieder aus. Wichtig: Beim Kompilieren bitte nicht die „<a href="http://wiringpi.com/" target="_blank" rel="noopener">wiringPi</a>“ library vergessen! Der Befehl lautet: „gcc -o simpleLaser simpleLaser.c -lwiringPi“</p>
<p>Am Anfang fordert das Programm mittels printf Funktion eine Textnachricht einzugeben. Diese wird mittels scanf Funktion eingelesen und gespeichert. Anschließend wird jeder Buchstabe in Binärcode umgewandelt und in einem Array abgespeichert. Die Umwandlung wird in der nachfolgenden Grafik gezeigt. Am Ende wird in einem festgelegten Takt der Binärcode aus dem Array übermittelt. Für eine binäre „1“ wird die Laserdiode eingeschaltet und für eine binäre „0“ wieder aus.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-945 zoooom" src="https://nerd-corner.com/wp-content/uploads/2021/06/BinToDec.jpg" alt="Character to binary conversion" width="750" height="389" srcset="https://nerd-corner.com/wp-content/uploads/2021/06/BinToDec.jpg 758w, https://nerd-corner.com/wp-content/uploads/2021/06/BinToDec-300x156.jpg 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /></p>
<h2>Fazit zum Projekt Visuelle Lichtkommunikation</h2>
<p>Die Übertragung der Textnachrichten mittels Visuelle Lichtkommunikation funktioniert hervorragend. Dank der zyklischen Redundanzprüfung auch absolut fehlerfrei. Allerdings ist der Nutzen einer eindimensionalen Nachrichtenkommunikation eher gering. Es wäre besser, wenn jegliche Art von Dateien übertragen werden könnte und das in beiden Richtungen. Hier wird wohl bald ein Update folgen.</p>
<p><img loading="lazy" decoding="async" class="zoooom aligncenter wp-image-953" src="https://nerd-corner.com/wp-content/uploads/2021/06/SetUp-Arduino-Pi-scaled.jpg" alt="Set Up VLC Arduino Pi Visuelle Lichtkommunikation" width="2550" height="1913" srcset="https://nerd-corner.com/wp-content/uploads/2021/06/SetUp-Arduino-Pi-scaled.jpg 2560w, https://nerd-corner.com/wp-content/uploads/2021/06/SetUp-Arduino-Pi-300x225.jpg 300w, https://nerd-corner.com/wp-content/uploads/2021/06/SetUp-Arduino-Pi-1024x768.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2021/06/SetUp-Arduino-Pi-768x576.jpg 768w, https://nerd-corner.com/wp-content/uploads/2021/06/SetUp-Arduino-Pi-1536x1152.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2021/06/SetUp-Arduino-Pi-2048x1536.jpg 2048w" sizes="auto, (max-width: 2550px) 100vw, 2550px" /></p>
<h2>Dateien zum Herunterladen</h2>
<ul>
<li><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://nerd-corner.com/de/download/946/?tmstv=1756244246" rel="nofollow" id="download-link-946" data-redirect="false" >
	Arduino Code VLC to receive text messages</a>
</li>
<li><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://nerd-corner.com/de/download/949/?tmstv=1756244246" rel="nofollow" id="download-link-949" data-redirect="false" >
	Raspberry Pi code to send text messages with VLC</a>
</li>
</ul>
<p>&nbsp;</p>
<p>The post <a href="https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/">Textnachrichten mittels Lichtsignale senden &#8211; Pi zu Arduino</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/textnachrichten-mittels-lichtsignale-senden-pi-zu-arduino/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino Timer Interrupts – Arduino Register programmieren</title>
		<link>https://nerd-corner.com/de/arduino-timer-interrupts-arduino-register-programmieren/</link>
					<comments>https://nerd-corner.com/de/arduino-timer-interrupts-arduino-register-programmieren/#comments</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Sat, 06 Mar 2021 23:47:26 +0000</pubDate>
				<category><![CDATA[Arduino Projekte]]></category>
		<category><![CDATA[Hardware-DE]]></category>
		<category><![CDATA[Software-DE]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Arduino Uno]]></category>
		<category><![CDATA[Bedienungsanleitung]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C Programmierung]]></category>
		<category><![CDATA[Genauigkeit]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Präzision]]></category>
		<category><![CDATA[Schritt für Schritt Anweisung]]></category>
		<category><![CDATA[Timer]]></category>
		<category><![CDATA[Timer Interrupts]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=851</guid>

					<description><![CDATA[<p>Wenn du eine regelmäßige Frequenz mit dem Arduino erreichen willst, kannst du einfach die delay() Funktion verwenden. Diese pausiert das Programm des Arduinos für die &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/arduino-timer-interrupts-arduino-register-programmieren/">Arduino Timer Interrupts – Arduino Register programmieren</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Wenn du eine regelmäßige Frequenz mit dem Arduino erreichen willst, kannst du einfach die delay() Funktion verwenden. Diese pausiert das Programm des Arduinos für die entsprechende Zeitspanne. Wenn die Anforderungen höher sind, kannst du auch millis() oder nanos() als Timer verwenden. Die delay() und millis() Funktionen sind wahrscheinlich für die meisten Anwendungen ausreichend, aber wenn du nicht das ganze Programm pausieren oder eine 100% exakte Taktzeit erreichen willst, macht es Sinn, Arduino Timer Interrupts zu verwenden. Wir erklären was Timer Interrupts sind und wie man sie benutzt. Den Arduino Code findest du am Ende des Beitrags.</p>
<p><em><strong>Das könnte dich auch interessieren:</strong> <a href="https://nerd-corner.com/de/wie-programmiert-man-einen-praezisen-timer-in-c-fuer-linux/" target="_blank" rel="noopener noreferrer">Raspberry Pi Timer programmieren in C</a></em></p>
<h2>Liste der Komponenten</h2>
<ul>
<li><a href="https://amzn.to/3Bhpobz" target="_blank" rel="noopener">Arduino Uno</a></li>
<li><a href="https://amzn.to/3kAMzHH" target="_blank" rel="noopener">LED</a></li>
<li><a href="https://amzn.to/3xSmA2m" target="_blank" rel="noopener">Jumper Kabel</a></li>
<li><a href="https://amzn.to/3y5rp8N" target="_blank" rel="noopener">220 Ohm Widerstand</a></li>
<li><a href="https://amzn.to/3zhDcke" target="_blank" rel="noopener">Steckbrett</a></li>
</ul>
<h2>Was ist eigentlich ein Timer?</h2>
<p>Ein Timer ist im Grunde nichts anderes als ein bestimmtes Register im Mikrocontroller, das hardwaregesteuert kontinuierlich um 1 erhöht (oder verringert) wird. Anstatt Anweisungen im Programm zu kodieren, die regelmäßig ausgeführt werden und ein Register um 1 erhöhen, macht der Mikrocontroller das ganz von alleine!</p>
<p>Dies wird nützlich, wenn eine Aktion bei bestimmten Zählerwerten ausgeführt wird. Einer dieser &#8218;bestimmten Zählerstände&#8216; ist zum Beispiel der Überlauf. Das Zählregister eines Timers kann nicht beliebig lange inkrementiert werden. Z.B. ist der höchste Zählerstand, den ein 8-Bit-Timer erreichen kann, 2^8 &#8211; 1 = 255. Der nächste Schritt ist nicht 256, sondern es kommt zu einem Überlauf, der den Timer wieder auf 0 setzt. Das ist die ganze Magie! Wir können den Controller so konfigurieren, dass ein Interrupt ausgelöst wird, wenn der Timer überläuft. Anschließend können wir einen Code in das Arduino Programm schreiben, der im Falle eines Interrupts ausgeführt wird. Zum Beispiel können wir eine LED zum Leuchten bringen oder einen bestimmten Sensorwert abfragen.</p>
<h2>Arduino Uno Mikrocontroller ATMEGA328P</h2>
<p><img loading="lazy" decoding="async" class="alignright wp-image-784 size-medium zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/11/ATMEGA328P-300x274.jpg" alt="Microcontroller ATMEGA328P Nerd Corner Arduino Uno Timer Interrupts" width="300" height="274" srcset="https://nerd-corner.com/wp-content/uploads/2020/11/ATMEGA328P-300x274.jpg 300w, https://nerd-corner.com/wp-content/uploads/2020/11/ATMEGA328P.jpg 466w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Der ATMEGA328P-Mikrocontroller ist das Herzstück des Arduino Uno-Boards. (ACHTUNG: Der Arduino Mega z.B. hat einen anderen Mikrocontroller!) Der ATMEGA328P Mikrocontroller hat 3 Timer (<a href="https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf">Datenblatt</a>), die teilweise in Arduino-Funktionen und/oder teilweise in Bibliotheken verwendet werden. Das Überschreiben der Timer-Register kann daher zu Komplikationen mit bestehenden Timer-Funktionen wie millis(), micros() oder delay() führen und sollte mit Vorsicht verwendet werden. Die 3 Timer sind Timer0 (8Bit), Timer1 (16Bit) und Timer2 (8Bit).</p>
<ul>
<li>8 Bit-Timer0: wird genutzt für die Funktionen millis(), micros(), delay() und für PWM an Pin D5 und D6</li>
<li>16 Bit-Timer1: wird z. B. für die Bibliothek Servo, VirtualWire, TimerOne und für PWM an Pin D9 und D10 genutzt</li>
<li>8 Bit Timer2: wird genutzt für Funktion tone() und für PWM an Pin D3 und D11</li>
</ul>
<h2>Wie variiert man die Taktgeschwindigkeit?</h2>
<p>Der Systemtakt des Arduino Uno beträgt 16 MHz (CPU-Frequenz). Das bedeutet, dass Timer0, Timer1 und Timer2 16 Millionen Mal pro Sekunde hochlaufen. Die 8-Bit-Timer zählen z. B. jeweils von 0 bis 255. Bei 256 tritt ein Überlauf auf und die Timer beginnen wieder bei 0. Das bedeutet 16000000/256 = 62500 Überläufe pro Sekunde (62,5kHz Taktrate). Das ist für die meisten Timer-Anwendungen wahrscheinlich zu schnell!</p>
<p>Deshalb gibt es einen Trick, um die Taktraten zu verlangsamen. Man verwendet einen sogenannten Vorteiler (Prescaler). Ein Vorteiler kann auf die Werte 1, 8, 64, 256 oder 1024 eingestellt werden. Er ermöglicht es, den Systemtakt (16MHz) durch den gewählten Faktor zu teilen und eine niedrigere Taktrate für die Timer einzustellen. Ein Vorteiler von 1024 würde z. B. die Timer-Register nur beim 1024sten Systemtakt um 1 erhöhen. Das wären 16000000/1024=15625 Inkremente pro Sekunde und damit bei einem 8-Bit-Timer 15625/256= 61,035 Überläufe pro Sekunde (~61 Hz Taktrate des Timers).</p>
<h2>Anwendungsbeispiel: LED soll mit 50 Hz blinken</h2>
<p>Im Folgenden wird die Ansteuerung von Arduino Timer Interrupts mit dem 16-Bit Timer1 gezeigt. Damit soll eine LED im 50 Hz-Takt aufleuchten. Schaltplan, Arduino-Code und Bilder sind ebenfalls enthalten. (Die Vorgehensweise für den 8-Bit-Timer0 und Timer2 ist analog.) Für den zeitgesteuerten Impuls benötigen Sie den sogenannten &#8222;CTC-Modus&#8220;.</p>
<p>Im CTC-Modus (&#8222;Clear Timer on Compare Mode&#8220;) wird der Zähler gelöscht, wenn der Wert des Zählers (TNCT1) entweder mit dem Wert des OCR1A-Registers oder dem Wert des ICR1-Registers (in unserem Fall OCR1A) übereinstimmt. Das OCR1A-Register bestimmt also den Maximalwert des Zählers und damit seine Auflösung.</p>
<h3>Der 16 Bit Timer1 braucht die folgenden Register:</h3>
<ul>
<li>Timer Counter Register 1: TCNT1</li>
<li>Output Compare Register A: OCR1A</li>
<li>Timer Counter Control Register A: TCCR1A</li>
<li>Timer Counter Control Register B: TCCR1B</li>
<li>Timer/Counter Interrupt Mask Register: TIMSK1</li>
<li>(Für Timer0 und Timer2 würden die entsprechenden Register TCNT0 bzw. TCNT2 heißen)</li>
</ul>
<h3>Berechnung des OCR1A Registers für Arduino Timer Interrupts</h3>
<p>Der Wert des Registers OCR1A ist abhängig von der gewünschten Interruptfrequenz und dem gewählten Vorteiler. Es gilt die folgende Formel:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-783 zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/11/InterruptFrequency.jpg" alt="Formula for Arduino Timer Interrupt Frequency calculation OCR1A register" width="691" height="156" srcset="https://nerd-corner.com/wp-content/uploads/2020/11/InterruptFrequency.jpg 692w, https://nerd-corner.com/wp-content/uploads/2020/11/InterruptFrequency-300x68.jpg 300w" sizes="auto, (max-width: 691px) 100vw, 691px" /></p>
<p>Wir setzen unsere Spezifikationen in die Formel ein:</p>
<ul>
<li>CPU-Frequenz Arduino Uno: 16.000.000 Hz</li>
<li>Gewünschte Interruptfrequenz: 50 Hz (= 20 ms Periodendauer)</li>
<li>Möglicher Vorteiler: 1, 8, 64, 256 oder 1024</li>
</ul>
<p><strong>Berechnungsbeispiel mit Vorteiler 1024:</strong><br />
OCR1A= (16.000.000 / (1024 * 50)) &#8211; 1 = 311,5</p>
<p><strong>Berechnungsbeispiel mit Vorteiler 8:</strong><br />
OCR1A= (16,000,000 / (8 * 50)) &#8211; 1 = 39,999</p>
<p><strong>ACHTUNG:</strong> Der OCR1A-Wert muss kleiner als 65,536 (2^16 ) sein!</p>
<p><strong>Daher kann ein Vorteiler 8 NICHT die 10 Hz Interruptfrequenz erreichen:</strong><br />
OCR1A= (16.000.000 / (8 * 10)) &#8211; 1 = 199.999</p>
<p>Der Wert 199,999 ist größer als das Register mit 65,536, daher muss ein anderer Vorteiler verwendet werden, um 10 Hz zu erreichen</p>
<p><strong>Stattdessen ein Vorteiler 64 für 10 Hz Interruptfrequenz:</strong><br />
OCR1A= (16.000.000 / (64 * 10)) &#8211; 1 = 24.999</p>
<p><em>Wird nun ein Timer1-Interrupt ausgelöst, springt der Programmablauf in eine zu erstellende Interrupt-Service-Routine &#8222;ISR(TIMER1_COMPA_vect)&#8220;. (Siehe Arduino Code)</em></p>
<h3>Bit Kombination für die gewünschten Vorteiler</h3>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-785 zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterrupts.jpg" alt="Arduino Uno timer interrupts Prescaler " width="1121" height="413" srcset="https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterrupts.jpg 1122w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterrupts-300x110.jpg 300w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterrupts-1024x377.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterrupts-768x283.jpg 768w" sizes="auto, (max-width: 1121px) 100vw, 1121px" /></p>
<h3>Arduino Timer Interrupts Code für die 50 Hz Frequenz</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="c">void setup() {

  pinMode(11,OUTPUT);  //LED pin (to blink in 50Hz frequency)
  
//START TIMER SETUP
//TIMER SETUP for highly preceise timed measurements 

  cli();//stop all interrupts

  // turn on CTC mode
  TCCR1A = 0;// set entire TCCR1A register to 0
  TCCR1B = 0;// same for TCCR1B
  TCCR1B |= (1 &lt;&lt; WGM12);

  // Set CS11 bit for prescaler 8
  TCCR1B |= (1 &lt;&lt; CS11); 
  
  //initialize counter value to 0;
  TCNT1  = 0;
  
  // set timer count for 50Hz increments
  OCR1A = 39999;// = (16*10^6) / (50*8) - 1  
  
  // enable timer compare interrupt
  TIMSK1 |= (1 &lt;&lt; OCIE1A);
  
  sei();//allow interrupts
  //END TIMER SETUP
}



ISR(TIMER1_COMPA_vect) {//Interrupt at frequency of 50 Hz
 //write your timer code here

 digitalWrite(11,HIGH);
 delay(15);
 digitalWrite(11,LOW);
}




void loop() {

//when the timer is over, your program will stop in the loop function and jump to the timer code. 
//After the timer code it will jump back to the point where it left the loop function
}</pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-786 zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterruptLED.jpg" alt="Arduino Timer Interrupt LED sketch" width="1649" height="839" srcset="https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterruptLED.jpg 1650w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterruptLED-300x153.jpg 300w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterruptLED-1024x521.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterruptLED-768x391.jpg 768w, https://nerd-corner.com/wp-content/uploads/2020/11/TimerInterruptLED-1536x782.jpg 1536w" sizes="auto, (max-width: 1649px) 100vw, 1649px" /></p>
<p>The post <a href="https://nerd-corner.com/de/arduino-timer-interrupts-arduino-register-programmieren/">Arduino Timer Interrupts – Arduino Register programmieren</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/arduino-timer-interrupts-arduino-register-programmieren/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino mit Hallsensor KY-024</title>
		<link>https://nerd-corner.com/de/arduino-mit-hallsensor-ky024/</link>
					<comments>https://nerd-corner.com/de/arduino-mit-hallsensor-ky024/#respond</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Sat, 06 Mar 2021 18:21:37 +0000</pubDate>
				<category><![CDATA[Arduino Projekte]]></category>
		<category><![CDATA[Hardware-DE]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Arduino Code]]></category>
		<category><![CDATA[arduino mega]]></category>
		<category><![CDATA[Fritzing]]></category>
		<category><![CDATA[Hall Effekt]]></category>
		<category><![CDATA[hall sensor]]></category>
		<category><![CDATA[hallsensor]]></category>
		<category><![CDATA[KY-024]]></category>
		<category><![CDATA[KY024]]></category>
		<category><![CDATA[Verkabelung]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=863</guid>

					<description><![CDATA[<p>Ein Hall Sensor kann Magnetfelder detektieren und eignet sich daher sehr gut im Bastelbereich um Bewegungen zu erkennen. Häufig findet man im Internet Videos bei &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/arduino-mit-hallsensor-ky024/">Arduino mit Hallsensor KY-024</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Ein Hall Sensor kann Magnetfelder detektieren und eignet sich daher sehr gut im Bastelbereich um Bewegungen zu erkennen. Häufig findet man im Internet Videos bei denen ein Hall Sensor als Drehzahlmesser dient.</p>
<p>Wir haben bereits kleinere Arduino Projekte in Angriff genommen. Als nächstes möchten wir eine Gebetsmühle bauen, die anfängt zu Leuchten, wenn sie gedreht wird. Hierfür werden wir einen Hall Sensor brauchen.</p>
<p><em><strong>Das könnte dich auch interessieren:</strong> <a href="https://nerd-corner.com/de/arduino-luefter-steuerung/">Wie programmiert man eine Arduino Lüfter Steuerung.</a></em></p>
<p>In diesem Beitrag wird an einem ganz einfachen Beispiel erklärt wie man einen Hall Sensor mit einem Arduino verbindet und so programmiert, dass eine LED anfängt zu leuchten, sobald der Hall Sensor KY024 ein Magnetfeld detektiert.</p>
<h2>Liste der Bauteile</h2>
<ul>
<li><a href="https://amzn.to/2UnkRnk" target="_blank" rel="noopener">Arduino Mega</a></li>
<li><a href="https://amzn.to/3xSmA2m" target="_blank" rel="noopener">Jumper Kabel</a></li>
<li><a href="https://amzn.to/3y5rp8N" target="_blank" rel="noopener">220 Ohm Widerstand</a></li>
<li><a href="https://amzn.to/3kAMzHH" target="_blank" rel="noopener">LED</a></li>
<li><a href="https://amzn.to/3kym2e3" target="_blank" rel="noopener">Magneten</a></li>
<li><a href="https://amzn.to/3xRvqxr" target="_blank" rel="noopener">Hallsensor KY-024</a></li>
</ul>
<p><iframe loading="lazy" hcb-fetch-image-from="https://youtu.be/SyzZMWDjQ1w" title="KY-024 Hall Sensor with Arduino code and full user guide!" width="1200" height="675" src="https://www.youtube.com/embed/SyzZMWDjQ1w?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<h2>Wie funktioniert ein Hallsensor bzw. der Halleffekt?</h2>
<p>Wenn sich ein Stromdurchflossener elektrischer Leiter in einem Magnetfeld befindet, baut sich ein elektrisches Feld auf. Dieses ist senkrecht zur Stromrichtung und zum Magnetfeld und kompensiert die Lorentzkraft, welche auf die Elektronen wirkt.</p>
<p>Ein Hall-Sensor liefert auch ein Signal, wenn das Magnetfeld, in dem er sich befindet, konstant ist. Dies ist der Vorteil im Vergleich zu einer einfachen Spule, die nur die Ableitung des Magnetfeldes nach der Zeit feststellen kann.</p>
<h2>Der Hallsensor KY-024</h2>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-672 zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/07/KY024.jpg" alt="Hall sensor KY024 KY-024 KY 024 arduino code" width="913" height="755" srcset="https://nerd-corner.com/wp-content/uploads/2020/07/KY024.jpg 914w, https://nerd-corner.com/wp-content/uploads/2020/07/KY024-300x248.jpg 300w, https://nerd-corner.com/wp-content/uploads/2020/07/KY024-768x635.jpg 768w" sizes="auto, (max-width: 913px) 100vw, 913px" /></p>
<p>Der lineare magnetische Hallsensor KY-024 kann Magnetfelder detektieren und reagiert daher sobald man sich ihm mit einem Magnet nähert. Er verfügt über ein Potentiometer mit dem man die Empfindlichkeit des Sensors einstellt. Der KY-024 Hallsensor bietet sowohl einen analogen als auch einen digitalen Ausgang.</p>
<p>Der digitale Ausgang fungiert als Schalter, der ein- und ausgeschaltet wird, wenn sich ein Magnet in der Nähe befindet. Der Analogausgang dagegen kann die Polarität und relative Stärke des Magnetfelds messen.</p>
<h2>KY-024 Arduino Verkabelung</h2>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-670 zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/07/HallSensor_Steckplatine.png" alt="Wiring the KY024 hall sensor to an arduino" width="1913" height="1034" srcset="https://nerd-corner.com/wp-content/uploads/2020/07/HallSensor_Steckplatine.png 1914w, https://nerd-corner.com/wp-content/uploads/2020/07/HallSensor_Steckplatine-300x162.png 300w, https://nerd-corner.com/wp-content/uploads/2020/07/HallSensor_Steckplatine-1024x554.png 1024w, https://nerd-corner.com/wp-content/uploads/2020/07/HallSensor_Steckplatine-768x415.png 768w, https://nerd-corner.com/wp-content/uploads/2020/07/HallSensor_Steckplatine-1536x831.png 1536w" sizes="auto, (max-width: 1913px) 100vw, 1913px" /></p>
<p>Es handelt sich um einen sehr einfachen Aufbau, der nur dafür dient die Funktionsweise des KY-024 Hallsensors zu verdeutlichen. Bitte auf die Vorwärtsrichtung der LED achten, das abgeknickte Ende wird mit einem Arduino Pin verbunden und das gerade Ende mit GND. Korrekterweise braucht die LED einen 220 Ohm Vorschaltwiderstand. Dieser kann aber für die kurze Anwendungsdauer auch vernachlässigt werden.</p>
<p>Ansonsten analog zur <a href="https://de.wikipedia.org/wiki/Fritzing">Fritzing</a> Skizze GND des KY-024 mit GND des Arduino verbinden. Den analogen Ausgang A0 des KY-024 mit A0 des Arduino Mega verbinden. Das + des KY-024 mit 5V des Arduino verbinden und den digitalen Ausgang D0 des KY-024 mit Pin 9 des Arduino verbinden. Das war auch schon der komplette Aufbau.</p>
<h2>Hall Sensor KY-024 Arduino Code</h2>
<pre class="EnlighterJSRAW" data-enlighter-language="c" data-enlighter-title="Hallsensor.ino" data-enlighter-theme="beyond" data-enlighter-group="Hallsensor">int LED = 53 ; // LED
int digitalPin = 9; // Hall magnetic sensor input 1 (high) or 0 (low)
int analogPin = A0; // analog Pin also available, but not necessary
int digitalInputValue ; // digital readings
int analogInputValue; // analog readings

void setup ()
{
  pinMode (LED, OUTPUT); 
  pinMode (digitalPin, INPUT); 
  pinMode(analogPin, INPUT); //not necessary, but it is interesting to see the analog values
  Serial.begin(9600);
}

void loop ()
{
  
  digitalInputValue = digitalRead(digitalPin) ; 
  if (digitalInputValue == HIGH) // When magnet is present, digitalInputValue gets 1 (HIGH) and turns LED on
  {
    digitalWrite (LED, HIGH);
    
  }
  else
  {
    
    digitalWrite (LED, LOW);
  }
  
  //Here you can see the analog values of the sensor
  analogInputValue = analogRead(analogPin);
  Serial.println(analogInputValue); // print analog value

  delay(100);
}</pre>
<p>Wir definieren zunächst die Belegung der LED (hier Pin 53), den digitalen (Pin 9) und den analogen Pin (Pin A0) und zwei Variablen um die digitalen und analogen Sensordaten auszulesen. Für unseren Zweck, die LED zum Leuchten zu bringen reicht der digitale Pin.</p>
<p>Der analoge Pin kann eigentlich vernachlässigt werden. Da es aber für dieses Tutorial nützlich ist auch die analogen Werte zu zeigen wurde der analoge Pin trotzdem im Code berücksichtigt.</p>
<p>Im Setup wird der jeweilige PinMode definiert und in der Loop Funktion wird der digitale Sensor Wert des KY 024 eingelesen und je nach Wert erhält die LED das Kommando zu leuchten oder eben nicht. Der digitale Sensorwert ist entweder 0 oder 1. Wenn man nun möchte kann man sich mit den vorletzten 2 Zeilen die zugehörigen analogen Werte anzeigen lassen.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-677 size-large zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/07/Analog-Sensor-Data-1024x597.jpg" alt="hallsensor Ky024 arduino code analog data" width="1024" height="597" srcset="https://nerd-corner.com/wp-content/uploads/2020/07/Analog-Sensor-Data-1024x597.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2020/07/Analog-Sensor-Data-300x175.jpg 300w, https://nerd-corner.com/wp-content/uploads/2020/07/Analog-Sensor-Data-768x447.jpg 768w, https://nerd-corner.com/wp-content/uploads/2020/07/Analog-Sensor-Data-1536x895.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2020/07/Analog-Sensor-Data.jpg 1917w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<h2>Download Dateien</h2>
<ul>
<li><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://nerd-corner.com/de/download/674/?tmstv=1756244246" rel="nofollow" id="download-link-674" data-redirect="false" >
	Hall sensor KY-024 Arduino code</a>
</li>
</ul>
<p>The post <a href="https://nerd-corner.com/de/arduino-mit-hallsensor-ky024/">Arduino mit Hallsensor KY-024</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/arduino-mit-hallsensor-ky024/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino Lüfter Steuerung</title>
		<link>https://nerd-corner.com/de/arduino-luefter-steuerung/</link>
					<comments>https://nerd-corner.com/de/arduino-luefter-steuerung/#comments</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Sat, 06 Feb 2021 14:10:59 +0000</pubDate>
				<category><![CDATA[Arduino Projekte]]></category>
		<category><![CDATA[Hardware-DE]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Lüfter]]></category>
		<category><![CDATA[Steuerung]]></category>
		<category><![CDATA[transistor]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=859</guid>

					<description><![CDATA[<p>Es gibt verschiedene Möglichkeiten die Geschwindigkeit bzw. Drehzahl eines Lüfters zu regulieren. Falls dein Lüfter einen PWM Anschluss hat, könnte man beispielsweise die Drehzahl über &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/arduino-luefter-steuerung/">Arduino Lüfter Steuerung</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Es gibt verschiedene Möglichkeiten die Geschwindigkeit bzw. Drehzahl eines Lüfters zu regulieren. Falls dein Lüfter einen PWM Anschluss hat, könnte man beispielsweise die Drehzahl über den PWM direkt regulieren.</p>
<p>In diesem Beitrag zeigen wir dir wie sich die Drehzahl des Lüfters über die Spannung steuern lässt. Hierfür benötigt man lediglich die + und &#8211; Anschlüsse des Lüfters. Auch wenn es sich bei deinem Lüfter um einen Computerlüfter mit 3 oder 4 Anschlüssen handelt, brauchst du nur die + und &#8211; Anschlüsse.</p>
<p>Da wir hier mit einem 12V Lüfter arbeiten und der Arduino maximal 5V Ausgangsspannung leisten kann, ist eine externe Stromversorgung notwendig. Solltest du mit einem 5V Lüfter arbeiten, dann reicht natürlich die Ausgangsspannung des Arduino.</p>
<p><em><strong>Das könnte Dich auch interessieren:</strong> <a href="https://nerd-corner.com/de/android-bluetooth-classic-app-zur-arduino-steuerung/">Arduino per Bluetooth App steuern.</a></em></p>
<h2>Liste der Bauteile</h2>
<ul>
<li><a href="https://amzn.to/2UnkRnk" target="_blank" rel="noopener">Arduino Mega</a></li>
<li><a href="https://amzn.to/3zhDcke" target="_blank" rel="noopener">Steckbrett</a></li>
<li><a href="https://amzn.to/3BoFzDG" target="_blank" rel="noopener">12V Spannungsversorgung</a></li>
<li><a href="https://amzn.to/2VZRQyq" target="_blank" rel="noopener">12V Lüfter</a></li>
<li><a href="https://amzn.to/3xSmA2m" target="_blank" rel="noopener">Jumper Kabel</a></li>
<li><a href="https://amzn.to/3y5rp8N" target="_blank" rel="noopener">220 Ohm Widerstand</a></li>
<li><a href="https://amzn.to/3wTvKds" target="_blank" rel="noopener">NPN Transistor</a></li>
</ul>
<p><iframe loading="lazy" hcb-fetch-image-from="https://youtu.be/gY5d0foRP28" title="Arduino Fan Controller // With Arduino Code and Wiring // Full user guide // Step by Step" width="1200" height="675" src="https://www.youtube.com/embed/gY5d0foRP28?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<p>&nbsp;</p>
<h2>Verkabelung der Arduino Lüfter Steuerung</h2>
<p><img loading="lazy" decoding="async" class="wp-image-308 size-large zoooom aligncenter" src="https://nerd-corner.com/wp-content/uploads/2020/03/fan_ohne_bluetooth_mit_transistor-1024x465.png" alt="arduino fan controller wiring fritzing" width="720" height="327" srcset="https://nerd-corner.com/wp-content/uploads/2020/03/fan_ohne_bluetooth_mit_transistor-1024x465.png 1024w, https://nerd-corner.com/wp-content/uploads/2020/03/fan_ohne_bluetooth_mit_transistor-300x136.png 300w, https://nerd-corner.com/wp-content/uploads/2020/03/fan_ohne_bluetooth_mit_transistor-768x349.png 768w, https://nerd-corner.com/wp-content/uploads/2020/03/fan_ohne_bluetooth_mit_transistor-1536x698.png 1536w, https://nerd-corner.com/wp-content/uploads/2020/03/fan_ohne_bluetooth_mit_transistor-2048x930.png 2048w, https://nerd-corner.com/wp-content/uploads/2020/03/fan_ohne_bluetooth_mit_transistor-1920x872.png 1920w, https://nerd-corner.com/wp-content/uploads/2020/03/fan_ohne_bluetooth_mit_transistor.png 3858w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<p>Für die Verkabelung gehen wir entsprechend der Skizze vor. Die 12V Spannungsversorgung wird an das Breadboard angeschlossen. Wir verbinden das &#8211; des Breadboards mit GND des Arduinos (kurze blaue Kabelverbindung im Bild). Anschließend wird das + des Breadboards mit Vin des Arduino Megas verbunden (rotes Kabel zwischen Arduino und Breadboard).</p>
<p>Würden wir unsere 12V Spannungsversorgung in die Steckdose stecken. Dann wäre unser Arduino jetzt bereits mit Strom versorgt. Es ist keine zusätzliche Stromversorgung für den Arduino notwendig. Der Vin Eingang reguliert die 12V automatisch auf die notwendigen 5V für den Arduino.</p>
<p>Ins <a href="https://de.wikipedia.org/wiki/Steckplatine">Breadboard</a> stecken wir jetzt unseren NPN Transistor. Die Basis (B) verbinden wir mit dem 220 Ohm Widerstand und anschließend auf den Pin 13 (gelbe Verbindung im Bild). Den Kollector (C) des Transistors verbinden wir direkt mit dem negativen Anschluss des Lüfters (schwarzes Lüfter Kabel). Der positive Lüfteranschluss wird mit dem + des Breadboards verbunden. Den Emitter (E) des Transistors verbinden wir mit dem &#8211; des Breadboards. Jetzt fehlt nur noch der Arduino Code.</p>
<h2>Der Code für die Arduino Lüfter Steuerung</h2>
<p><img loading="lazy" decoding="async" class="wp-image-307 zoooom aligncenter" src="https://nerd-corner.com/wp-content/uploads/2020/03/arduino_fan_controller_screenshot.jpg" alt="arduino code fan controller nerd corner" width="635" height="719" srcset="https://nerd-corner.com/wp-content/uploads/2020/03/arduino_fan_controller_screenshot.jpg 636w, https://nerd-corner.com/wp-content/uploads/2020/03/arduino_fan_controller_screenshot-265x300.jpg 265w" sizes="auto, (max-width: 635px) 100vw, 635px" /></p>
<p>Der Arduino Code ist absolut simpel und lässt sich ohne großen Aufwand in jedes bestehende Arduino Programm integrieren. Da wir die Basis des Transistors mit Pin 13 verbunden haben, definieren wir diesen als „motorPin“. Über die Variable „speed“ lässt sich dann die Drehzahl des Lüfters steuern. Für die Drehzahl kann ein Wert zwischen 0 und 255 gewählt werden. Je nach Lüfter Modell ist aber eine Mindestdrehzahl notwendig, damit der Lüfter anläuft.</p>
<p>The post <a href="https://nerd-corner.com/de/arduino-luefter-steuerung/">Arduino Lüfter Steuerung</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/arduino-luefter-steuerung/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Android Bluetooth classic App zur Arduino Steuerung (Lüfter)</title>
		<link>https://nerd-corner.com/de/android-bluetooth-classic-app-zur-arduino-steuerung/</link>
					<comments>https://nerd-corner.com/de/android-bluetooth-classic-app-zur-arduino-steuerung/#comments</comments>
		
		<dc:creator><![CDATA[Nerds]]></dc:creator>
		<pubDate>Wed, 06 Jan 2021 13:42:21 +0000</pubDate>
				<category><![CDATA[Arduino Projekte]]></category>
		<category><![CDATA[Hardware-DE]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[Bluetooth classic]]></category>
		<category><![CDATA[Lüfter]]></category>
		<category><![CDATA[Steuerung]]></category>
		<category><![CDATA[Xamarin]]></category>
		<category><![CDATA[Xamarin Android]]></category>
		<category><![CDATA[Xamarin Bluetooth]]></category>
		<guid isPermaLink="false">https://nerd-corner.com/?p=855</guid>

					<description><![CDATA[<p>Wir haben bereits einen Beitrag erstellt in dem wir erklären wie man Lüfter über die Spannung reguliert. Dabei ist es egal ob der Lüfter mit &#8230; </p>
<p>The post <a href="https://nerd-corner.com/de/android-bluetooth-classic-app-zur-arduino-steuerung/">Android Bluetooth classic App zur Arduino Steuerung (Lüfter)</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Wir haben bereits einen Beitrag erstellt in dem wir erklären wie man Lüfter über die Spannung reguliert. Dabei ist es egal ob der Lüfter mit 12V oder 5V versorgt wird. Auch die Anzahl der Anschlüsse ist unwichtig. Man braucht nur + und &#8211; dafür. Jetzt wollen wir zusätzlich ein Bluetooth Modul mit dem Arduino verbinden und eine App schreiben mit der die Drehzahl des Lüfters verändert werden kann. So erhalten wir eine Bluetooth App Arduino Steuerung.</p>
<p><em><strong>Das könnte Dich auch interessieren:</strong> <a href="https://nerd-corner.com/arduino-luefter-steuerung/">Wie man eine Arduino Lüftersteuerung programmiert.</a></em></p>
<h2>Liste der Bauteile</h2>
<ul>
<li><a href="https://amzn.to/2UnkRnk" target="_blank" rel="noopener">Arduino Mega</a></li>
<li><a href="https://amzn.to/3zhDcke" target="_blank" rel="noopener">Steckbrett</a></li>
<li><a href="https://amzn.to/3BoFzDG" target="_blank" rel="noopener">12V Spannungsversorgung</a></li>
<li><a href="https://amzn.to/2VZRQyq" target="_blank" rel="noopener">12V Lüfter</a></li>
<li><a href="https://amzn.to/3xSmA2m" target="_blank" rel="noopener">Jumper Kabel</a></li>
<li><a href="https://amzn.to/3y5rp8N" target="_blank" rel="noopener">220 Ohm Widerstand</a></li>
<li><a href="https://amzn.to/3wTvKds" target="_blank" rel="noopener">NPN Transistor</a></li>
<li><a href="https://amzn.to/3Biw0pY" target="_blank" rel="noopener">Bluetooth Modul HC-05 oder HC-06</a></li>
</ul>
<p>&nbsp;</p>
<p><iframe loading="lazy" hcb-fetch-image-from="https://www.youtube.com/watch?v=sJ2Og_How2Y" title="Android Bluetooth classic App for Arduino fan control // Arduino Code and Wiring // Full user guide" width="1200" height="675" src="https://www.youtube.com/embed/sJ2Og_How2Y?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<p><img loading="lazy" decoding="async" class="wp-image-323 size-large zoooom aligncenter" src="https://nerd-corner.com/wp-content/uploads/2020/03/IMG_20200311_134834-1024x768.jpg" alt="Android Bluetooth app for arduino control nerd corner" width="720" height="540" srcset="https://nerd-corner.com/wp-content/uploads/2020/03/IMG_20200311_134834-1024x768.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2020/03/IMG_20200311_134834-300x225.jpg 300w, https://nerd-corner.com/wp-content/uploads/2020/03/IMG_20200311_134834-768x576.jpg 768w, https://nerd-corner.com/wp-content/uploads/2020/03/IMG_20200311_134834-1536x1152.jpg 1536w, https://nerd-corner.com/wp-content/uploads/2020/03/IMG_20200311_134834-2048x1536.jpg 2048w, https://nerd-corner.com/wp-content/uploads/2020/03/IMG_20200311_134834-1920x1440.jpg 1920w, https://nerd-corner.com/wp-content/uploads/2020/03/IMG_20200311_134834-scaled.jpg 2560w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<h2>Verkabelung</h2>
<p><img loading="lazy" decoding="async" class="wp-image-324 size-large zoooom aligncenter" src="https://nerd-corner.com/wp-content/uploads/2020/03/fan_mit_bluetooth_mit_transistor-1024x588.png" alt="Android Bluetooth app for arduino control nerd corner" width="720" height="413" srcset="https://nerd-corner.com/wp-content/uploads/2020/03/fan_mit_bluetooth_mit_transistor-1024x588.png 1024w, https://nerd-corner.com/wp-content/uploads/2020/03/fan_mit_bluetooth_mit_transistor-300x172.png 300w, https://nerd-corner.com/wp-content/uploads/2020/03/fan_mit_bluetooth_mit_transistor-768x441.png 768w, https://nerd-corner.com/wp-content/uploads/2020/03/fan_mit_bluetooth_mit_transistor-1536x881.png 1536w, https://nerd-corner.com/wp-content/uploads/2020/03/fan_mit_bluetooth_mit_transistor-2048x1175.png 2048w, https://nerd-corner.com/wp-content/uploads/2020/03/fan_mit_bluetooth_mit_transistor-1920x1102.png 1920w, https://nerd-corner.com/wp-content/uploads/2020/03/fan_mit_bluetooth_mit_transistor.png 3858w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<p>Für die Verkabelung gehen wir analog zu unserem ersten Beitrag zur Lüfter Steuerung vor. 12V Spannungsversorgung wird an das Breadboard angeschlossen. Wir verbinden das &#8211; des Breadboards mit GND des Arduinos (kurze blaue Kabelverbindung im Bild). Anschließend wird das + des Breadboards mit Vin des Arduino Megas verbunden (rotes Kabel zwischen Arduino und Breadboard).</p>
<p>Würden wir unsere 12V Spannungsversorgung in die Steckdose stecken. Dann wäre unser Arduino jetzt bereits mit Strom versorgt. Es ist keine zusätzliche Stromversorgung für den Arduino notwendig. Der Vin Eingang reguliert die 12V automatisch auf die notwendigen 5V für den Arduino.</p>
<p>Ins Breadboard stecken wir jetzt unseren NPN <a href="https://de.wikipedia.org/wiki/Transistor">Transistor</a>. Die Basis (B) verbinden wir mit dem 220 Ohm Widerstand und anschließend auf den Pin 13 (gelbe Verbindung im Bild). Den Kollector (C) des Transistors verbinden wir direkt mit dem negativen Anschluss des Lüfters (schwarzes Lüfter Kabel). Der positive Lüfteranschluss wird mit dem + des Breadboards verbunden. Den Emitter (E) des Transistors verbinden wir mit dem &#8211; des Breadboards.</p>
<p>Zusätzlich zu diesen bereits bekannten Schritten nehmen wir das Bluetooth Modul und verbinden Ground des Moduls mit Ground vom Arduino (schwarze Verbindung). VCC des Moduls wird mit 3,3V des Arduinos Verbunden (rote Verbindung). Falls kein 3,3V Anschluss vorhanden ist, kann auch der 5V Anschluss benutzt werden. TX des Bluetooth Moduls muss mit RX des Arduinos verbunden werden (oranges Kabel). RX des Moduls muss mit TX des Arduinos verbunden werden (lilanes Kabel). Also TX zu RX und RX zu TX. Also immer zum Pendant.</p>
<p>Wichtig: Während der Arduino Code auf den Arduino geflasht wird muss man RX und TX abstecken. Ansonsten funktioniert der Flashvorgang nicht!</p>
<h2>Programmierung der Android Bluetooth Classic App für den Arduino</h2>
<p>Wir programmieren eine reine Android App mit einem HC-05 oder alternativ HC-06 Bluetooth Modul. Es handelt sich dabei um Bluetooth Classic Module. Sie können kein Bluetooth 4.0 auch Bluetooth Low Energy (BLE) genannt. Für BLE würde unser Code ganz anders aussehen. Nachfolgend die Anleitung zur Programmierung. Alle wichtigen Dateien werden ebenfalls hochgeladen.</p>
<p>Als Entwicklungsumgebung für die Bluetooth App Arduino Steuerung nutzen wir Visual Studio (kostenlos) für eine Xamarin.Android App. In AndroidStudio ist der Ablauf analog, allerdings ist der Code dann in Java und nicht in C#.</p>
<p>Auf „Neues Projekt erstellen“ klicken und „Android-App (Xamarin)“ auswählen. Zunächst ergänzen wir die Bluetooth Berechtigungen zur „AndroidManifest.xml“ Datei:</p>
<pre>&lt;uses-permission android: name = "android.permission.BLUETOOTH" /&gt;
&lt;uses-permission android: name = "android.permission.BLUETOOTH_ADMIN" /&gt;</pre>
<p>Anschließend gestalten wir das Layout der Bluetooth App Arduino Steuerung in der „activity_main.xml“ Datei. Wir brauchen 2 Buttons für „Connect“ und „Disconnect“ und einen Slider für die Drehzahlregulierung. Für den Slider setzen wir den Maximalwert auf 255 (android:max=&#8220;255&#8243;).</p>
<p>In der „MainActivity.cs“ fügen wir „using Android.Bluetooth“ hinzu, legen eine „BluetoothConnection“ Klasse an und setzen unsere „activity_main.xml“ Datei als Startseite. Es wird ein Bluetooth Socket kreiert für die Verbindung zum Arduino. Den exakten Code am besten aus der beigefügten Datei entnehmen. Im Wesentlichen senden wir immer ein Byte zum Arduino. Das bedeutet wir können so Zahlen zwischen 0 und 255 senden. Für die Lüfter Steuerung nehmen wir den Bereich von 0 bis 127. Der Arduino verdoppelt diesen Wert und reguliert so den Lüfter der ebenfalls in einem Bereich zwischen 0 und 255 läuft. Der restliche Bereich zwischen 128 und 255 kann für weitere Funktionen genutzt werden. Jetzt nur noch die App kompilieren und schon haben wir sie auf unserem Handy.</p>
<p><span style="font-size: 1.125rem;">Der Code für die App basiert übrigens auf diesem Projekt hier: </span><a style="font-size: 1.125rem;" href="https://www.instructables.com/id/3-LED-Backlight-Xamarin-and-Arduino-With-HC05/" target="_blank" rel="noopener noreferrer">https://www.instructables.com/id/3-LED-Backlight-Xamarin-and-Arduino-With-HC05/</a></p>
<h2>Arduino Code</h2>
<p><img loading="lazy" decoding="async" class="wp-image-325 size-large zoooom aligncenter" src="https://nerd-corner.com/wp-content/uploads/2020/03/arduino_fan_controller_with_bluetooth_screenshot-1024x866.jpg" alt="arduino fan controller with bluetooth nerd corner" width="720" height="609" srcset="https://nerd-corner.com/wp-content/uploads/2020/03/arduino_fan_controller_with_bluetooth_screenshot-1024x866.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2020/03/arduino_fan_controller_with_bluetooth_screenshot-300x254.jpg 300w, https://nerd-corner.com/wp-content/uploads/2020/03/arduino_fan_controller_with_bluetooth_screenshot-768x649.jpg 768w, https://nerd-corner.com/wp-content/uploads/2020/03/arduino_fan_controller_with_bluetooth_screenshot.jpg 1081w" sizes="auto, (max-width: 720px) 100vw, 720px" /></p>
<pre><code>#define motorPin 13
int received; //for the received Byte
int fanSpeed = 127; //initial speed - must be a number between 0 and 255
void setup() {
  Serial.begin(9600); //for communication with the app
  delay(3000); // small delay
  pinMode(motorPin, OUTPUT); //define motor pin as output
  analogWrite(motorPin,fanSpeed); //set the initial speed of the fan
}
void loop() {  
  while(Serial.available()) 
  {
     received = Serial.read(); //received Byte    
     Serial.println(received); //if the arduino is connected to the PC, than you can check the received Byte
     switch (received)  //you can easily add new cases to customize your arduino
     {
        case 200:
            Serial.println("RESTARTED");
            break;
        default:
            if(received &gt;0 &amp;&amp; received &lt;=127)
            {
              fanSpeed = (received*2); //app sends value between 0 and 127 - so we need to double it for the fan range between 0 and 255
              delay(10);
            }
            break;
     }  
  }
  analogWrite(motorPin,fanSpeed); //set the speed of the fan
}</code></pre>
<p>Bitte nicht vergessen vor dem Flashen des Arduino die RX und TX Verbindung abzuziehen und danach wieder richtig zu verbinden (RX zu TX und TX zu RX)!</p>
<p>Da wir die Basis des Transistors mit Pin 13 verbunden haben, definieren wir diesen als „motorPin“. Über die Variable „fanSpeed“ lässt sich dann die Drehzahl des Lüfters steuern. Zu Beginn setzen wir „fanSpeed“ auf die halbe Geschwindigkeit, also 127. (Je nach Lüfter Modell ist eine gewisse Mindestdrehzahl notwendig, damit der Lüfter anläuft.)</p>
<p>Wir definieren uns eine Variable „received“ in der wir das von der App gesendete Byte speichern. In der setup-Funktion starten wir die Kommunikation mit „Serial.begin“ und setzen die Baudrate auf 9600. Anschließend programmieren wir eine while-Schleife in der loop-Funktion. Die while-Schleife wird aktiv immer wenn ein Byte empfangen wird. Sollte der Wert des Bytes zwischen 0 und 127 liegen, dann verdoppeln wir diesen und definieren ihn als unsere neue Lüfter Drehzahl „fanSpeed“. Sobald die while-Schleife beendet ist wird die neue Geschwindigkeit für den Lüfter eingestellt mit „analogWrite(motorPin,fanSpeed);“</p>
<p><span style="font-size: 2rem;">Screenshots der Bluetooth App Arduino Steuerung</span></p>
<p>Bitte beachten, man muss sich zuerst in den Einstellungen mit dem Bluetooth Modul verbinden für die Bluetooth App Arduino Steuerung. Erst danach kann man sich in der App mit dem Arduino verbinden!</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-329 size-medium zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154409_com.companyname.fancontrollerbluetooth-150x300.jpg" alt="Screenshots Android App Bluetooth arduino control nerd corner" width="150" height="300" srcset="https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154409_com.companyname.fancontrollerbluetooth-150x300.jpg 150w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154409_com.companyname.fancontrollerbluetooth-512x1024.jpg 512w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154409_com.companyname.fancontrollerbluetooth-768x1536.jpg 768w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154409_com.companyname.fancontrollerbluetooth-1024x2048.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154409_com.companyname.fancontrollerbluetooth.jpg 1080w" sizes="auto, (max-width: 150px) 100vw, 150px" /> <img loading="lazy" decoding="async" class="alignnone wp-image-330 size-medium zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154416_com.companyname.fancontrollerbluetooth-1-150x300.jpg" alt="Screenshots Android App Bluetooth arduino control nerd corner" width="150" height="300" srcset="https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154416_com.companyname.fancontrollerbluetooth-1-150x300.jpg 150w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154416_com.companyname.fancontrollerbluetooth-1-512x1024.jpg 512w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154416_com.companyname.fancontrollerbluetooth-1-768x1536.jpg 768w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154416_com.companyname.fancontrollerbluetooth-1-1024x2048.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154416_com.companyname.fancontrollerbluetooth-1.jpg 1080w" sizes="auto, (max-width: 150px) 100vw, 150px" /> <img loading="lazy" decoding="async" class="alignnone wp-image-331 size-medium zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154426_com.companyname.fancontrollerbluetooth-150x300.jpg" alt="Screenshots Android App Bluetooth arduino control nerd corner" width="150" height="300" srcset="https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154426_com.companyname.fancontrollerbluetooth-150x300.jpg 150w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154426_com.companyname.fancontrollerbluetooth-512x1024.jpg 512w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154426_com.companyname.fancontrollerbluetooth-768x1536.jpg 768w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154426_com.companyname.fancontrollerbluetooth-1024x2048.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154426_com.companyname.fancontrollerbluetooth.jpg 1080w" sizes="auto, (max-width: 150px) 100vw, 150px" /> <img loading="lazy" decoding="async" class="alignnone wp-image-332 size-medium zoooom" src="https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154438_com.companyname.fancontrollerbluetooth-150x300.jpg" alt="Screenshots Android App Bluetooth arduino control nerd corner" width="150" height="300" srcset="https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154438_com.companyname.fancontrollerbluetooth-150x300.jpg 150w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154438_com.companyname.fancontrollerbluetooth-512x1024.jpg 512w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154438_com.companyname.fancontrollerbluetooth-768x1536.jpg 768w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154438_com.companyname.fancontrollerbluetooth-1024x2048.jpg 1024w, https://nerd-corner.com/wp-content/uploads/2020/03/Screenshot_20200311_154438_com.companyname.fancontrollerbluetooth.jpg 1080w" sizes="auto, (max-width: 150px) 100vw, 150px" /></p>
<h2>Download files</h2>
<ul>
<li><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://nerd-corner.com/de/download/340/?tmstv=1756244246" rel="nofollow" id="download-link-340" data-redirect="false" >
	Source Code Android App "FanControllerBluetooth"</a>
</li>
<li><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://nerd-corner.com/de/download/350/?tmstv=1756244246" rel="nofollow" id="download-link-350" data-redirect="false" >
	Arduino Code for the "FanControllerBluetooth" app</a>
</li>
<li><a  data-e-Disable-Page-Transition="true" class="download-link" title="" href="https://nerd-corner.com/de/download/345/?tmstv=1756244246" rel="nofollow" id="download-link-345" data-redirect="false" >
	Only MainActivity.cs AndroidMainfest.xml and activity_main.xml of the "FanControllerBluetooth" app</a>
</li>
</ul>
<p>The post <a href="https://nerd-corner.com/de/android-bluetooth-classic-app-zur-arduino-steuerung/">Android Bluetooth classic App zur Arduino Steuerung (Lüfter)</a> appeared first on <a href="https://nerd-corner.com/de">Nerd Corner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nerd-corner.com/de/android-bluetooth-classic-app-zur-arduino-steuerung/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
