Einstiegsaufgaben Arduino

Einstiegsaufgaben Arduino

Einstiegsaufgaben mit Arduino und den Arduino Kits

In diesem Dokument folgen Einstiegsaufgaben mit dem Arduino Kit Basic. Das Arduino Kit Basic ist an der HSLU im Mediadock undbei der Ausleihe von Digital Ideation ausleihbar. Das Kit enthält einige Sensoren und Aktoren, die es ermöglichen erste Prototypen im Bereich PhysicalComputing herzustellen und Arduino Programme, elektronische Komponenten und elektronische Schaltungen zu testen für geplante Projekte. Falls bisher keine Kenntnisse zu Arduino bestehen empfiehlt es sich vorgängig das Recipe «Start mit Arduino» anzuschauen. In der Grafik untendie Übersicht über die verfügbaren Sensoren und Aktoren im Arduino Kit Basic, die unter anderem in den folgenden Einstiegsaufgaben verwendet werden können.

Einstiegsaufgaben – Aktoren ansteuern

Eine LED pulsieren lassen

In dieser Übung programmieren wir einen Blinkrhytmus einer LED mit dem Arduino Uno. Dafür verbinden wir die +Seite der LED (langes Beinchen) über einen Widerstand mit dem Pin 12 und die – Seite (kurzes Beinchen) der LED mit dem Ground-Pin (GND-Pin).

Welche Teile / Komponenten brauchst du?
  • 1x Arduino Uno + Verindungskabel Computer (evtl. USB-Adapter)
  • 1x LED 5mm
  • 1x Widerstand 220 Ohm
  • 2x Jumperwires (male-male)
  • 1x Breadboard

Hier der Code zum Kopieren:
int LedPin = 12; // Wir benennen den Pin 12 als LedPin

voidsetup()

{

pinMode(LedPin, OUTPUT); // Wir definieren den LedPin als Ausgang

}

voidloop()

{

digitalWrite(LedPin, HIGH); // Wir schalten den Strom beim LedPin ein

delay(2000); // Der Strom bleibt für zwei Sekunden ein

digitalWrite(LedPin, LOW); // Wir schalten den Strom beim LedPin aus

delay(3000); // Der Strom bleibt für drei Sekunden aus

}
Aufgabe:

Kopiere die Zeilen 14-17 und füge sie gleich unten noch innerhalb der Klammer im Void Loop wieder an. Verändere die Zahlen und erstelle somit deine eigene Blinkkomposition.

 

Drei LEDs nacheinander leuchten lassen

Nun verbinden wir drei LEDs mit dem Arduino. Achte weiterhin darauf, dass das kurze Bein der LED mit dem GND-Pin und das lange Bein über den Widerstand mit einem der digitalen Pins verbunden ist. In diesem Beispiel werden die digitalen Pins 10, 11 und 12 verwendet für die Ansteuerung der drei LEDs.

Welche Teile / Komponenten brauchst du?
  • 1x Arduino Uno + Verindungskabel Computer (evtl. USB-Adapter)
  • 3x LED 5mm
  • 3x Widerstand 220 Ohm
  • 7x Jumperwires (male-male)
  • 1x Breadboard

Code zum Kopieren:
int LedPin = 12; // Wir benennen den Pin 12 als LedPin

int LedPin2 = 11; // Wir benennen den Pin 11 als LedPin2

int LedPin3 = 10; // Wir benennen den Pin 10 als LedPin3

voidsetup()

{

pinMode(LedPin, OUTPUT); // Wir definieren den LedPin als Eingang

pinMode(LedPin2, OUTPUT); // Wir definieren den LedPin als Eingang

pinMode(LedPin3, OUTPUT); // Wir definieren den LedPin als Eingang

}

voidloop()

{

digitalWrite(LedPin, HIGH); // Wir schalten den Strom beim LedPin ein

delay(1000); // Der Strom bleibt für zwei Sekunden ein

digitalWrite(LedPin, LOW); // Wir schalten den Strom beim LedPin aus

delay(500); // Der Strom bleibt für 500 Millisekungen aus

digitalWrite(LedPin2, HIGH); // Wir schalten den Strom beim LedPin2 ein

delay(1000); // Der Strom bleibt für zwei Sekunden ein

digitalWrite(LedPin2, LOW); // Wir schalten den Strom beim LedPin aus

delay(500); // Der Strom bleibt für 500 Millisekungen aus

digitalWrite(LedPin3, HIGH); // Wir schalten den Strom beim LedPin3 ein

delay(1000); // Der Strom bleibt für zwei Sekunden ein

digitalWrite(LedPin3, LOW); // Wir schalten den Strom beim LedPin aus

delay(500); // Der Strom bleibt für 500 Millisekungen aus

}

