Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf ·...

11
Einführung in die Arduino-Programmierung II Elektrotechnik und Informatik Faculty of Electrical Engineering and Computer Science Hochschule Niederrhein University of Applied Sciences

Transcript of Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf ·...

Page 1: Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf · Einführung in die Arduino-Programmierung II Elektrotechnik und Informatik Faculty

Einführung in dieArduino-Programmierung II

Elektrotechnikund InformatikFaculty of Electrical Engineeringand Computer Science

Hochschule NiederrheinUniversity of Applied Sciences

Page 2: Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf · Einführung in die Arduino-Programmierung II Elektrotechnik und Informatik Faculty

5. Dimmen einer LED mittelsPulsweitenmodulation (PWM)

Abbildung 5.1.: LED mit Pulsweitenmodulation

Bisher haben wir LEDs ein- und wieder ausgeschaltet. Für viele Anwendungen ist eswünschenswert neben den beiden Zuständen „Ein“ und „Aus“ auch Zwischenstufen(Hillgkeiten) realisieren zu können. Dazu benötigen wir eine Möglichkeit die Aus-gangsspannung zu regulieren. Da der Arduino nicht über einen eingebauten Digital-Analog-Wandler verfügt, bietet sich die sogenannte „Pulsweitenmodulation“ an. Einnormaler digitaler Ausgang wird dabei periodisch sehr schnell ein- und ausgeschaltet.Die LED wird umso heller leuchten, je länger der Ausgang einen „High“-Zustand an-nimmt (im Verhältnis zu der Zeit im „Low“-Zustand). Abbildung 5.2 veranschaulichtdieses Prinzip.

Kaltenecker, Kremer, Radmacher, Toszkowski 2

Page 3: Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf · Einführung in die Arduino-Programmierung II Elektrotechnik und Informatik Faculty

5. Dimmen einer LED mittels Pulsweitenmodulation (PWM)

90%

90%

50%

50%

0.5V

2.5V

4.5V

LOW (0 volts)

HIGH (5 volts)

LOW (0 volts)

HIGH (5 volts)

LOW (0 volts)

HIGH (5 volts)

10%

10%

Abbildung 5.2.: Funktionsweise PWM (Quelle: SparkFun Inventor’s Kit Guide)

Der Arduino ermöglicht den PWM Betrieb auf allen Pins, die mit einer Tilde („∼“)gekennzeichnet sind. Die PWM-Frequenz beträgt je nach Pin entweder 490 oder 980Hz. Wie Sie sehen, können die von uns bisher verwendeten Ports (3,5 und 6) allesamtauch für PWM genutzt werden. Die Schaltung muss also nicht verändert werden.

Nutzen Sie folgenden Code zum Test der PWM-Funktionalität:

/* PWM: Die Helligkeit einer

Leuchtdiode wird über PWM gesteuert. */

int gruen = 3; // Port der gruenen LED definieren

int helligkeit = 128; // Helligkeitswert definieren

void setup() {

pinMode(gruen, OUTPUT); // Port 3 wird zum Ausgang definiert

}

void loop() {

analogWrite(gruen, helligkeit); // Port 3 gesetzt.

}

Die LED sollte jetzt weniger hell leuchten als zuvor.

3 Arduino Einführung

Page 4: Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf · Einführung in die Arduino-Programmierung II Elektrotechnik und Informatik Faculty

5. Dimmen einer LED mittels Pulsweitenmodulation (PWM)

Aufgaben

• Testen Sie die Leuchtstärke für verschiedene Werte der Variable helligkeit. DieFunktion analogWrite akzeptiert Werte im Bereich 0 bis 255.

• Programmieren Sie einen „Sweep“-Modus. Die Helligkeit soll langsam zuneh-men, bis sie den Maximalwert erreicht. Sie können dazu ihr Progamm umfolgendes Codefragment ergänzen:

for (int helligkeit=0; helligkeit <= 255; helligkeit++){

analogWrite(gruen, helligkeit);

delay(25); // Warte 25 ms.

}

• (optional:) Erweitern Sie Ihr Programm so, dass die LED periodisch heller unddunkler wird.

4 Arduino Einführung

Page 5: Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf · Einführung in die Arduino-Programmierung II Elektrotechnik und Informatik Faculty

6. Motorsteuerung

