Projekt 1 Eine tastergesteuerte LED In diesem Projekt verwenden Sie einen Taster, um zu steuern, wann die LED leuchtet.
Benötigte Bauteile Arduino-Platine Steckbrett Jumperkabel LED Taster mit vier Pins 10-kOhm-Widerstand 220-Ohm-Widerstand
Dieses Projekt führt Sie in die Grundlagen der Schalter ein, die wir im gesamten Buch einsetzen. Fast alle elektrischen Geräte verwenden Schalter, um ein Element ein- oder auszuschalten. Es gibt viele Arten von Schaltern, hier verwenden wir einen Taster (Abbildung 1-1). Abbildung 1-1: Ein Taster So funktioniert es Wenn ein Taster gedrückt wird, schließt er den Stromkreis und schaltet ihn ein. Wird der Taster losgelassen, springt er zurück und öffnet den Schaltkreis, sodass der Strom unterbrochen wird. Ein Taster wird standardmäßig auch als Schließer bezeichnet und zum Beispiel in Computertastaturen verwendet. Ein Schalter dagegen bleibt in seiner Position stehen, bis Sie sie verändern, wie zum Beispiel ein Lichtschalter. Dieser Taster hat vier Pins, aber meist werden nur zwei benötigt. In diesem Projekt verwenden Sie die beiden oberen Anschlüsse, die beiden unteren haben aber genau dieselbe Funktion. Wie in Abbildung 1-2 gezeigt, bilden die Pins einen Schaltkreis. Pin A und Pin C sind immer verbunden, ebenso die Pins B und D. Wird der Taster betätigt, ist der Stromkreis geschlossen. Abbildung 1-2: Der geöffnete Taster A B C D 24 Projekt 1
Der Aufbau 1. Platzieren Sie den Taster im Steckbrett (siehe Abbildung 1-3). Abbildung 1-3: Platzierung des Tasters 2. Schließen Sie Pin A an einen Anschluss des 10-kOhm-Widerstands an und verbinden Sie denselben Anschluss des Widerstands mit Pin 2 des Arduino. Verbinden Sie das andere Ende des Widerstands mit der Masseleiste und die Masseleiste mit GND des Arduino. Schließen Sie Pin B des Tasters an die 5-V-Leiste an und diese an + 5V des Arduino. Taster Arduino Pin A GND und Pin 2 über 10-kOhm-Widerstand Pin B +5V 3. Stecken Sie die LED in das Steckbrett und verbinden Sie den längeren, positiven Anschluss mit Pin 13 des Arduino über einen 220-Ohm- Widerstand und den kürzeren Anschluss mit GND. LED Positiver Anschluss Negativer Anschluss Arduino Pin 13 über 220-Ohm-Widerstand GND 4. Prüfen Sie, ob Ihr Aufbau dem Schaltplan in Abbildung 1-4 entspricht, und laden Sie den Sketch von Seite 27 auf den Arduino. 25 Projekt 1
Abbildung 1-4: Schaltplan für die per Taster gesteuerte LED Der Taster ist an Pin 2 angeschlossen. Das Drücken des Tasters lässt die LED leuchten. Die LED leuchtet so lange, wie der Taster gedrückt wird. 26 Projekt 1
Der Sketch In diesem Sketch weisen Sie dem Taster einen Pin zu und definieren ihn als Eingang, ebenso weisen Sie der LED einen Pin zu, den Sie als Ausgang festlegen. Der Code teilt dem Arduino mit, dass die LED so lange leuchten soll, wie der Taster gedrückt wird (den Stromkreis schließt), und dass die LED ausgeschaltet werden soll, wenn der Taster nicht gedrückt wird. Wird der Taster losgelassen, wird der Stromkreis unterbrochen und die LED ausgeschaltet. /* von DojoDave <http://www.0j0.org> geändert am 30. Aug. 2011 von Tom Igoe Dieser Beispielcode ist gemeinfrei. http://www.arduino.cc/en/tutorial/button */ const int buttonpin = 2; const int ledpin = 13; int buttonstate = 0; void setup() { pinmode(ledpin, OUTPUT); pinmode(buttonpin, INPUT); // Pin für den Taster // Pin für die LED // Gibt dem Taster einen Wert // Richtet LED-Pin als Ausgang ein // Richtet Tasterpin als Eingang ein void loop() { buttonstate = digitalread(buttonpin); // Liest Eingabe von Pin 2 if (buttonstate == HIGH) { // Schaltet LED ein, wenn Taster // gedrückt digitalwrite(ledpin, HIGH); else { digitalwrite(ledpin, LOW); // Schaltet LED anderenfalls aus 27 Projekt 1
Projekt 7 Arduino-Musik Bisher waren die Projekte meist optischer Natur. Jetzt wollen wir etwas Musik machen. In diesem Projekt verwenden wir einen Piezo-Summer, um Melodien zu spielen.
Benötigte Bauteile Arduino-Platine Piezo-Summer
So funktioniert es Das Musik-Projekt verwendet einen Piezo-Summer, um Töne in unterschiedlichen Höhen auszugeben, die Noten entsprechen. Mit der Arduino-IDE können Sie die Reihenfolge, Geschwindigkeit und Dauer der Noten angeben, um eine bestimmte Melodie zu spielen. Piezo-Summer sind günstige Summer, die oft in kleinen Spielzeugen zum Einsatz kommen. Ein Piezo-Element ohne Plastikgehäuse sieht aus wie eine goldene Metallscheibe mit zwei Leitungen (meist rot für plus und schwarz für minus). Ein Piezo-Element kann nur ein Klickgeräusch ausgeben, das wir über Anlegen einer Spannung erzeugen. Noten können wir dadurch abspielen, dass wir das Piezo-Element mehrere Hundert Male pro Sekunde bei einer bestimmten Frequenz klicken lassen. Dazu müssen wir wissen, welche Frequenz verschiedene Noten haben. Tabelle 7-1 zeigt die Noten und ihre Frequenzen. Intervall gibt die Zeitdauer in Mikrosekunden an. Diesen Wert halbieren wir, um timehigh zu erhalten, das wir in unserem Code verwenden, um die Note zu erzeugen. Tabelle 7-1: Noten und ihre Frequenzen Note Frequenz Intervall timehigh C 261 Hz 3830 1915 D 295 Hz 3400 1700 E 329 Hz 3038 1519 F 349 Hz 2864 1432 G 392 Hz 2550 1275 A 440 Hz 2272 1136 H 493 Hz 2028 1014 C 523 Hz 1912 956 Der Code sendet eine Rechteckschwingung in der entsprechenden Frequenz an das Piezo-Element und erzeugt dadurch den passenden Ton (mehr über Schwingungen erfahren Sie in Projekt 2). Die Töne werden anhand der folgenden Gleichung berechnet: timehigh = period / 2 = 1 / (2 * tonefrequency) Der Aufbau dieses Projekts ist sehr einfach, denn es werden nur zwei Kabel an den Arduino angeschlossen. 66 Projekt 7
Der Aufbau 1. Schließen Sie das schwarze Kabel des Piezo-Elements direkt an GND des Arduino an und das rote Kabel an Pin 9. Piezo Arduino Rotes Kabel Pin 9 Schwarzes Kabel GND 2. Überprüfen Sie, ob Ihr Aufbau dem in Abbildung 7-1 entspricht, und laden Sie dann den Sketch auf den Arduino. Abbildung 7-1: Schaltplan für das Musik- Projekt Der Sketch Wir beginnen mit einer einfachen Melodie. Bei teilen wir der IDE mit, dass die Melodie aus 15 Noten besteht. Dann speichern wir die Noten der Melodie als Textstring in einem Array in der Reihenfolge, in der sie abgespielt werden sollen. Die Länge der Noten speichern wir in einem anderen Integer-Array. Wenn Sie die Melodie ändern möchten, ändern Sie die Noten im Array bei und deren Länge in Array bei. Bei legen wir das Tempo fest, mit dem die Melodie gespielt wird. Welche Melodie spielen wir? 67 Projekt 7
// Melodie (cleft) 2005 D. Cuartielles für K3 int speakerpin = 9; // Pin für Piezo-Summer int length = 15; // Anzahl der Noten char notes[] = "ccggaagffeeddc "; // Leerzeichen = Pause int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 ; int tempo = 300; void playtone(int tone, int duration) { for (long i = 0; i < duration * 1000L; i += tone * 2) { digitalwrite(speakerpin, HIGH); delaymicroseconds(tone); digitalwrite(speakerpin, LOW); delaymicroseconds(tone); // Richtet timehigh-wert auf bestimmte Noten ein void playnote(char note, int duration) { char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' ; int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 ; for (int i = 0; i < 8; i++) { // Spielt die entsprechenden Töne if (names[i] == note) { playtone(tones[i], duration); void setup() { pinmode(speakerpin, OUTPUT); // Richtet speakerpin als // Ausgang ein // Spielt die Melodie void loop() { for (int i = 0; i < length; i++) { if (notes[i] == ' ') { delay(beats[i] * tempo); // Pause else { playnote(notes[i], beats[i] * tempo); delay(tempo / 2); // Pause zwischen Tönen 68 Projekt 7
Projekt 20 Eine Roboter-Kanone Eine Roboter-Kanone ist eine unbemannte Waffe, die Feinde mit einem Ultraschalldetektor automatisch erkennt und bekämpft. In diesem Projekt bauen wir eine Miniaturversion dieser Waffe.
Benötigte Bauteile Arduino-Platine Mini-Steckbrett Jumperkabel Jumperkabel (männlich/ männlich) Ultraschallsensor HC-SR04 mit vier Pins Raketenwerfer RC V959 von WLToys Servomotor Tower Pro SG90 9g Benötigte Bibliotheken Servo NewPing
So funktioniert es Wir verbinden den kleinen Raketenwerfer und den Ultraschallsensor mit dem Servo-Arm (siehe Abbildung 20-1), sodass der Servomotor Kanone und Sensor um 180 Grad drehen kann, was dem Ultraschallsensor einen großen Erfassungsbereich ermöglicht. Wird ein Feind erkannt, löst der Arduino die Kanone aus und schießt die Raketen ab. Nähere Informationen zum Ultraschallsensor finden Sie in Projekt 18. Abbildung 20-1: Die Spielzeugkanone und der Ultraschallsensor werden am Servo-Arm befestigt und haben einen weiten Erfassungsund Drehbereich. Die wichtigste Komponente dieses Projekts ist der Raketenwerfer WLToys RC V959, auch als Walkera-RC-V959-19-Abschussgerät für ferngesteuerte Hubschrauber bekannt (Abbildung 20-2). Abbildung 20-2: Die Kanone Walkera RC V959-19 im Detail Dieses tolle Bauteil ist recht günstig (zwischen 5 und 10 ) und online gut zu bekommen. Im Abschussgerät befindet sich ein Mini-Servo, der sich dreht, um die Raketen abzuschießen. Die Anschlussleitungen dieses Servos sind weiß (Masse) und gelb (+5V). Es gibt auch schwarze und rote Anschlussleitungen für Einzelschüsse, wir verwenden jedoch nur die gelben und weißen Kabel für das Dauerfeuer. 172 Projekt 20
Der Aufbau 1. Zuerst bereiten wir die Kanone vor. Entfernen Sie die vier Kabel vorsichtig aus ihrem kleinen Plastiksockel. Sie sollten sich leicht lösen lassen. Sie können auch ein Jumperkabel mit Stecker verwenden, um den Plastikclip herunterzudrücken. 2. Der Kern der Leitung ist verdrillt und recht dünn. Isolieren Sie die Kabel also ein Stück ab und löten Sie Leitungen an, die sich besser in den Arduino stecken lassen, wie in Abbildung 20-3 zu sehen. Kappen Sie die schwarzen und roten Kabel oder befestigen Sie sie so, dass sie nicht im Weg sind. Abbildung 20-3: Die Kabel der Kanone abisolieren und verlängern 3. Kleben Sie den Arm des Servomotors an die Basis der Kanone (siehe Abbildung 20-4). Abbildung 20-4: Den Arm des Servomotors festkleben 4. Befestigen Sie den Ultraschallsensor oben an der Kanone, wie in Abbildung 20-5 gezeigt. Für eine feste Verbindung verwenden Sie eine Heißklebepistole oder nehmen Sie einfaches Klebeband, wenn Sie später die Verbindung wieder lösen wollen. 173 Projekt 20
Abbildung 20-5: Den Ultraschallsensor befestigen 5. Verbinden Sie den Ultraschallsensor über Jumperkabel mit dem Arduino: Schließen Sie Trig direkt an Pin 13 des Arduino an und Echo direkt an Pin 12. Wir verwenden ein Mini-Steckbrett, um die verschiedenen Verbindungen zum Arduino herzustellen. Ultraschallsensor Arduino Versorgungsspannung +5V Trig Pin 13 Echo Pin 12 Masse GND 6. Verbinden Sie das braune Kabel des Servomotors über das Mini-Steckbrett mit GND des Arduino, das rote Kabel mit +5V und das gelb/weiße direkt mit Pin 9 des Arduino. Servo Arduino Braunes Kabel GND Rotes Kabel +5V Gelbes Kabel Pin 9 174 Projekt 20
7. Verbinden Sie das weiße Kabel der Kanone mit der Masseleiste des Mini-Steckbretts und das gelbe Kabel direkt mit Pin 3 des Arduino. Kanone Arduino Weißes Kabel GND Gelbes Kabel Pin 3 8. Ihre Roboter-Kanone sollte jetzt so aussehen wie in Abbildung 20-6. Laden Sie jetzt die Geschosse. Abbildung 20-6: Ihre Roboter-Kanone ist bereit zum Feuern! 9. Prüfen Sie, ob Ihre Schaltung so aussieht wie in Abbildung 20-7. Laden Sie den Sketch von Seite 176 auf den Arduino. 175 Projekt 20
Abbildung 20-7: Der Schaltplan für die Roboter-Kanone Der Ultraschallsensor erkennt, wenn ein Objekt in der Umgebung erscheint, und sendet ein Signal an den Arduino, der die Kanone aktiviert. Der Servomotor wird mit +5V und GND verbunden, das Signalkabel kommt an Pin 9 des Arduino. Die Kanone sollte am Servo befestigt werden, sodass sie einen weiten Bewegungsbereich hat. Verbinden Sie das weiße Kabel mit GND und das gelbe mit Pin 3 des Arduino. Der Sketch Zuerst ruft der Sketch die Bibliotheken NewPing und Servo auf, mit deren Funktionen der Servomotor und der Ultraschallsensor gesteuert werden. (Die Bibliothek NewPing müssen Sie von http://www.dpunkt.de/arduino-projekt herunterladen und in Ihrem Arduino-Ordner speichern.) Der Servomotor bewegt sich um 180 Grad hin und zurück. Der Sensor sendet sein Ultraschallsignal aus, und wenn es auf ein Objekt trifft, kommt ein zeitverzögertes Echos zurück. Der Arduino rechnet diesen Wert in den Abstand zwischen Sensor und Objekt um. Ist der Abstand geringer als 15 cm, hält der Servo an und die Kanone wird aktiviert, sodass sie ihre Geschosse auf das Objekt abschießt. Sie können die Abschussdistanz (die in Zentimetern angegeben wird) an ändern. 176 Projekt 20
#include <NewPing.h> // Ruft die NewPing-Bibliothek auf #include <Servo.h> // Ruft die Servo-Bibliothek auf #define trigpin 12 // Trig-Pin für Ultraschallsensor #define echopin 13 // Echo-Pin für Ultraschallsensor #define MAX_DISTANCE 500 NewPing sonar(trigpin, echopin, MAX_DISTANCE); int blaster = 3; // Pin für Kanone int angle = 0; // Legt Servoposition in Grad fest Servo servo; void setup() { Serial.begin (115200); pinmode(trigpin, OUTPUT); pinmode(echopin, INPUT); pinmode(blaster, OUTPUT); servo.attach(9); // Pin für Servo void loop() { int duration, distance, pos = 0, i; digitalwrite(trigpin, LOW); delaymicroseconds(2); digitalwrite(trigpin, HIGH); // trigpin sendet Ping delaymicroseconds(10); digitalwrite(trigpin, LOW); duration = pulsein(echopin, HIGH); // echopin empfängt Ping distance = (duration / 2) / 29.1; Serial.print(distance); Serial.println(" cm"); if (distance <= 15) { // Wenn Abstand kleiner als 15 cm digitalwrite(blaster, HIGH); // Kanone schießt servo.write(90); else { digitalwrite(blaster, LOW); // Anderenfalls wird die Kanone // nicht eingeschaltet for (angle = 0; angle < 180; angle++) { // Schwenkt den Servo servo.write(angle); delay(15); for (angle = 180; angle > 0; angle--) { servo.write(angle); delay(450); 177 Projekt 20