Aufgabe:

Versuche den Rhythmus der LEDs und deren Reihenfolge zu verändern.

 

Töne für den PiezoLautsprecher programmieren

In dieser Aufgabe steuern wir mit dem Arduino Uno ein Piezo Lautsprecher an und lassen einen Ton erklingen. Wir verbinden das schwarze Kabel vom Piezo (-) mit dem Ground-Pin (GND) und das rote Kabel (+) mit dem Pin 12. Du hast zwei Möglichkeiten den Piezo mit dem Arduino in einer Schaltung zu verbinden.

1. Stecke das Screwshield auf den Arduino und befestige die beiden Litzenkabel mit dem kleinen Schraubenzieher bei den Schraubverbindungen (GND-Pin und Pin 12) Die Pins sind auf dem Screwshield beschriftet.

2. Benütze einen Klemmverbinder und zwei Jumperwires für die Verbindung. Klemme die Kabel des Piezo in die eine Seite des Klemmverbinders. Klemme zwei Jumperwires (male male) an der anderen Seite des Klemmverbinders fest. Stecke die beiden Enden der Jumperwires bei den entsprechenden Pins (GND und Pin 12) ein.

Welche Teile / Komponenten brauchst du?
  • 1x Piezolautsprecher
  • 1x Arduino Uno + Verindungskabel Computer (evtl. USB-Adapter)
  • 1x Piezolautsprecher
  • 1x Screwshield oder 1x Klemmverbinder und zwei Jumperwires (male male)

Code zum kopieren:
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494

void setup() // Im Setup werden keine Informationen benötigt.
{}

void loop()
{
tone(12, NOTE_C4); // Am Pin 12 wird ein Ton mit Frequenz von 262Hz erzeugt
delay(1000); // Der Ton hält eine Sekunde lang an
noTone(12); // Der Ton wird ausgeschalten
delay(1000); // Der Ton bleibt eine Sekunde aus
}
Aufgabe1:

