Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektewise19:d33_j4ypublic:start

Projektdokumentation

Einleitung

Willkommen zum Projekt D33 J4Y!

Unser Roboter wurde durch eine der schlimmsten Dinge im Leben eines Studenten inspiriert, dem Aufstehen.
Wenn die Netflix-Serie zu spannend war und die Nacht zu kurz , fällt es natürlich schwer, aus dem Bett zukommen.
D33 J4Y ist ein Wecker, der jeden Studenten aus den Federn bekommt, wobei man hier vielleicht erwähnen sollte, dass einige
„Überraschungseffekte“ hinzugefügt wurden.
Zu Beginn wird zu einer zufällig ausgewählten Uhrzeit eine falsche Uhrzeit angesagt. Möchte man also um 7 Uhr morgens geweckt werden,
ist es möglich, dass es bereits um 6 Uhr klingelt und der Wecker beispielsweise 7:30 Uhr ansagt, um den möglichst größten Stressfaktor zu erzeugen.
Der ganze Vorgang wird natürlich mit lauter und schriller Musik untermauert. Nun könnte man meinen, der zum drücken einladende große rote Button dient wie bei herkömmlichen Weckern als Snoozetaste um die Qual zu beenden, jedoch ist das weit gefehlt.
Drückt man den vermeindlichen Snoozebutton, so wird die Musik lauter und störender, wobei D33 J4Y anfängt wegzufahren. Somit ist gewährleistet, dass das Opfer
aufstehen und diesen verfolgen muss, um das ganze Spiel zu beenden. Jedoch ist unser Roboter in der Lage, Gegenständen auszuweichen weshalb dieser nicht einfach gegen eine Wand fährt und sich dort aufhängt, was das einholen erschwert. Bei weiteren versuchen, es durch den Snoozebutton zum Schweigen zubringen, steigert der Wecker sogar noch seine Geschwindigkeit und die Lautstärke der Musik.
Wir, das D33 J4Y Team, geben zu, unser Projekt soll weniger alltagstauglich sondern eher als riesen Nerv-Faktor funktionieren. Deshalb gibt es aktuell auch
keinen Aus-Knopf, man kann den Roboter also nur durch unterbrechen der Stromzufuhr stoppen.
Wie alle Features überhaupt funktionieren und wie sie miteinander kommunizieren wird im laufe dieser Projektdokumentation verdeutlicht.
Also viel Spaß beim durchlesen!

Methoden/Umsetzung

Baugruppen

Bewegung

D33J4Y bewegt sich mit zwei Stepper-Motoren fort. Wir haben Stepper gewählt, da diese genauer arbeiten als Getriebemotoren. Insgesamt hat D33J4Y 3 Räder, zwei fette Monstertruck-Räder und ein kleines Rad zur Stabilisation. An die zwei großen Räder sind die Stepper-Motoren geschlossen.

Sensoren

Wir haben zwei Ultraschallsensoren eingebaut. Sie sind jeweils weit außen an der Front angebracht, um vorne alles zu überschauen aber trotzdem einen Winkel Links bzw. Rechts von ihnen im Blick zu haben. Die übliche Idee zwei zusätzliche Sensoren an den Seiten einzubauen haben wir verworfen, nachdem wir gesehen haben, dass D33J4Y sich auch so aus jeder Ecke befreien konnte.

Raspberry PI + Arduino

