Hallo liebe Community,
mein Name ist Marc und ich bin neu hier im Forum.
Nun zu meiner Frage.
Ich bin absoluter Programmieranfänger und habe nun seit 2 Tagen einen Raspberry Pi.
Seit demher beschäftige ich mich mit Python (Tag und Nacht ) und bin daran einen Automaten zu bauen, der meine Katze mit Trockenfutter versorgen soll. (Keine Sorge, sie bekommt zusätzlich Nassfutter, welches ich ihr persönlich füttere.)
Ein Programm dafür habe ich auch schon geschrieben. Es gibt zwar fertige im internet, diese erschienen mir aber alle zu mächtig. Und wer will denn schon mit Kanonen auf Spatzen schießen?!
Da ich aber bis auf ein kleines Blenderprojekt (Blender.org) bisher absolut null Erfahrungen mit Python hatte, wollte ich von euch Python erfahrenen Mitgliedern wissen, ob mein Programm bisher irgendwelche Logik/ Denkfehler beinhaltet, welche auf Dauer zum Abbruch des Programms führen würden.
Kurzer Text zur Hardware:
Ich habe einen Raspberry Pi, an dessen IO Ports ich: 1 LED, 1 Servo und einen Taster angelötet habe. (auf externer Platine.)
Beim Servo habe ich den Pott entfernt und den Positionierungsstift, damit dieser sich unendlich in eine Richtung drehen kann.
Der Taster ist direkt und ohne Widerstand zwischen einem GPIO und dem 3,3 Volt Anschluss einleitet.
Die Led (Weist, ca. 3 Volt) ist ebenfalls ohne Widerstand zwischen einem GPIO und einem GND Anschluss angelötet.
Der Servo ist mit + an 5V und mit - an GND sowie mit der weißen DATA Line(?) an einen GPIO Port gelötet, und ist mit einem Futterauswurf form- und kraftschlüssig verbunden.)
Das Programm soll folgendes können:
Sobald der Pi angeschlossen wird soll die weiße LED einmalig für 15 Sekunden leuchten, damit man ohne Betätigen des Knopfes sehen kann, ob das Programm nach dem Booten automatisch gestartet ist.
(Der Autostart läuft bisher prima.)
Danach soll sich der Servo um jeweils 180° nach links drehen, sobald:
Entweder der Knopf gedrückt wird, oder eine Zeitbedingung (05:30 Uhr und 16:15 Uhr) erfüllt ist.
Bisher lief das Programm bei allen Tests erfolgreich, und es gab keine Probleme.
Allerdings befürchte ich, dass mein Programm mangels Programmier-Kenntnis eventuell Fehler beinhaltet, die es zu einem späteren Zeitpunkt (Tests liefen immer nur 15 Minuten) zum Absturz bringen könnten.
Es wäre nett, wenn einer von euch mal 'drüberschauen' könnte, und mir sagen könnte, wo eventuell Optimierungsbedarf besteht.
Ich habe versucht, das Programm so übersichtlich wie möglich zu gestalten. falls es dennoch Unklarheiten gibt, beantworte ich gerne eure Fragen.
Gerne dürft ihr das Programm auch weiterverändert bzw. verwenden.
Anregungen für mein Projekt habe ich von 'Patrick Hener' erhalten, welcher sein Projekt gut dokumentiert hat. (Bei der Suchmaschine einfach "Katzenfütterautomat wenn die Katze zwei mal kratzt" eingeben. Ich weiß nämlich nicht ob Direktverlinkungen hier erlaubt sind.)
Dieser hat ein ähnliches Projekt umgesetzt, allerdings finde ich deCssen Programm etwas zu ausführlich.
# Catberry Pi by Marc Wucherer
# Imports
import RPi.GPIO as GPIO
import time
# IO Set
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(25, GPIO.OUT)
Servo = GPIO.PWM(18, 50)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
# Start LED (15 Sekunden)
LED = 0
if LED == 0:
GPIO.output(25, GPIO.HIGH)
time.sleep(15)
GPIO.output(25, GPIO.LOW)
LED = LED + 1
# Haupt Schleife
while True:
try:
# Knopf Check
if (GPIO.input(17) == 1):
time.sleep(1)
Servo.start(5)
time.sleep(.6)
Servo.stop()
# Zeit Check
if time.strftime("%H") == "05" and time.strftime("%M") == "30":
time.sleep(1)
Servo.start(5)
time.sleep(.6)
time.sleep(70)
# Zeit Check
if time.strftime("%H") == "16" and time.strftime("%M") == "15":
time.sleep(1)
Servo.start(5)
time.sleep(.3)
time.sleep(70)
# Servo anhalten
elif (GPIO.input(17) == 0):
Servo.stop()
except KeyboardInterrupt:
GPIO.cleanup()
Alles anzeigen
Dankeschön, schonmal im Voraus für eure Beiträge