Uno + Servo + Laser = YoshiTrainer 2000! - AZ-Delivery

Heute geht es um ein sehr ernstes Thema: die Fitness unseres Hundes Yoshi.

Seitdem wir in unserem Shop das Leckerli für Yoshi anbieten, ist die Kalorienaufnahme von Yoshi unproportional angestiegen.

Eigentlich wollten wir demnächst einen automatisierten Leckerli-Spender für Yoshi bauen, der die gespendeten Leckelis automatisch ausgibt, aber das wäre verantwortungslos wenn wir nicht für die Fitness des Hundes vorsorgen. 

Daher müssen wir uns Gedanken um ein Sportprogramm für Yoshi machen.  Und da kam die Idee mit dem YoshiTrainer 2000!

Vorteile:

  • Ich habe alle benötigten Bauteile auf meinem Schreibtisch
  • Die Programmierung ist relativ simpel, da wir meinen letzten Blog-Beitrag über Zufallszahlen komplett ignorieren, und random() verwenden
  • Das Gerät ist Y2K kompatibel

 

Wir benötigen für das Projekt:

1x AZ-Delivery Mikrokontroller, kompatibel mit Arduino Uno R3

2x Servo Motor z.B. AZ-Delivery Servo MG996R

1x Laser Diode

1x Mini-Breadboard

1x Jumperkabel Set

1x 5V Netzteil mit ausreichend Leistung für Servos, Laser & Uno

Sowie einige Rollen VDE Isolierband und doppelseitigem Klebeband.

 

Laser Warnung:

Die verwendete Laser-Diode ist ein Klasse 1 Laser. Laut DIN EN 60825-1 bedeutet dies: "Die zugängliche Laserstrahlung ist ungefährlich, oder der Laser befindet sich in einem geschlossenen Gehäuse".

Dennoch empfehle ich den Einsatz einer Schutzbrille. Außerdem benötigen Laser im Dauereinsatz ausreichende Kühlung. 

Ich habe nur einen MG 996R Servo, also habe ich für die Y-Achse unseren SG90 genommen. Dieser ist viel kleiner, hat Zahnräder aus Kunststoff und hat viel weniger Kraft.

Wir verkabeln das ganze wie folgt:

 

5V 10A Netzteil

Breadboard

+

+

-

-

Mikrokontroller, kompatibel mit Arduino Uno R3

Breadboard

VIN

+

GND

GND

Mikrokontroller, kompatibel mit Arduino Uno R3

 

PWM 9

Servo 1 Orange

PWM 10

Servo 2 Orange

PWM 3

Laser S

Servo 1 und 2 Rot

Breadboard +

Servo 1 und 2 Braun

Breadboard -

Laser -

Breadboard -

 

Hier ist ein Foto auf dem Sie die Verkabelung erkennen:

 

 

 Alternativ hier das gleiche als Schaltplan:

 

 

 

Nun fehlt noch die Programmierung. 

Ich nutze die mit der IDE mitgelieferte servo.h

Mit "Servo servoX;" und "Servo servoY;" erstelle ich 2 Servos mit den Namen ServoX und servoY. 

Im Setup definiere ich dann, an welchem Pin jeweils die Steuerungsleitung des Servos hängt, in unserem Fall z.B. "servoX.attach(9);" für servoX.

Nun können wir mit den funktionen servoX.read() und servoX.write() die position des Servos auslesen oder setzen.

Damit Yoshi eine Chance hat den Punkt zu erwischen, habe ich das ganze in einer While-Schleife verpackt, mit kleinen delays. Über die Variable "spd" kann die Geschwindigkeit grob hochgeschraubt werden.

Für den Laser setzen wir zuerst den Pin als Ausgang mittels "pinMode(laserPin, OUTPUT);" und schalten diesen dann mit "analogWrite(laserPin, 40);" ein. 

 

Hier der komplette Quelltext:

 

#include <Servo.h>
Servo servoX;
Servo servoY;

uint8_t tPosX = random(0,180); // Zielposition Servo X
uint8_t cPosX = servoX.read(); // Aktuelle Position Servo X
uint8_t tPosY = random(0,180); // Zielposition Servo Y
uint8_t cPosY = servoY.read(); // Zielposition Servo Y
uint8_t spd = 1; // Geschwindigkeit
int laserPin = 3; // PWM Pin für die Laser-diode 

void setup() {
  // put your setup code here, to run once:
  servoX.attach(9); // Servo X an Pin 9 
  servoY.attach(10); // Servo Y an Pin 10
  pinMode(laserPin, OUTPUT);
  analogWrite(laserPin, 40); // helligkeit laser - Hitzeentwickung beachten! 
}

void loop() {
  tPosX = random(45,135); // hiermit lässt sich der bereich zwischen 0 und 180° einstallen
  cPosX = servoX.read(); // aktuelle Position lesen
  tPosY = random(120,170);
  cPosY = servoY.read();
  while (tPosX > cPosX){
    cPosX += spd;
    servoX.write(cPosX);
    delay(50);
    cPosX = servoX.read();
  }
  while (tPosX < cPosX){
    cPosX -= spd;
    servoX.write(cPosX);
    delay(50);
    cPosX = servoX.read();
  }
  while (tPosY < cPosY){
    cPosY -= spd;
    servoY.write(cPosY);
    delay(50);
    cPosX = servoY.read();
  }
  while (tPosY > cPosY){
    cPosY += spd;
    servoY.write(cPosY);
    delay(50);
    cPosX = servoY.read();
  }
delay(500); // Damit Yoshi nicht zu müde wird
}

Und wir haben einen Teilerfolg. Einen Laserpunkt der mehr oder weniger zufällig durch die Gegend fährt.

Genau so - oder zumindest so ähnlich, müssen die ersten Lasershows damals ausgesehen haben.

 

Wir hoffen der heutige Blog-Beitrag hat Ihnen gefallen. Schreiben Sie doch einen kurzen Kommentar ob Sie sich mehr sachliche Beiträge wünschen, oder ob Ihnen der heutige Beitrag gut gefallen hat.

 

Für arduinoProjekte für anfänger

Kommentar hinterlassen

Alle Kommentare werden von einem Moderator vor der Veröffentlichung überprüft

Empfohlene Blogbeiträge

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery