Hallo Community,
Ich stell mein Code für mein Projekt hier rein. Könnt ihr da mal rüber schauen und mir schreiben, ob der so okay ist oder ob ich was verändern muss. Bin blutiger Anfänger und hab den Code aus vielen einzelnen Beispielen für mich so zusammengebaut.
Er soll Gesichtserkennung, Namen speichern, die Person wiedererkennen, ansprechen mit Namen, Speichern des Lieblingsgetränk, ein einfacher virtueller Barkeeper mit Emotionen, 2 10" Displays, Spracherkennung und Ausgabe, Vosk für offline Spracherkennung, Neopixel-Ring mit allgemeinen Effekten und speziell für den Mixvorgang, 1.Display ist der virtuelle Barkeeper, 2.Display Anzeige des Cocktails zum Mixen, gesprochene Anleitung für den Mixvorgang, Peltierelemen, BMP280 Kühlschranküberwachung auf dem 2. Display zusätzlich, Zusätzliche Zutaten einfügen.
Zukünftig soll noch eine Glaserkennung in die Ausgabe per Lichtschranke, Leerflaschenerkennung( Wie, weiß ich noch nicht), Statistik der Cocktailausgabe, Admin Menu zum einstellen, Reinigungsprogramm für die Pumpen, evtl.. mobile APP.
Hier der Code:
import cv2
import serial
import speech_recognition as sr
from gtts import gTTS
import playsound
import os
import pygame
import threading
import random
import time # Für eine kleine Pause nach der Sprachausgabe
from vosk import Model, KaldiRecognizer # Vosk importieren
import json
import Adafruit_DHT # Import für DHT-Sensor
import NeoPixel # Import für NeonPixel
import board # Import für Pin-Definitionen
# Initialisierung des DHT11-Sensors und NeonPixel
DHT_SENSOR = Adafruit_DHT.DHT11
DHT_PIN = 17 # GPIO-Pin für DHT-Sensor
NEON_PIN = 18 # GPIO-Pin für NeonPixel
NUM_PIXELS = 24 # Anzahl der Pixel im NeonRing
neon_pixels = NeoPixel(board.D18, NUM_PIXELS)
# Setup for NeoPixel
pixel_pin = board.D18 # Ändere den Pin nach deiner Konfiguration
num_pixels = 24 # Anzahl der Pixel im Ring
pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.5, auto_write=False)
def clear_pixels():
pixels.fill((0, 0, 0))
pixels.show()
# 1. Pulsierendes Licht
def pulsieren(farbe, geschwindigkeit=0.01, max_helligkeit=0.5):
for i in range(100):
helligkeit = max_helligkeit * (1 + math.sin(i * 0.1)) / 2
pixels.fill((int(farbe[0] * helligkeit), int(farbe[1] * helligkeit), int(farbe[2] * helligkeit)))
pixels.show()
time.sleep(geschwindigkeit)
# 2. Lauflicht (Theater Chase)
def theater_chase(farbe, geschwindigkeit=0.05):
for j in range(num_pixels):
for i in range(0, num_pixels, 3):
pixels[i] = farbe
pixels.show()
time.sleep(geschwindigkeit)
clear_pixels()
# 3. Regenbogeneffekt
def regenbogen(geschwindigkeit=0.01):
for j in range(256):
for i in range(num_pixels):
pixel_index = (i * 256 // num_pixels) + j
pixels[i] = farb_rainbow(pixel_index & 255)
pixels.show()
time.sleep(geschwindigkeit)
def farb_rainbow(pos):
if pos < 85:
return (pos * 3, 255 - pos * 3, 0)
elif pos < 170:
pos -= 85
return (255 - pos * 3, 0, pos * 3)
else:
pos -= 170
return (0, pos * 3, 255 - pos * 3)
# 4. Farbsprünge
def farbspruenge(farben, geschwindigkeit=0.2):
for _ in range(30):
pixels.fill(random.choice(farben))
pixels.show()
time.sleep(geschwindigkeit)
# 5. Meteor-Effekt
def meteor(farbe, geschwindigkeit=0.05, groesse=5, verfall=0.75):
for i in range(num_pixels * 2):
for j in range(num_pixels):
if i - j < groesse and i - j >= 0:
pixels[j] = [int(f * verfall) for f in farbe]
else:
pixels[j] = (0, 0, 0)
pixels.show()
time.sleep(geschwindigkeit)
# Farben, die du für den Effekt verwenden kannst
rot = (255, 0, 0)
gruen = (0, 255, 0)
blau = (0, 0, 255)
farben_liste = [rot, gruen, blau, (255, 255, 0), (0, 255, 255), (255, 0, 255)]
# Mix-Funktion
def mix_cocktail():
# Überprüfe, ob Glas vorhanden ist
if GPIO.input(GLASS_SENSOR_PIN) == GPIO.LOW: # Glas erkannt
print("Glas erkannt - Mixvorgang startet.")
set_neopixel_color(rot) # Rot für Mixvorgang
# Simuliere den Mixvorgang (z.B. 5 Sekunden)
time.sleep(5) # Ersetze dies durch die Logik für den realen Mixvorgang, z.B. Pumpe an
# Ende des Mixvorgangs
print("Mixvorgang beendet")
set_neopixel_color(gruen) # Grün für abgeschlossenen Mixvorgang
time.sleep(2) # Halte den grünen Zustand für 2 Sekunden
# Optional: Zurück zu einer Standard-Animation
clear_pixels()
# Sprachsteuerungsfunktion
def recognize_speech():
recognizer = sr.Recognizer()
mic = sr.Microphone()
with mic as source:
print("Warten auf Sprachbefehl...")
recognizer.adjust_for_ambient_noise(source) # Umgebungsgeräusche ausgleichen
audio = recognizer.listen(source) # Hört auf den Befehl
try:
# Spracherkennung durch Google API (Online)
command = recognizer.recognize_google(audio, language="de-DE")
print(f"Erkannter Befehl: {command}")
# Hier wird der erkannte Sprachbefehl überprüft
if "mischen" in command.lower():
mix_cocktail() # Mixvorgang starten bei „mischen“
elif "beenden" in command.lower():
clear_pixels() # LEDs ausschalten bei „beenden“
else:
print("Unbekannter Befehl.")
except sr.UnknownValueError:
print("Spracherkennung konnte den Befehl nicht verstehen.")
except sr.RequestError as e:
print(f"Fehler bei der Sprach-API: {e}")
try:
while True:
pulsieren(blau) # Pulsierendes Licht in Blau
theater_chase(rot) # Theater Chase mit rotem Licht
regenbogen() # Regenbogeneffekt
farbspruenge(farben_liste) # Farbsprünge mit verschiedenen Farben
meteor(gruen) # Meteor-Effekt in Grün
mixen() # Simulierter Mixvorgang
except KeyboardInterrupt:
clear_pixels()
try:
while True:
pulsieren(blau) # Pulsierendes Licht in Blau
theater_chase(rot) # Theater Chase mit rotem Licht
regenbogen() # Regenbogeneffekt
farbspruenge(farben_liste) # Farbsprünge mit verschiedenen Farben
meteor(gruen) # Meteor-Effekt in Grün
except KeyboardInterrupt:
clear_pixels()
# Cocktail Mapping
cocktail_mapping = {
"Wodka Sprite": (
"Wodka Sprite: Ein erfrischender Klassiker, der einfach aus Wodka und Sprite gemischt wird. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Wodka_Sprite.jpg"
),
"Blue Lagoon": (
"Blue Lagoon: Ein optisch ansprechender Cocktail, der durch blauen Curaçao seine charakteristische Farbe erhält. "
"Er wird mit Wodka, Limettensaft und Sprite gemischt. Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Blue_Lagoon.jpg"
),
"Cosmopolitan": (
"Cosmopolitan: Bekannt aus zahlreichen Filmen, ist dieser Cocktail säuerlich und fruchtig. "
"Er besteht in der Regel aus Wodka, Cranberry-Saft, Triple Sec und Limettensaft. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Cosmopolitan.jpg"
),
"Lemon Drop": (
"Lemon Drop: Süß-säuerlich und zitronig – so lässt sich der Lemon Drop am besten beschreiben. "
"Er wird aus Wodka und Zitronensaft hergestellt. Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Lemon_Drop.jpg"
),
"Blue Moon": (
"Blue Moon: Eine weitere blaue Variante, diesmal mit Vodka. "
"Er wird mit Vodka, Blue Curaçao und Limonaden gemischt. Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Blue_Moon.jpg"
),
"Blue Gin Moon": (
"Blue Moon: Eine weitere blaue Variante, diesmal mit Gin. "
"Er wird mit Gin, Blue Curaçao und Limonaden gemischt. Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Blue_Gin_Moon.jpg"
),
"Double Strike": (
"Double Strike: Ein kräftiger Cocktail, der durch die Kombination von Wodka und Tequila entsteht. "
"Cranberry-Saft rundet den Geschmack ab. Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Double_Strike.jpg"
),
"Tom Collins": (
"Tom Collins: Ein klassischer Gin-Cocktail, der mit Zitronensaft und Soda Wasser aufgegossen wird. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Tom_Collins.jpg"
),
"Flying Dutchman": (
"Flying Dutchman: Ein fruchtiger Cocktail mit Rum als Basis. "
"Ananas- und Orangensaft sorgen für eine tropische Note. Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Flying_Dutchman.jpg"
),
"London Cosmopolitan": (
"London Cosmopolitan: Eine Variante des Cosmopolitan, bei der Gin anstelle von Wodka verwendet wird. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/London_Cosmopolitan.jpg"
),
"Cranberry Gin": (
"Cranberry Gin: Einfach und erfrischend: Gin und Cranberry-Saft sind die Hauptbestandteile dieses Cocktails. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Cranberry_Gin.jpg"
),
"S.. on the Beach": (
"S.. on the Beach: Ein fruchtiger Cocktail mit Vodka, Maracujasaft, Cranberry-Saft und Orangensaft. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/S.._on_the_Beach.jpg"
),
"Mai Tai": (
"Mai Tai: Ein exotischer Cocktail mit Rum, Ananas- und Limettensaft. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Mai_Tai.jpg"
),
"Pina Colada": (
"Pina Colada: Cremig und tropisch: Rum und Ananassaft sind die Hauptzutaten. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Pina_Colada.jpg"
),
"Bahama Mama": (
"Bahama Mama: Ein weiterer tropischer Cocktail mit Rum, Ananas- und Orangensaft, Grenadine und Sprite. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Bahama_Mama.jpg"
),
"Planters Punch": (
"Planters Punch: Ein fruchtiger Cocktail mit Rum, Ananas- und Orangensaft, Grenadine. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Planters_Punch.jpg"
),
"Tequila Sunrise": (
"Tequila Sunrise: Optisch ein Hingucker: Tequila, Orangensaft und Grenadine bilden einen schönen Farbverlauf. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Tequila_Sunrise.jpg"
),
"Blue Hawaii": (
"Blue Hawaii: Ein weiterer tropischer Cocktail mit Rum, Blue Curaçao und Ananassaft. "
"Glas mit Eis und Sahne füllen und unter die Ausgabe stellen.",
"images/Blue_Hawaii.jpg"
),
"Beach Runner": (
"Beach Runner: Ähnlich wie der S.. on the Beach, aber mit Vodka und Gin. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Beach_Runner.jpg"
),
"Rainbow": (
"Rainbow: Ein bunter Cocktail mit Vodka, Blue Curaçao, Grenadine und Ananassaft. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Rainbow.jpg"
),
"Swimming Pool": (
"Swimming Pool: Ein erfrischender Cocktail mit Vodka und Blue Curaçao. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Swimming_Pool.jpg"
),
"Bacardi Cola": (
"Bacardi Cola: Einfache Mischung zum Trinken. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Bacardi_Cola.jpg"
),
"Weinbrand Cola": (
"Weinbrand Cola: Mischung zum Trinken. "
"Glas mit Eis füllen und unter die Ausgabe stellen.",
"images/Weinbrand_Cola.jpg"
)
}
user_data_file = "user_data.txt"
def load_user_data():
if os.path.exists(user_data_file):
with open(user_data_file, "r") as f:
return f.read().strip()
return None
def save_user_data(name, favorite_cocktail):
with open(user_data_file, "w") as f:
f.write(f"{name}:{favorite_cocktail}")
def speak(text):
tts = gTTS(text=text, lang='de')
tts.save("output.mp3")
playsound.playsound("output.mp3")
time.sleep(0.5) # Sicherstellen, dass die Datei nicht gelöscht wird, während sie abgespielt wird
os.remove("output.mp3")
def show_cocktail_info(screen, cocktail_name):
pygame.init()
screen.fill((255, 255, 255))
font = pygame.font.SysFont(None, 36)
cocktail_info, ingredients, image_path = cocktail_mapping[cocktail_name]
# Cocktailname anzeigen
name_surface = font.render(f"Cocktail: {cocktail_name}", True, (0, 0, 0))
screen.blit(name_surface, (20, 20))
# Zutaten anzeigen
y_offset = 80
for ingredient in ingredients:
ingredient_surface = font.render(f"- {ingredient}", True, (0, 0, 0))
screen.blit(ingredient_surface, (20, y_offset))
y_offset += 40
# Bild des Cocktails anzeigen
if os.path.exists(image_path):
cocktail_image = pygame.image.load(images)
cocktail_image = pygame.transform.scale(cocktail_image, (200, 200))
screen.blit(cocktail_image, (400, 50))
else:
print("Bilddatei nicht gefunden:", image_path)
pygame.display.flip()
def show_and_announce_cocktail(cocktail_name):
# Pygame-Display-Setup für den zweiten Bildschirm
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Cocktailanzeige")
# Zeige Cocktailinformationen und Zutaten auf dem Bildschirm
show_cocktail_info(screen, cocktail_name)
# Mixanleitung ausgeben
cocktail_info, ingredients, _ = cocktail_mapping[cocktail_name]
sprechen(f"{cocktail_name}: {cocktail_info}. Die Zutaten sind: {', '.join(ingredients)}. Viel Spaß beim Mixen!")
# Warte, um den Bildschirm für einige Sekunden anzuzeigen, bevor es beendet wird
time.sleep(5)
pygame.quit()
def vosk_recognize(audio_data):
model = Model("vosk-model-small-de-0.15")
rec = KaldiRecognizer(model, 16000)
if rec.AcceptWaveform(audio_data.get_wav_data()):
result = rec.Result()
result_dict = json.loads(result)
return result_dict.get('text', '')
return ""
def recognize_face():
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
recognized_name = None
smiling = False
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.putText(frame, "Gesicht erkannt", (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (36, 255, 12), 2)
recognized_name = get_user_name(frame)
smiling = True
cv2.imshow('Face Recognition', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
return recognized_name, smiling
def get_user_name(frame):
recognizer = sr.Recognizer()
mic = sr.Microphone()
with mic as source:
speak("Kann ich deinen Namen speichern?")
audio = recognizer.listen(source)
name = vosk_recognize(audio)
speak(f"Ich speichere deinen Namen: {name}. Was ist dein Lieblingscocktail?")
audio = recognizer.listen(source)
favorite_cocktail = vosk_recognize(audio)
save_user_data(name, favorite_cocktail)
return name, favorite_cocktail
def show_face(smiling=False, speaking=False):
pygame.init()
screen = pygame.display.set_mode((400, 300))
pygame.display.set_caption("Gesichtsanzeige")
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
return
screen.fill(WHITE)
if smiling:
pygame.draw.circle(screen, GREEN, (200, 150), 50) # Lächelndes Gesicht
else:
pygame.draw.circle(screen, BLACK, (200, 150), 50) # Neutral
pygame.display.flip()
def voice_control(user_name):
recognizer = sr.Recognizer()
mic = sr.Microphone()
while True:
with mic as source:
audio = recognizer.listen(source)
try:
speech = recognizer.recognize_google(audio, language="de-DE")
if "barkeeper" in speech.lower():
speak(f"Hallo {user_name}, wie kann ich dir helfen?")
audio = recognizer.listen(source)
cocktail_name = recognizer.recognize_google(audio, language="de-DE").strip()
# Mundbewegung während des Sprechens aktivieren
show_face_thread = threading.Thread(target=show_face, args=(False, True))
show_face_thread.start()
# Finde die zugehörige Anleitung
if cocktail_name in cocktail_mapping:
instructions = cocktail_mapping[cocktail_name]
# Anleitung vor dem Cocktail
speak(instructions)
# Frage, ob der Cocktail gemacht werden soll
speak("Soll ich dir den Cocktail machen?")
audio = recognizer.listen(source)
confirm = recognizer.recognize_google(audio, language="de-DE").strip()
if "ja" in confirm.lower():
dispense_drink(cocktail_name) # Getränk einfüllen
else:
speak("Okay, ich mache nichts.")
else:
speak("Das tut mir leid, ich kenne diesen Cocktail nicht.")
# Mundbewegung beenden
show_face_thread.join()
show_face(smiling=False)
except sr.UnknownValueError:
continue
except sr.RequestError:
speak("Entschuldigung, es gab ein Problem mit der Spracherkennung.")
def show_virtual_bartender(smiling=False):
pygame.init()
# Erstes Display (für virtuellen Barkeeper)
screen1 = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Virtueller Barkeeper")
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
return
screen1.fill(WHITE)
if smiling:
pygame.draw.circle(screen1, GREEN, (400, 300), 50) # Lächelndes Gesicht
else:
pygame.draw.circle(screen1, (0, 0, 0), (400, 300), 50) # Neutral
pygame.display.flip()
def show_cocktail_info(cocktail_name):
pygame.init()
# Zweites Display (für Cocktailinformation)
screen2 = pygame.display.set_mode((800, 600), pygame.NOFRAME | pygame.RESIZABLE, 1)
pygame.display.set_caption("Cocktail Anzeige")
cocktail_info, cocktail_image = cocktail_mapping[cocktail_name]
cocktail_image_surface = pygame.image.load(cocktail_image)
WHITE = (255, 255, 255)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
return
screen2.fill(WHITE)
# Zeige das Cocktailbild
screen2.blit(cocktail_image_surface, (0, 0))
# Textbeschreibung des Cocktails
font = pygame.font.SysFont(None, 36)
text_surface = font.render(cocktail_info, True, (0, 0, 0))
screen2.blit(text_surface, (20, 400))
pygame.display.flip()
def ask_to_mix_cocktail(cocktail_name):
recognizer = sr.Recognizer()
mic = sr.Microphone()
with mic as source:
speak(f"Soll ich deinen Lieblingscocktail, {cocktail_name}, zubereiten? Sage 'ja' oder 'nein'.")
audio = recognizer.listen(source)
response = vosk_recognize(audio).lower()
if "ja" in response:
return True
elif "nein" in response:
speak("Okay, ich werde keinen Cocktail zubereiten.")
return False
else:
speak("Ich habe dich nicht verstanden. Bitte versuche es erneut.")
return ask_to_mix_cocktail(cocktail_name)
def mix_cocktail(cocktail_name, ingredients):
ingredients = {
"Wodka": 2, # (Relais-Nummer)
"Sprite": 3,
"Cranberry-Saft": 4,
"Limettensaft": 5,
"Ananassaft": 6,
"Orangensaft": 7,
"Blue Curaçao": 8,
"Tequila": 9,
"Rum": 10,
"Gin": 11,
"Grenadine": 12,
"Triple Sec": 13,
"Maracujasaft": 14,
"Grenadine": 15,
# Überprüfe, ob Glas vorhanden ist
if GPIO.input(GLASS_SENSOR_PIN) == GPIO.LOW: # Glas erkannt
print("Glas erkannt - Mixvorgang startet.")
set_neopixel_color(rot) # Rot für Mixvorgang
# Schalte die Relais für die Zutaten ein und steuere die Zeit
for ingredient, duration in cocktail_ingredients[cocktail_name]:
relay_number, time_duration = ingredients[ingredient]
print(f"Schalte Relais {relay_number} für {ingredient} ein.")
time.sleep(time_duration) # Wartezeit für das Relais
print(f"Schalte Relais {relay_number} für {ingredient} aus.")
# Ende des Mixvorgangs
print("Mixvorgang beendet")
set_neopixel_color(gruen) # Grün für abgeschlossenen Mixvorgang
time.sleep(2) # Halte den grünen Zustand für 2 Sekunden
# Optional: Zurück zu einer Standard-Animation
clear_pixels()
}
cocktail_ingredients = {
"Wodka Sprite": [("Wodka", 2), ("Sprite", 1)],
"Blue Lagoon": [("Wodka", 2), ("Blue Curaçao", 2), ("Limettensaft", 2), ("Sprite", 1)],
"Cosmopolitan": [("Wodka", 2), ("Cranberry-Saft", 2), ("Limettensaft", 1)],
"Lemon Drop": [("Wodka", 2), ("Zitronensaft", 1)],
"Blue Moon": [("Wodka", 2), ("Blue Curaçao", 2), ("Sprite", 1)],
"Blue Gin Moon": [("Gin", 2), ("Blue Curaçao", 2), ("Sprite", 1)],
"Double Strike": [("Wodka", 2), ("Tequila", 1), ("Cranberry-Saft", 2)],
"Tom Collins": [("Gin", 2), ("Zitronensaft", 1), ("Soda Wasser", 1)],
"Flying Dutchman": [("Rum", 2), ("Ananassaft", 2), ("Orangensaft", 1)],
"London Cosmopolitan": [("Gin", 2), ("Cranberry-Saft", 2)],
"Cranberry Gin": [("Gin", 2), ("Cranberry-Saft", 2)],
"S.. on the Beach": [("Wodka", 2), ("Maracujasaft", 2), ("Cranberry-Saft", 2), ("Orangensaft", 2)],
"Mai Tai": [("Rum", 2), ("Ananassaft", 2)],
"Pina Colada": [("Rum", 2), ("Ananassaft", 2)],
"Bahama Mama": [("Rum", 2), ("Ananassaft", 2), ("Orangensaft", 2), ("Grenadine", 1)],
"Planters Punch": [("Rum", 2), ("Ananassaft", 2), ("Orangensaft", 2)],
"Tequila Sunrise": [("Tequila", 1), ("Orangensaft", 2), ("Grenadine", 1)],
"Blue Hawaii": [("Rum", 2), ("Blue Curaçao", 2), ("Ananassaft", 2)],
"Beach Runner": [("Wodka", 2), ("Gin", 2)],
"Rainbow": [("Wodka", 2), ("Blue Curaçao", 2), ("Ananassaft", 2)],
"Swimming Pool": [("Wodka", 2), ("Blue Curaçao", 2)],
"Bacardi Cola": [("Bacardi", 1), ("Cola", 1)],
"Weinbrand Cola": [("Weinbrand", 1), ("Cola", 1)]
}
def add_ingredient():
additional_ingredients = []
speak("Möchten Sie eine zusätzliche Zutat hinzufügen? Sagen Sie 'ja' oder 'nein'.")
response = listen_for_response()
while response.lower() == 'ja':
speak("Bitte nennen Sie die Zutat.")
ingredient = listen_for_response()
if ingredient:
additional_ingredients.append(ingredient)
speak(f"Die Zutat {ingredient} wurde hinzugefügt.")
speak("Möchten Sie eine weitere Zutat hinzufügen? Sagen Sie 'ja' oder 'nein'.")
response = listen_for_response()
return additional_ingredients
# Schalte die Relais für die Zutaten ein und steuere die Zeit
for ingredient, duration in cocktail_ingredients[cocktail_name]:
relay_number, time_duration = ingredients[ingredient]
print(f"Schalte Relais {relay_number} für {ingredient} ein.")
time.sleep(time_duration) # Wartezeit für das Relais
print(f"Schalte Relais {relay_number} für {ingredient} aus.")
def display_environment_data(screen):
while True:
humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
if humidity is not None and temperature is not None:
display_text = f"Temperatur: {temperature}°C, Luftfeuchtigkeit: {humidity}%"
print(display_text) # Text in der Konsole ausgeben
else:
print("Fehler beim Auslesen des DHT-Sensors")
time.sleep(2) # Daten alle 2 Sekunden aktualisieren
def listen_for_response():
r = sr.Recognizer()
with sr.Microphone() as source:
r.adjust_for_ambient_noise(source)
audio = r.listen(source)
try:
response = vosk_recognize(audio)
print("Erkannte Antwort:", response) # Anzeige der erkannten Antwort in der Konsole
return response
except Exception as e:
print("Fehler bei der Spracherkennung:", str(e))
return ""
def main():
user_data = load_user_data()
if user_data:
name, favorite_cocktail = user_data.split(":")
speak(f"Willkommen zurück, {name}. Dein Lieblingscocktail ist {favorite_cocktail}.")
else:
name = "Gast"
favorite_cocktail = None
recognized_name, smiling = recognize_face()
show_face(smiling, speaking=False)
# Cocktail zubereiten
if favorite_cocktail:
if ask_to_mix_cocktail(favorite_cocktail):
mix_cocktail(favorite_cocktail)
if __name__ == "__main__":
show_and_announce_cocktail("Blue Lagoon")
main()
Display More
Für eure Hilfe bin ich dankbar und schätze es sehr.
Gruß Referent
PS: wie kriege ich den Code in die Klammer? erledigt, danke.