Weekend Projekt: Google Dino Jump

In verschiedenen Instagram Storys / Beiträge konnte ich ein kleines niedliches Projekt mit einem Arduino und dem „Google Dino Jump“ Spiel erblicken und genau dieses möchte ich dir hier zeigen. Daher zunächst der Hinweis das die Idee dieses mal nicht von mir stammt sondern kopiert wurde. (Aber ich werde meine Lösung zu diesem Spiel anbieten ich habe nur das Video gesehen.)

Für den nachbau in diesem Beitrag benötigst du den kostenfreien Browser Chrome von Google.

Wo und wann sehe ich das Spiel „Google Dino Jump“?

Das Spiel wird dir im Browser Google Chrome angezeigt wenn du keine Internetverbindung hast. D.h. eigentlich solltest du dich bisher wohl glücklich schätzen wenn du es noch nicht gesehen hast. 

Wenn du also keine Internetverbindung hast dann wird dir folgende Fehlerseite angezeigt.

Google Chrome - Fehlerseite "kein Internet"
Google Chrome – Fehlerseite „kein Internet“

Wenn du nun die Leertaste auf deiner Tastatur betätigst dann wird das Spiel gestartet.

Du kannst dieses auch provozieren in dem du zbsp. unter Microsoft Windows unter „Systemsteuerung\Netzwerk und Internet\Netzwerkverbindungen“

deaktivieren des Ethernetadapters in den Systemeinstellungen
deaktivieren des Ethernetadapters in den Systemeinstellungen

Du könntest natürlich auch das Kabel aus dem Rooter ziehen jedoch würdest du damit ggf. dein Telefon und vor allem andere Familienmitglieder / angeschlossene Geräte abklemmen welches wohl für „Spannungen“ sorgen kann.

 

Aufbau und Ablauf des Spieles

Das Spiel ist im Aufbau relativ simple, du bist ein Dinosaurier genauer gesagt ein T-Rex. Dieser T-Rex läuft von links nach rechts und muß über Kakteen springen. Zum springen musst du die Leertaste betätigen. Die Leertaste ist aber auch die einzige Taste welche du für dieses Spiel betätigen kannst / mußt. 

Google "Dino Jump Spiel"
Google „Dino Jump Spiel“

Wann endet das Spiel?

Das Spiel endet mit dem Tod des Dinos, dieses passiert wenn der Dino mit einem Kaktus zusammen stößt. Das kann passieren wenn zu langsam oder aber zu schnell bist.

Google Chrome "Dino Jump" - Game Over
Google Chrome „Dino Jump“ – Game Over

automatisieren des Spieles

Das Spiel läßt sich mit einigen wenigen Bauteilen super einfach automatisieren. Und wie du dieses machst erfährst du nun nach der kurzen Einleitung in diesem Abschnitt des Beitrages.

benötigte Bauteile / Materialien & Kosten

* Das Klebeband wird später genutzt um den Fotowiderstand auf einem Monitor zu „montieren“ hier bietet es sich an mal nicht so tief in die Tasche zu greifen, denn das günstige Klebeband klebt nicht so gut und läßt sich dadurch besser wieder entfernen. (Alternativ kann man aber auch Malerkreppband verwenden. Dieses läßt sich sehr leicht entfernen, jedoch hat nicht jeder dieses zuhause.)

Die Kosten für das Material für dieses kleine Projekt betragen 13,5€. Wer jedoch schon etwas mehr mit dem Arduino gebastelt hat, der sollte dieses Material sowieso schon zuhause haben.

Aufbau der Schaltung

Wie du einen Servomotor am Arduino betreibst und steuerst, habe ich bereits im Beitrag Arduino, Lektion 16: Servo ansteuern und wie du die Werte eines Fotowiderstandes ausließt im Beitrag Arduino Lektion 4: LED mit Fotowiderstand.

Auch wenn du die verlinkten Beiträge noch nicht kennst, ich zeige dir Schritt für Schritt wie du die Schaltung aufbaust und das Sketch / Programm erstellst.

anschließen des Servomotors

Der Servomotor muss an einen PWM Pin angeschlossen werden.
Der Arduino UNO und Nano verfügt an den digitalen Pins 3, 5, 6, 9,10, 11 über die Möglichkeit PWM Signale zu übertragen. 

digitale Pins am Arduino UNO
digitale Pins am Arduino UNO

Die PWM Pins erkennst du auch an der Tilde „~“.

Der Servomotor verfügt über einen einfachen 3 Pin Stecker welcher meist die Farben graun, rot und orange hat.

Servomotor SG90Arduino UNO
braunGND
rot5V
orangedigitaler Pin D9

 

Servomotor SG90 am Arduino UNO
Servomotor SG90 am Arduino UNO
Hinweise zum Umgang mit Servomotoren

In diesem Beitrag verwende ich bewusst den kleinen Servomotor SG90, dieser hat eine sehr geringe Stromaufnahme. Diese liegt in der ruhe Position beim max. 10mA und bei der Bewegung bei maximal 200mA. Der Arduino kann auf dem 5V Pin maximal 400mA vertragen. Dieses Maximum wird schon fast erreicht wenn dieser kleine Servo mal hängt bzw. sich nicht weiter drehen kann (ca. 360mA).