Jetzt wollen wir nach dem selben Prinzip anstelle der LED einen Motor steuern. Wirverwenden hier einen kleinen Gleichstrommotor, der auch mit niedrigen Spannungenarbeitet. Gleichstrommotoren werden vielfältig eingesetzt, beispielsweise bei Lüfternim Computer, als Antrieb bei Modellautos (Carrera Bahn) usw.

Abbildung 6.1.: Motorsteuerung mit Transistor

Der Betrieb des Motors erfordert einen höheren Strom, als dies bei den LEDs der Fallgewesen ist. Die maximale Belastung eines Pin beträgt 40mA. Aus diesem Grundebenutzen wir einen Transistor1 zur Stromversorgung. Mit dem Pin des Arduino wird

1NPN-Bipolartransistor BC547C

Kaltenecker, Kremer, Radmacher, Toszkowski 5

Page 6: Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf · Einführung in die Arduino-Programmierung II Elektrotechnik und Informatik Faculty

6. Motorsteuerung

der Transistor ein- und ausgeschaltet.

Bauen Sie die Schaltung aus Abbildung 6.1 auf.

Aufgaben

• Nehmen Sie den Motor in Betrieb. Verwenden Sie das Programm aus dervorhergehenden Aufgabe.

• Vertauschen Sie testweise die Pole des Motors. Was können Sie dabei beob-achten?

• Bestimmen Sie den niedrigsten Spannungswert, bei dem der Motor noch läuft.Die Spannung können Sie mit folgender Formel berechnen:

Spannung =x

255· 5V

6 Arduino Einführung

Page 7: Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf · Einführung in die Arduino-Programmierung II Elektrotechnik und Informatik Faculty

7. Motortreiber

In der aktuellen Konfiguration lässt sich der Motor mit verschiedenen Geschwin-digkeiten betreiben. Es ist allerdings nicht möglich im Programm zwischen Links-und Rechtsdrehung zu wechseln. Diese Funktion lässt sich durch eine sogenannteH-Brücke realisieren. Anstatt sie aus einzelnen Bauteilen aufzubauen verwenden wirhier einen integrierten Schaltkreis (IC).

Abbildung 7.1.: Motorsteuerung mit Treiberbaustein

Der genutzte Motortreiber IC ist der bekannte L293D, dessen Datenblatt leicht imInternet zu finden ist. Er kann zwei Motoren parallel mit bis zu 600 mA betreiben(kurzzeitig bis 1,2 A). Der IC ist wie in Abbildung 7.1 gezeigt mit dem Motor zuverbinden. Die Funktion lässt sich dann über Pin 3,5 und 6 des Arduino einstellen.

Kaltenecker, Kremer, Radmacher, Toszkowski 7

Page 8: Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf · Einführung in die Arduino-Programmierung II Elektrotechnik und Informatik Faculty

7. Motortreiber

Pin 3 und 5 stellen die Drehrichtung ein und Pin 6 schaltet den Motor ein oder aus.Diesen Pin sprechen wir mittels PWM an, um die Geschwindigkeit zu steuern. Diefolgende Tabelle fasst die Bedeutung der Pinbelegungen zusammen.

A B E Funktion

X X LOW Motor läuft aus

LOW LOW HIGH Sofortiger Stopp

LOW HIGH HIGH Linksdrehung

HIGH HIGH HIGH Sofortiger Stopp

HIGH LOW HIGH Rechtsdrehung

Mit dem folgenden Code wird der Motor im Uhrzeigersinn mit voller Geschwindigkeitangetrieben.

/* Motortreiber */

int motor_A = 5;

int motor_B = 3;

int motor_E = 6; // E: Enable

void setup(){

pinMode(motor_A, OUTPUT);

pinMode(motor_B, OUTPUT);

pinMode(motor_E, OUTPUT);

digitalWrite(motor_A, HIGH); // A HIGH und B LOW

digitalWrite(motor_B, LOW); // => Motor dreht rechts

}

void loop() {

analogWrite(motor_E, 255);

}

Aufgaben

• Ergänzen Sie Ihr Programm so, dass der Motor für beispielsweise 20 Sekundenlangsam dreht, pausiert und dann 10 Sekunden schnell rückwärts fährt.

8 Arduino Einführung

Page 9: Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf · Einführung in die Arduino-Programmierung II Elektrotechnik und Informatik Faculty

