close

Anmelden

Neues Passwort anfordern?

Anmeldung mit OpenID

Arduino Anleitung - Leibniz-Gymnasium Rottweil

EinbettenHerunterladen
Arduino
J. Gräber 2013
Seite -1-
Seite -2-
Inhaltsverzeichnis_____
____________________
Tabellarischer Überblick
Bauelemente (mit Schaltzeichen) und Befehle
Kapitel
Nr.
1&
Einführung
2
3
Neue
Bauelemente
Schaltzeichen
Neue Befehle
•
•
•
•
•
•
•
LED
Wechselschalter
pinMode
digitalWrite
delay
digitalRead
if (else)
vergleichende Operatoren
int
Potentiometer
5
LDR
Fotowiderstand
•
•
•
•
analogRead
Rechenoperatoren
Serial.begin
Serial.print / Serial.println
6
•
analogWrite
7
•
for
9
Neue
Bauelemente
Schaltzeichen
10
11
Lautsprecher
12
Reflexoptokoppler
13
Servo
14
Temperatursensor
LM35
Neue Befehle
•
Serial.read
•
tone
•
•
Servo-Befehle
map
Taster
4
8
Kapitel
Nr.
L293D
Motosteuer IC
Unterprogramme und definierte Funktionen
Seite -3-
Seite -4-
Vorbemerkung
Installation
Zum Aufbau dieser Anleitung:
Auswahl des Arduino-Boards
•
Nach einer kurzen Vorstellung der Hard- und Software werden die neuen
elektronischen Bauelemente und Befehle schrittweise eingeführt.
So besteht der „praktische“ Teil immer aus dem Aufbau:
o
o
o
o
Neue Bauelemente
Neue Befehle
Aufgabe
„weitere“ Aufgaben
•
Das Erlernen der Programmiersprache stützt sich dabei auf die zahlreichen
Beispielprogramme (Sketches), die bereits hinterlegt sind.
Danach soll aktiv mit den neuen Befehlen umgegangen werden, um weitere
Aufgaben zu lösen. Dabei werden früher erlernte Befehle immer wieder
aufgegriffen.
•
Nach diesem Kurs sollten die Schülerinnen und Schüler in der Lage sein,
selbständig ein Projekt mit dem Arduino durchzuführen.
Auswahl des Seriellen Ports:
Links
•
Arduino Homepage:
http://www.arduino.cc/
•
Tutorials:
http://www.kriwanek.de/arduino/wie-beginnen.html
http://www.arduino-tutorial.de/einfuhrung/
http://popovic.info/html/arduino/arduinoUno_1.html
http://www.netzmafia.de/skripten/hardware/Arduino/Arduino_Programmierhandbuch.
pdf (Arduino Handbuch)
•
Normalerweise wird der Arduino über den Seriellen Port mit der höchsten Nummer
verbunden. Ansonsten bitte im Gerätemanager (Systemsteuerung) nachschauen
Video-Tutorials:
http://www.arduino-tutorial.de/category/videoworkshop/
http://mr.intermediadesign.de/tag/arduino/
http://maxtechtv.de/category/arduino/beginner/
•
Projekte:
http://www.maxpie.de/Projekt_arduino.htm
Seite -5-
Seite -6-
Einführung __________
_________________ 1
Die Hardware
Die Software
Sketch
speichern
Sketch
überprüfen
Sketch
upload
Das Grundprinzip eines Mikrocontrollers
Sketch
neu
Beispielprogramme (Sketches)
Um Leuchtdioden leuchten zu lassen oder Motoren zu steuern, erzeugt ein
Mikrocontroller an seinen Pins (Anschlüssen) verschiedene Spannungen.
•
Digitale Pins:
Sie haben entweder den Zustand HIGH oder LOW. Es liegen dann entweder
0V oder 5V an.
•
Analoge Pins:
Ihr Spannungswert kann zwischen 0V und 5V liegen.
Über die Pins können auch Spannungswerte eingelesen werden. Damit kann man
z.B. überprüfen, ob ein Schalter geöffnet ist oder geschlossen, ob viel Licht auf eine
Photozelle fällt oder wenig.
Auch hier gibt es die Unterscheidung zwischen digitalen Pins (Entweder HIGH oder
LOW) und den analogen Pins (Spannungswerte zwischen 0V und 5V).
Seite -7-
Seite -8-
Sketch
öffnen
Einführung __________
__________________ 2
Neue Befehle:
Ein Programm wird allgemein mit „Sketch“ bezeichnet.
Alle Sketches haben den gleichen Aufbau:
Dieser Programmteil wird einmal durchlaufen!
•
•
pinMode(led, OUTPUT)
Da die Variable led mit dem Wert 13 belegt wurde, wird PIN13 als OUTPUT
deklariert. D.h. er kann die Werte HIGH (5V) und LOW (0V) annehmen und
damit eine Leuchtdiode ansteuern.
(Setzen von Pinmode oder Start der seriellen
Kommunikation)
Dieser Programmteil wird unendlich oft
durchlaufen!
Hier befindet sich das eigentliche Programm, der
so genannte Programmcode.
int led = 13;
Die Variable led wird mit dem (Integer-) Wert 13 belegt.
•
digitalWrite(led, HIGH)
PIN13 wird HIGH (5V) gesetzt.
•
delay(1000)
Bis zur Verarbeitung des nächsten Befehls wartet der Arduino 1000 ms.
Info Datentypen:
•
byte
Byte speichert einen 8-bit numerischen, ganzzahligen Wert ohne Dezimalkomma. Der Wert
kann zwischen 0 und 255 sein.
Beispielprogramm für eine blinkende LED:
byte y = 180; // deklariert y als einen 'byte' Datentyp
•
int
Integer ist der meist verwendete Datentyp für die Speicherung von ganzzahligen Werten ohne
Dezimalkomma. Sein Wert hat 16 Bit und reicht von -32.767 bis 32.768.
int x = 1500; // deklariert y als einen 'integer' Datentyp
Bemerkung: Integer Variablen werden bei Überschreiten der Limits 'überrollen'. Zum Beispiel
wenn x = 32767 und eine Anweisung addiert 1 zu x, x = x + 1 oder x++, wird 'x' dabei
'überrollen' und den Wert -32,768 annehmen.
•
long
Datentyp für lange Integer mit erweiterer Größe, ohne Dezimalkomma, gespeichert in einem
32-bit Wert in einem Spektrum von -2,147,483,648 bis 2,147,483,647.
long z = 9000; // deklariert z als einen 'long' Datentyp
•
float
Ein Datentyp für Fliesskomma Werte oder Nummern mit Nachkommastelle. Fliesskomma
Nummern haben eine bessere Auflösung als Integer und werden als 32-bit Wert mit einem
Spektrum von -3.4028235E+38 bis 3.4028235E+38.
float pi = 3.14; // deklariert pi als einen 'float' Datentyp
Seite -9-
Seite -10-
Kapitel ______________
__________________ 1
Aufgabe A1.2 :
Neue Bauelemente: LED, Steckplatine
•
Neue Befehle: •
Ziel: Eine bzw. mehrer LED zum Leuchten bringen
Ändere den Sketch „A011_Blink“ so ab, dass die LED 3 Sekunden lang
leuchtet und 1 Sekunde lang dunkel bleibt.
Speichere den neuen Sketch im Ordner „Sketches“
unter „A012_Blink2_(xx)“ ab.
xx = Dein Name.
Aufgabe A1.3 :
Aufgabe A1.1:
•
Schließe eine rote LED am Pin 13
Achte auf die Polung (siehe Info)
•
Öffne im Ordner „Sketches“ den
Sketch „A011_Blink“
•
Übertrage den Sketch auf den
Arduino.
•
Beobachte die eingebaute LED.
•
•
•
•
•
•
Baue eine Schaltung auf, bei der abwechselnd eine rote und gelbe LED
blinkt.
Verwende dazu eine Steckplatine.
Vorwiderstände nicht vergessen!
Ändere den Sketch „A011_Blink“ entsprechend ab.
Speichere den neuen Sketch unter „A013_Blink_2LED_(xx)“ ab.
Zeichne den Schaltplan.
Steckbeispiel für 2 LEDs:
INFO: LED
•
Auf dem Arduinoboard befindet sich an Pin 13
eine eingebaute LED.
Man hätte auf eine zusätzliche LED wie in der
Aufgabe A1.1 verzichten können.
•
Wird an einem anderen Pin eine LED
angeschlossen muss ein Vorwiderstand von
220 Ohm verwendet werden.
(Dieser ist bei Pin 13 bereits mit eingebaut)
Aufgabe A1.4:
Info: Steckplatine
Die seitlichen Kontakte (blau bzw. rot
umrandet) sind in der Regel über die ganze
Länge leitend miteinander verbunden.
Ansonsten sind die 5er-Reihen (schwarz
umrandet) leitend miteinander verbunden.
Seite -11-
•
•
•
•
•
Baue eine Ampelschaltung aus einer roten, gelben und grünen LED auf.
Schreibe den Sketch.
Übertrage das Programm.
Speichere den Sketch unter dem Namen „A014_Ampel_(xx)“ ab.
Zeichne den Schaltplan.
Seite -12-
Kapitel ______________
___________________ 2
Neue Bauelemente: Wechselschalter
Neue Befehle:
• const
• digitalRead
• if (else)
Ziel: Eine LED mit einem Wechselschalter an- und ausschalten.
Aufgabe A2.1:
•
•
•
•
Baue die Schaltung wie in der Abbildung auf.
Öffne den Sketch „A021_LED_mit_Schalter“.
Starte den Sketch.
Verändere die Schalterstellung und beobachte die LED.
Neue Befehle:
•
const
Der Wert dieser Variablen bleibt konstant und kann auch später nicht
verändert werden.
•
digitalRead(buttonPin)
Liest den Zustand (HIGH oder LOW) eines Pins aus. (Hier Pin 10)
•
if (else)
Mit diesem Befehl wird abgefragt, ob ein Aussage wahr ist. In diesem Fall, ob
ein Pin im Zustand HIGH ist.
Ist die Aussage nicht wahr geht das Programm zu dem Teil else weiter.
INFO: Wechselschalter
Bei dem Wechselschalter in dieser Abbildung liegen die
beiden äußeren Kontakte auf 5V bzw. 0V. Je nach
Schalterstellung ist der Mittenkontakt mit einem der
beiden äußeren Kontakte verbunden. Damit ist der
Zustand von Pin10 eindeutig festgelegt. Es liegen
entweder 5V (HIGH) oder 0V (LOW) an.
Vergleichende Operatoren
Bemerkung:
Nicht alle Schalter sind so aufgebaut, dass der Mittenkontakt
auch in der Mitte ist.
Seite -13-
Pin
0V 5V
Seite -14-
Kapitel ______________
___________________ 2
Aufgabe A2.2:
•
•
•
•
Schließe eine weitere LED an.
Ändere den Sketch so ab, dass bei gedrücktem Schalter LED1 leuchtet und bei
geöffnetem Schalter LED2 leuchtet.
Speichere den Sketch unter dem Namen „A022_2LED_mit_Schalter_(xx)“.
Zeichne den Schaltplan.
Tipp: Übersicht beim Programmieren
a) Kommentare (//) und Block Kommentare (/*... */)
Kommentare sind Textbereiche die vom Programm ignoriert werden. Sie
werden für längere Beschreibungen oder Kommentare verwendet und helfen
anderen Autoren Programmteile zu verstehen.
•
•
Einzeilige Kommentare fangen mit // an.
Blockkommentare fangen mit /* an und enden mit */ und umfassen
mehrere Zeilen.
b) Einrücken
Durch „Einrücken“ in den Befehlszeilen wird der Sketch übersichtlicher
gestaltet. So wird z.B. jede Zeile die zu „void setup“ gehört um 2 Zeichen
eingerückt.
Seite -15-
Seite -16-
Kapitel ______________
___________________ 3
Neue Bauelemente: Taster
Interessanter wird es, wenn man die beiden Verbindungen vom Pin zu 5V bzw. vom
Pin zu 0V jeweils mit Widerständen erzeugt (Siehe Abbildung Seite -13-). So entsteht
kein Kurzschluss, da nur ein schwacher Strom durch die beiden Widerstände fließt.
Diese Schaltung bezeichnet man als Spannungsteiler mit einem Mittelkontakt. Der
Pull-Up-Widerstand Rup und der Pull-Down-Widerstand Rdown teilen sich die
Gesamtspannung entsprechend ihrer Anteile am Gesamtwiderstand in die Spannung
Uup und Udown auf. Das Potential am Port des Mikrocontrollers entspricht Udown und
lässt sich aus den Widerstandswerten und der Gesamtspannung berechnen:
Neue Befehle: Ziel: Eine LED soll leuchten, wenn ein (einfacher) Taster gedrückt wird.
Aufgabe A3.1:
•
•
•
Baue die Schaltung wie in der Abbildung auf.
Lies den Abschnitt „INFO: Der Spannungsteiler“ durch.
Öffne und starte den Sketch „A031_LED_mit_Taster“.
(Dieser Sketch entspricht dem Sketch „A02_LED_mit_Schalter“)
Mit Hilfe eines Spannungsteilers kann man damit auch normale Taster oder
Schalter an den Eingängen eines Mikrocontrollers einsetzen. Setzt als PullUp-Widerstand einen Widerstand von 10 kΩ ein, an Stelle des Pull-DownWiderstands einen Schalter bzw. Taster. Er hat in geöffnetem Zustand
einen Widerstand von nahezu unendlich (über 100 MΩ), im geschlossenen
Zustand einen Widerstand von unter 1Ω.
Im geschlossenen Zustand liegen damit am Pin 0V an (LOW), im
geöffneten Zustand 5V (HIGH).
Aufgabe A3.2:
•
•
•
Berechne das Potential am Mittelkontakt (also Udown ) für Rup=10 kΩ und
Rdown= 10 kΩ .
Berechne das Potential am Mittelkontakt (also Udown ) für Rup=8 kΩ und
Rdown= 2 kΩ .
„Berechne“ das Potential am Mittelkontakt (also Udown ) für Rup=10 kΩ und für
den Fall dass der Taster geöffnet bzw. geschlossen ist.
INFO: Der Spannungsteiler
Was geschieht, wenn man einen
Eingangspin sowohl an ein Potential
von 5V als auch an ein Potential von
0V anschließt? Wird der Pin dann HIGH
oder LOW sein?
Wenn man einen Pin ganz direkt
sowohl mit 5V als auch mit 0V
verbindet,
erzeugt
man
einen
Kurzschluss. Das ist keine gute Idee:
Der Spannungsregler wird überhitzen
und
sich
hoffentlich
rechtzeitig
abschalten, bevor etwas kaputt geht.
Seite -17-
Aufgabe A3.3:
•
•
Vertausche den Taster und den 10 kΩ-Widerstand (s. Abb.)
Wie ändert sich das Verhalten der Schaltung?
Seite -18-
Kapitel ______________
___________________ 4
Neue Bauelemente: Potentiometer
Neue Befehle:
• analogRead
• Serial.begin(9600)
• Serial.print / Serial.println
• Rechenoperatoren
Ziel: Ein Potentiometer wird an einem analogen Eingang angeschlossen. Der
anliegende Wert wird ausgelesen und über die serielle Verbindung an den
Computer zurückgesendet.
Bemerkung:
Der Arduino muss in diesem Fall mit dem Computer verbunden bleiben.
Alternativ kann später ein LCD-Display eingesetzt werden.
Aufgabe A4.1:
•
•
•
•
•
Baue die Schaltung wie in der Abbildung auf
Öffne den Sketch „A041_Poti“.
Starte das Programm.
Öffne den „seriellen Monitor“ (STRG+UMSCHALT+M).
Verändere die Stellung des Potentiometers und beobachte die Werte im
Fenster des seriellen Monitors.
Neue Befehle:
•
analogRead(pin)
Liest den Wert eines festgelegten analogen Pins aus. Die resultierenden
Integer Werte haben ein Spektrum von 0 bis 1023.
Bemerkung: Analoge Pins müssen im Gegensatz zu digitalen nicht zuerst als
Eingang oder Ausgang deklariert werden.
•
Serial.begin(9600)
Öffnet den seriellen Port und setzt die Datenrate auf 9600 bps.
•
Serial.print / Serial.println
Sendet eine Nachricht oder einen Wert an den seriellen Monitor.
Serial.print("Das ist eine Nachricht ohne Zeilenumbruch");
Serial.println("Das ist eine Nachricht mit Zeilenumbruch am Ende");
Serial.print(sensorValue); Sendet den Wert der Variable sensorValue.
Seite -19-
Seite -20-
Kapitel ______________
___________________ 4
Aufgabe A4.2:
•
•
•
Rechne die ausgelesenen Werte so um, dass sie den Werten der am analogen
Eingang anliegenden Spannung entsprechen.
Ändere den Sketch so ab, dass auf dem seriellen Monitor der Spannungswert
ausgegeben wird, wie z.B.: „Die Spannung beträgt: 2,1 V“
Speichere den Sketch unter dem Namen „A042_Poti_Spannung_(xx)“ ab.
INFO: Rechenoperatoren
Arithmetische Operatoren umfassen Addition, Subtraktion, Multiplikation und Division. Sie
geben die Summe, Differenz, das Produkt oder den Quotienten zweier Operatoren zurück.
y = y + 3;
x = x - 7;
i = j * 6;
r = r / 5;
Die Operation wird unter Beibehaltung der Datentypen durchgeführt. 9 / 4 wird so zum
Beispiel zu 2 und nicht 2,25, da 9 und 4 Integer sind und keine Nachkommastellen
unterstützen. Dies bedeutet auch, dass die Operation überlaufen kann wenn das Resultat
größer ist als der Datentyp zulässt. Wenn die Operanden unterschiedliche Datentypen haben
wird der größere Typ verwendet. Hat zum Beispiel eine der Nummern (Operanden) den
Datentyp 'float' und der andere 'int', so wir Fliesskomma Mathematik zur Berechnung
verwendet.
Bemerkung: Wähle variable Größen die groß genug sind um die Werte der Ergebnisse zu
speichern. Sei Dir bewusst an welcher Stelle die Werte überlaufen und auch was in der
Gegenrichtung passiert. z.B. bei (0 - 1) oder (0 - - 32768). Für Berechnungen die Brüche
ergeben sollten immer 'float' Variablen genutzt werden. Allerdings mit dem Bewusstsein der
Nachteile: Großer Speicherbedarf und langsame Geschwindigkeit der Berechnungen. Nutze
den Form Operator z.B. (int)myFloat um einen Variablen Typen spontan in einen anderen zu
verwandeln. Zum Beispiel wird mit i = (int)3.6 die Variable i auf den Wert 3 setzen.
Gemischte Zuweisungen
Gemischte Zuweisungen kombinieren eine arithmetische Operation mit einer Variablen
Zuweisung. Diese werden üblicherweise in Schleifen gefunden, die wir später noch genauer
Beschreiben werden. Die gängigsten gemischten Zuweisungen umfassen:
x
x
x
x
x
x
++
-+= y
-= y
*= y
/= y
// identisch
// identisch
// identisch
// identisch
// identisch
// identisch
mit
mit
mit
mit
mit
mit
x
x
x
x
x
x
=
=
=
=
=
=
x
x
x
x
x
x
+ 1, oder Erhöhung von x um +1
- 1, oder Verminderung von x um -1
+ y, oder Erhöhung von x um +y
- y, oder Verminderung von x um -y
* y, oder Multiplikation von x mit y
/ y, oder Division von x mit y
Bemerkung:
Zum Beispiel führt x *= 3 zur Verdreifachung des alten Wertes von 'x' und weist
der Variablen 'x' des Ergebnis der Kalkulation zu.
Seite -21-
Seite -22-
Kapitel ______________
Neue Bauelemente: LDR (Light Dependent Resistor) Lichtsensor
___________________ 5
Aufgabe 5.2:
•
•
Neue Befehle: Ziel: Eine LED soll leuchten, wenn ein LDR abgedunkelt wird.
•
•
Ergänze die Schaltung durch die rote LED mit Vorwiderstand.
Ändere den Sketch so ab (Befehl IF und ELSE), dass die LED ab einem
bestimmten Schwellenwert anfängt zu leuchten.
Speichere den Sketch unter dem Namen „A052_LDR_(xx)“ ab.
Zeichne den Schaltplan.
Aufgabe 5.1:
•
•
•
•
•
Baue die Schaltung wie in der Abbildung, jedoch ohne LED und
Vorwiderstand, auf.
Öffne den Sketch „A051_LDR“
Starte den Sketch.
Öffne den seriellen Monitor.
Dunkle mit deiner Hand den LDR ab und beobachte dabei die
Werte auf dem seriellen Monitor.
Aufgabe 5.3:
•
•
•
•
Füge eine grüne LED mit Vorwiderstand hinzu.
Ändere den Sketch so ab, dass nur die rote LED oberhalb eines
bestimmten Schwellenwerts leuchtet und die grüne LED nur unterhalb des
Schwellenwerts leuchtet.
Speichere den Sketch unter dem Namen „A053_LDR_2LED_(xx)“ ab.
Zeichne den Schaltplan.
Info: LDR
Ein Fotowiderstand ist ein Halbleiter, dessen Widerstandswert
lichtabhängig ist. Ein LDR besteht aus zwei Kupferkämmen, die auf einer
isolierten Unterlage (weiß) aufgebracht sind. Dazwischen liegt das
Halbleitermaterial in Form eines gewundenen Bandes (rot). Fällt das Licht
(Photonen) auf das lichtempfindliche Halbleitermaterial, dann werden die
Elektronen aus ihren Kristallen herausgelöst (Paarbildung). Der LDR wird
leitfähiger, das heißt, sein Widerstandswert wird kleiner. Je mehr Licht
auf das Bauteil fällt, desto kleiner wird der Widerstand.
Seite -23-
Seite -24-
Kapitel ______________
Neue Bauelemente: -
___________________ 6
INFO: PWM (PulsWeitenModulation)
Neue Befehle: analogWrite
Ziel: Eine LED soll mit einem LDR gedimmt werden.
Aufgabe 6.1:
•
•
•
Baue die Schaltung wie in der Abbildung auf.
Öffne und starte den Sketch „A061_LDR_Dimmen“
Verändere die Stellung des Potentiometers und beobachte dabei die LED.
Notiere deine Beobachtungen.
Ein digitaler Pin kennt die beiden Zustände HIGH und LOW. Dann liegen an diesem
Pin entweder 0V oder 5V an.
Einige der digitalen Pins auf dem Arduino-Board sind mit „PWM“ (oder „~“)
gekennzeichnet. Mit dem Befehl analogWrite(pin, value) kann man an diesen Pins
eine pseudo-analoge Spannung erzeugen:
Der Befehl analogWrite(11, 0) generiert eine gleichmäßige Spannung von 0 Volt
an Pin11, der Befehl analogWrite(11, 255) generiert eine gleichmäßige Spannung
von 5 Volt an Pin11. Für Werte zwischen 0 und 255 wechselt der Pin sehr schnell
zwischen 0 und 5 Volt - je höher der Wert, desto länger ist der Pin HIGH (5 Volt).
Der Befehl analogWrite(11, 127) führt dazu, dass die Ausgangsspannung zur
Hälfte der Zeit auf HIGH steht und zur anderen Hälfte auf LOW. Bei
analogWrite(11, 192) 192 misst die Spannung am Pin zu einer Viertel der Zeit 0
Volt und zu Dreivierteln die vollen 5 Volt.
Weil dies eine hardwarebasierte Funktion ist, läuft die konstante Welle unabhängig
vom Programm bis zur nächsten Änderung des Zustandes per analogWrite (bzw.
einem Aufruf von digitalRead oder digitalWrite am selben Pin).
Aufgabe 6.2:
•
•
•
•
•
•
Seite -25-
Ersetze in der Schaltung das Potentiometer durch einen Spannungsteiler
aus einem 10 kΩ Widerstand und einem LDR. (Siehe Praktikum 5)
Starte den Sketch.
Öffne den seriellen Monitor.
Dunkle den LDR mit der Hand ab und beobachte die LED.
Notiere deine Beobachtungen.
Zeichne den Schaltplan.
Seite -26-
Kapitel ______________
___________________ 7
Neuer Befehl: for
Neue Bauelemente: -
Die for-Schleife wird verwendet um einen Block von Anweisungen in geschweiften
Klammern eine festgelegt Anzahl von Wiederholungen durchlaufen zu lassen.
Es gibt im Header der for-Schleife drei Elemente, getrennt durch Semikolon ';'.
Neue Befehle: For (Schleife)
Ziel: Eine LED soll ein- und ausfaden, d.h. langsam heller und dunkler werden.
for (Initialisierung; Bedingung; Ausdruck/Anweisung)
{
doSomething;
}
Aufgabe 7.1:
•
•
•
Baue die Schaltung wie in
der Abbildung auf.
Öffne den Sketch
„A071_LDR_Faden“
Starte den Sketch.
1. Die Initialisierung einer lokalen Variablen, einem ansteigenden oder
absteigenden Zähler.
2. Bei jedem Durchlaufen der Schleife wird die Bedingung an der zweiten Stelle
getestet. (siehe vergleichende Operatoren Seite 12)
3. Wenn die Bedingung wahr ist läuft die Schleife weiter und die folgenden
Ausdrücke und Anweisungen werden ausgeführt und die Bedingung wird
erneut überprüft. Ist die Bedingung nicht mehr wahr so endet die Schleife.
Das folgende Beispiel startet mit einem Integer Wert 'i' bei 0, die Bedingung testet
ob der Wert noch kleiner als 20 ist und wenn dies wahr ist so wird 'i' um einen Wert
erhöht und die Anweisungen innerhalb der geschweiften Klammern werden
ausgeführt:
Aufgabe 7.2:
•
•
•
Ergänze zwei weitere LEDs
Ändere den Sketch so ab, dass eine LED nach der anderen hell und dunkel
wird.
Speichere den Sketch unter dem Namen „A072_3LED_Faden_(xx)“ ab.
Aufgabe 7.3:
•
•
•
•
Seite -27-
Ergänze einen Taster.
Ändere den Sketch so ab, dass der Taster gedrückt werden muss, damit
die nächste (erste) LED hell wird.
Speichere den Sketch unter „A072_3LED_Faden_Taster_(xx)“ ab.
Zeichne den Schaltplan.
Seite -28-
Kapitel ______________
___________________ 8
Aufgabe 8.1:
•
•
•
Neue Bauelemente: L293D (Motorsteuerungs IC)
Neue Befehle: -
Baue die Schaltung wie in der Abbildung auf.
Öffne den Sketch „A081_Motorsteuerung“.
Starte den Sketch.
Ziel: Ein oder zwei Gleichstrommotoren sollen angesteuert werden.
INFO: Motorsteuerung für 1 Motor:
Ein einfacher Elektromotor hat zwei Anschlüsse. Wenn eine Spannung anliegt, dreht
sich der Motor in die eine Richtung, kehrt man die Spannung um, dreht sich der
Motor in die andere Richtung. Welches Pin man dazu wo am L293D anschließen
muss und wie man die Drehrichtung vom Mikrocontroller aus steuern kann, wird hier
erklärt:
Pinbelegung
L293D
4,5,12,13
16
1
8
3 und 6
2 und 7
Bedeutung und Belegung
Erdung (0V)
Energieversorgung des IC (5V)
Enable-Pin des IC. Ist dieses mit 5V verbunden, sind die MotorPins 3 und 6 aktiv.
Energieversorgung des Motors. Der Minus-Pol der
Energieversorgung muss mit Erde (0V) verbunden sein, also
z.B. mit Pin4.
Anschluss des Motors
Anschluss an die Pins 2 und 3 des Arduino.
Pin2: HIGH
Pin2: LOW
Pin2: LOW
Pin2: HIGH
Pin3: LOW
Pin3: LOW
Pin3: HIGH
Pin3: HIgH
Motor dreht sich
Motor dreht sich nicht
Motor dreht sich umgekehrt
Motor dreht sich nicht
Aufgabe 8.2:
•
•
Seite -29-
Ändere den Sketch „A081_Motorsteuerung“ so ab, dass sich der Motor 3
mal hintereinander (Befehl: for) jeweils 2 Sekunden in eine Richtung und
nach einer Pause von 1 Sekunde 2 Sekunden in die andere Richtung dreht.
Speichere den Sketch unter dem Namen „A082_Motorsteuerung_(xx)“ ab.
Seite -30-
Kapitel ______________
___________________ 8
INFO: Motorsteuerung für 2 Motoren:
Pinbelegung
L293D
4,5,12,13
16
1 und 9
8
3 und 6
11 und 14
2 und 7
10 und 15
Bedeutung und Belegung
Erdung (0V)
Energieversorgung des IC (5V)
Enable-Pin des IC. Ist dieses mit 5V verbunden, sind die MotorPins 3 und 6 bzw. 11 und 14 aktiv.
Energieversorgung des Motors. Der Minus-Pol der
Energieversorgung muss Erde (0V) verbunden sein (Siehe
Schaltung)
Anschluss Motor 1
Anschluss Motor 2
Anschluss an die Pins 2 und 3 des Arduino.
Anschluss an die Pins 4 und 5 des Arduino.
Aufgabe 8.4:
•
Aufgabe 8.3:
•
•
•
Ändere den Sketch „A081_Motorsteuerung“ so ab, dass sich die Motoren
zunächst in die gleiche Richtung, in die umgekehrte Richtung und
anschließend in verschiedene Richtungen drehen. (Pause 1 Sekunde)
Erzeuge eine Ausgabe auf den seriellen Monitor, die über die Drehrichtung
der einzelnen Motoren informiert.
Zeichne den Schaltplan
•
•
•
Um die Geschwindigkeit der Motoren steuern zu können kann man die
beiden „enable Pins“ 1 und 9 des L293D an einen PWM-Ausgang des
ARDUINO anschließen. Damit lässt sich die Leistung des L293D drosseln,
indem man ihn z.B. nur 50% der Zeit aktiviert.
Erweitere deine Schaltung.
Ändere den Sketch „A083_Motorsteuerung2_(xx)“ entsprechend ab und
speichere ihn unter dem Namen „A084_Motorsteuerung2_PWM_(xx)“ ab.
Zeichne den Schaltplan.
Aufgabe 8.5:
•
•
•
•
Seite -31-
Jetzt wird´s richtig kompliziert…
Regle die Geschwindigkeit der Motoren mit Hilfe eines Potis.
Erzeuge eine Ausgabe auf dem seriellen Monitor, die die Leistung der
Motoren in Prozent angibt.
Speichere den Sketch unter dem Namen
„A085_Motorsteuerung2_PWM_(xx)“ ab.
Zeichne den Schaltplan.
Seite -32-
Kapitel ______________
__________________ 9
1. Beispiel: Motorsteuerung
Neue Bauelemente: Neue Befehle: Unterprogramme und selbst definierte Funktionen
Ziel: Sketches einfacher und übersichtlicher gestalten.
Sketches lassen sich einfacher und übersichtlicher gestalten, wenn immer wieder
auftretende Programmteile in Unterprogrammen „ausgelagert“ werden und mit nur
einem Befehl aufgerufen werden.
Dabei bilden die beiden Programmteile
und
Grundstruktur eines Sketches.
Entsprechend lassen sich weitere Unterprogramme erstellen.
Das Unterprogramm
‚vorwaerts’ wird aufgerufen.
die
Allgemeine Form eines Unterprogramms:
Rückgabetyp:
Gibt den Datentyp des Werts an, der zurückgegeben wird. (Siehe Beispiel 3)
Wird kein Wert zurückgegeben, dann wird hier der Befehl void verwendet. (Siehe
Beispiel 1 und 2)
Funktionsname:
Frei wählbarer Namen des Unterprogramms bzw. der Funktion.
Paramaterliste
Hier stehen die Werte, die an das Unterprogramm übergeben werden. Die
Parameterliste kann auch leer bleiben (Siehe Beispiel 1)
Seite -33-
Seite -34-
Kapitel ______________
___________________ 9
2. Beispiel: Motorsteuerung
3. Beispiel: Multiplikation zweier Werte
(mit Übergabe von Werten)
(mit Rückgabe des Ergebnisses)
Die Funktion „multipliziere“ wird
aufgerufen und die beiden Werte
werden mit übergeben.
Das Ergebnis wird in der
Variablen ‚produkt’ abgelegt.
Die Funktion „multipliziere“ kann
auch direkt aufgerufen werden.
‚x’ ist eine lokale
Variable und nur
gültig innerhalb des
Unterprogramms.
Aufgabe A9.1:
•
•
Seite -35-
Schreibe den Sketch „A081_Motorsteuerung_(xx)“ bzw.
„A082_Motorsteuerung_(xx)“ neu mit Hilfe von Unterprogrammen.
Speichere den Sketch unter „A091_Motorsteuerung_(xx)“ bzw.
„A092_Motorsteuerung_(xx)“ ab
Seite -36-
Kapitel ______________
__________________ 10
Neue Bauelemente: Neue Befehle: Serial.read
Ziel: Daten von der Tastatur einlesen.
Um Programmabläufe zu steuern kann es geschickt sein, Daten von der Tastatur
einzulesen. Mit dem folgenden Sketch wird über die Tastatur eine Leuchtdiode anund ausgeschalten.
Aufgabe A10.1:
•
•
•
•
Schließe an Pin2 eine LED an.
Öffne den Sketch „A101_Serial_Read“ und übertrage ihn auf den Arduino.
Öffne den seriellen Monitor.
Gib in der Kommandozeile
“1“ für LED on
“2“ für LED off
ein, und drücke auf „Send“ (oder „Enter“).
Beobachte die LED.
Neue Befehle:
•
Serial.Read()
Zunächst wird überprüft, ob überhaupt Daten (hier: von der Tastatur)
anliegen. Dies geschieht mit dem Befehl: if (Serial.available()>0)
Sind Daten verfügbar, dann werden sie mit Serial.read () ausgelesen.
Aufgabe A11.2:
• Starte den Sketch erneut und öffne den seriellen Monitor.
• Gib in der Kommandozeile
“3“, „a“ oder „A“ ein, und drücke auf „Send“.
• Welches Ergebnis liefert der serielle Monitor? Notiere!
Seite -37-
Seite -38-
Kapitel ______________
__________________ 11
Neue Bauelemente: Lautsprecher
Neue Befehle: tone
Ziel: Töne und Melodienauf einem Lautsprecher erzeugen.
Aufgabe A11.1:
•
•
Schließe an Pin8 einen Lautsprecher an.
Öffne den Sketch „A111_Lautsprecher“ und übertrage ihn auf den ARDUINO.
Neue Befehle:
•
tone( pin, Frequenz, Tonlänge)
Die Frequenz wird in Hz, die Tonlänge in Millisekunden angegeben.
Werden mehrere Töne nacheinander gespielt, muss dazwischen eine Pause
gemacht werden, damit das Programm nicht gleich den nächsten Befehl (in
diesem Fall der nächste Ton) ausführt.
Die Länge der Pause entspricht ungefähr der Tonlänge.
Melodien lassen sich natürlich leichter erstellen, wenn man die Note, z.B. „c“ oder
„g“, und deren Länge „1/4“ oder „1/8“, direkt eingeben kann:
Aufgabe A11.3:
Aufgabe A11.2
•
•
Erzeuge eine eigene Abfolge von Tönen.
Speichere den Sketch unter „A112_Lautsprecher_(xx)“
Seite -39-
•
•
•
•
•
Öffne den Sketch „A113_Lautsprecher“
Starte den Sketch
Erzeuge eine eigene Melodie.
Speichere den Sketch unter „A113_Lautsprecher_(xx)“
Zeichne den Schaltplan.
Seite -40-
Kapitel ______________
__________________ 12
Da zwei der vier
Anschlüsse mit GND
verbunden werden
müssen, kann man
den CNY70 einfach
diagonal auf das
Steckbrett setzen.
Neue Bauelemente: Reflexoptokoppler CN70
Neue Befehle: Ziel: Ein Kurzstrecken-Lichtschranke erstellen.
Jede Lichtschranke besteht aus einem Sender und einem Empfänger. Hier
verwenden wir die Kurzstrecken-Reflexlichtschranke CNY70, bei der sich Sender und
Empfänger im gleichen Gehäuse befinden - das ausgesendete Licht muss also
reflektiert oder zurückgestreut werden, damit es den Empfänger trifft. Dazu genügt
ein helles Objekt, das sich in wenigen mm Abstand vor der Reflexlichtschranke
befindet.
Der Empfänger (dunkelblaue
Linse) ist ein sogenannter
Phototransistor. Je mehr Licht auf
den Phototransistor fällt, desto
geringer ist sein Widerstand.
Der Sender (hellblaue Linse) ist
eine LED, die für das menschliche
Tipps:
Auge unsichtbares Licht (InfrarotLicht) aussendet.
Bemerkung:
Das Infrarot-Licht der sendenden Leuchtdiode ist zwar für das
menschliche Auge nicht sichtbar, die meisten Handykameras und
einfache Digitalkameras erkennen das Licht aber als weißes Leuchten. So
könnt ihr leicht überprüfen, ob die LED auch leuchtet.
Aufgabe A12.1:
Zur Orientierung:
Hier steht die Beschriftung!
•
•
•
Schaltplan:
•
5V
Phototransistor mit
Pullup-Widerstand
(Spannungsteiler)
Infrarot-LED mit
Vorwiderstand
5 (analog)
Aufgabe A12.2:
•
•
•
•
Seite -41-
Verändere den Pullup-Widerstand.
Wie ändert sich damit die Empfindlichkeit der Reflexoptokopplers?
Notiere deine Beobachtungen.
Aufgabe A12.3: (Alarmanlage)
•
•
GND
Baue die Schaltung gemäß Schaltplan auf.
Schreibe einen Sketch, bei dem die Werte vom analogen Pin 5 auf dem
seriellen Monitor ausgegeben werden.
Teste deine Lichtschranke, indem du einen Gegenstand vor den
Reflexoptokoppler hälst.
Speichere den Sketch unter „A121_Reflexoptokoppler_(xx)“
Ergänze die Schaltung um eine Leuchtdiode und einen Lautsprecher.
Erweitere den Sketch so, dass ab einem bestimmten Wert die Leuchtdiode
anfängt zu blinken und der Lautsprecher ein Warnsignal ausgibt.
Speichere den Sketch unter „A123_Reflexoptokoppler_Alarm_(xx)“
Zeichne den Schaltplan.
Seite -42-
Kapitel ______________
__________________ 13
Neue Bauelemente: Servo
Neue Befehle: Servo-Befehle, map
Die Servo-Library wird eingelesen.
Ziel: Einen Servo ansteuern
Der angeschlossene Servo bekommt die
Bezeichnung „myservo“.
Diese Bezeichnung ist frei wählbar.
Aufgabe A13.1:
•
•
•
•
Baue die Schaltung auf.
Der Servo muss mit einer eigenen Stromquelle versorgt werden.
Achte auf die gemeinsame Erdung von Mikrocontroller und
Stromquelle!
Öffne den Sketch „A131_Servo“ und starte ihn.
Verändere die Position des Potentiometers.
Beobachte den Servo.
Tipp: Um die Bewegung des Servos besser beobachten zu können, kannst du
einen Zeiger an ihm befestigen.
Das Potentiometer wird am analogen
Pin 0 angeschlossen.
Der Servo wird an Pin 2 angeschlossen.
Umrechnung des
ausgelesenen Werts auf die
180°-Skala
Die Gradzahl wird auf den
Servo übertragen
Der Servo benötigt Zeit, um
die neue Position
anzufahren.
Info: Positionsregelung eines Servos
Bei Modellbauservos wird der Winkel der Ausgangswelle
geregelt. Zur Ermittlung des Winkels befindet sich im
Servoinnern ein Potentiometer, das mit der Ausgangswelle
verbunden ist. Über dieses Potentiometer ermittelt die
Servoelektronik den Ist-Winkel der Ausgangswelle. Dieser
wird mit dem Soll-Winkel verglichen, der vom Mikrocontroller
übermittelt wird. Bei einer Abweichung zwischen Ist- und
Soll-Winkel, regelt die Elektronik über den Motor und das
Getriebe den Winkel der Ausgangswelle nach.
Die Ausgangswelle kann eine Position zwischen 0° und 180°
einnehmen.
Seite -43-
Seite -44-
Kapitel ______________
__________________ 13
Neue Befehle:
Aufgabe A13.2:
•
y = map(Wert, a1, a2, b1, b2)
Rechnet einen Wert von einem Intervall in ein zweites Intervall um:
a1
Aufgabe A13.3:
b2
y
•
•
•
•
Beispiel:
•
Ändere den Sketch so ab, dass sich der Zeiger nur im Bereich 0°-90° bewegt.
Auf dem seriellen Monitor sollen die Winkelwerte ausgegeben werden.
Speichere den Sketch unter „A132_Servo_Serial_(xx)“ ab.
Zeichne den Schaltplan.
a2
Wert
b1
•
•
•
•
Ergänze die Schaltung mit einer grünen und einer roten LED.
Die grüne LED soll bei der Position „0°“ leuchten, die rote LED bei der Position
„90°“. Bei allen anderen Positionen sollen die LEDs nicht leuchten.
Ändere den Sketch und speichere ihn unter „A133_Servo_LED_(xx)“ ab.
Zeichne den Schaltplan.
Aufgabe A13.4:
y = map(20, 0, 50, 0, 100)
•
0
•
•
0
50
20
100
40
•
Die Umrechnung erfolgt linear und das Ergebnis sind immer ganzzahlige
Werte (integer).
Um Dezimalwerte zu erhalten muss man die Intervalle z.B. verzehnfachen und
anschließend das Ergebnis durch 10 dividieren.
•
Dieser Befehl ist immer dann sinnvoll, wenn Skalen ineinander umgerechnet
werden müssen:
Mit dem Befehl analogRead() bekommt man Werte zwischen 0…1023. Für
analogWrite() werden Werte zwischen 0…255 benötigt:
y = map(767, 0, 1023, 0, 255)
0
0
Baue eine Schaltung auf, bei der ein Servo (mit Zeiger) die Lichtintensität
(LDR) auf einer Helligkeitsskala (dunkel – hell) darstellt.
Schreibe den Sketch und speichere ihn unter „A134_Servo_LDR_(xx)“ ab.
Zeichne den Schaltplan.
Ergebnis: y = 192
767
1023
192255
Seite -45-
Seite -46-
Kapitel ______________
__________________ 14
Neue Bauelemente: Temperatursensor LM35
Neue Befehle: Ziel: Umgebungstemperatur messen.
Aufgabe A14.1:
•
•
•
•
Baue die Schaltung auf.
Öffne den Sketch „A141_Temperatur“.
Starte den Sketch und öffne den seriellen Monitor.
Berühre den Temperatursensor und beobachte die Werte.
Bemerkung:
Der vom Temperatursensor LM35 ermittelte Wert wird über die eben genannte
Formel berechnet:
Der Dieser Sensor wandelt die gemessene Temperatur in
einen analogen Spannungswert um, der sich proportional
zur Temperatur ändert. Der Sensor hat eine
Empfindlichkeit von 10mV/°C und einen messbaren
Temperaturbereich von 0°C bis 100°C Celsius.
Die Formel zur Berechnung der Temperatur in
Abhängigkeit vom gemessenen Wert am analogen
Eingang lautet wie folgt:
Der Temperatursensor LM35 mit seiner
Anschlussbelegung in einem TO-92Plastikgehäuse.
Quelle: Die elektronische Welt mit
Arduino entdecken (Erik Bartmann).
float temperature = (5.0 * 100.0 * analogValue) / 1024;
und über eine for-Schleife gemittelt. Dies erfolgt über das Aufsummieren
der Messwerte und die Bildung des Durchschnittes.
Im Anschluss wird der gemittelte Wert an die serielle Schnittstelle übertragen:
Serial.println(resultTemp);
Die Formelwerte haben folgende Bewandtnis:
• 5.0 : Arduino-Referenzspannung von 5V
• 100.0: Maximal messbarer Wert des Temperaturfühlers
• 1024 : Auflösung des analogen Eingangs
Seite -47-
Seite -48-
Document
Kategorie
Technik
Seitenansichten
34
Dateigröße
5 423 KB
Tags
1/--Seiten
melden