Lass uns jetzt unser digitales Haustier programmieren. Ein bisschen Arbeit steht uns noch bevor.
Wir müssen unserem digitalen Haustier drei Sachen beibringen. Es soll mit den Augen (also den LEDs) zwinkern können. Es soll schnurren, wenn es gestreichelt wird. Und es soll meckern, wenn man es nicht beachtet. Fangen wir mit dem Augenzwinkern an.
Augenzwinkern
Das Augenzwinkern ist ja eigentlich nichts anderes, als das Blinken einer LED, wie wir es am Anfang unseres Kurses besprochen haben. Beide LEDs sind jeweils an einem eigenen Pin angeschlossen, sodass wir die Befehle pinMode und digitalWrite doppelt brauchen. Der Code könnte am einfachsten so aussehen:
int ledPin1 = 10; int ledPin2 = 11; void setup() { pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); } void loop() { digitalWrite(ledPin1, HIGH); digitalWrite(ledPin2, HIGH); delay(5000); digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, LOW); delay(50); }
Jetzt blinken die LEDs natürlich immer in der gleichen Geschwindigkeit. Das ist leider etwas langsam. Wenn wir das Augenzwinkern per Zufall auslösen könnten, wäre das bestimmt spannender. Zum Glück gibt es einen Zufalls-Befehl. Er heißt random().
Info: random();
Der random(maximal)-Befehl erzeugt eine Zufallszahl zwischen 0 und der als Argument übergebenen Zahl maximal. Dabei wird maximal aber nicht erreicht. Wenn man also schreibt random(5), dann können die zufälligen Zahlen nur 0, 1, 2, 3 und 4 sein.
Wenn wir uns eine zufällige Zahl zwischen 0 und 500 ausgeben lassen, könnten wir jetzt sagen, dass die Augen immer dann blinzeln (LED aus) sollen, wenn diese zufällige Zahl gleich eins ist. Das passiert ja in zufälligen, also unregelmäßigen Abständen. Jetzt müssen wir noch am Ende unseres Programmes ein kleines delay einbauen, damit die zufälligen Zahlen nicht einfach so schnell hintereinander generiert werden, dass die Augen ständig blinken.
int ledPin1 = 10; int ledPin2 = 11; void setup() { pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); } void loop() { // LEDs für Augen einschalten digitalWrite(ledPin1, HIGH); digitalWrite(ledPin2, HIGH); // Augenzwinkern if (random(500)==1){ digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, LOW); delay(50); } delay(10); }
Schnurren
Das digitale Haustier soll schnurren, wenn es gestreichelt wird. Um festzustellen, ob es gestreichelt wird, werden wir einen Lichtsensor in das digitale Haustier einbauen.
Wenn du es streichelst, verdeckt deine Hand einfallendes Licht und das können wir mit dem Sensor registrieren.
Wenn das Arduino-Board startet, müssen wir herausfinden, wie viel Licht im digitalen Haustier ist. Den Wert lesen wir einfach in die Variable lichtNormal mit lichtNormal=analogRead(sensorPin); aus.
Die Variable sensorSchwelle sagt, ab welcher Helligkeitsdifferenz das Haustier schnurren soll. Das passiert mit if(analogRead(sensorPin)>lichtNormal+sensorSchwelle){…}. Es kann sein, dass du den Wert noch anpassen musst. Probiere einfach ein paar andere Werte, wenn es nicht so gut klappt mit dem Schnurren.
Hier ist der Code (ohne Augenzwinkern):
int sensorPin = 0; int sensorSchwelle = 20; int speakerPin = 9; int lichtNormal; void setup() { lichtNormal = analogRead(sensorPin); } void loop() { // Schnurren if (analogRead(sensorPin)>lichtNormal+sensorSchwelle){ tone(speakerPin,0.001); } else { noTone(speakerPin); } delay(10); }
Meckern
Damit das digitale Haustier nun auch auf sich aufmerksam machen kann, soll es eine kleine Melodie abspielen, wenn es nicht beachtet wird. Das machen wir wie bei dem Augenzwinkern mit dem random-Befehl. Allerdings soll das nur passieren, wenn man es gerade nicht streichelt. Wir müssen also zwei Bedingungen verknüpfen. Das geht in der if-Abfrage, indem wir das doppelte & Zeichen verwenden (&&).
int sensorPin = 0; int sensorSchwelle = 20; int speakerPin = 9; int lichtNormal; void setup() { lichtNormal = analogRead(sensorPin); } void loop() { // Meckern if ((random(10000)==1)&&(analogRead(sensorPin)<lichtNormal+100)){ tone(speakerPin,1200); delay(100); tone(speakerPin,800); delay(200); tone(speakerPin,1000); delay(200); tone(speakerPin,1200); delay(100); } delay(10); }
Ob dein digitales Haustier meckern können muss, kannst du natürlich selbst entscheiden.
Der komplette Code für dein digitales Haustier sieht dann so aus:
int ledPin1 = 10; int ledPin2 = 11; int sensorPin = 0; int sensorSchwelle = 20; int speakerPin = 9; int lichtNormal; void setup() { pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); lichtNormal = analogRead(sensorPin); } void loop() { // LEDs für Augen einschalten digitalWrite(ledPin1, HIGH); digitalWrite(ledPin2, HIGH); // Augenzwinkern if (random(500)==1){ digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, LOW); delay(50); } // Schnurren if (analogRead(sensorPin)>lichtNormal+sensorSchwelle){ tone(speakerPin,0.001); } else { noTone(speakerPin); } // Meckern if ((random(10000)==1)&&(analogRead(sensorPin)<lichtNormal+100)){ tone(speakerPin,1200); delay(100); tone(speakerPin,800); delay(200); tone(speakerPin,1000); delay(200); tone(speakerPin,1200); delay(100); } delay(10); }
Das war jetzt wirklich schwierig. Lass uns basteln!
Lade Dir die Bastelbogen-Datei herunter: Download
Anleitung
Drucke die Bastelbögen auf Kartonpapier aus.
Nimm den ersten Bogen und schneide entlang aller durchgezogenen Linien.
Falze entlang aller gestrichelten Linien. Das geht besonders gut, wenn man diese Kanten vorher vorsichtig einritzt.
Schneide den zweiten Bogen aus.
Denke auch an den Ausschnitt in der Mitte.
Nun falze wieder entlang der gestrichelten Kanten.
Jetzt kannst Du die Löcher für die Augen machen. Sei hier besonders vorsichtig.
Nun klebe die ersten Klebeflächen wie auf dem Bild gezeigt zusammen. Dafür geht ein Klebestift oder flüssiger Alleskleber.
Klebe jetzt die Ohren des Haustieres an. Am besten nimmst Du einen Bleistift und drückst die Klebflächen von innen an.
Nun integrieren wir die Elektronik. Stelle das Papiermodell einfach auf das Breadboard. Die Kabel können durch den Ausschnitt geführt werden.
Stecke die LEDs in die Löcher der Augen. Biege dafür die Beinchen der LEDs nach unten. (Falls Deine Kabel zu kurz geworden sind, stelle etwas unters Breadboard, damit es höher steht.)
Klebe die Beinchen mit einem Klebestreifen fest.
Du kannst das digitale Haustier natürlich noch schön bemalen. Wenn Du es jetzt streichelst, sollte es schnurren.
Herzlichen Glückwunsch!
Du hast das Ende unseres Kurses erreicht. Ich hoffe, es hat Dir Spaß gemacht und dass Du weiter am Ball bleibst. Es gibt noch so viel zu entdecken. Hier geht es bald mit neuen Tutorials weiter und bis dahin alles Gute!
Dein StartHardware.org-Team
Ich danke Euch für diese Erklärungen und habe alles beim nachvollziehen am Ardurino Board gelernt und verstanden, schön wäre eine Zusammenfassung des Sketch, oder gibt es ein Buch in so einer Art,
Hi Frank, eine Zusammenfassung ist eine gute Idee. Gibt es leider noch nicht, aber ich denke das mal durch. LG
Hallo, ich bin heute ebenfalls auf diese Tutorials-Seite gestoßen und habe gleich mal alles durchgelesen. Dabei habe ich einen (vermeintlichen?) Fehler entdeckt: Muss man im Setup nicht eine Funktion randomSeed(irgendeinWert); verwenden?
Hallo Internetgemeinde,
Ich wollte mich nur mal für den coolen Service bedanken.
Ich finde das schon längst überfällig!!!!
Hallo,
bin heute auf ihre Webseite gestoßen. Find diese sehr gut gelungen :-) Machen Sie weiter so.
Jedoch habe ich eine Frage. Haben Sie mit der Split Funktion gearbeitet?
Würde mich über eine Rückmeldung freuen.
Mit freundlichen Grüßen
Patrick Walther
Hallo Patrick,
vielen Dank für die netten Worte. Mit der Split-Funktion habe ich in den Tutorials eigentlich nicht gearbeitet. Meinst Du in diesem Beispiel?
Liebe Grüße
Stefan