Damit unser Wecker Musik(mp3's) abspielen kann, haben wir uns einen Mini-PC gekauft, den RaspberryPI Zero. Zur Auswertung der Messdaten, sowie Senden der Bewegungsbefehle haben wir zwei Arduinos benutzt. Einen der die Messdaten der Sensoren auswertet und in Outputs für den zweiten Arduino umwandelt und den zweiten, welcher lediglich zum Auswerten seiner Inputs und Befehle an die Stepper-Motoren geben vorhanden ist.

Gehäuse

Wir haben unser Gehäuse in zwei Ebenen aufgeteilt. Auf der unteren Ebene sind 2 Arduinos und die Stepper-Motoren. Die Stepper-Motoren liegen auf der Ebene auf, und somit hält die untere Ebene auch das Gewicht. Die zweite, obere, Ebene ist hauptsächlich dafür da, damit wir den Buzzer Verkabeln können. Die Sensoren liegen auch auf der oberen Ebene, aber die Verkabelung geht durch ein Loch in der Mitte in die erste Ebene. Unser D33J4Y ist komplett abgeschlossen, also er hat seine 4 Wände. Somit sieht man keine Verkabelung und auch keine Technik. Die Sensoren gucken beabsichtigt aus dem Roboter heraus und sollen die Augen darstellen. Da wir unserem Roboter Charakter geben wollte, guckt genauso der Lautsprecher vorne heraus, um als Mund zu funktionieren. Die Optik war uns sehr wichtig, da wir somit den spielenden Charakter hervorbringen. Deshalb haben wir zum Abrunden Monstertruck-Räder gewählt, da D33J4Y einem somit überall hin folgen kann und stabiler ist.

Abbildung 1: Untere Ebene
Abbildung 2: Obere Ebene
Buzzer

Unser quasi wichtigsten Element ist unsere einzige äußere Eingabequelle, unser großer rot-leuchtender Buzzer. Er lädt ein, auf ihn zu hauen und die vermeintliche Snooze Funktion auszulösen.

Lautsprecher

Der Lautsprecher alias unser Mund, ist die Ausgabequelle um nervige Weckertöne zu spielen.

Aufgaben

Die größten Hürden die wir bewältigen mussten, waren das Zusammenspiel der Arduinos mit den Steppern / Sensoren, die Kommunikation zwischen den Arduinos und die parallele Bewegung der Stepper-Motoren. Weitere Probleme kamen auf, da wir sehr Platzsparend arbeiten mussten und als wir versucht haben den Raspberry PI mit dem Lautsprecher per Bluetooth zu verbinden.

Aufgaben(beabsichtigt weggelassen)

Aufgaben, welche wir konkret weggelassen haben, weil sie einerseits nicht in der Zeit lösbar wären oder weil wir sie beabsichtigt nicht einbauen wollten, waren der Startpunkt des Roboters und der Power-Off Button. D33J4Y startet vom Boden, da wir ihn nicht Sturzsicher bauen konnten. Es gibt keinen Power-Off Knopf damit es nicht die Möglichkeit gibt, D33J4Y auszuschalten. :DD

800
Abbildung 3: Fertiger Roboter

Systembestandteile

Lautsprecher

Der Lautsprecher dient D33J4Y dazu seinen Besitzer zu wecken. Dazu wird nachdem er eingeschaltet wird, die Uhrzeit ausgegeben. Dannach ertönt ein Motivationsspruch oder ähnliches gefolgt von der Weckermelodie. Diese “verstärkt” (+Speed, +Pitch, +~8Hz in hohen Frequenzen) sich alle 10 Sekunden und wird unaushaltbar. Das Ganze läuft als Python Skript auf einem RaspberryPi Zero, der über Bluetooth mit einem Lautsprecher verbunden ist. Besagtes Python Skript greift auf das VLC Modul zu und hat damit alle Optionen, die in dem Programm auch zu finden sind.

Die Ansage
Sie besteht aus vier Sounddateien, zwei Aufnahmen davon aus Google-Translate: “Es ist” und “Uhr”, damit D33J4Y immer noch Eigenheiten eines Roboters vorweist. Die restlichen zwei Aufnahmen stammen aus zwei eigens erstellten Bibliotheken. Eine für Stunden, die Andere für Minuten. Das Skript ermittelt die aktuelle Uhrzeit und speichert davon nur die Stunden (also: um 14:37 Uhr wird in einer Variable 14 gespeichert).

h_now = datetime.now().time().hour

Diese wird als Start- und Endwert+5h für einen Random-Integer-Generator verwendet.

if (h_now < 19): h_rand = random.randint(h_now, h_now+5)
else: h_rand = random.randint(0, 5)

Somit ertönt immer eine falsche aber spätere Uhrzeit als die Tatsächliche. Die Minuten werden komplett zufällig ausgewählt.

mm = random.randint(1, 59)

Sensoren
  • 2 Ultraschallsensoren
  • eigens dedizierter Arduino
  • Umrechnung von gemessener Zeit zu Entfernung
  • Messungen unter 0.8m → Output Signal
Probleme
  • Kein Multitasking → verwendung eines Weiteren „SensorArduinos“
  • Arduino inkonstanter Output → Auslesen mit analogen Pins
Buzzer
  • Einziges Input-Gerät
  • Verbunden mit Sensor-Arduino
Probleme
  • LED leuchtet schwach
  • Bisher keine Verbindung zu RaspberryPi geschaffen

Ergebnis und Diskussion

Funktionert

Das Zusammenspiel zwischen Motor und Sensoren sorgt dafür, dass D33 J4Y in der Lage ist, Hindernisse zu erkennen und entsprechend zu reagieren, um diesen auszuweichen. Es gibt verschiedene Schnelligkeitsstufen, die durch das erneute Drücken des Buzzers erreicht werden. Teilweise reagiert der Knopf etwas spät, weshalb man diesen länger gedrückt halten muss, um einen Input zu gewährleisten. Der Lautsprecher ist in der Lage, die verschiedenen „Störgrade“ der Musik wiederzugeben. Diese unterschiedlichen Stufen werden durch ein Zeitintervall gesteuert, d.h. die Musik verändert sich alle 10 Sekunden, unabhängig von der Geschwindigkeit des Roboters.

Funktioniert **nicht**

Ist der Wecker gerade in einer Ausweichbewegung (Links-/Rechtsdrehung um 90°), so können die Sensoren keine Information an den Arduino weitergeben. Es werden also keine Hindernisse bei diesem Vorgang erkannt, weshalb es theoretisch zu einem Zusammenstoß mit Gegenständen führen kann, oder zu einem Festfahren des Roboters. Zusätzlich dazu ist das Ausweichmanöver festgelegt auf 90°. Besteht nun der Fall, dass Etwas vor D33 J4Y und im 90° Winkel neben ihm Rechts und Links ist, so würde er sich dauerhaft hin- und herdrehen ohne einen Ausweg zufinden. Andere Probleme weist der Buzzer auf. Der mit dem Buzzer verbundene Arduino kontrolliert nicht dauerhaft den entsprechenden Pin auf Inputs. Es wird also im Intervall gecheckt, in welchem der Code „durchläuft“. Dies führt dazu, dass teilweise Input verloren geht, weshalb man den Buzzer länger drücken muss. Ein letztes Problem liegt im Zusammenspiel von Arduino, Buzzer und Musik. Da die Musik ausschließlich über den Raspberry-Pi gesteuert wird, existiert keine Möglichkeit, die Musik über den Buzzer zu ändern, wie es ursprünglich gedacht war. Die Kommunikation von Arduino zu Rasp-Pi erwies sich als sehr umständlich, da beide unterschiedliche Spannung zum funktionieren benötigen. Deshalb wurde ein festes Zeitintervall gewählt, mit welchem sich die Musik verändert. Dies funktioniert also nicht synchron mit der Geschwindigkeitszunahme.

Verbesserungs/Erweiterungsmöglichketien

Verbesserungswürdig ist das Zusammenspiel von Musik und Fortbewegung. Hierbei muss eine Schnittstelle zwischen Arduino und Raspberry-Pi hergestellt werden. Weiterhin wäre es schön, mehr Geschwindigkeitsstufen zu den aktuellen vier, zu bekommen. Somit könnte der Buzzer häufiger benutzt werden. Selbstverstädnlich ist auch zu den Ausweichmannövern einiges hinzuzufügen. Beispielsweise könnte durch Sensoren an den Seiten ein Festfahren in dem oben beschriebenen 90° Winkel verhindert werden. Auch zu enge Stellen würden rechtzeitig erkannt und vermieden werden. Als abrundendes Feature wäre ein Schutz vor Stürzen ideal. Durch Sensoren die auf den Boden gerichtet sind, könnte man Höhenunterschiede erkennen und den Roboter entsprechend darauf reagieren lassen. Somit sind auch Treppen keine Gefahr mehr.

)

Code und Rohdaten

Pinbelegungstabelle

pintabelle.pdf

Legende:

  • „OP“ = OUTPUT
  • „IP“ = INPUT
  • „→“ heißt, OUTPUT vom SensorArduino in INPUT vom StepperArduino
projektewise19/d33_j4ypublic/start.txt · Zuletzt geändert: 2020/04/07 14:41 von d.golovko