Des Weiteren sollte das Ruderhorn des Servos nicht mit der Hand bewegt werden, da man dann das Getriebe nachhaltig beschädigen kann.

Ansteuern des Servomotors SG90

Den Servomotor haben wir am digitalen Pin D9 angeschlossen. In dem nachfolgenden kleinen Sketch habe ich als untere Position den Winkel von 1° und das maximum von 60° am Servomotor. Solltest du jedoch eine Tastatur mit größeren Tasten haben so müssen diese Winkel ggf. angepasst werden.

#include <Servo.h>  //Bibliothek zum ansteuern von Servo

#define servoPin 9

//Pause zwischen drücken der Taste und loslassen.
//In dieser Pause muss der Weg für den Servo mit
//eingerechnet werden!
const int PAUSE = 150; 

int posDown = 1; //untere Position des Servos
int posUp = 60; //obere Position des Servos

Servo servo; //Servo Objekt erstellen (noch nicht initialisiert)

void setup() {
  pinMode(servoPin, OUTPUT); //setzen des digitalen Pins als Ausgang
  servo.attach(servoPin); //setzen des Servo Objektes auf den digitalen PIN D9
}
 
void loop() { 
  jump();
  delay(1000);
}

/*
 * Springen bzw. betätigen der Leertaste mit dem Servos
 */
void jump(){
    servo.write(posDown); 
    delay(PAUSE); 
    servo.write(posUp); 
}
Video vom Zwischenstand

Wenn das oben gezeigte Sketch / Programm auf dem Arduino UNO ausgeführt wird, dann sollte sich bereits die Leertaste betätigen lassen.

 

Auslesen des Fotowiderstandes am Arduino UNO

Der Fotowiderstand wird zusammen mit einem 10 kOhm Widerstand am analogen Pin A2 angeschlossen. 

Schaltung, Fotowiderstand mit 10 kOhm Widerstand am Arduino
Schaltung, Fotowiderstand mit 10 kOhm Widerstand am Arduino

Für das auslesen des Fotowiderstandes benötigen wir keine zusätzliche Bibliothek, hier nutzen wir die Funktion „analogRead“. Dieser Funktion übergeben wir den Pin an welchem der Fotowiderstand angeschlossen ist und erhalten einen ganzzahligen Wert zwischen 0 und 1023. 

//Fotowiderstand am analogen Pin A2
#define resistorPin A2
void setup() {
  Serial.begin(9600);
}
 
void loop() { 
  //auslesen des Fotowiderstandes
  int resistorValue = analogRead(resistorPin);
  Serial.println(resistorValue);
}

Mit diesem kleinen Sketch können wir nun ermitteln wie die Unterschiede zwischen dem Kaktus in dem Spiel und dem Hintergrund ist. Ich habe zusätzlich sämtliche störende Lichtquellen entfernt (Lampen ausgeschaltet und Fenster verhängt) und habe einen Wert von 750 ermitteln können. Jeder 

Da der Arduino jedoch „nur“ über einen 5V Pin verfügt greifen wir diesen ab und schließen über ein Breadboard den Servo und den Fotowiderstand an.

Aufbau der Schaltung, automatisieren von "Google Dino Jump"
Aufbau der Schaltung, automatisieren von „Google Dino Jump“

der fertige Sketch

Wenn du dieses Sketch verwendest musst du ggf. den Schwellwert für das aufrufen der Funktion „jump“ an deinen Monitor anpassen.

#include <Servo.h>  //Bibliothek zum ansteuern von Servo

//Servomotor am digitalen Pin D9
#define servoPin 9

//Fotowiderstand am analogen Pin A2
#define resistorPin A2

//Pause zwischen drücken der Taste und loslassen.
//In dieser Pause muss der Weg für den Servo mit
//eingerechnet werden!
const int PAUSE = 150; 

int posDown = 1; //untere Position des Servos
int posUp = 60; //obere Position des Servos

Servo servo; //Servo Objekt erstellen (noch nicht initialisiert)

void setup() {
  pinMode(servoPin, OUTPUT); //setzen des digitalen Pins als Ausgang
  servo.attach(servoPin); //setzen des Servo Objektes auf den digitalen PIN D9
}
 
void loop() { 
  //auslesen des Fotowiderstandes
  int resistorValue = analogRead(resistorPin);
  //der Wert des Fotowiderstandes hängt vom Monitor und von dem umgebenen Licht ab
  //daher muss mit diesem Wert etwas experimentiert werden.          
  if(resistorValue < 750){
    jump();
  }  
}

/*
 * Springen bzw. betätigen der Leertaste mit dem Servos
 */
void jump(){
    servo.write(posDown); 
    delay(PAUSE); 
    servo.write(posUp); 
}
Video

Sorry für die schlechte Qualität des Videos, jedoch musste ich die Fenster verhängen da das einfallende Sonnenlicht den Fotowiderstand sehr stark beeinflusst hat.

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.