Dies ist eine alte Version des Dokuments!
Einleitung:
Mr. Take-a-Shot ist ein interaktiver Roboter, der auf den verschiedensten Partys sowohl für Unterhaltung, als auch verantwortungsvollen Alkoholkonsum sorgt. Die Idee hinter dem Projekt ist es, den Gästen personalisierte Getränke zu servieren und gleichzeitig ein Bewusstsein für ihren Alkoholpegel zu schaffen. Der Roboter misst den Promillewert mit einem integrierten Sensor und entscheidet auf Basis dieser Daten, welche Getränkemischung serviert wird. Wir haben besonders viel Wert auf die Präsentation gelegt. Ein 3D-gedruckter Dschinn „schenkt“ die Getränke aus und auch das Alkoholmessgerät wurde in einer Wunderlampe verkleidet. Außerdem soll der Dschinn dem Nutzer Anweisungen geben oder einen passenden Spruch parat haben. Unser Ziel war es, einen Roboter zu entwickeln, der nicht nur funktional Getränke ausgibt, sondern auch durch Interaktion und Humor ein Highlight jeder Party wird.
Mr. Take-a-Shot ist im Wesentlichen eine Kombination aus einem „Getränkespender“, einem Alkoholtester und einem Lautsprecher. Wir haben unsere Ansätze von vergleichbaren Projekten, (https://www.youtube.com/watch?v=2EF3Mgs9CSU), (https://www.hackster.io/ShawnHymel/diy_breathalyzer-1efe13) inspirieren lassen.
Ausschenkfunktion:
Bei der Umsetzung der Ausschenkfunktion waren wir uns zu Beginn nicht einig, wie wir sie umsetzten sollten. Nach ein wenig Recherche wurde uns klar, dass ein 12V Luftdruckerzeuger, den wir schon im Labor zur Verfügung haben völlig ausreicht. Diese sollten Druck in geschlossenen Behältern erzeugen, die mit Getränken gefüllt sind, in dem wir Pumpe und Behälter mit einem Schlauch verbinden. Der steigende Luftdruck drückt das Getränk aus einer Öffnung durch einen zweiten Schlauch heraus. Außerdem haben wir ein L298N DC-Motortreiber verwendet, um die Luftpumpen mit dem Arduino zu verbinden, da der Arduino selbst nicht genug Strom liefern kann, um die Pumpe direkt zu betreiben. Der L298N dient als Leistungsverstärker und ermöglicht eine sichere Steuerung der Pumpe über den Arduino, aber er braucht eine eigene Stromversorgung. Zumindest haben wir keine Möglichkeit gefunden den Arduino über die H-Brücke zu versorgen. Deshalb hat unser Roboter zwei Netzteile. Die Schaltung der Pumpen sieht wie folgt aus:
Alkoholtestfunktion:
Der MQ-3 Sensor ist am besten geeignet, um Alkoholrückstände in der Luft zu messen. Der Sensor erkennt Alkohol durch eine spezielle metalloxidbasierte Halbleiterschicht, die ihre elektrische Leitfähigkeit verändert, wenn sie mit Alkoholmolekülen in Kontakt kommt. Diese Veränderung wird vom Sensor erfasst und als analoger Spannungswert ausgegeben. Der MQ-3 ist besonders praktisch, weil er empfindlich auf Ethanol reagiert und eine hohe Genauigkeit bietet. Um die Spannungswerte interpretieren zu können haben Freiwillige sich bereitgestellt beim Konsum von Alkohol immer wieder in den MQ3 zu pusten und die Messwerte und wie betrunken sie sich fühlen zu notieren. Die Schaltung ist relativ simpel, weil man den MQ-3 direkt mit dem Arduino verbinden kann.
Lautsprecherfunktion:
Für die Lautsprecherfunktion war der DFPlayer Mini das entscheidende Bauteil. Mit dem SD-Kartenslot können viele größere Audiodateien gespeichert werden, was mit einem Aduino Uno z.B nicht möglich wäre. Außerdem übernimmt er die gesamte Dekodierung und Wiedergabe von Audiodateien, sodass der Arduino nur einfache Steuerbefehle senden muss. Ein Kondensator nahe dem DFPlayer Mini kann Hochfrequenzstörungen filtern und für saubereren Sound sorgen. Der Dschinn soll dem Nutzer Anweisungen geben und mit ihm interagieren, deshalb haben wir alle Audios über unsere Handys aufgenommen, mit einem Filter bearbeitet und sie auf die SD-Karte hochgeladen.
Optik:
Die meisten Teile der Technik haben wir in einer großen schwarzen Box verkleidet. So simpel wie das sein mag, war dieser Schritt doch viel aufwendiger als erwartet. Wir haben Sperrholz geschnitten, alle Kanten geschliffen und mit Winkeln zusammengeschraubt. Damit sie nicht ausfranzt haben wir alle Kanten mit Kleber versiegelt und die Spalten mit einem Kleberspänemix geschlossen und am Ende die Box schwarz besprüht.
Zusätzlich wollten wir einen „Bartender“ für unseren Roboter 3D-drucken. Wir suchten also nach potentiellen 3D Modellen bis wir, dass Open-Source Modell „The Genie“ von Robert Livingston gefunden haben. Bevor die Figur gedruckt werden konnte mussten einige Änderungen vorgenommen werden. Die Unterseite von seinem Schwanz musste abgeflacht werden, damit der Dschinn auf der Box stehen konnte ohne umzukippen. Zusätzlich haben wir zwei passende Löcher in das Modell eingebaut, damit wir ihn auf die Box festschrauben können.
Wir haben für die beiden Flaschen, die er in seinen Händen hält, eigene 3D Modelle erstellt. Damit sie auf die Hände passen haben wir mit der Boolesh-Mesh-Funktion benutzt, die jeweilige Flasche auf seine Hand platziert, wie er sie halten sollte und das gemeinsame Volumen mit dem Dschinn von der Flasche abgezogen.
Den MQ3-Sensor haben wir in einer Wunderlampe verkleidet. Für die Wunderlampe haben wir auch ein Open-Source Modell gefunden. Die Idee war, dass man also in die Wunderlampe pustet und die Luft in den MQ-3 Sensor weitergeleitet wird. Aus Hygienegründen sollten Shishamundstücke auf die Lampe befestigbar sein, damit jeder Nutzer seinen eigenen Mundstück benutzen kann. Das Loch der Lampe wurde also auf die Maße der bestellten Mundstücke vergrößert und wir bauten in der Lampe einen Luftkanal ein, der die gepustete Luft bis zum Sensor weiterleitet und dann rauslässt. Zusätzlich sollte in der Wunderlampe eine LED eingebaut werden, die angeschaltet ist, während der MQ-3 nach Alkohol misst, um dem Nutzer zu signalisieren wann er pusten soll.
Programmcode:
Komponenten:
Arduino-Pin | Verbindung | Funktion |
---|---|---|
A0 | MQ-3 Sensor | Misst Alkoholgehalt |
2 | Taster | Startet Mess- und Mischvorgang |
5 | LED | Zeigt vorgegebene Länge zum Pusten |
8 | Saftpumpe | Dosiereinheit Saft |
9 | Alkoholpumpe | Dosiereinheit Alkohol |
10 | DFPlayer Mini RX | empfängt Befehle vom Arduino zum Abspielen der Audios |
11 | DFPlayer Mini TX | sendet Statusmedlungen an den Arduino (wird von uns nicht aktiv genutzt) |
1.: Initialisierung (Setup-Methode)
Beim Einschalten des Systems führt der Arduino zunächst eine Initialisierung durch. Dazu gehört die Konfiguration der einzelnen Pins für die Sensoren, Aktoren und Kommunikationsmodule. Der Button wird als Eingang mit Pull-up-Widerstand definiert, damit er zuverlässig erkannt wird. Die LED sowie die Pumpen für Alkohol und Saft werden als Ausgang konfiguriert, um sie später gezielt ansteuern zu können.
Zusätzlich wird eine serielle Kommunikation mit dem DFPlayer Mini über SoftwareSerial hergestellt, um Sprachansagen auszugeben. Der DFPlayer wird initialisiert und die Lautstärke auf den Wert 28 gesetzt, um eine klare Audiowiedergabe zu gewährleisten.
void setup() {
pinMode(button, INPUT_PULLUP); pinMode(LED, OUTPUT); pinMode(saftpumpe, OUTPUT); pinMode(alkoholpumpe, OUTPUT); Serial.begin(9600); mySoftwareSerial.begin(9600); myDFPlayer.begin(mySoftwareSerial); myDFPlayer.volume(28); myDFPlayer.setTimeOut(500); myDFPlayer.EQ(0);
}
2.: Start des Vorgangs
Das System überprüft kontinuierlich, ob der Startknopf gedrückt wurde. Um Fehlbedienungen oder versehentliches Auslösen durch kleine Störungen zu vermeiden, wird die Betätigung des Knopfes doppelt geprüft: Zunächst wird erkannt, ob der Knopf gedrückt wurde. Anschließend wird eine kurze Verzögerung eingefügt, bevor erneut überprüft wird, ob der Knopf noch immer gedrückt ist. Erst wenn beide Prüfungen positiv ausfallen, startet der Prozess.
Sobald der Knopf gedrückt wurde, gibt das System eine Sprachausgabe über den DFPlayer Mini aus, um den Benutzer darauf hinzuweisen, dass die Messung beginnt. Gleichzeitig wird eine Wartezeit von neun Sekunden eingehalten, da der MQ-3 Sensor einige Zeit benötigt, um eine stabile Messung des Alkoholgehalts durchzuführen. Während dieser Zeit bleibt das System inaktiv.
3.: Alkoholmessung
Nach der Wartezeit beginnt das System mit der Messung des Alkoholgehalts. Dazu wird die Funktion getalkohollevel() aufgerufen, die über eine Schleife fünf Messwerte aufnimmt. Um Messfehler zu minimieren, wird der höchste der fünf erfassten Werte als endgültiger Messwert ausgewählt.
Der Sensor gibt einen analogen Wert aus, der eine grobe Schätzung des Alkoholgehalts darstellt. Je höher der Wert, desto höher ist die gemessene Alkoholkonzentration. Dieser Wert wird in der seriellen Konsole ausgegeben, um den Messvorgang nachverfolgen zu können.
4.: Entscheidung über das Mischverhältnis
Basierend auf dem gemessenen Alkoholwert entscheidet das System, wie das Mischungsverhältnis zwischen Alkohol und Saft ausfallen soll. Es gibt drei mögliche Szenarien:
Niedrige Alkoholkonzentration (< 400):
Das Getränk wird mit einer hohen Menge Saft und wenig Alkohol gemischt.
Eine Sprachausgabe informiert den Benutzer über die „niedrige Mischung“.
Das Mischverhältnis beträgt 10,5 Sekunden Alkohol + 5,5 Sekunden Saft.
Mittlere Alkoholkonzentration (400 – 550):
Das Getränk enthält eine ausgewogene Mischung aus Saft und Alkohol.
Eine Sprachausgabe gibt die „mittlere Mischung“ aus.
Das Mischverhältnis beträgt 9 Sekunden Alkohol + 7 Sekunden Saft.
Hohe Alkoholkonzentration (> 550):
Das Getränk wird stärker gemischt, mit einem höheren Anteil an Alkohol.
Der Benutzer wird durch eine Sprachausgabe über die „starke Mischung“ informiert.
Das Mischverhältnis beträgt 6 Sekunden Alkohol + 10 Sekunden Saft.
Das gewählte Mischverhältnis wird anschließend an die Funktion mixDrink() übergeben, welche die Pumpensteuerung übernimmt.
5.: Steuerung der Pumpen zur Getränkeausgabe
In der Funktion mixDrink() werden die Pumpen für die jeweils berechneten Zeiträume aktiviert. Zunächst wird die Pumpe für den Alkohol aktiviert und bleibt für die vorgegebene Zeit eingeschaltet. Nach Ablauf der Zeit wird sie wieder deaktiviert. Anschließend wird die Pumpe für den Saft eingeschaltet, die ebenfalls für die vorgegebene Dauer aktiv bleibt.
Sobald beide Flüssigkeiten ausgegeben wurden, gibt das System eine weitere Sprachausgabe aus, die signalisiert, dass das Getränk fertig ist. Gleichzeitig wird eine entsprechende Nachricht in die serielle Konsole geschrieben.
Kompletter Programmcode:
Schwierigkeiten:
Eine der größten Schwierigkeiten war unser Zeitmanagement. Spätestens als wir 3 Wochen damit verbrachten unsere Box zu bauen merkten wir, dass es nicht ausreichen wird sich ein Mal pro Woche im Labor zu treffen. Deswegen haben wir entschieden uns regelmäßiger zu Treffen bevor das Labor schließt.
Wir haben auch grob Unterschätzt wie viel Arbeit hinter einem 3D-Druck tatsächlich hinter steckt. Man lädt nicht ein Modell einfach runter und druckt es aus. Wie man ein 3D-Modell bearbeitet, welche Druckeinstellungen man vornimmt, wie das Modell ausgerichtet sein muss, wie man die Datei so exportiert, dass der Drucker sie überhaupt erkennt, waren alles Sachen die wir von Grund auf lernen mussten.
Eine weitere Schwierigkeit entstand durch die Wahl unseres Behälters. Wir haben uns für 2L Tetra Paks entschieden. Sie hatten viel Volumen und ihre Deckel waren so groß, dass zwei Bohrlöcher problemlos rein passten um die Schläuche einzubauen. Es stellte sich heraus, dass die Tetra Paks nach einiger Zeit nicht mehr besonders luftdicht waren, besonders das linke Tetra Pak. Dadurch wurde das Verhältnis von dem Zeitraum, wie lang die Pumpen an waren, und der Menge an ausgepumpter Flüssigkeit inkonstant. Zum Beispiel musste die Pumpe des linken Tetra paks immer zwei Sekunden länger laufen, weil es schneller Luft verliert als das rechte. Wir sind zum Glück mit viel Trial und Error auf ein Ergebnis gekommen was zufriedenstellend ist.
Endstand:
Im Großen und Ganzen sind wir mit der Umsetzung des Projektes sehr zufrieden. Selbstverständlich gibt es Kleinigkeiten die man hätte besser machen können. Zum Beispiel hätte man einen lauteren Lautsprecher einbauen können oder eine Lösung finden können um mit nur einem Netzteil auszukommen und man hätte luftdichte Behälter benutzen können, aber letzten Endes funktioniert der Roboter und wir haben alles umgesetzt was wir uns vorgenommen haben.
Schaltung des gesamten Roboters:
Vorführung des Roboters:
Durchlauf im nüchternen zustand:
Durchlauf mit wenig getrunkenen Alkohol:
Durchlauf mit viel getrunkenen Alkohol: