DBSV – Arduino Workshop

Diese Unterlagen richten sich speziell an blinde Menschen und Personen mit Sehbeeinträchtigungen. Im Rahmen einer Kooperation mit dem DBSV, dem Deutschen Blinden und Sehbehinderten Verband e.V. wurde ein Workshop zur Programmierung mit dem Arduino und elektrischen Komponenten entwickelt. Die hier aufgeführten Inhalte dienen als Gedankenstütze, Hilfestellung und zum  Wiederholen für die Teilnehmerinnen und Teilnehmer des Workshops, sowie allen anderen Menschen, die sich für die Programmierung von MikroControllern interessieren.

Worum geht es bei dem Workshop?

Der Workshop richtet sich an Menschen, die weder über Programmierkenntnisse noch über Kenntnisse des Aufbaus elektrischer Schaltungen verfügen. Ziel des Workshops ist der Bau eines Gerätes, das zwei Funktionen hat. Zum einen die Messung von Luftfeuchtigkeit und deren Anzeige mittels eines Servomotors auf einer fühlbaren Skala. Und zum Anderen das Erkennen von Lichtquellen durch einen lichtempfindlichen Widerstand und ein Tonsignal, das die Frequenz abhängig von der Helligkeit ändert.

Warum Arduino?

Der Workshop ist in gemeinsamer Arbeit mit einem Referenten des DBSV entstanden. Es wurden verschiedene Entwicklungsumgebungen für MicroPython und die Arduino IDE getestet. Dabei hat sich die Arduino IDE als intuitiver zur Bedienung mit einem Screenreader Programm erwiesen und wurde für den Workshop gewählt.

Was du auf dieser Seite findest

Es werden Grundlagen des Programmierens für den Arduino erläutert. Informationen zu Datentypen, Funktionen, Schleifen, der Einbindung von Bibliotheken und weitere Grundlagen der Programmierung werden mit kurzen praktischen Beispielen erläutert. Zusätzlich werden einige für die elektrischen Schaltungen wichtige Prinzipien erläutert. Es handelt sich hierbei nicht um umfangreiche Ausführungen oder Definitionen von Begriffen, sondern eher um verständliche Erläuterungen und Analogien, die es Menschen ohne Programmierkenntnisse erleichtern Fachwörter und Logiken der Softwareentwicklung zu verstehen.

