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 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.