Dieser Leitfaden soll technikbegeisterten Einsteigern die Anfänge in die umfangreiche
Welt der Elektronik und der Programmierung des Arduino leichter und verständlicher machen.
Ziel ist es, nach dem sorgfältigen Durcharbeiten dieses Beitrags nicht nur einen Überblick
über die Möglichkeiten und Grenzen des Arduino zu bekommen, sondern auch die ersten eigenen
Projekte und Ideen umzusetzen.
Wer allerdings tiefer in die Materie der Elektrotechnik, Elektronik oder Mikrocontroller-
Programmierung einsteigen möchte, dem werden an den entsprechenden Stellen weiterführende
Links angegeben.
Für das Verstehen der Inhalte dieses Beitrags sollten die Grundbegriffe der Physik ausreichen, wie sie in der Schule gelehrt werden. Da aber meine Schulzeit auch schon einige Zeit zurückliegt, werde ich an den entsprechenden Stellen dieses Wissen auffrischen bzw. nützliche Links angeben. Für kompaktes Wissen eignet sich eine Formelsammlung, wie z.B. Formelsammlung Elektrotechnik
Generell sollte man mit dem Umgang mit elektrischem Strom immer passende Sicherheitsvorkehrungen
treffen, um sich oder andere Menschen zu schützen und Gefahren durch Brände/Explosionen o.ä. zu
vermeiden.
Es werden hier keinerlei Hinweise im Umgang mit Netzspannung (=110V/240V) gegeben
und ich rate auch ausdrücklich davon ab, irgendwelche Versuche damit zu unternehmen!
(siehe auch: Verordnung über Allgemeine Bedingungen für den Netzanschluss und dessen Nutzung für die Elektrizitätsversorgung in Niederspannung)
Um die Beispiele in diesem Leitfaden nachzubauen (und daran auch weiter zu experimentieren), sind folgende Bauteile notwendig:
Einige zusätzliche Hilfsmittel und Werkzeuge machen das Leben im Umgang mit den oft kleinen elektronischen Komponenten einfacher:
Viele Komponenten kann man einfach und günstig auch aus Starterkits beziehen, z.B.:
Natürlich kann man die einzelnen Komponenten mit ihren spezifischen Werten auch direkt beziehen. Dies ist
vor allem nützlich, wenn man genauere Vorstellungen hat, was man bauen will und welche Komponenten man in
welcher Zahl benötigt. Einige Bezugsquellen werden auf der Seite mit den
Links genannt.
Will man zusätzlich auch einfache Lötarbeiten durchführen, ist die Anschaffung der folgenden Dinge
notwendig bzw. hilfreich:
Bevor wir uns aber dem Arduino selbst widmen, werden einige essentielle Grundlagen geschaffen, damit die wichtigsten Begriffe und der Umgang mit den häufigsten Bauteilen verstanden werden. Ungeduldige können die Grundlagen natürlich auch einfach überspringen.
Die folgenden 5 Größen gehören zu den wichtigsten Kennzahlen in der Elektrik/Elektronik und werden sehr häufig mit ihren entsprechenden Symbolen verwendet:
Die (elektrische) Spannung ist eine grundlegende Größe der Elektrotechnik. Sie kann
vorhanden sein, ohne dass Strom fließt und gibt einfach gesagt die "Stärke"
einer Spannungsquelle (=elektrische Energiequelle; z.B. Batterie) an. Zur Anschauung
kann sie mit dem Wasserdruck in einer Rohrleitung verglichen werden: je höher der
"Druck", desto höher die Spannung.
Formelzeichen: U
Einheit: Volt; abgekürzt V
Beispiel: Die Netzspannung in Europa beträgt 230 Volt, d.h. UNetz = 230 V
Im Hobby-Bereich werden üblicherweise Spannung zwischen 0 Volt und 16 V verwendet.
Die (elektrische) Stromstärke gibt die Menge an elektrischer Energie an, die pro Zeit
durch eine Leitung fließt.
Formelzeichen: I
Einheit: Ampere; abgekürzt A
Beispiel: Durch die LED fließt ein Strom von 7 Milliampere, d.h. ILED = 7 mA
Im Hobby-Bereich wird vor allem im Bereich von Milliampere (mA) gearbeitet.
Mit der elektrischen Leistung ist hier das Produkt aus Spannung und Stromstärke gemeint und
kann beispielsweise angeben, wieviel Hitze ein elektronisches Bauteil abgibt.
Formelzeichen: P
Einheit: Watt; abgekürzt W
Beispiel: Die Glühbirne hat eine Leistung von 60 Watt, d.h. P = 60 W
Im Hobby-Bereich wird vor allem im Bereich von Milliwatt (mW) gearbeitet.
Der (elektrische) Widerstand ist ein Maß dafür, welche elektrische Spannung erforderlich ist, um
eine bestimmte elektrische Stromstärke durch einen elektrischen Leiter fließen zu lassen.
(Diese Größe ist nicht zu verwechseln mit dem gleichnamigen elektrischen Bauteil, s.u.)
Formelzeichen: R
Einheit: Ohm; abgekürzt Ω
Beispiel: Der Innenwiderstand der Batterie beträgt 2 Ohm, d.h. RBatt = 2 Ω
Üblicherweise ist der Bereich der verwendeten Widerstände (Bauteile) zwischen Milliohm (mΩ) Kiloohm (kΩ) und Megaohm (MΩ)
Der Begriff der (elektrischen) Kapazität ist vereinfacht gesagt die Menge von gespeicherter
elektrischer Energie. (Manchmal wird "Kapazität" auch als Ladungsmenge gespeicherter
Energie in Batterien/Akkus angegeben).
Formelzeichen: C
Einheit: Farad; abgekürzt F
Beispiel: Die Kapazität des Kondensators beträgt 470 Mikrofarad, d.h. C = 470 µF
Im Hobby-Bereich wird im Bereich von Pico- (pF), Nano- (nF), und Mikrofarad (µF) gearbeitet.
Strom kann nur in einem geschlossenen Kreis fließen, d.h. eine Strecke, die beim Gleichstrom vom Pluspol zum Minuspol einer Stromquelle führt. Innerhalb dieses Stromkreises liegen ein oder mehrere elektrische Bauteile (z.B. Glühlampe, Motor), die eine bestimmte Funktion erfüllen. Ist ein Stromkreis an irgendeiner Stelle unterbrochen, fließt kein Strom mehr. Strom kann ebenso wenig fließen, wenn gleichnamige Pole einer Stromquelle verbunden sind.
Im Hobbybereich und auch in diesem Leitfaden werden wir nur den Gleichstrom betrachten, d.h. Stromkreise,
in denen der Strom immer nur in eine Richtung fließt, vom Pluspol zum Minuspol.
Nur zu erwähnen sei hier der Wechselstrom, der für besondere Anwendung oder Bauteile wichtig ist
(z.B. Lautsprecher) bzw. im gebräuchlichen Stromnetz verfügbar ist. Beim Wechselstrom tauschen sich
die elektrischen Pole -d.h. die Stromrichtung- in schneller zeitlicher Abfolge.
Weitere Informationen zu Einheiten, Größen und Formeln können auch in der Wissensdatenbank nachgelesen werden.
Damit Strom fließen kann, benötigt man einen Leiter. Dies ist meist ein Material aus Metall
(z.B. oder Kupfer, Aluminium, Silber, Stahl) oft in Form eines Kabels (mit Drähten bzw. Litzen) oder
gedruckter Leiterbahnen auf einer Platine. Generell kann man jedes Material als Leiter bezeichnen,
welches Strom in halbwegs ungehinderter Form durchläßt, ohne nennenswert Leistung (s.o.) aufzunehmen.
Um den Stromfluss an bestimmten Stellen zu verhindern, werden isolierende Materialien verwendet, z.B.
als Ummantelung eines Kabels. Ein nicht-isoliertes Kabel könnte bei Berührung mit der Haut oder anderen
Metalle den Stromfluss unkontrolliert umleiten. Als Nicht-Leiter oder Isolator versteht man jeden Stoff, der den Strom
nicht nennenswert durchfließen lässt, z.B. viele Kunststoffe, Keramik, Glas oder Porzellan.
Als Kurzschluss wird ein Zustand bezeichnet, in welchem der Stromfluss dort stattfindet,
wo er nicht stattfinden sollte. Dies kann vor allem bei hohen Spannungen und Stromstärken zu sehr gefährlichen
Situationen führen, z.B. elektrischer Schock beim Menschen oder Explosionen und Brände bei Anlagen oder Geräten.
Wasser in Verbindung mit gelösten Salzen (Leitungswasser und v.a. Meerwasser) kann ebenfalls zu einem recht guten
Leiter werden, daher sollte jegliche offene Elektrik und Elektronik von Feuchtigkeit und Wasser ferngehalten werden.
Halbleiter sind Materialien, deren elektrische Leitfähigkeit in etwa zwischen Leitern und Isolatoren liegt. Oftmals ist deren Leitfähigkeit auch von der Temperatur abhängig. Sie werden vor allem in der Elektronik verwendet, wo ihre Leitfähigkeit gezielt angepasst werden kann und so z.B. das Verhalten von bestimmten elektronischen Bauteilen beeinflusst. Verwendet werden Halbleitermaterialien unter anderem in Transistoren, Solarzellen, Leuchtdioden, etc.
Obwohl die Begriffe der Stromquelle und Spannungsquelle in der Elektrotechnik unterschiedliche Bedeutung
haben, wird der Begriff Stromquelle im Folgenden vereinfacht als die Quelle zur Lieferung
des elektrischen Stromes mit einer bestimmten Spannung verwendet. Dies kann sowohl ein (Strom-)Generator,
eine Solarzelle, eine Batterie, ein Akku aber auch das Stromnetz sein. Üblicherweise wird bei jeder
Stromquelle die anliegende Spannung mit angegeben, z.B. 1,5V bei einer AA-Batterie. Stromspeicher
wie Akkus oder Batterien werden oft zusammen mit ihrer Kapazität genannt, welche eigentlich die
Ladungsmenge meint und oft in Amperestunden Ah (oder mAh) angegeben wird.
Warnung: Niemals beide Pole einer Stromquelle direkt miteinander verbinden, da dies
zu einem Kurzschluss führt!
(siehe auch Liste gängiger Batterien und Akkus)
Elektrische Schaltungen werden üblicherweise in sogenannten Schaltplänen mit speziellen Schaltzeichen (Symbolen)
visualisiert. Dies hat den Vorteil, dass der Schaltkreis leichter zu verstehen ist und etwaige
Fehler vor dem Aufbau der Schaltung schon erkannt werden können. Außerdem ist ein Schaltplan
universell und global lesbar und benötigt (ähnlich wie einer chemischen Formel) keinerlei
Kenntnis einer fremden Sprache.
Beispiele für wichtige Symbole können unter Grundlegende Bauelemente gefunden werden.
Am oben gezeigten Schaltplan sieht man, dass man im Stromkreis auch Abzweigungen erstellen kann. Die Eigenschaften und Werte der betroffenen Bauteile bestimmten dann, wieviel Strom in den verschiedenen Sektionen fließen wird.
Normalerweise werden die Bauteile von elektronischen Schaltungen möglichst robust miteinander verbunden,
damit keine ungewollten Kurzschlüsse auftreten können. Dafür werden die Anschlussstellen meist mit weichem
Metall (Silber- oder Bleilegierung) verlötet und ergeben somit eine leitende und sehr stabile Verbindung.
Experimentiert man aber viel oder will eine Schaltung öfters umbauen, so ist ein Verlöten umständlich und mit
hohem Zeitaufwand verbunden und so man kann sich einer lötfreien Technik bedienen: dem Steckbrett (=Breadboard).
Hier werden die Bauteile in ein Raster von teilweise verbundenen Leitungen gesteckt.
Hinweis zum Aufbau jeder Schaltung: Die Stromquelle sollte immer erst dann angeschlossen werden,
wenn der restliche Aufbau der Schaltung fertig und geprüft ist!
Um zu wissen, welche Steckkontakte miteinander verbunden sind, sollte man sich den inneren Aufbau des Breadboards kennen: siehe dazu Wikipedia: Steckplatine
Elektronische Bauelemente (auch Komponente genannt) sind zentraler Bestandteil einer elektrischen Schaltung,
die verschiedene Eigenschaften und Funktionen besitzen. Jedes Bauelement besitzt meist genau eine Funktion,
kann aber aus unterschiedlichen Bauteilen zusammengesetzt sein. Jedes Bauteil gibt es oft in unzähligen
verschiedenen Ausprägungen und Varianten. Manche der Komponenten sind direkt beschriftet, jedoch sind sie
meist zu klein, um alle Eigenschaften darauf abzubilden. Dafür wird meist ein sogenanntes Datenblatt vom
Hersteller zur Verfügung gestellt, welches in umfangreicher Form über Zweck, Verwendungsarten,
Leistungspotential und Eigenschaften informiert. Datenblätter sind für Laien nicht leicht zu lesen, stellen
aber oft essentielle Daten zur Verfügung, die ausschlaggebend für das Gelingen einer elektronischen
Schaltung sind.
Einige wichtige Bauelemente, die auch in den späteren Versuchen mit dem Arduino vorkommen, werden in den
folgenden Unterpunkten erklärt:
Widerstände sind häufig verwendete Bauelemente, die es
in vielen verschiedenen Formen und Varianten gibt. Sie begrenzen den Strom in einem Stromkreis um ein
gewisses Maß. Dies ist wichtig, weil manche Bauteile nur eine Höchstmenge Strom durchfließen darf oder sie
nur auf eine bestimmte Maximalspannung ausgelegt sind.
Die im Hobbybereich verwendeten Widerstände sind meist bedrahtete Kohle- oder Metalloxidschichtwiderstände,
die durch einige farbige Ringe auf ihrer Außenseite den Wert ihres
elektrischen Widerstandes angeben. Üblicherweise können sie eine Maximalleistung von 0,25 Watt aufnehmen.
Dieser Wert wird dann wichtig, wenn das Produkt aus Stromstärke und Spannung 0,25 überschreitet. Es können
dann Beschädigungen am Widerstands-Bauteil auftreten (verkohlen bzw. durchbrennen), weil der
blockierte/gebremste Strom in Wärmeenergie umgewandelt wird.
In der ersten Schaltung wird eine Stromquelle (oft auch VCC
genannt; hier eine 9V-Batterie) und
ein Widerstand mit dem Wert von 10kΩ in einem Stromkreis wie folgt verschaltet:
Bauen wir diese Schaltung nun auf einem Breadboard nach, so ergibt sich folgendes Bild:
Ist die Batterie nun angeschlossen und der Strom fließt, kann man dies nicht visuell erkennen. Mit dem ohmschen Gesetz kann man für diese Schaltung ausrechnen, durch den Widerstand ein Strom von 0,9mA (=900µA) fließt. Dies entspricht einer Leistung von 8,1mW und ist damit weit unter den 0,25W (=250mW), die solch ein Widerstand aushalten könnte. Der Widerstand wird durch den sehr geringen Stromfluss auch nur unmerklich wärmer. (Könnte mit Thermometer geprüft werden)
Ob Widerstände in einem Stromkreis nacheinander (seriell) oder nebeneinander (parallel) geschaltet werden, hat einen großen Einfluss auf Stromstärke und Spannungsabfall in diesem Stromkreis. Weitere Informationen dazu in Parallelschaltungen und Reihenschaltungen von Widerständen.
Potentiometer (kurz: Potis) sind eine spezielle
Variante von Widerständen, denn sie sind regelbar. Sie werden oft als Drehregler oder Schieberegler überall
dort verwendet, wo der elektrische Widerstand veränderbar sein soll, z.B. beim Dimmen einer Glühbirne oder
der Lautstärkeeinstellung eines Verstärkers.
Potentiometer können innerhalb eines festgelegten Maximalwertes ihren Widerstand stufenlos einstellen.
Verbreitete Werte sind 10kΩ, 50kΩ, 100kΩ oder 500kΩ.
Schalter und Taster gehören funktionsmäßig zu den einfachsten Bauteilen und dienen dazu, einen Stromkreis zu schließen oder zu öffnen, um damit den Stromfluss zu unterbrechen. Taster unterscheiden sich meist von den Schaltern nicht nur in der Art ihrer Bedienung, sondern auch, dass sie wieder in den Anfangszustand gehen, wenn sie losgelassen werden, wobei Schalter meist den geschalteten Zustand mechanisch erhalten. Es gibt hier die verschiedensten Varianten, aber für die ersten Versuch kann mit Mikrotastern und Kippschaltern experimentiert werden.
In der folgenden Schaltung wird der Stromkreis vom vorherigen Versuch durch einen zwischengeschalteten Taster S1 ergänzt. Dieser ist im Normalfall offen, d.h. es wird kein Strom fließen, sobald man die Batterie angeschlossen hat.
LED ist die Abkürzung von "lichtemittierende Diode" bzw. "light-emitting diode" und ist ein Bauteil
mit zwei wichtigen Eigenschaften. Sie strahlt Licht in einer bestimmten Farbe ab und lässt Strom nur in
einer Richtung hindurch. Heutzutage kann fast das gesamte
Lichtspektrum abgedeckt werden
und gibt es unzählige Bauformen und Typen. Wir verwenden hier
bedrahtete LEDs (3mm oder 5mm Durchmesser).
Hinweis: Niemals LEDs direkt an eine Stromquelle anschließen oder ohne einen
Vorwiderstand betreiben, dies kann zur Beschädigung der LEDs führen!
Hinweis: LEDs sollten nicht in Sperrrichtung betrieben werden, dies kann ebenfalls zur
Beschädigung der LEDs führen!
In dem folgenden Versuch wird der vorherige Schaltkreis um eine LED erweitert. Wichtig ist hier vor allem, die Polarität der LED zu beachten, da sie sonst beschädigt werden könnte bzw. auch in Sperrrichtung nicht leuchten wird.
Kondensatoren sind Bauteile, welche elektrische Energie speichern und wieder abgeben können.
Im Unterschied zu Batterien oder Akkus ist die gespeicherte Energie sehr gering, kann aber in
extrem kurzer Zeit wieder bereitgestellt werden. Die Verwendungsmöglichkeiten von Kondensatoren
sind recht vielfältig, z.B. Glättung einer Spannung, Abblocken von Spannungsschwankungen,
oder als frequenzabhängiger Widerstand. Dementsprechend gibt es auch viele Varianten und Bauformen,
von denen wir im Weiteren die Keramikkondensatoren
und die Elektrolyt-Kondensatoren (Elkos) verwenden
werden.
Elkos niemals in verpolter Richtung betreiben, es besteht Explosionsgefahr!
Im vierten Versuch ergänzen wir die vorherige Schaltung mit einem Elektrolyt-Kondensator wie in dem unten gezeigten Schaltplan. Der Wert sollte mehr als 100µF aufweisen, sonst wird der Effekt nicht so deutlich. Drückt man nun auf den Taster, so leuchtet die LED eine kurze Zeit auf und erlöscht dann recht schnell. (Es kann sein, dass sie noch ein wenig weiterglimmt).
Ursache für dieses Verhalten ist die Eigenschaft des Kondensators, dass er leitend ist, solange er noch nicht vollständig mit elektrischer Energie aufgeladen wurde. Ist dies geschehen, so leitet er den Strom nicht mehr. Kondensatoren können ihre gespeicherte Energie nicht lange halten und entladen sich nach wenigen Stunden oder evtl. Tagen. Vorsicht: Geladene Kondensatoren können gefährliche Schocks verursachen, vor allem wenn ihre Spannung hoch ist (siehe Beschriftung des Bauteils)!
Der nächste Versuch mit demselben Elektrolyt-Kondensator macht sich die Speicherfähigkeit anders zu nutze. Hier wird der Elko nicht in Reihe, sondern parallel zur LED und Widerstand geschaltet. Beim Drücken des Tasters leuchtet die LED gewohnt auf, jedoch erlischt sie nicht sofort nach Loslassen des Tasters. Sie leuchtet eine kurze Zeit nach und erlischt dann langsam.
Transistoren sind die weitaus wichtigsten aktiven elektrischen Bauteile, sie werden u.a. in der Nachrichtentechnik,
der Leistungselektronik und in Computersystemen verwendet. Einfach gesagt handelt es sich hierbei um einen
elektrisch steuerbaren Widerstand, welcher in der Lage ist, sowohl Stromkreise zu unterbrechen als auch
zu verstärken. In den folgenden beiden Versuchen werden beide Fälle ausprobiert.
Transistoren haben drei Anschlüsse und können als elektrisch regelbare Ventile verstanden werden. Ein Anschluss
bildet sozusagen den Regler, während die anderen den Stromfluss ermöglichen. Durch die Unmenge an verschiedenen
Typen und Varianten von Transistoren ist es besonders wichtig, das Datenblatt des zu verwendeten Transistors
zu lesen und versteht. In diesem Beitrag wird der BC547
verwendet, ein Kleinsignal-NPN-Transistor, welcher universell einsetzbar ist, wenn keine allzu hohen Ströme fließen.
Im 6ten Versuch verwenden wir einen Transistor als Schalter und besteht aus zwei parallelen Stromkreisen: Über einen Schalter/Taster und einen 100kΩ-Widerstand geht eine Verbindung in die sog. Basis des Transistors. Der andere Stromkreis geht vom Pluspol über den Kollektor zum Emitter des BC547, dann weiter über einen 1kΩ-Widerstand, eine LED zurück zum Minuspol.
Wird nun der Taster gedrückt, so leuchtet die LED so lange auf, bis der Taster wieder losgelassen wird. Dies
liegt daran, dass ein (geringer) Strom über den geschlossenen Taster und den 100kΩ-Widerstand durch die
Basis des Transistors fließt und so über die Kollektor-Emitter-Strecke eine derartige Verstärkung durchführt,
so dass die LED leuchten kann. (Der 100kΩ-Widerstand ist wichtig, denn die Basis eines Transistors darf nicht
mit zu hohen Strömen belastet werden!)
Natürlich kann der Taster -wie im ersten Versuch gezeigt- direkt den Stromkreis unterbrechen, dieser Aufbau
ist nur als Anschauung für die Funktionsweise des Transistors gedacht.
Im 7ten Versuch verwenden wir denselben Transistor BC547 als regelbares Verstärker-Element. Ein Motor soll mit einem Potentiometer geregelt werden, welcher den Taster aus dem 6ten Versuch in der Basis-Strecke ersetzt. Um den Versuch so einfach wie möglich zu halten wird der Motor direkt in die Kollektor-Emitter-Strecke geschaltet. (Wie man Gleichstrom-Motoren richtig/sicher anschließt, kann man unter "DC-Motoren steuern" nachlesen.
Abhängig von U1, R2 und dem verwendeten Motor kann der Motor schon anlaufen, sobald die Batterie angeschlossen wird. Dreht man nun am Potentiometer so wird der Motor schneller oder langsamer laufen, je nach Einstellung des Potentiometers.
Eine besondere Gruppe Bauteile sind die integrierten Schaltkreise, die umgangssprachlich
auch als "Mikrochips" bezeichnet werden. Die sind extrem verkleinerte Schaltungen, die häufig
verwendete Funktionen besitzen. Sie können meist mit regulären Bauteilen aufgebaut werden,
würden aber verhältnismäßig viel Platz und Strom verbrauchen.
In diese Gruppe fallen z.B. Spannungsregler, Taktgeber (z.B. NE555),
Speicherchips, Operationsverstärker,
Logikbausteine
(z.B. Zähler), aber auch Mikrocontroller und Mikroprozessoren, die auch in den
PCs oder Laptops verbaut sind.
Zentraleinheit des Arduino ist der Mikrocontroller
Atmel ATmega328
Es gibt noch eine Vielzahl weiterer Bauteile, die hier nicht betrachtet werden, z.B.
MOSFETs, Lautsprecher, Mikrophone, (Fein)Sicherungen, Motoren, Varistoren, (Elektronen)röhren,
Thyristoren, Optokoppler, Spulen, Induktivitäten, Transformatoren, Quarzoszillatoren, Diacs,
Triacs, (Brücken)Gleichrichter, Relais, ...
(siehe auch: Wikipedia - Liste elektrischer Bauelemente
Der Name "Arduino" steht zwar für eine Plattform, hier wird er allerdings als Synonym für das
Arduino Uno Board Rev3 verwendet. Dies ist eine kleine
Platine, die als zentralen Bestandteil den programmierbaren Mikrocontroller Atmel ATmega328 besitzt. Um die
Programmierung möglichst einfach zu machen, besitzt das Board einen USB-Anschluss für den PC sowie einen
Anschluss für eine (optionale) unabhängige Stromversorgung.
Seit 2005, als der erste Arduino entwickelt wurde, sind etliche verschiedene Modelle mit unterschiedlichen
Fähigkeiten auf den Markt gekommen. Für die folgenden Versuche werden ausschließlich der Arduino Uno Rev3
verwendet, der als besonders einsteigerfreundlich gilt.
Mikrocontroller | ATmega328P |
---|---|
Stromversorgung | 7 V bis 12 V (max. 20 V) |
Digitale Ein-/Ausgänge (=Pins) | 14 |
Analoge Eingänge (=Pins) | 6 |
Maximale Stromstärke pro Pin | 20 mA |
Flash-Speicher | 32 kB |
SRAM-Speicher | 2 kB |
EEPROM-Speicher | 1 kB |
Taktfrequenz | 16 MHz |
Sowohl die Größe des Speichers als auch die Taktfrequenz erscheinen dem Einsteiger im Vergleich zu aktuellen Computer-Prozessoren winzig, jedoch haben Mikrocontroller vollständig andere Aufgabe und müssen auch mit wesentlich geringerem Strom auskommen. In den folgenden (und eigenen) Versuchen wird man schnell sehen, dass für die meisten Anwendungen Geschwindigkeit und Speichergröße mehr als ausreichen.
(Im Folgenden wird davon ausgegangen, dass ein PC mit Microsoft Windows verwendet wird.)
Um den Arduino überhaupt programmieren zu können ist, werden wir die Entwicklungsumgebung
Arduino-IDE verwenden,
die von der Arduino Foundation zum freien Download angeboten wird.
Nachdem wir die neueste Version der Arduino-IDE heruntergeladen und installiert haben, starten wir sie.
Es erscheint der Editor der Arduino-IDE, indem eine neue Datei mit dem Basis-Rumpf eines Arduino-Programms
(sog. "Sketch") zu sehen ist:
void setup()
{
}
void loop()
{
}
Dieser Basis-Aufbau ist wichtig und besteht aus den zwei (leeren) Funktionen setup()
und
loop()
. Diese sollten immer im Sketch vorhanden sein, auch wenn man eine davon nicht benötigen
sollte, denn sie gewährleisten die korrekte Funktion des Programms.
Einfach gesagt stehen im Rumpf von setup()
alle Anweisungen, die nur beim Starten des Programms
benötigt werden und damit nur einmal ausgeführt werden. In loop()
stehen Anweisungen, die immer
und immer wieder hintereinander ausgeführt werden. Dies macht der Arduino automatisch und wir müssen uns
nicht darum kümmern.
Zunächst schließen wird den Arduino mittels eines USB-Kabels am PC an. Es sollte die grüne Betriebs-LEDs
des Arduino aufleuchten und evtl. blinkt eine weitere, orange LED auf dem Board, um die wir uns aber momentan
nicht kümmern.
Im Menüpunkt Werkzeuge prüfen wir zunächst, ob das richtig Board (Arduino Uno), der richtig Port
(sollte automatisch erkannt werden) und der richtige Programmer (AVRISP mkII) ausgewählt sind.
Obwohl der Arduino für die Steuerung von externen Bauteilen, Sensoren, etc. vorgesehen ist, werden wir
zunächst ein Sketch schreiben, welches Daten zwischen dem Arduino und unserem PC austauscht und anzeigt.
Dies wird oft verwendet, um z.B. Sensordaten anzuzeigen, in Diagrammen darzustellen oder um Fehler im
Programm zu finden.
Unser erster Sketch sieht also folgendermaßen aus und sollte z.B. als "ex01.ino" gespeichert werden:
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println(millis());
delay(1000);
}
Im setup()
besagt die Anweisung Serial.begin(9600);
, dass wir für die Dauer des
Programms die serielle Konsole (Schnittstelle zwischen Arduino und PC) mit der Rate von 9600 Baud verwenden
wollen. (Semikolon am Ende jeder Anweisung nicht vergessen!)
In loop()
stehen zwei Anweisungen, die vom Arduino zeitlich nacheinander ausgeführt werden:
Serial.println(millis());
weist das Programm an, das die Anzahl der seit Programmstart
vergangenen Millisekunden (millis()
) auf der seriellen Konsole ausgegeben werden (Serial.println()
).
Die darauf folgende Zeile veranlasst das Programm für 1 Sekunde (=1000 Millisekunden) anzuhalten (delay(1000);
).
Und da wir gelernt haben, dass loop()
immer wieder ausgeführt wird, sollte also jede Sekunde die
Anzahl an Millisekunden ausgegeben werden.
Der Sketch kann nun zunächst auf etwaige (Tipp-)Fehler überprüft werden, indem der Button "überprüfen" gedrückt wird. Erscheinen keine Warnungen oder Fehlermeldungen im unteren Bereich, so ist alles bereit, das Programm auf den Arduino zu laden. Dies geschieht, sobald man den Button "Hochladen" drückt.
Jetzt öffnen wir noch die serielle Konsole durch Drücken des Lupen-Knopfs auf der rechten Seite der Menüleiste und es erscheint ein Fenster, in dem unsere Ausgabe nach kurzer Zeit erscheinen sollte:
Mit LEDs lassen sich viele Versuche zusammen mit dem Arduino durchführen, dass diese leicht zu verbinden und anzusteuern sind. Außerdem lassen sich Effekte schnell sehen, da LEDs nun mal leuchten. 😉
In diesem Versuch verbinden wird einen digitalen Pin des Arduino (hier: D4) mit einer LED, die noch
einen Vorwiderstand besitzt. Um den Stromkreis zu schließen, verbinden wir den negativen Anschluss der LED
mit GND
des Arduino. Dies steht für "Ground" und bildet gewissermaßen den Minuspol.
Der folgende Sketch soll nun die zuvor angeschlossene LED zum Leuchten bringen:
void setup()
{
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
}
void loop() {}
In setup()
sind zwei Anweisungen vorhanden:
pinMode(4, OUTPUT);
weist den Arduino an, dass Pin #4 als Ausgang benutzt werden soll.
digitalWrite(4, HIGH);
schreibt ein HIGH-Signal auf genau diesen Ausgang. HIGH bedeutet in unserem
Fall 5 V und ist so etwas wie ein digitales AN oder TRUE. In Gegensatz dazu könnte man auch ein LOW senden,
welches 0 V und damit AUS bzw. FALSE entsprechen würde. HIGH bewirkt in diesem Fall, dass die LED mit 5 V
angesteuert wird und damit aufleuchtet.
Der Funktion loop()
ist leer und wird nicht benutzt, d.h. der Arduino befindet sich quasi im
Leerlauf, sobald die LED aufleuchtet.
Natürlich benötigt man keinen Mikrocontroller wie den Arduino, um einfach eine LED leuchten zu lassen, daher bringen wir etwas mehr Logik in den gleichen Aufbau und schreiben den folgenden Sketch, um die LED an Pin 4 blinken zu lassen:
#define LED_PIN 4
void setup()
{
pinMode(LED_PIN, OUTPUT);
}
void loop()
{
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}
In setup()
finden wir wieder die Anweisung, dass der gewünschte Pin als Ausgang benutzt
werden soll. Jedoch besitzt nun loop()
vier Anweisungen:
Mit digitalWrite()
wird ja bekanntermaßen die LED zu leuchten gebracht bzw. erlischt, je nachdem
welchen Wert wir angeben (HIGH oder LOW). Damit das Blinken der LED auch vom menschlichen Auge sichtbar ist,
müssen wir zwischen die LED-Schalt-Anweisungen noch eine kurze Pause einfügen. delay()
kennen
wir ja schon vom ersten Versuch.
Auffallend in diesem Sketch sollte noch die allererste Zeile sein. Dies ist eine Definition für eine Konstante,
damit die "4" nicht überall im Sketch verteilt vorkommt, und man den Pin leicht an einer Stelle
durch einen anderen ersetzen kann, wenn man das möchte.
An dieser Stelle sei auf die Arduino Sprachreferenz und einige Grundlagen der C-Programmierung verwiesen, die vor allem bei etwas größeren Programmen sehr nützlich sind.
Wenn man beginnt, sich mit dem Arduino zu beschäftigen, will man früher oder später irgendwelche Sensoren ansteuern, die Daten aus der Umwelt erfassen. Dies kann beispielsweise sichtbares Licht, UV-Licht, Infrarot-Licht, Temperatur, Luftfeuchtigkeit oder Luftdruck sein. Grundsätzlich kann der Arduino Daten von externen Komponenten entweder digital oder analog lesen. Oft sind die blanken Sensoren in einem speziellen Modul schon so aufgebaut und vorbereitet, dass sich die Daten sehr leicht mit dem Arduino verarbeiten lassen.
Digitale Daten liefern genau einen von zwei definierten Zuständen pro Zeiteinheit: HIGH oder LOW (d.h. 5V bzw. 0V). In dem folgenden Versuch lesen wir einen Mikrotaster ein und verarbeiten diese Daten im Arduino. Als Ausgabe verwenden wir eine LED. Daher müssen wir den Aufbau zum vorherigen Experiment nur um einen Taster ergänzen, den wir am digitalen Pin D8 anschließen.
Der Sketch zu diesem Versuch soll eine LED aufleuchten lassen, sobald der Mikrotaster 3× gedrückt wurde. Nach weiteren 3× soll die LED wieder ausgehen:
#define LED_PIN 4
#define BUTTON_PIN 8
void setup()
{
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop()
{
static byte numPressed = 0;
if (digitalRead(BUTTON_PIN) == LOW) {
Serial.println("Button pressed");
numPressed++;
}
if (numPressed >= 3) {
numPressed = 0;
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
Serial.println("LED toggle to " + String(digitalRead(LED_PIN)));
}
}
Dieser Sketch ist etwas umfangreicher und besitzt mehr Logik als der Vorhergehende. Zunächst definieren
wir die beiden Pins für die LED und den Taster. In setup()
starten wird die serielle
Konsole (für spätere Kontrollausgaben) und legen den Pin der LED als Ausgang fest. Den Pin für den Mikrotaster
legen wird als Eingang fest (der Wert INPUT_PULLUP
aktiviert einen internen sog.
Pullup-Widerstand ist aber nicht wichtig zum Verstehen dieses Sketches).
In loop()
definieren wir zunächst eine Zähler-Variable, die die Anzahl der Klick auf den Taster
registrieren soll.
Mit digitalRead(BUTTON_PIN)
lesen wir den aktuellen (digitalen) Zustand des Eingangs und damit
des Taster aus und prüfen in derselben Zeile, ob dieser gedrückt wurde. Wenn ja, dann erhöhen wir den Zähler
(und schreiben eine Ausgabe auf die serielle Konsole).
In der nächsten if
-Anweisung prüfen wir, ob der Zähler schon die dreimal Taster-Drücken registriert
hat, und lassen die LED wahlweise aufleuchten oder erlöschen. Der Zähler wird wieder zurückgesetzt und
eine weitere Kontroll-Ausgabe wird auf die serielle Konsole geschrieben.
Wenn der Sketch nun auf dem Arduino läuft und wir den Taster drücken, stellen wir fest, dass die LED
sehr schnell flackert und die Ausgaben die serielle Konsole regelrecht fluten. Warum passiert das?
Wir stoßen hier auf ein Problem, welches auftritt, wenn die digitale Welt mit der analogen Außenwelt
-hier in Form von Menschen- zusammentrifft: Der Mensch ist zu langsam für den Computer!
In der Zeit, in der wir den Taster auch noch
so schnell drücken und wieder loslassen können, hat der Arduino schon etliche Male den Zustand abgefragt.
Damit zählt unsere Zähler-Variable sehr schnell bis auf 3 und die LED schaltet ebenfalls schnell von
HIGH nach LOW. Eine Lösung für dieses Problem wäre, nach jeder erfolgreichen Erkennung, dass der Taster
gedrückt wurde, den Arduino eine Pause machen zu lassen, z.B. von einer halben Sekunde.
Dazu fügen wird nach der Zeile mit numPressed++;
noch folgende Zeile ein:
delay(500);
Schon sollte unser Programm die folgende Ausgabe zeigen und sich richtig verhalten:
Diese Lösung ist zwar schnell gemacht, löst das Problem aber nicht zuverlässig. Es gibt noch einige andere Ansätze, welche ich z.B. in meinem Projekt für das Spiel Senso verwendet habe.
Analoge Daten haben keine fest definierten Zustände, sondern bewegen sich meist in einem bestimmten Bereich,
im Speziellen heißt dies für den Arduino, dass wir an den analogen Eingängen einen maximalen Messbereich von
0 bis 1023 haben. Wie diese Werte interpretiert werden, kommt auf das Eingabegerät bzw. den jeweiligen Sensor
darauf an.
In dem folgenden Versuch werden will als analoge Eingabe ein Potentiometer verwenden. Es kann ein beliebiger
Wert (10kΩ, 100kΩ, ...) verwendet werden. Aufbau der Schaltung entspricht dem Beitrag
"Potentiometer und Arduino", allerdings verwenden wir hier einen
anderen Sketch:
#define POTENTIOMETER_PIN A2
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println(analogRead(POTENTIOMETER_PIN));
delay(50);
}
Der Arduino liest alle 50ms den Zustand am analogen Pin A2
ein und gibt in der seriellen
Konsole aus. Man kann beobachten, dass es zwar größere Änderungen der Werte gibt, wenn man an dem Potentiometer
dreht, aber ändern sich die Werte sogar minimal, obwohl keine Änderung erfolgt. Dies liegt an Störungen
durch elektromagnetische Strahlen und vermutlich auch, dass ein Potentiometer kein präzises Messinstrument
ist. Im Sketch von "Potentiometer und Arduino" ist diesem
Problem entgegengewirkt, indem es eine gewisse Fehlertoleranz durch sensitivity
eingebaut
wurde.
Viele Sensoren gibt es bereits als Arduino-kompatible Module zu kaufen, die oft eine von zwei häufig
anzutreffenden Schnittstellen bedienen: SPI oder
I²C. Dies sind genormte Schnittstellen, die mit Hilfe
von vorprogrammierten Software-Libraries angesprochen werden können und das Auslesen der Sensoren somit
deutlich einfacher machen.
Als Beispiel für eine I²C-Schnittstelle kann auf den Beitrag
Luftdruck-Sensor BMP-180 verwiesen werden.
In vielen Fällen werden die gesammelten Sensor-Daten (z.B. Wetterdaten) nicht sofort verarbeitet, sondern als Rohdaten zu einem Dienst in die Cloud geschickt. Solch ein System ist dann Teil des Internet der Dinge (IoT = Internet of Things). Allerdings kann der Arduino Uno alleine nicht dafür verwendet werden, da er keine Möglichkeit hat, ins Internet zu gelangen. Entweder man behilft sich mit einer Erweiterung für WLAN oder Ethernet oder greift auf andere Plattformen wie z.B. den ESP32 oder den Raspberry Pi zurück.
Der Arduino kann aber nicht nur Daten von Sensoren sammeln, sondern auch unterschiedlichste Ausgabegeräte
ansteuern oder Aktoren bedienen. Sei es, das Steuern der Haustechnik (z.B. Beleuchtung) oder eines
Bewässerungssystems, aber auch Hilfsmittel, Spiele oder Kunstinstallationen sind denkbar.
Beispiele sind hierfür:
Die sogenannten Arduino-Shields sind meist Erweiterungsmodule, die der Form des Arduino-Boards angepasst sind und direkt aufgesteckt werden können, ohne ein separates Breadboard zu verwenden. Beispiele:
Nach diesem kleinen Überblick sollten die nächsten Schritte das Nachbauen und Experimentieren von
kleineren Schaltungen mit dem Arduino sein, um dann bald auch eigene Ideen und Projekte umsetzen zu
können.
Da der Arduino (wie alle Mikrocontroller-Plattformen) beschränkte Hardware-Spezifikationen besitzt,
wird man bei dem einen oder anderen Projekt an Grenzen stoßen, die aber durchaus lösbar sind, z.B.:
Viel Spaß und Erfolg beim Nachbauen meiner Experimente und Projekte oder beim Erfinden neuer Schaltungen! 🧐
zurück