Notwendiges Material

  • einen Arduino Uno R3
  • ein Steckbrett in halber Größe
  • einen Satz Jumperkabel verschiedener Längen
  • den herunterladbaren Baustaz zum 3D Drucken auf dieser Webseite
  • einen DHT22 Luftfeuchtigkeits und Temperatursensor (einzeln, nciht auf einer Platine
  • einen SG90 9g Micro Servo
  • einen Fotowiderstand (einzeln, nicht auf einer Platine)
  • einen  2 Watt 8 Ohm Lautsprecher (muss selbst gecrimpt werden)
  • eine 9V Batteriehalterung vom hier verlinkten Bautyp (muss selbst gecrimpt werden)
  • acht M3 Schrauben mit 6 Millimeter Länge
  • zwei Hubtaster mit hohen Tastern
  • einen Schieberegler vom hier verlinkten Bautyp
  • zwei 10 Kilo-Ohm Widerstände

 

Grundlagen der Programmierung

In diesem Abschnitt werden einige Programmiergrundlagen erläutert. Ein großer Anteil dieser Inhalte sind allgemeingültig und können auch für andere Programmiersprachen übernommen werden. Arduino nutzt eine eigene an die Programmiersprachen C und C++ angelehnte Sprache.

Datentypen

Hierbei handelt es sich um die verschiedenen Typen, oder Arten, die Werte eines Programms annehmen können. So gibt es beispielsweise ganze Zahlen, Dezimalzahlen, Zeichenketten, Matrizen und weitere. Hier eine Auflistung gebräuchlicher Datentypen:

String

Sind Zeichenketten, die von einfachen oder doppelten Anführungszeichen umgeben sind. Ein String kann einzelne Buchstaben oder Zahlen enthalten, oder sogar über mehrere hundert Wörter lang sein. Fast alle beliebigen Zeichen in einem String enthalten sein.

Beispiele:

„Hallo“
„1234“
‚_78&%erTZ‘
‚Hupps, das war mein Passwort!!‘

Integer (int)

Sind ganze Zahlen. Sie können beispielsweise für mathematische Operationen wie Addition, Multiplikation und Logarithmen verwendet werden. Außerdem werden sie genutzt um die programmierbaren Pins des Arduino zuzuweisen.

Beispiele:

1
123
12+45
24*56

float

Sind Dezimalzahlen. Sie können genauso wie Integer für mathematische Operationen genutzt werden. Das Trennzeichen bei float Werten ist ein Punkt, anders als das in Deutschland übliche Komma.

Beispiele:

2.456
1452.67
1454.57*34.4

Boolean (bool)

Sind wahr oder falsch Werte. Sie werden in Kleinbuchstaben true und false geschrieben. Dieser Datentyp wird vor allem in Vergleichsabfragen genutzt, wenn zum Beispiel überprüft werden soll, ob zwei Werte gleichgroß, oder einer größer, als der andere ist. Sie spielen für die Logik eines Programmes eine unverzichtbare Rolle.

 

Variablen

sind veränderliche Werte, die einen eindeutigen Namen haben. Sie haben immer einen bestimmten Datentyp zugewiesen, der nicht geändert werden kann.

Deklaration einer Variablen

Bei der Deklaration einer Variablen werden ihr Datentyp, Name und Ausgangswert festgelegt.

Hier ein Beispiel.

int anzahl_butterbrote = 5;

Der Datentyp Integer, der Name der Variablen ist anzahl_butterbrote und zugewiesene Wert ist die 5. Das Semicolon am Ende der Zeile ist notwendig um dem Compiler, der das Programm auf den MikroController schreibt, mitzuteilen, dass die Zeile abgeschlossen ist.

Der Name der Variablen darf nur aus den folgenden Zeichen bestehen. Die 26 Buchstaben des Alphabets, ohne Umlaute, Zahlen und Unterstrichen. Zahlen und Unterstriche dürfen nicht am Anfang des Namens stehen.

Mit dem einfachen Gleichheitszeichen wird der Wert zugewiesen.

Ändern eines Variablenwertes

Schreibe hierfür den Namen der Variablen, ein Gleichheitszeichen und den neuen Wert in eine Zeile.

Beispiel:

anzahl_butterbrote = 12;

Der Datentyp wird hier nicht geschrieben. Es ist allerdings notwendig, dass der neue Wert dem Datentyp entspricht, der der Variablen bei der Deklaration zugewiesen wurde.

 Konstanten

sind unveränderliche Werte. Sie werden außerhalb der Setupfunktion angelegt. Der Syntax hierfür lautet wie folgt:

#define Konstantenname Konstantenwert

Es wird hierbei werden ein Datentyp, oder Gleichheitszeichen verwendet, noch ein Semikolon an das Zeilenende gesetzt. Der Konstantenname folgt den gleichen Benennungsrichtlinien, wie Variablen.

Konstante werden beispielsweise zur Festlegung von Pin Nummern, oder Grenzwerten verwendet und alle Buchstaben werden groß geschrieben. Da großgeschriebene Buchstaben von Screenreadern aber einzeln vorgelesen werden, sollte auf diese Richtlinie verzichtet werden.

Funktionen

sind mehrfach verwendbare Programmabläufe. Wenn beispielsweise ein Sensorwert alle 10 Sekunden abgerufen und abhängig von seinem Wert eine Aktion ausgeführt werden soll, dann soll dieser Programmabschnitt nicht jedes Mal neu programmiert werden, sondern wiederverwendbar sein. Funktionen sind allgemein aus der Mathematik bekannt. f(x) = m*x+b. Gesprochen: f von x ist m Mal x plus b. Also eine Funktion mit dem Namen f, deren Wert von x abhängt. So ähnlich sind Funktionen in Programmiersprachen auch aufgebaut, nur der Syntax ist anders.

Arduino nutzt standardmäßig zwei Funktionen. setup und loop.

Die Setup Funktion wird einmalig beim Anschalten ausgeführt. Hier werden zum Beispiel Sensoren aktiviert und Pins zugewiesen.

Die Loop Funktion wird direkt im Anschluss an die Setup Funktion als Endlosschleife durchlaufen und enthält den zentralen Programmcode.

Aufbau von Funktionen

Gehen wir den Aufbau anhand einer Beispielfunktion durch.

Funktion ohne Rückgabewert

void licht_messen (eingangswert, grenzwert){
	tue das folgende;
}

Funktion mit Rückgabewert

int funktion_berechnen(x){
	return 3*x+5;
}

 Hier sind die einzelnen Bestandteile:

Als erstes steht der Rückgabewert der Funktion. Dabei kann es sich um einen beliebigen Datentypen wie int, String oder bool handeln. Steht hier an erster Stelle void, wie in unserem Beispiel, gibt die Funktion keinen Rückgabewert aus. Soll ein Rückgabewert ausgegeben werden, muss sein Datentyp mit dem oben eingetragenen Datentyp übereinstimmen und über den Befehl return innerhalb der Funktion ausgegeben werden.

An zweiter Stelle steht der Name der Funktion. In den Beispielen licht_messen und funktion_berechnen. Es gelten die gleichen Regeln bei der Benennung, wie bei Variablen. Es ist empfohlen, dass der Funktionsname aus einem Verb und einem Substantiv bestehen, die beschreiben, was die Funktion macht.

An dritter Stelle befinden sich, von Klammern umschlossen und durch Kommata getrennt, die Argumente. Dabei handelt es sich um Werte, die einer Funktion übergeben und für das Programm verwendet werden können. Ähnlich wie das x bei mathematischen Funktionen.

Als letztes kommt der eigentliche Programmcode in geschweiften Klammern umschlossen. Alles was innerhalb dieser geschweiften Klammern geschrieben steht, wird bei einem Durchlauf der Funktion von oben nach unten ausgeführt.

Aufrufen von Funktionen

Abgesehen von der setup und der loop Funktion werden Funktionen nicht automatische ausgeführt. Sie können durch den Namen und eine offene und geschlossene Klammer aufgerufen werden. Innerhalb der Klammer werden die entsprechenden Argumente eingetragen.

Beispiel Funktion aufrufen

void loop(){
	licht_messen(10,20);
	int ergebnis = funktion_berechnen(7);
}

if Bedingungen

sind in Programmcode formulierte Kondtionalsätze.

Hier ein Beispielsatz mit dem entsprechenden Code dazu.

Wenn der Sensor eine extrem helle Lichtquelle erkennt, dann soll der Lautsprecher ein hohes Tonsignal abgeben. Ansonsten wenn die Lichtquelle nur normal hell ist, soll das Tonsignal mittel hoch sein. Ansonsten soll das Tonsignal tief sein.

Beispielcode if Bedingung

if(helligkeit > 1000){
	hoher Ton;
}else if( helligkeit > 500 && helligkeit <= 1000){
	mittlerer Ton;
}else{
	tiefer Ton;
}

Beispielcode in Sprechform

if ( Bedingung 1){
	Was das Programm machen soll, wenn die Bedingung 1 erfüllt ist;
}else if (Bedingung 2 und Bedingung 3) {
Was das Programm machen soll, wenn die Bedingung 2 und Bedingung 3 erfüllt ist;
}else{
Was das Programm tun soll, wenn keine der Bedingungen erfüllt wird;
}

Bedingungen und Operatoren

Die Bedingungen müssen vom Datentyp Boolean sein. Also true oder false als Ergebnis haben. Es werden hier entweder zwei Werte miteinander verglichen, oder eine Information zu einem Wert abgerufen. Diese Information kann zum Beispiel sein, ob ein String den Buchstaben k enthält, oder ob eine Zahl eine Primzahl ist.

Am relevantesten für den Workshop sind die arithmetischen Operatoren, auch Vergleichsoperatoren genannt und logische Operatoren. Arithmetische Operatoren wie größer als, kleiner als und ist gleich, sind aus der Mathematik bekannt. Logische Operatoren wie beispielsweise und/oder werden zur Verknüpfung von Bedingungen verwendet. Es folgt eine Liste gebräuchlicher arithmetischer und logischer Operatoren.

Arithmetische Operatoren

== bedeutet entspricht. Das doppelte Gleichheitszeichen wird verwendet um zu überprüfen, ob zwei Werte gleich sind.

> prüft ob der linke Wert größer als der rechte Wert ist.

< prüft ob der linke Wert kleiner als der rechte Wert ist.

>= prüft ob der linke Wert größer gleich dem rechten Wert ist.

<= prüft ob der linke Wert kleiner gleich dem rechten Wert ist.

!= bedeutet ungleich. Überprüft, ob die beiden Werte nicht gleich sind.

Logische Operatoren

&& ist das logische und.  Es wird zwischen zwei oder mehrere Bedingungen platziert. Nur wenn alle Bedingungen wahr sind, wird auch die gesamte Bedingung wahr. Es besteht aus zwei kaufmännischen „Und“ Zeichen. Tastenkombination ist Shift+6

|| ist das logische oder. Es kann ebenfalls zwischen Bedingungen platziert werden. Hier muss nur mindestens eine der Bedingungen wahr sein, damit die Gesamtbedingung wahr wird. Es besteht aus zwei senkrechten Strichen. Die Tastenkombination bei Windows ist AltGr+<. 

! ist der logische nicht Operator. Er kann vor einer Variablen vom Typen Boolean oder vor einer Bedingung stehen und wechselt den Booleanwert. macht also aus einem wahr ein falsch und umgekehrt.

Schleifen

Sie sind sich wiederholende Programmabschnitte, die nur durch eine Abbruchbedingung beendet werden. Die „loop“ Funktion des Arduino, die den auszuführenden Code enthält, wird beispielsweise als Endlosschleife ausgeführt. Das ist für Programmierende nicht erkennbar, wird aber im Hintergrund von der Arduino IDE sichergestellt. Es gibt zwei Arten von Schleifen. Die „for“ und die „while“ Schleifen.

while Schleifen

Sind Schleifen die laufen, solange wie eine Bedingung zutrifft. Es gibt eine sogenannte Überlebensbedingung. Solange diese erfüllt ist, widerholt sich die Schleife. Sobald sie nicht mehr erfüllt ist, bricht die Schleife automatisch ab. Der Aufbau der while Schleife ist wie folgt:

Beispiele while Schleifen

while(Lebensbedingung){
	auszuführender Code;
}


while(sensorwert < 50){
	sensorwert += 1;
}

Abbruchbedingungen sind genauso wie die if Bedingungen vom Typ Boolean. Es wird also mit arithmetischen und logischen Operatoren gearbeitet. Wird die Abbruchbedingung auf „True“ gesetzt, bricht die Schleife ab.

for Schleifen

sind etwas komplizierter aufgebaut. Sie werden für eine feste Anzahl von Durchläufen angelegt. Der Syntax ist etwas komplizierter. Hier ein allgemeines Beispiel:

Allgemeines Beispiel for Schleife

for (startbedingung;lebensbedingung,werteänderung){
	auszuführender Code;
}

Beispiel for Schleife

for(int i;i<10;i++){
	auszuführender Code;
}

Die Schleife startet in diesem Beispiel mit einer Zählvariablen i vom Typ Integer und Wert 0. Sie läuft solange bis die Lebensbedingung erfüllt ist. Also solange i kleiner als 10 ist. Nach jedem Durchlauf der Schleife wird die Zählvariable verändert. i++ bedeutet, dass i um 1 erhöht wird.

Welche Schleife sich für die eigene Anwendung besser eignet, muss von Fall zu Fall unterschieden werden.

break und continue

Schleifen können auch manuell abgebrochen oder einzelne Durchläufe übersprungen werden. Hierzu werden die Schlüsselwörter break und continue verwendet.

break bricht eine Schleife ab. Bei verschachtelten Schleifen wird nur die Schleife abgebrochen, in der break aufgerufen wird.

continue überspringt den aktuellen Durchlauf der Schleife und springt an den Anfang des nächsten Durchlaufs. Bei for Schleifen wird die Zählvariable um den festgelegten Wert geändert.

Importieren von Bibliotheken

Bibliotheken sind vorgefertigte Programmeteile. Sie werden zum Beispiel für elektrische Komponenten genutzt. Da die Ansteuerung zum Beispiel eines Servomotors sehr komplex ist, muss sie nicht immer wieder neu geschrieben werden. Bibliotheken werden bereitgestellt um Programmierenden das Leben zu erleichtern. Ein Servomotor kann dadurch allein durch das setzen eines Winkels eingestellt werden, anstatt die mehrer hundert Zeilen Code jedes mal selbst zu schreiben.

Das Importieren von Bibliotheken geht über die Arduino IDE Oberfläche und wird im Programmcode über das Schlüsselwort #include gekennzeichnet. Hier ein Beispiel:
#include „Servo.h“

Klassen

sind Baupläne für Objekte mit ähnlichen oder identischen Eigenschaften. Am Beispiel des Servomotors lässt es sich gut erklären. Der Servomotor wird einer Variablen zugewiesen. Wie bereits erwähnt, haben Variablen einen Datentypen. Dabei kann es sich aber auch um eine Klasse handeln. Die Bibliothek Servo.h beinhaltet die Klasse Servo. Es wird also eine Variable mein_servo angelegt, die als Typ die Klasse Servo hat. Hier ein Beispiel:

Servo mein_servo;

Klassen verfügen über Methoden und Attribute. Methoden sind quasi das gleiche wie Funktionen, nur innerhalb einer Klasse und Attribute sind Eigenschaften der Klasse.
Ein Servo kann an, oder ausgeschalten sein und hat einen bestimmten Winkel eingestellt. Beides sind Beispiele für Attribute.

Methoden aufrufen und Attribute ändern

Attribute werden normalerweise nicht direkt geändert, sondern durch das Aufrufen von Methoden angepasst, oder ausgelesen.

Methoden können ähnlich wie Funktionen aufgerufen werden. Der einzige Unterschied ist, dass zu Beginn der Variablenname steht. Soll zum Beispiel der Winkel von mein_servo geändert werden, kann die Methode „write“ genutzt werden. Hier ein Beispiel um den Winkel auf 90 Grad zu setzen.

mein_servo.write(90);

Elektronische Komponenten und Gesetze der Elektrotechnik

Der Arduino ist ein MikroController, der dafür genutzt wird elektrische Schaltungen zu steuern. Diese Schaltungen setzen sich aus verschiedenen Komponenten zusammen und physikalische Gesetzmäßigkeiten treten auf. Es folgt eine Auflistung der Komponenten und einige für das Projekt wichtige physikalische Gesetze.

Verwendete elektronische Komponenten

Sind alle Bauteile einer elektrischen Schaltung, die von elektrischem Strom durchflossen werden. Es wird auf die Funktionsweise der Komponenten eingegangen, welche Anschlüsse sie haben, wie die Ausrichtung erkennbar ist und wie sie eingebaut werden müssen.

Steckbrett (Breadboard)

ist ein handtellergroßes Brett mit Steckkontakten für elektrische Schaltung. Komponenten werden für Testzwecke hier gesteckt um Schaltungen zu testen, bevor sie fest verbaut werden.

Es ist in vier Segmente aufgeteilt. Zwei Außenleisten und einen zweigeteilten Innenbereich.

Liegt das Steckbrett Hochkant, sind die Außenbereiche, den sogenannten Powerrails, links und rechts. Dabei handelt es sich in jedem Außenbereich um zwei senkrechte Spalten an Öffnungen. Die Steckkontakte einer Spalte sind alle miteinander verbunden. die Spalten untereinander sind nicht verbunden. Die Powerrails werden verwendet um einen allgemein nutzbaren Plus und Minuspol für Bauteile zur Verfügung zu stellen.

Der Innenbereich besteht aus zwei Segmenten mit 30 oder mehr Reihen und jeweils 5 Steckkontakten pro Reihe. Die beiden Segmente sind durch eine senkrecht verlaufende Kerbe voneinander getrennt.

hier werden die Komponenten für die elektischen Schaltungen verbaut.

Die Steckkontakte eines Segments in einer Reihe sind alle miteinander verbunden.

Jede Reihe hat also fünf Steckkontakte in Segment 1 und fünf Steckkontakte in Segments zwei.

Kabel

werden zur Verbindung des Arduinos mit dem Steckbrett und den elektrischen Komponenten verwendet. 

Schieberegler

sind etwa einen Zentimeter lang und 5 Millimeter breit. Auf der Oberseite haben sie einen kleinen schiebbaren Hebel und auf der Unterseite drei Beine. 

Der Regler hat zwei Positionen entlang der Längsachse. Wird er so gehalten, dass die Beine von links nach rechts nebeneinander sind, sind die Stellungen wie folgt.
1. Der Hebel befindet sich auf der linken Seite. Dann sind das linke und das mittlere Bein elektrisch leitend. Das rechte Bein ist isoliert.
2. Der Hebel befindet sich auf der rechten Seite. Dann sind das mittlere und das rechte Bein elektrisch leitend. Das linke Bein ist isoliert.

Hubtaster

sind drückbare Schalter. Die von uns verwendeten Schalter sind quadratisch und können von oben gedrückt werden. Sie verfügen über 4 Beine, von denen zwei nach links und zwei nach rechts aus dem Taster herauskommen. Wird der Taster so gehalten, dass die Beine nach linke und rechts zeigen, kann die Funktion wie folgt beschrieben werden.

Ist der Taster nicht gedrückt, sind die beiden oberen Beine elektrisch leitend. Zwischen ihnen fließt ein Strom. Das gleiche trifft auf die beiden unteren Beine zu. Diagonal zwischen dem oberen linken und unteren rechten Bein fließt kein Strom. Das gleiche gilt auch diagonal für die anderen beiden Beine.

Ist der Taster gedrückt, sind alle Beine elektrisch leitend.

Elektrische Widerstände

sind Komponenten, mit spezifischen ohmschen Widerständen, die den Stromfluss begrenzen. Sie verhindern Kurzschlüsse und werden zur Aufteilung der Spannung in einem Stromkreis verwendet. Es gilt, die Spannung teilt sich proportional über die Widerstände auf. Diese Gesetzmäßigkeit wird im Abschnitt Spannungsteiler noch näher erläutert.

Elektrische Widerstände haben einen etwa 1 Zentimeter langen zylindrischen Körper mit einem Durchmesser von von circa 2 Millimetern und zwei lange Beine. Der Widerstandwert ist durch Farbmarkierungen auf den Widerständen erkennbar, was die Nutzung für Menschen mit einer Sehbeeinträchtigung schwierig gestaltet.

Die Einbaurichtung des Widerstands ist egal. Es gibt keine Plus oder Minus Pole.

Fotowiderstand (LDR)

Ein Fotowiderstand ist ein elektischer Widerstand, der seinen Wert abhängig von der Helligkeit, die auf seine Oberfläche trifft, ändert. Je mehr Licht auf den Widerstand fällt, desto geringer wird sein Widerstandswert.

Er hat zwei lange Beine und einen flachen runden Körper mit einem Durchmesser von circa 5 Millimetern und einer Höhe von etwa 2 Millimetern.

Beim Fotowiderstand ist die Einbaurichtung egal. Es gibt keine Plus oder Minus Pole.

Luftfeuchtigkeits- und Temperatursensor (DHT)

Ist ein Sensor, der über einen Thermistor die Temperatur und eine Membran die Luftfeuchtigkeit misst. Im Workshop wird die Variante DHT22 verwendet. Die einzelnen Bauteile sind in einer quaderförmigen Box verbaut, die auf ihrer Unterseite vier Beine aufweist. Die Rückseite des DHT ist glatt und die Vorderseite weist eine geriffelte Oberfläche auf. Dabei handelt es sich um Löcher, die der Luft Zugang zu den Sensoriken geben.

Wird der DHT von der Vorderseite betrachtet und die Beine zeigen nach unten, haben die Beine jeweils die folgenden Funktionen, von links nach rechts.
1. Versorgungsspannung – 3,3 oder 5 Volt
2. Daten – hier wird der Sensor ausgelesen
3. Keine Funktion
4. Ground – der Minuspol

Servomotor

Der Servomotor hat einen Drehbereich von 0 bis 180 Grad. Er ist Quaderförmig mit einer kurzen runden Welle, die auf einer Seite herausragt. Diagonal auf der anderen Seite des Servomotors bfeinden sich die drei verbundenen Anschlusskabel. Wir der Servomotor so gehalten, das die Welle angesehen wird und die Anschlusskabel nach unten zeigen, Ist die Reihenfolge der Anschlusskabel von links nach rechts, wie folgt.
1. Ground – der Minuspol
2. Versorgungsspannung – 5 bis 9 Volt
3. Daten – hier wird der Motor gesteuert

Da sich das Kabel leicht verdreht, kann auch am unteren Kabelende die Ausrichtung geprüft werden. Hier ist ein Dreifachstecker, der auf einer Seite Kerben hat. Zeigen die Öffnungen des Dreifachsteckers nach unten und die Kerben zu einem selbst, ist die Reihenfolge der Anschlusskabel mit der oben genannten identisch. Hier nochmal die Reihenfolge:
1. Ground – der Minuspol
2. Versorgungsspannung – 5 bis 9 Volt
3. Daten – hier wird der Motor gesteuert

Lautsprecher

Der Lautsprecher ist ein tellerförmiges Bauteil mit einem Durchmesser von etwa 3 Zentimetern mit zwei Kabeln. Die Polung ist hier wichtig, da es ein Plus und ein Minuskabel gibt. Die Unterseite des Lautsprechers ist magnetisch.

9 Volt Batteriehalter

wird zum Verbauen einer 9 Volt Blockbatterie genutzt. Der Batteriehalter ist quaderförmig, hat einen Verschluss und am anderen Ende des Halter befinden sich Zwei Kabel. Die Polung ist wichtig, da es ein Plus und ein Minuskabel gibt.

Gesetze/Regeln der Elektrotechnik

Es werden hier nicht die Gesetze im Detail erklärt, oder hergeleitet. Vielmehr geht es um das allgemeine Verständnis zum Aufbau der Schaltungen.

Kurzschluss

Ein Kurzschluss entsteht wenn der Strom in einer Schaltung unendlich groß wird. Das Ohmsche Gesetz U = R Mal I, also Spannung entspricht Widerstand Mal Strom ist die Grundlage zur Erläuterung hierfür.

Wird die Gleichung nach dem Strom I aufgelöst lautet sie I = U geteilt durch R, also der Strom entsprciht der Spannung geteilt durch den Widerstand. Wird der Widerstand kleiner, steigt der Strom. Bei einem Widerstand von 0 ist der Strom unendlich groß. Kabel und auch die verbundenen Kontakte eine Steckbretts haben einen internen Widerstand, der fast 0 ist. Werden Bauteile also faslsch verbaut, kann es zu einem Kurzschluss kommen, der den MikroController zerstört. Deswegen sollte der MikroController erst mit Strom versorgt werden, wenn sicher ist, dass die Schaltung korrekt aufgebaut wurde.

Der Strom sucht sich immer den Weg des geringsten Widerstands

Mal angenommen ein Widerstand ist im inneren Bereich platziert und beide Beine stecken in dem gleichen Segment in einer Reihe. Diese beiden Steckkontakte sind elektrisch miteinander verbunden. Der Strom wird beim Durchfließen den Widerstand ignorieren. Es kann mit einem Fluss verglichen werden, der zwei Seitenarme hat. Auch wenn ein Arm durch einen Damm geschlossen wird, fließt das Wasser einfach durch den zweiten Arm. Und zwar das gesamte Wasser, nicht nur ein Teil davon.

Reihen und Parallelschaltungen von Widerständen

In Parallelschaltungen ist die Spannung in allen parallelen Zweigen gleich. Der Strom teilt sich abhängig von den Widerständen proportional auf.

In Reihenschaltungen ist der Strom bei allen Widerständen gleich. Die Spannung teilt sich proportional über die Widerstände auf. Dieses Verhalten wird beim Spannungsteiler genutzt um Messungen durchzuführen.

Der Spannungsteiler

wird verwendet um zum Beispiel die Helligkeitsmesung durchzuführen. Der Fotowiderstand ändert seinen Wert abhängig von dem einfallenden Licht. Allerdings ist es nicht möglich den Widerstand direkt zu messen, während er von Strom durchflossen ist. Hierfür wird der Spannungsteiler verwendet.

Er besteht aus einem Widerstand mit einem festen, bekannten Wert und dem Fotowiderstand. Weiterhin muss die Gesamtspannung des Stromkreises bekannt sein. Angenommen sie ist 5 Volt und der Festwiderstand hat einen Wert von 100 Ohm. Der Fotowiderstand und der Festwiderstand werden in Reihe geschalten. Die Spannung misst der Arduino zwischen den beiden Widerständen.

Die Spannung, die über dem Fotowiderstand abfällt entspricht dem Verhältnis der Widerstände zueinander. Sind beide Widerstände geich groß, wird eine Spannung von 2,5 Volt gemessen. Das ist genau die Hälfte. Ist der Fotowiderstand doppelt so hoch wie der Festwiderstand, werden ca. 3,3 Volt über ihn abfallen. Das entspricht zwei Dritteln der Gesamtspannung.

Die Analogpins des Arduino geben diesen Wert als eine Zahl zwischen 0 und 1023 wieder, der dieses Verhältnis angibt. 2,5 Volt entsprächen also 511, bzw. 50% des Maximalwertes.

Bauanleitung der Schaltung in Bild und Text

Das Bild und die entsprechende Fritzing Datei sind im Download enthalten.

 Kurzbeschreibung Funktion

Auf dem Steckbrett ist ein Schieberegler verbaut, der die Stromversorgung des Arduino durch eine 9 Volt Blockbatterie durch verschieben an und ausschalten kann. Es gibt zwei Hubtaster, die jeweils ein Programm zu Kuftfeuchtigkeitsmesung mit dem DHT22 Sensor und die Helligkeitsmessung mit einem Fotowiderstand aktivieren. Sind die Taster nicht gedrückt, werden die Werte nicht gemessen. Die gemessene Luftfeuchtigkeit wird durch einen Servomotor auf einer Skala der Halterung angezeigt. Die gemessene Helligkeit wird durch einen Lautsprecher wiedergegeben. Der Lautsprecher ändert abhängig von der Helligkeit die Frequenz des Tonsignals.

Montageanleitung in Textform

Hier die einzelnen Montageschritte. Die Reihenfolge sollte beibehalten werden um möglichst wenig Kabelgewirr zu haben.

  1. Der Schieberegler wird die Löcher E3 bis E5 gesteckt. Schiebe den Hebel Richtung E5, damit wird dafür gesorgt, dass beim Anschließen der Batterie ganz am Ende erstmal kein Strom fließt.
  2. Der erste Hubtaster wird mit zwei Beinen in Spalte E Reihe 10 und 12 und mit zwei Beinen in Spalte F Reihe 10 und 12 gesteckt.
  3. Der zweite Hubtaster wird mit zwei Beinen in Spalte E Reihe 14 und 16 und mit zwei Beinen in Spalte F Reihe 14 und 16 gesteckt.
  4. Die Beine des DHT22 werden um 90 Grad Richtung Rückwand gebogen. Der DHT22 wird daraufhin mit der Vorderseite nach oben auf dem Steckbrett befestigt. Der Körper des Sensors liegt auf der Seite des Steckbretts mit den Spalten F bis J. Die Beine werden in Spalte E, Reihe 20 bis 23 gesteckt.
  5. Der Fotowiderstand wird in Reihe 30 Spalte E und F gesteckt. Die Orientierung ist egal.
  6. Der Ground Pin des Arduino auf der Seite mit den Digitalen Pins wird mit einer Spalte der rechten Powerrail verbunden. Sie ist jetzt die Ground Spalte dieser Powerrail.
  7. Ein 10 Kilo Ohm Widerstand wird in Reihe 30  Spalte J mit der Ground Spalte der rechten Powerrail verbunden.
  8. Der Lautsprecher wird mit dem Arduino Pin D7 und der Ground Spalte der rechten Powerrail verbunden. Die Polung ist egal.
  9. Einer der Ground Pins des Arduino auf der Seite mit den Analog Pins wird mit einer Spalte der linken Powerrail verbunden. Sie ist jetzt die Ground Spalte dieser Powerrail.
  10. Der 3.3 Volt Pin des Arduino wird mit der äußeren Spalte der linken Powerrail verbunden. Sie ist jetzt die Power Spalte dieser Powerrail.
  11. Der Servomotor wird angeschlossen. Dabei sollte der Dreifachstecker mit der Öffnung nach unten gehalten werden und die kleinen Einbuchtungen zum eigenen Körper zeigen. Die Kabel werden von links nach rechts eingesteckt. Linkes Kabel ist der Ground. Er wird in ein beliebiges Locher der linken Ground Spalte gesteckt. Je weiter oben, desto besser. Der mittlere Stecker ist die Stromversorgung, sie wir in den 5 Volt Pin des Arduino gesteckt. Der rechte Pin ist das Signal, des wird an den Arduino Pin D6 gesteckt.
  12. Für die Stromversorgung wird ein kurzes Jumperkabel in den Arduino Anschluss VIN gesteckt und das andere Ende in Spalte A, Reihe 3. Hier befindet sich auch der Schieberegler.
  13. Der D5 Pin des Arduino wird durch ein Jumperkabel mit dem zweiten Pin des DHT22 verbunden. Spalte C, Reihe 21. Hier kommt das Signal des DHT an.
  14. Der D4 Pin wird durch ein Jumperkabel mit dem oberen der Hubtaster verbunden. Spalte J, Reihe 16.
  15. Der D3 Pin wird durch ein Jumperkabel mit dem unteren der Hubtaster verbunden. Spalte J Reihe 12.
  16. Auf der anderen Seite wird der obere Hubtaster durch ein Jumperkabel mit der Ground Spalte der linken Powerrail verbunden. Spalte A, Reihe 10 zur Ground Spalte.
  17. Der untere Hubtaster wird durch ein Jumperkabel mit der Ground Spalte der linken Powerrail verbunden. Spalte A, Reihe 14 zur Ground Spalte.
  18. Ein 10 Kilo Ohm Widerstand wird an den zweiten Pin des DHT22 angeschlossen und mit der Power Spalte der linken Powerrail verbunden. A22 zur Power Spalte.
  19. Die Versorgungsspannung des DHT22 Sensors wird angeschlossen. Hierzu wird ein kurzes Jumperkabel zwischen der Power Spalte und Spalte A, Reihe 20 gesteckt.
  20. Der Ground des DHT22 Sensors wird verbunde. Nutze ein Jumperkabel um Spalte C, Reihe 23 mit der Ground Spalte der linken Powerrail zu verbinden.
  21. Der Fotosensor wird mit Spannung versorgt. Nutze ein kurzes Jumperkabel um Spalte A, Reihe 30 mit der Power Spalte der linken Powerrail zu verbinden.
  22. Die Spannung am Spannungsteiler am Fotowiderstand wird an einem Analogpin des Arduino ausgelesen. Nutze ein Jumperkabel um den Analog Pin A0 des Arduino mit Spalte H, Reihe 30 zu verbinden.
  23. Zu guter letzt wird noch die 9 Volt Blockbatteriehalterung angeschlossen. Stele sicher, dass sich in der Halterung keine Batterie befindet, bevor du die Schaltung überprüft hast.
  24. Verbinde das Pluskabel der Batteriehalterung mit dem Steckbrett an Steckplatz Spalte A, Reihe 4.
  25. Verbinde das Minuskabel der Batterie mit dem letzten freien Ground Pin des Arduino auf der Seite der Analog Pins, oder der Linken Ground Spalte, sollte dir das lieber sein.
  26. Prüfe deine gesamte Schaltung noch einmal, oder lasse sie prüfen, bevor du eine Batterie in das 9 Volt Batteriefach einlegst.
  27. Lege eine Batterie ein. Um den Arduino mit Strom zu versorgen, bewege den Schieberegeler nach oben.