Arduino Tutorial
Vormerkung
Dieses Dokument erhebt kein Recht auf Vollständigkeit oder Korrektheit.
An einigen Stellen mag es inkonsistent sein
Trotzdem viel Spaß mit Arduino!
Genereller Aufbau
Ein Arduino besitzt viele Pins welche bestimmt Eigenschaften haben.
Hier ein kurzer Überblick:
- Der pin GND steht für Ground und ist wie der Minuspol
- Die pins 3.5V und 5V sind wie Pluspole
- Die pins 0 bis 13 (im Bild oben) sind Digitale Pins
- Bei diesen pins kann die Stromspannung an und ausgeschalten werden
- Diese pins können auch auslesen ob eine Stromspannung anliegt
- Die pins A0 bis A5 (im Bild unten) sind Analoge Pins
- Diese pins können auslesen wie groß eine Stromspannung ist die anliegt
void setup(){
}
void loop(){
}
Ein Arduino Programm besteht immer aus mindestens diesem Code.
Jedes Programm beginnt zwischen den geschwungenen Klammern nach setup.
Dieser Code wird einmal beim start des Programms ausgefürt.
Der Code zwischen den geschwungenen Klammern nach loop wird immer wieder
ausgeführt.
Eine LED ansteuern
|
|
void setup(){
pinMode(7, OUTPUT);
}
void loop(){
delay(1000);
digitalWrite(7, HIGH);
delay(1000);
digitalWrite(7, LOW);
}
|
|
In diesem Beispiel wird eine LED jede Sekunde an und aus gemacht.
Dazu wird in setup mit pinMode dem Arduino
gesagt, dass der pin 7 ein OUTPUT ist.
Dadurch können wir ab jetzt den Strom an pin 7 mit digitalWrite an (HIGH) und ausschalten
(LOW).
Mit delay können wir dem Arduino sagen, dass er eine bestimmte Anzahl an
Milisekunden warten soll.
Baue die Schaltung nach und ändere die delay's im Code und schau was
passiert.
Zwei LED's ansteuern
|
|
void setup(){
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop(){
delay(1000);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
delay(1000);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
}
}
|
|
In diesem Beispiel werden zwei LED's abwechselnd jede Sekunde an und aus gemacht.
Dazu wurde das Beispiel von davor leicht abgeändert.
Hier wird einfach ein weiterer pin (
6) zu einem
OUTPUT gemacht.
Jetzt können wir die beiden LED's abwechselnd mit
digitalWrite an und
ausmachen.
Baue die Schaltung nach und ändere den Code ab, sodass diese Lichtfolge entsteht:
Buzzer ansteuern
|
|
void setup(){
pinMode(7, OUTPUT);
tone(7, 880);
delay(1000);
noTone(7);
}
void loop(){
}
|
|
In diesem Beispiel wird mit einem passiven Buzzer der Ton A
5 für eine Sekunde gespielt.
Baue die Schaltung nach und ändere den Code ab, sodass eine Melodie abgespielt wird.
Dafür braucht man eine
Liste von Frequenzen
Knopf Eingabe
|
(Widerstand: 10 kΩ)
|
void setup(){
pinMode(7, OUTPUT);
pinMode(8, INPUT);
}
void loop(){
if(digitalRead(8) == HIGH){
digitalWrite(7, HIGH);
delay(3000);
digitalWrite(7, LOW);
}
}
|
|
In diesem Beispiel leuchtet eine LED drei Sekunden lang, wenn man den Knopf drückt.
Dazu wird in setup dem Arduino gesagt, dass pin 8 ein INPUT ist
Jetzt können wir mit digitalRead herausfinden, ob eine Stromspannung an
diesem pin ist.
Mit if können wir prüfen ob etwas bestimmtes zutrifft und jenachdem
bestimmten Code ausführen.
In diesem Beispiel wir die Stromspannung an dem pin ausgelesen und mit ==
geprüft ob diese gleich HIGH ist.
Falls ja wird die LED an pin 7 für drei Sekunden an und dann wieder aus
gemacht.
Wenn der Knopf aktiv ist, liegt HIGH am pin.
Wenn der Knopf nicht aktiv ist, liegt LOW am pin.
Es ist wichtig, dass LOW anliegt, da der Arduino nicht mit Zwischenwerten
klar kommt.
Um dieses Verhalten zu ermöglichen muss sowohl HIGH als auch LOW mit dem pin verbunden sein.
Damit es nicht zu einem Kurzschluss kommt muss man einen großen Widerstand zwischen die beiden Pole
machem.
Baue die Schaltung nach und ändere den Code ab, so dass die LED zweimal aufblinkt beim drücken.
Schwere Aufgabe:
Erweitere die Schaltung um noch einen Knopf.
Lass eine andere Lichtfolge abspielen, wenn der andere Knopf gedrückt wird.
Mehr zu if
if(...){
...
}else{
...
}
Mit if wird eine Abzweigung im Programm erstellt.
Wenn die Bedingung zutrifft (wahr ist), dann wird der Code zwischen den geschwungenen Klammern
ausgeführt.
Falls die Bedingung nicht zutrifft wird dieser Code übersprungen.
Mit einem else kann man nach einem if
einen weiteren Codeblock schreiben.
Dieser wird nur dann ausgeführt, wenn die Bedingung nicht stimmt sonst wird dieser Code übersprungen.
while-Schleife
Mit while wird eine Schleife im Programm erstellt.
Solange die Bedingung zutrifft (wahr ist) wird der Code zwischen den geschwungenen Klammern ausgeführt.
Falls die Bedingung nicht zutrifft wird dieser Code übersprungen.
Bei while gibt es kein else.
Eine while-Schleife kann dazu führen, dass Endlos-Schleifen entstehen, weil
die Bedingung nie Falsch wird.
Eine Endlos-Schleife, führt dazu, dass nur der Code des while ausgeführt
wird und sonst keiner.
Analoger Ausgang
|
(pins die analogWrite benutzen können sind mit ~
markiert)
|
void setup(){
pinMode(5, OUTPUT);
}
void loop(){
analogWrite(5, 255);
delay(1000);
analogWrite(5, 125);
delay(1000);
analogWrite(5, 0);
delay(1000);
}
|
|
In diesem Beispiel wird eine LED verschieden stark zum Leuchten gebracht.
Es wird dafür analogWrite benutzt.
Anders als digitalWrite kann analogWrite
Werte zwischen 0 und 255 annehmen.
Baue die Schaltung nach und ändere einige Werte im Code und schau was passiert.
Variablen
|
|
int helligkeit;
void setup(){
pinMode(5, OUTPUT);
helligkeit = 0;
}
void loop(){
analogWrite(5, helligkeit);
delay(100);
helligkeit = helligkeit + 1;
if(helligkeit == 255){
helligkeit = 0;
}
}
|
|
In diesem Beispiel wird eine LED langsam heller und heller gestellt.
Sobald die LED komplett scheint wird die Helligkeit wieder zurückgesetzt.
Hierzu wird eine Variable verwendet.
Die Variable wird hier verwendet um die Helligkeit immer wieder zu einem anderen Wert zu setzen.
Mit helligkeit = 0; wird der Wert der
Variablen zu 0 gesetzt.
Mit helligkeit = helligkeit + 1; wird helligkeit auf den Wert von helligkeit+ 1 gesetzt.
Oder kurz gesagt es wird 1 dazu gerechnet.
Die Variable setzen wir auf 0,wenn sie den Wert 255 erreicht,
da die LED nachdem sie komplett leuchtet wieder neu anfangen soll.
Baue die Schaltung nach und ändere den Code ab,
sodass die LED immer dunkler wird und dann wieder aufleuchtet (Gegenteil).
Schwere Aufgabe:
Erweitere das Program um noch eine Variable.
Lass die LED langsam aufleuchten und wieder langsam dunkel werden.
Tipp:
Die zweite Variable sollte verwendet werden um die erste Variable zu ändern.
Wenn das maximum oder minimum erreicht wird sollte die Helligkeit nicht zurückgesetzt werden,
sonder die
zweite Variable verwendet werden.
Potentiometer Eingabe
|
|
int helligkeit;
void setup(){
pinMode(7, OUTPUT);
}
void loop(){
helligkeit = analogRead(A5);
analogWrite(7, helligkeit);
}
|
|
In diesem Beispiel wird ein Potentiometer verwendet um eine LED heller und dunkler zu stellen.
Dazu wird der Ausgang vom Potentiometer mit einen analogen Pin verbunden.
Mit analogRead wird der Wert ausgelesen.
Dieser Wert wird gespeichert und mit analogWrite wird dann die helligkeit
der LED gesetzt.
Baue die Schaltung nach und teste diese.
Erweitere die Schaltung danach um eine zweite LED die heller wird wenn die erste dunkler wird und
umgekehrt.
Tipp:
Der Wert von helligkeit liegt zwischen 0 und
255.
Mit 255 - helligkeit erhält man den Wert zu
dem die andere LED gesetzt werden muss.
Serieller Monitor
|
|
void setup(){
Serial.begin(9600);
Serial.println("Hello World!");
Serial.println("Die Zahl 42:");
Serial.println(42);
}
void loop(){
}
|
|
In diesem Beispiel wird mit Serial.begin(9600); eine Verbindung zum Computer
hergestellt.
Sobald die Verbindung hergestellt wurde, kann man mit Serial.println Text, Zhalen oder Variablen
ausgeben.
Mit dem Monitor hat man also zugriff auf die sonst unbekannten Variablen des Arduino.
Ändere den Code ab und schau was passiert.
Was passiert, wenn man Serial.println in loop verwendet?
Variablen Ausgabe
|
|
int drehung;
void setup(){
Serial.begin(9600);
}
void loop(){
drehung = analogRead(A5);
Serial.println(drehung);
delay(100);
}
|
|
In diesem Beispiel wird der Serielle Monitor verwendet, um die Drehung eines Potentiometers auszugeben.
Baue die Schaltung nach und teste diese.
LDR (Light-Dependant-Resistor)
|
(Widerstand: 10 kΩ)
|
int helligkeit;
void setup(){
Serial.begin(9600);
}
void loop(){
helligkeit = analogRead(A5);
Serial.println(helligkeit);
delay(100);
}
|
|
In diesem Beispiel wird der Serielle Monitor verwendet, um die Helligkeit, die ein LDR abbekommt,
auszugeben.
Baue die Schaltung nach und teste diese.
Schreibe den maximal und minimal Wert auf.
Erweitere die Schaltung um eine LED, welche leutet, wenn der Wert unter der Hälfte zwischen maximal und
minimal Wert liegt.
Tipp:
Verwende ein if und < (kleiner als).
Neigungsschalter
|
(Widerstand: 10 kΩ, 220Ω)
|
void setup(){
pinMode(6, INPUT);
pinMode(7, OUTPUT);
}
void loop(){
if(digitalRead(6) == HIGH){
digitalWrite(7, HIGH);
delay(3000);
digitalWrite(7, LOW);
}
}
|
|
In diesem Beispiel wird ein Neigungsschalter verwendet um eine LED zum leuchten zu bringen.
Wenn der Neigungsschalter aktiv ist, liegt HIGH am pin.
Wenn der Neigungsschalter nicht aktiv ist, liegt LOW am pin.
Es ist wichtig, dass LOW anliegt, da der Arduino nicht mit Zwischenwerten
klar kommt.
Um dieses Verhalten zu ermöglichen muss sowohl HIGH als auch LOW mit dem pin verbunden sein.
Damit es nicht zu einem Kurzschluss kommt muss man einen großen Widerstand zwischen die beiden Pole
machem.
Baue die Schaltung nach und lass eine andere Lichtfolge aufblinken.
Vergleiche die Schaltung mit der eines Knopfs.
Abstandsmesser
|
|
int cmAbstand;
void setup(){
pinMode(5, INPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop(){
digitalWrite(6, HIGH);
delayMicroseconds(1000);
digitalWrite(6, LOW);
cmAbstand = pulseIn(5, HIGH) / 58.0;
if(cmAbstand < 10){
digitalWrite(7, HIGH);
delay(100);
digitalWrite(7, LOW);
}
}
|
|
In diesem Beispiel wird der Abstand in cm ausgelesen.
Wenn dieser Abstand weniger als 10cm ist, dann soll die LED kurz aufflackern.
(Der Abstand kann nicht immer korrekt ausgelesen werden, wenn dieser zum Beispiel zu groß ist)
Baue die Schaltung nach und teste wie gut der Sensor den Abstand messen kann.
Füge weitere LED's hinzu welche ab einem bestimmten abstand anfangen zu leuchten.
erstellt 2020 von Anton Böhler