Versuche eine Tonfolge zu erstellen mit den oben im Code definierten Tönen. (nach #define )

Aufgabe2:

Suche im Internet nach bereits bestehenden Arduino Melodien. Gibt bei der Suche beispielsweise ein: Arduino Uno Piezo Lieder. Vergiss dabei nicht den Pin im im gefundenen Code auf den Pin 12 anzupassen.

Eine Position mit dem Servo ansteuern mit der for-Funktion

In dieser Aufgabe steuern wir einen Servo mit dem Arduino an. Dabei werden im ersten Schritt einzelne Positionen angesteuert. Im zweiten Schritt wird mit der for-Funktion gearbeitet, um eine fliessende Bewegung zu erreichen.

Welche Teile / Komponenten werden benötigt?
  • 1x Arduino Uno + Verindungskabel Computer (evtl. USB-Adapter)
  • 1x Servo
  • 3x Jumperwires (male male)
Verkabelung

Der Servo wird entsprechend der Grafik, mit dem Arduino verbunden. Die Farbe der Anschlusskabel beim Servo kann dabei variieren. Das + Kabel ist immer rot, das – Kabel (Ground-Kabel) kann schwarz oder braun sein. Das Informationskabel, über welches die Steuerung funktionert kann auch verschiedene Farben haben, oft ist es gelb oder orange.

Codebeispiel 1:

Der Servo kann sich in der Regel von 0 bis 180 Grad bewegen. Man kann sich einen Halbkreis vorstellen mit der Motorachse in der Mitte. Mit diesem Code werden nacheinander verschiedene Positionen mit dem Servo angesteuert innerhalb der Möglichkeiten von 0 – 180 Grad.

Hier der Code zum kopieren:

#include <Servo.h> //Die Servobibliothek wird aufgerufen.

Servo servo1; //Erstellt für das Programm ein Servo mit dem Namen servo1

void setup()
{
servo1.attach(8); //Servo wird mit Pin8 verbunden
}

void loop()
{
servo1.write(0); //Position 1 ansteuern mit dem Winkel 0°
delay(3000); //Das Programm stoppt für 3 Sekunden
servo1.write(90); //Position 2 ansteuern mit dem Winkel 90°
delay(3000); //Das Programm stoppt für 3 Sekunden
servo1.write(180); //Position 3 ansteuern mit dem Winkel 180°
delay(3000); //Das Programm stoppt für 3 Sekunden
servo1.write(20); //Position 4 ansteuern mit dem Winkel 20°
delay(3000); //Das Programm stoppt für 3 Sekunden
}

Codebeispiel 2:

Mit diesem Code bewegt sich der Servo regelmässig und schrittweise von 0 nach 180 Grad.

Die for-Funktion

for (pos = 0; pos <= 180; pos += 1)

{

servo1.write(pos); // die aktuelle Position wird ausgeführt, pos verändert sich

delay(15); //  bestimmt die Dauer bis die nächste Position ausgeführt wird, hier 15 Milisekunden

}

pos = 0;

Hier wird die Position 0 als Startpunkt für die Bewegung definiert

pos <= 180

Hier wird der Endpunkt der Bewegung definiert. Der Code in der Klammer nach dem for wiederholt sich so lange bis der Endpunkt erreicht ist.

Schlaufe: Erste Widerholung: 0+1 = 1, zweite Widerholung: 1+1=2 … bis 179+1 = 180, dann ist der Endpunkt erreicht und der Code läuft weiter zum nächsten Punkt nach der for-Schlaufe.

pos += 1

Hier wird die Grösse der Schritte vom Startpunkt definiert, wäre die Zahl 2 anstelle von 1 wäre die Gesamtbewegung doppelt so schnell

der Code zum Kopieren:
#include <Servo.h> // Die Servobibliothek wird aufgerufen.

Servo servo1;  // erstellt für das Programm ein Servo mit dem Namen servo1
int pos = 0;   // die Variable pos wird erstellt mit dem Startwert 0

void  setup()
{
  servo1.attach(8); //Servo wird mit Pin8 verbunden
}

void  loop()

{
  for (pos = 0; pos <= 180; pos += 1) // die Postion (pos) startet mit 0 Grad und erhöht sich schrittweise, jeweils um 1 Grad bis 180 Grad
  {
    servo1.write(pos); // die aktuelle Position (pos) wird ausgeführt
    delay(15); // es wird 15 Milisekunden gewartet bis die nächste Position ausgeführt wird
  }
  for (pos = 180; pos >=  0; pos -= 1) // die Postion (pos) startet nun bei 180 Grad und verringert sich schrittweise, jeweils um 1 Grad bis 0 Grad
  {
    servo1.write(pos); // die aktuelle Position (pos) wird ausgeführt
    delay(15); // es wird 15 Milisekunden gewartet bis die nächste Position ausgeführt wird
  }

}

 

Aufgabe:

Versuche das Codebeispiel 1 und 2 zu kombinieren, indem du schrittweise verschiedene Positionen ansteuerst.

 

Motor ansteuern über den Motortreiber

In dieser Aufgabe wird ein Getriebemotor über den Motortreiber angesteuert. Der Motor, den wir für diese Aufgabe gewählt haben, aus dem Arduino Kit Basic, kann mit 3V – 6V betrieben werden. Falls ihr andere Motoren verwendet ist es sehr wichtig dass ihr auf dem Datenblatt nachschaut, mit welcher Spannung der Motor betrieben werden kann. Grössere Motoren, die mehr Leistung / Kraft benötigen, müssen wie in der zweiten Grafik mit einer externen Stromquelle betrieben werden.

Welche Teile / Komponenten werden benötigt?
  • 1x Arduino Uno + Verindungskabel Computer (evtl. USB-Adapter)
  • 1x Motortreiber / Motor-IC TB6612
  • 8x Jumperwires (male male)
Verkabelung 1:

Hier wird der Motor direkt über den VIN-Pin des Arduino gespiesen. Das Arduino wird über das Anschlusskabel am Computer mit 5V gespiesen. Diese 5V gibt es an den Motor weiter. Falls das Arduino an der schwarzen Buchse mit Strom gespiesen wird, ist zu beachten, dass die Spannung des Netzteils nicht höher als 6V eingestellt werden sollte, da sonst zu viel Strom zum Motor fliesst.

Verkabelung 2:

Diese Art der Verkabelung ist die sicherere Variante, da der Strom direkt vom Netzteil zum Motor läuft und nicht über das Arduino. Das Arduino und der Motor sind somit separat gespiesen. Das Arduino über das Anschlusskabel mit dem Computer oder einer Powerbank und der Motor separat über ein Netzteil. So können mögliche Schäden am Arduino auf ein Minimum reduziert werden.

Für die Ansteuerung des Motors sind die Pins PWM und DIR entscheidend. Da wir in diesem Beispiel nur einen Motor ansteuern sind hier der Anschluss PWM1 und der Anschluss DIR1 entscheidend. Wir verbinden den PWM1 Pin mit dem digitalen Pin 5 am Arduino und den. DIR1 Pin mit dem Pin 4 am Arduino.

Der PWM Pin ist für die Geschwindigkeit des Motors zuständig. Wird der Pin auf 0 gesetzt, dann stoppt der Motor. Die maximale Geschwindigkeit beträgt 255.

Der DIR Pin ist für die Richtung des Motors zuständig. Mit der Änderung von HIGH auf LOW wechselt sich die Richtung des Motors.

Code zum kopieren:
int PWM1 = 5; // der PWM1 Pin vom Motortreiber wird mit dem digitalen Pin 5 vom Arduino verbunden
int DIR1 = 4; // der DIR1 Pin vom Motortreiber wird mit dem digitalen Pin 4 vom Arduino verbunden

void setup()
{
  pinMode(DIR1, OUTPUT); // der DIR1 Pin wird als Output definiert
}

void loop()

{
  analogWrite(PWM1, 100); // der PWM1 Pin und damit die Geschwindigkeit wird auf 100 gesetzt
  digitalWrite(DIR1, HIGH); // der DIR1 Pin wird HIGH gesetzt und bestimmt damit die Startrichtung
  delay(1000); // der Motor dreht für eine Sekunde
  analogWrite(PWM1, 0); // der Motor stoppt...
  delay(2000); // ... für zwei Sekunden
  analogWrite(PWM1, 200); // der Motor dreht sich mit der Geschindigkeit 200...
  digitalWrite(DIR1, LOW); // ...in die andere Richtung...
  delay(3000); // ...für drei Sekunden.
  analogWrite(PWM1, 0); // der Motor stoppt...
  delay(1000); //...für eine Sekunde
}

Sensorwerte auslesen mit dem virtuellen Monitor

Bei Sensoren misst das Arduino die Stromspannung am Pin der mit dem Sensor verbunden ist. Dabei gibt es zwei Sorten von Sensoren. Bei der ersten Sorte können nur zwei Zustände unterschieden werden. Strom (1) und kein Strom (0). Dazu gehören beispielweise die Pushbuttons oder PIR-Bewegungssensoren. Bei der zweiten Sorte können die Sensoren unterschiedliche Spannungen ausgeben. Dazu gehören beispielweise das Potentiometer (Standardmässig Werte von 0 – 255) oder der LDR Sensor (Lichtsensor). Die Spannungsbreite kann sich bei manchen Sensoren, so auch beim LDR Sensor, merklich unterscheiden und muss daher oft erst gemessen werden.

Das Signal eines Pushbutton auslesen im virtuellen Monitor

In dieser Übung wollen wir den Status des Pushbuttons einlesen. Wir wollen damit also herausfinden, ob der Pushbutton gedrück ist oder nicht.

Welche Teile / Komponenten werden benötigt?
  • 1x Arduino Uno + Verindungskabel Computer (evtl. USB-Adapter)
  • 1x Pushbutton
  • 2x Jumperwires (male male)
Verkabelung

Code:

Code zum Kopieren:
int Pushbutton = 2;

void setup()
{
  Serial.begin(9600);
  pinMode(Pushbutton, INPUT_PULLUP);
}

void loop()
{
  int sensorVal = digitalRead(2);
  Serial.println(sensorVal);
  delay(500);
}

Nachdem du den Code auf das Arduino Baord hochgeladen hast, öffne den seriellen Monitor, indem du auf das Symbol mit der Lupe klickst.

Der Serielle Monitor erscheint unterhalb des Codefelds. Da die Funktion Serial.begin(9600) verwendet wurde muss im seriellen Monitor bei Baud entsprechend 9600 Baud eingestellt sein, damit das richtige Signal ausgegeben wird.

Im virtuellen Monitor wird die Zahl 1 ausgegeben. Dies bedeutet, dass der Zustand des Buttons 1 (HIGH) ist.

Sobald der Button gedrückt wird, wird eine 0 im virtuellen Monitor ausgegeben.

Dies bedeutet, dass der Button in gedrücktem Zustand 0 (LOW) ist.

 

Das Signal eines LDR Sensors auslesen

In dieser Aufgabe lesen wir das Signal eines LDR Sensors aus und versuchen die Spannweite der Messwerte herauszufinden. Um die verändernde Spannung zu messen bauen wir einen sogenannten Spannungsteiler in der Schaltung auf. Der Sensor wird auf dem einen Bein mit 5V vom Arduino gespiesen und über einen Widerstand mit Ground verbunden. Vor dem Widerstand wird die Spannung beim analogen Pin A0 gemessen.

Welche Teile / Komponenten werden benötigt?
  • 1x Arduino Uno + Verindungskabel Computer (evtl. USB-Adapter)
  • 1x LDR/ – Lichtsensor
  • 1x 1kOhm Widerstand
  • 4x Jumperwires (male male)
Verkabelung

Code

Code zum kopieren:
int LDRpin = A0; // Wir benennen den Pin 0 mit LDRPin
int LDRValue = 0;// Wir erstellen die Variable mit dem Namen LDRValue

void setup()
{
  Serial.begin(9600); // Wir stellen die Verbindung zum virtuellen/seriellen Monitor her
}

void loop()
{
  LDRValue = analogRead(LDRpin); // Wir lesen den Wert des LDRPin
  Serial.println(LDRValue); // Wir zeigen den Wert im seriellen/virtuellen Monitor an
  delay(100);
}

 

Lade den Code auf den Arduino, klicke auf den virtuellen Monitor und schaue, welche Zahl erscheint. Diese Zahl entspricht der aktuellen Helligkeit im Raum.

Um den Messbereich des Sensors herauszufinden, leuchte mit der Taschenlampe deines Smartphones direkt auf den Sensor. So findest du den höchsten Wert.

In diesem Fall ist der höchste Messwert bei ca. 466. Das Signal ist sehr instabil, daher ist es nicht so schlimm, wenn es auch mal einen höheren Wert geben sollte, es ist wichtiger den ungefähren Messbereich zu kennen um damit in späteren Übungen weiter zu arbeiten.

Nun decke den Sensor mit etwas ab, sodass möglichst kein Licht mehr durchdringt.

Oft liegt nun der Wert bei 1 oder 0.

 

Aktoren und Sensoren kombinieren mit der If-Funktion

Eine LED über einen Lichtsensor (LDR-Sensor) ansteuern – if … else if

Welche Teile / Komponenten brauchst du?
  • 1x LED 5mm
  • 1x Widerstand 220 Ohm
  • 1x Widerstand 1 Kiloohm
  • 1x Arduino Uno + Verbindungskabel Computer (evtl. USB-Adapter)
  • 1x Breadboard
  • 6x Jumperwires (male-male)
Verkabelung:

Code:

Code zum kopieren:
int LDRpin = A0; // Wir benennen den Pin 0 mit LDRPin
int LDRValue = 0;// Wir erstellen die Variable mit dem Namen LDRValue
int LedPin = 12; // Wir benennen den Pin 12 mit LedPin

voidsetup()
{
Serial.begin(9600); // Wir stellen die Verbindung zum virtuellen/seriellen Monitor her
pinMode(LedPin, OUTPUT); // Wir definieren den LedPin als Output
}

voidloop()
{
LDRValue = analogRead(LDRpin); // Wir lesen den Wert des LDRPin
Serial.println(LDRValue); // Wir zeigen den Wert im seriellen/virtuellen Monitor an
if(LDRValue < 100) // Wenn der Wert vom LDRPin über 100 ist...
{
digitalWrite(LedPin, HIGH); // ... dann schalte die LED am LedPin an
delay(1000); // pausiere eine Sekunde (lasse die LED 1 Sekunde lang an)
}
elseif( LDRValue > 100) // Wenn der Wert vom LDRPin kleiner ist als 100...
{
digitalWrite(LedPin, LOW); // ... dann schalte die LED aus
delay(1000); // pausiere eine Sekunde (lass die LED 1 Sekunde aus)
}
}
Aufgabe:

Versuche noch andere Aktoren und Sensoren aus den oberen Beispielen mit der if-Funtion zu kombinieren.