8. Drehzahlmessung

Ziel dieser Aufgabe ist es einen Sensor zu entwickeln, der die Drehzahl des in Ka-pitel 7 entwickelten Motors erfasst. Auf die Achse des Motors wird eine Scheibeangebracht die halb weiß und halb schwarz ist. Die Scheibe dreht sich entsprechendmit der selben Frequenz wie die Motorachse. Zu Verfügung steht ein Sensormodulbestehend aus einer IR-LED und einem Fototransistor. Mit diesem Sensor ist esmöglich schwarz und weiß zu unterscheiden.

Sensorwert: 100 Sensorwert: 5 Sensorwert: 100

VCC

GND

OUT

VCC

GND

OUT

VCC

GND

OUT

1 2 3

Abbildung 8.1.: Drehung der Scheibe

Abbildung 8.1 zeigt anschaulich, wie die Messung ablaufen könnte. Solange der Sen-sor auf die schwarze Fläche gerichtet ist (1), wird kein bzw. wenig Licht reflektiertund der Sensor liefert hohe Werte. Sobald die Fläche weiß wird (2), werden die Sen-sorwerte deutlich geringer. Der Zeitpunkt des ersten Wertes unter einer Schwelledie schwarz und weiß trennt wird gespeichert. Ebenso wird der Zeitpunkt detek-tiert, an dem zum ersten Mal wieder hohe Werte (schwarz) gemessen werden(3).Aus dieser Zeitdifferenz lässt sich die Umdrehungsdauer der Scheibe und damit dieMotordrehzahl bestimmen.

Kaltenecker, Kremer, Radmacher, Toszkowski 9

Page 10: Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf · Einführung in die Arduino-Programmierung II Elektrotechnik und Informatik Faculty

8. Drehzahlmessung

VC

CG

ND

OU

T

11

55

1010

1515

2020

2525

3030

A

A

B

B

C

C

D

D

E

E

F

F

G

G

H

H

I

I

J

J

13

12

11

10

9

8

7

6

5

4

3

2

L

5V

A0

AN

ALO

G IN

AREF

1

GND

TX

RX

RESET

3V3

A1

A2

A3

A4

A5

VIN

GND

GND

DIG

ITAL (P

WM

=)

Ard

uin

oTM

IOREF

ICSP

ICSP2

ON

PO

WER

0

1TX0

RX0

RESET

Abbildung 8.2.: Schaltplan Drehzahlmessung

Aufgaben

• Machen Sie sich zunächst mit der Funktionsweise des Sensors vertraut, indemSie ihn an A0 anschließen (siehe Abbildung 8.2) und mit dem Beispielpro-gramm AnalogSerialRead testen. Der Motor muss dabei zunächst nicht aktivsein. Das Programm finden Sie unter:

Datei - Beispiele - 01. Basics - AnalogReadSerial

Die Werte können Sie sich wieder mit dem seriellen Monitor ansehen.

• Ermitteln Sie einen sinnvollen Schwellwert, um schwarz und weiß zu unter-scheiden.

10 Arduino Einführung

Page 11: Einführung in die Arduino-Programmierung IImakerspace.hsnr.de/wiki/images/5/56/Arduino3.pdf · Einführung in die Arduino-Programmierung II Elektrotechnik und Informatik Faculty

8. Drehzahlmessung

Nun erstellen Sie ein Programm, dass die Drehzahl auswertet. Das folgende Pro-gramm ist eine einfache Implementierung der oben vorgestellten Vorgehensweise.

/* Drehzahlmessung */

unsigned long zeit;

int flag = 0;

int sensorwert;

int schwelle = ___ ; // Hier sinnvollen Wert eintragen

void setup() {

Serial.begin(9600);

}

void loop() {

sensorwert = analogRead(A0);

if (sensorwert <= schwelle && flag == 0){

zeit=millis();

flag=1;

}

if (sensorwert > schwelle && flag == 1){

Serial.println((millis()-zeit)*2);

flag=0;

}

}

Die Funktion millis() gibt die Anzahl der Millisekunden seit dem Start des Arduinozurück.

Aufgaben

• Messen Sie die Umdrehungsdauer.

• Geben Sie Drezahl in Umdrehungen pro Minute an.

11 Arduino Einführung