PetSafe Futterstation steuern? [Verkabelung?]

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hi zusammen

    Für meine Katze habe ich folgende automatische Futterstation im Einsatz:
    41iXWZ1eDYL._SY300_.jpg&sa=X&ei=kdtpVbnGN8aMsAGK04HoBg&ved=0CAUQ8wc&usg=AFQjCNHQSwyolZVhxljvcDH_EwsJuvalHw

    Link: http://www.amazon.de/PetSafe-PFD11-13707-Futterreservoir-5-Mahlzeiten/dp/B000GEWHNS/ref=sr_1_1?ie=UTF8&qid=1433000742&sr=8-1&keywords=PetSafe+Futterreservoir+5+Mahlzeiten&tag=psblog-21 [Anzeige]

    Funktionsweise: Zu programmierbaren Tageszeiten dreht sich die Futterdrehscheibe jeweils um eine Position weiter. (simple :) )

    Leider lässt sich die Futterstation nur sehr grob programmieren, daher würde ich gerne die Steuerung durch den Pi vornehmen. (später durch ein Webinterface)

    Problematisch sind dabei aber meine nicht vorhandenen Elektronikkenntnisse ;)

    Meine Vorstellung:
    Der Knopf auf der rechten Seite lässt die Futterdrehscheibe um einen Slot weiter drehen. Ich hoffe nun das es möglich ist, diesen Knopfdruckimpuls durch den GPIO des Pi's zu geben.
    bcd24b0bd3a4.jpg

    Das Board auf der rechten Seite ist für die Knöpfe zuständig:

    Hier sieht man dieses board von beiden Seiten:

    Meine Frage ist nun, wie die Verkabelung am GPIO aussehen könnte oder/und ob dies überhaupt möglich ist?

    Vielen Dank!

    Einmal editiert, zuletzt von chaosbanane (30. Mai 2015 um 18:03)

  • Abgesehen davon, dass wenn man ein Haustier hat, es mit der Hand füttern sollte und wenn man dazu keine Zeit hat sich keins anschaffen sollte, geht das natürlich. Erst mal rausfinden, ob der Schalter gegen Masse oder +Vcc schaltet. Dann einen entsprechenden Transistor nehmen und den Schalter überbrücken. Ich würde den GPIO nicht direkt Nutzen, sonder damit die Transistorstufe ansteuern. Wenn Du es grober magst geht das auch mit Relais.

  • Danke für deine Antwort!

    Zitat

    ob der Schalter gegen Masse oder +Vcc schaltet


    Wenn ich das Multimeter wie folgt an die untere und obere Leitung halte, bekomme ich einen positiven Messwert (0.05V). Was wäre aber nun die Antwort auf diese Frage? :)

    Ich habe einen BC547A Transistor gefunden den ich dafür hernehmen könnte. Spricht da etwas dagegen? http://www.arduino.cc/documents/datasheets/BC547.pdf
    Der BC547A ist ein NPN Transistor, also es fließt Strom von Collector (+) zum Emitter (-), wenn der Strom an der Basis größer ist als 0,05V?

    Was würde ich dann an der Basis anlegen? Hier ist wieder relevant ob es gegen Masse oder +Vcc schaltet?

    Danke für die Hilfe!

    Einmal editiert, zuletzt von chaosbanane (31. Mai 2015 um 16:09)

  • Bin mir nicht sicher, aber ich glaube das bei dieser Art von Tastern ein kleiner Ferritkern über die Leiterbahn gedrückt wird und dies von der Elektronik erkannt wird.

    Mit anderen Worten ist das kein herkömmlicher Taster.

    Du kannst das natürlich testen, indem Du die Leiterbahnen kurz schließt. Aber Vorsicht, da kann dann auch etwas kaputt gehen, wenn es kein herkömmlicher Taster ist.

    Wenn es ein ordinärer Taster ist, würde ich ein Relais mit Optokoppler als feuriges Modul nehmen. Da hast Du für ein paar Euro die wenigste Arbeit.

    Kabel musst Du ja auf jeden Fall anlöten.

  • Hi,

    bei einem bipolaren Transistor wie dem BC547 könntest Du den 5 V Pin des Pi's nutzen, das hätte den Vorteil dass Du weit mehr mA zur Verfügung hast, und der 5 V Pin nicht direkt mit dem Mikrocontroller verbunden ist und dadurch weniger Schaden im Falle eines Fehlers anrichten könnte.

    Der Strom vom GPIO an der Basis wird mit einem Wiederstand versehen und bestimmt den Öffnungsgrad der Collector-Emitterstrecke. Der Basisstrom ist dafür also ausschlaggebend, ein zu hoher könnte den Pi zerstören, ein zu niedriger öffnet den Transistor nicht vollständig.

    Mfg,
    sls

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • Danke für die Warnung. Ich habe bereits den Test gemacht und die Leiterbahnen verbunden. Es funktioniert soweit ich das sehe gut. Die Funktion wird ausgelöst und auch das Event beim "draufbleiben" wird korrekt akzeptiert.

    So sieht die unterseite des Gummitasters aus:

    Offenbar ist die unterseite der Stifte Leitfähig.

  • Das mit dem Feritkern ist Quatsch, i.d.R. ist es ein Leitgummi der die Kontakte überbrückt. Es geht vermutlich auch etwas einfacher, als die Kontakte zu überbrücken. Ich vermute mal, das es sich bei der Schaltuhr um ein irgendeine Standard Schaltuhr handelt, welche 2 Schaltausgänge hat (OUT1 & OUT2). Die Uhr gibt dann ein Schaltsignal am Ausgang aus u. wird damit vermutlich einen Motor o. Relais schalten.


  • bei einem bipolaren Transistor wie dem BC547 könntest Du den 5 V Pin des Pi's nutzen, das hätte den Vorteil dass Du weit mehr mA zur Verfügung hast, und der 5 V Pin nicht direkt mit dem Mikrocontroller verbunden ist und dadurch weniger Schaden im Falle eines Fehlers anrichten könnte.

    Der Strom vom GPIO an der Basis wird mit einem Wiederstand versehen und bestimmt den Öffnungsgrad der Collector-Emitterstrecke. Der Basisstrom ist dafür also ausschlaggebend, ein zu hoher könnte den Pi zerstören, ein zu niedriger öffnet den Transistor nicht vollständig.

    Meine Erwartung war, Emitter und Collector überbrücken den Taster und an der Basis wird ein Steuerbarer GPIO Pin angeschlossen. Der 5V Pin wäre doch immer an, oder? Was wird an der Basis angeschlossen, Masse oder V? :blush:


    ... Ich vermute mal, das es sich bei der Schaltuhr um ein irgendeine Standard Schaltuhr handelt, welche 2 Schaltausgänge hat (OUT1 & OUT2). Die Uhr gibt dann ein Schaltsignal am Ausgang aus u. wird damit vermutlich einen Motor o. Relais schalten.

    Tatsächlich gibt es diese beiden Ausgänge auf der Platine. (siehe https://www.forum-raspberrypi.de/attachment.php?aid=6476)
    OUT1 wird offenbar nicht genutzt, da keine Kabelverbindung mit diesem Anschluss hergestellt wird. OUT2 ist aber mit dem anderen Board verbunden, an dem auch der Motor angeschlossen ist (mit PWR auf dem anderen Board gekennzeichnet). (siehe https://www.forum-raspberrypi.de/attachment.php?aid=6477)

    Wie kann ich prüfen wie dieses Signal aussehen sollte, bzw wie kann ich deinen interessanten Tipp nutzen? :helpnew:

    Einmal editiert, zuletzt von chaosbanane (31. Mai 2015 um 00:54)


  • Wie kann ich prüfen wie dieses Signal aussehen sollte, bzw wie kann ich deinen interessanten Tipp nutzen? :helpnew:

    Wenn es dir möglich ist, dann mach mal ein Foto von der Vor- / Rückseite der Platine mit der Motor o. Relaissteuerung. Ich vermute mal, dass der Timer mit einer anderen Spannung (1,5V o. 3V) als der Rest der Schaltung läuft. Auf der Uhr sind ja schon 3 Schalttransistoren verbaut. Die Frage ist nun, ob mit diesen schon ein Relais o. der Motor geschaltet wird, oder ob damit die Schaltspannung der Uhr erhöht wird. Interessant wäre noch zu wissen, mit welcher Spannung die Uhr und der Rest der Schaltung läuft und wie lange das Schaltsignal am Ausgang der Uhr anliegt. Mit einem Messgerät könnte man dies rausbekommen.

  • So sieht die Verkabelung zum Motor aus:

    Der Output der 4 Mono (D)-Batterien ist 6,18V (neue Batterien):

    An der Uhrplatine liegen hier 1,5V an:

    Die Hauptplatine:

    Der OUT2 von der Display Platine ist das blaue Kabel.
    Übrigends: Komisch das der Anschluss neben OUT2 an der Oberseite DAT1 und an der Unterseite BAT1 heißt.

    Wenn ich das Messgerät an BAT1 respektive DAT1 und OUT2 halte, messe ich stabile 3,55V. Wenn ich nun den Schalter gedrückt halte (nur beim drücken ist der Ausschlag zu schnell für mein Messgerät), liegen an BAT1/DAT1 und OUT2 -1,40V an. (macht das Sinn?)

    Wenn die Uhr das Signal auslöst, sieht man die V Messung gleichermaßen Richtung 0 absacken aber der Wert steigt gleich wieder an. Ich nehme aber mal an das er ebenfalls auf -1,40V gefallen wäre. (Mein billiges Messgerät kann da leider nicht mehr Infos geben). Da man den Knopf aber auch gedrückt halten kann (eine Funktion zum löschen nach 10 Sek, glaub ich) ist die Impulsdauer wohl nicht so entscheidend.

    Wie kann ich dieses Schaltverhalten nun nachstellen?

    Einmal editiert, zuletzt von chaosbanane (31. Mai 2015 um 12:21)

  • Bei der unterschiedlichen Bezeichnung würde ich einen Druckfehler unterstellen. Wichtig ist bei allen Spannungsmessungen, diese gegen GND zu messen.

    GND -> VDC = 1,5v
    GND -> OUT2 =
    GND -> BAT1 =

    Und dann am Besten nochmal, wenn Du den Taster schaltest,

    GND -> VDC =
    GND -> OUT2 =
    GND -> BAT1 =

    Was mich noch etwas verwirrt ist, warum die Versorgungsspannung des Timer doppelt zu diesem geht. Das Teil läuft doch nur mit Batterie, oder irre ich mich? Auf dem main_bord Foto sieht es so aus, als ob + mit PWR gebrückt ist und auf dem Foto der Uhr sind beide Spannungen (VDC & BAT1 ) mit 2 Dioden zusammen geschaltet. Da Du vermutlich keinen Schaltplan von dem Teil hast, wäre es nicht schlecht, wenn Du noch die Bezeichnungen von den Bauteilen: U2 (Spannungsregler ?), U3 (N555, ATiny o. Pic ?), Q2, Q3, Q4 und Q1, Q2 & Q3 der Timerplatine schreiben könntest.

  • Oh, ok! Dann wir noch mal gemessen:

    GND -> VDC = 1,5V
    GND -> OUT2 = 5V
    GND -> BAT1 = 1,5V

    Wenn der Taster gedrückt wird:

    GND -> VDC = 1,5V (minimale Schwankung von ~0,02V )
    GND -> OUT2 = 0,08V (bei gedrücktem Schalter)
    GND -> BAT1 = 1,5V

    Sprich es ändert sich nur der GND -> OUT2 Wert von 5V auf 0,08V.

    Einen Schaltplan habe ich leider nicht aber ich streng mal meine Augen an (leider sehr schwer zu entziffern, weil die Bauteile mit irgend einer Isolation oder dergleichen überzogen sind):

    Main board:
    Q2 = ST2N | 2907A | M6 C(?)
    Q3 = ST2N | 3904 | M6
    Q4 = S8050 | D-E26

    U2 = S817 | B15A | C334
    U3: http://pdf.datasheetcatalog.net/datasheets2/16/1643295_1.pdf

    Timerplatine:
    Leider haben Q1, Q2, Q3 keinen Aufdruck, oder dieser ist zu kein um ihn zu erkennen

    Ja das Teil läuft ausschließlich mit den Mono Batterien. Netzteilbetrieb ist nicht möglich.

    Ich hoffe das hilft dir :danke_ATDE:

    Einmal editiert, zuletzt von chaosbanane (31. Mai 2015 um 15:56)

  • Wie es aussieht schaltet der Timer den OUT2 Pin auf GND, womit vermutlich dann der Rest der Schaltung in Gang gesetzt wird. Da es ziemlich aufwändig ist, einen Schaltplan anhand der bestückten Platine zu erstellen, würde ich mal versuchen was passiert, wenn man den OUT2 Pin manuell an GND schaltet. Damit dadurch kein Schaden im Fehlerfall an der Schaltung entstehen kann, würde ich dies aber ersteinmal mit einen Widerstand ( ca. 0,2 - 1KOhm) oder einer kleinen Glühlampe testen. Falls der Widerstand heiß wird o. die Lampe leuchtet, war der Test nicht erfolgreich. Falls der Test erfolgreich ist, müsste man sich überlegen wie man das Ganze dann mit dem RPi umsetzt.

  • Code
    [...] würde ich mal versuchen was passiert, wenn man den OUT2 Pin manuell an GND schaltet. [...]


    Nur damit ich das richtig verstehe, OUT2 und GND mit dem Widerstand direkt verbinden? (Entschuldigung das ich nachfragen muss)

  • Ja, diese Vorsichtsmaßnahme soll verhindern, dass im Fehlerfall ( Kurzschluß ) der Stromfluß zwischen dem OUT2 Pin und der Masse zu groß wird. Dafür nimmt man einen Widerstand oder ein kleines Glühlämpchen. Dabei gilt, je höher der Widerstand ist, desto kleiner ist auch der Strom der fließen kann u. umso besser ist dies für deine Schaltung. ( Deshalb würde ich auch den Widerstand einem Glühlämpchen vorziehen, da diese meist einen sehr geringen Widerstand (< 10 Ohm) hat.) Du kannst es auch gerne mit einem größeren Widerstand, als ich vorgeschlagen habe probieren. Wenn der Wert aber zu hoch ist, wird es vermutl. nicht funktionieren. Das Ziel muß sein, die Spannung des OUT2 Pin mit einem möglichst großen Widerstand, gegen 0V zu bekommen.

  • Verstanden, vielen Dank!

    Ich habe einen 1KOhm Widerstand zum überbrücken verwendet.
    Der Impuls wird beim verbinden ausgelöst. Juhu! :thumbs1:
    Ich konnte nicht feststellen, dass der Widerstand heiß wurde. (zumindest nicht innnerhalb von ~5 sekunden)
    Wenn ich an den beiden Enden des Widerstandes messe, erhalte ich 0,1V als Ergebnis wenn die Verbindung hergestellt ist.

    Das Event beim "gedrückt halten" des Knopfes wird nicht ausgelöst, was aber auch absolut egal wäre. Dies wird dann vermutlich von der Uhr oder einem anderen Microcontroller registriert.

    Ich hoffe jetzt kommt nicht erst der schwierige Teil :)

    Was ich da hätte (aber sonst natürlich auch kein Problem wenn ein anderes Bauteil mehr Sinn macht):
    Diesen NPN Transistor: BC547A - http://www.arduino.cc/documents/datasheets/BC547.pdf
    Diesen MOSFET: IRF540N - http://pdf.datasheetcatalog.com/datasheet/fairchild/IRF540N.pdf

    Wäre der MOSFET hier nicht nützlich? Soweit ich verstanden habe wäre das ein steuerbarer Widerstand.
    Ich rate mal ins absolut Blaue: Kann man vielleicht OUT2 an den "Drain", GND an den "Source" Pin des MOSFET anschließen und mittels GPIO pin (?) das "Gate" des MOSFET's ansteuern? Bei 5V am MOSFET wäre der Wiederstand 0 und sobald der GPIO Pin ausgeschalten wird erhöht sich der Widerstand und löst das Event aus. (aber wie die nötigen Widerstände aussehen, kann ich mir dann wiederum nicht vorstellen)

    Einmal editiert, zuletzt von chaosbanane (1. Juni 2015 um 20:56)

  • Freud mich, dass es geklappt hat. Es wäre noch interessant zu wissen, wie groß der Strom ist, der beim Brücken des OUT2 Pins mit GND, durch den Widerstand fließt, evtl. gibt es da noch etwas zu optimieren. Alternativ kannst Du es auch noch mit größeren Widerstandswerten (<= 10k) probieren. Ziel ist es, evtl. noch den Stromfluß etwas zu verringern.


    ... Das Event beim "gedrückt halten" des Knopfes wird nicht ausgelöst, was aber auch absolut egal wäre. Dies wird dann vermutlich von der Uhr oder einem anderen Microcontroller registriert.

    Das kann nicht gehen, da der Timer von dieser Aktion ja nichts mit bekommt. Der einfachste Weg das Ganze mit dem RPi zu steuern wäre m.M. nach, den GND vom RPi mit dem GND der Futterbox verbinden, dann den Widerstand mit dem OUT2 Pin verbinden, der andere Anschluß des Widerstand kommt an den Kollektor des NPN Transistors, der Emitter kommt an GND. An die Basis des Transistors kommt dann noch ein 1k Vorwiderstand, der mit einem GPIO Port des RPi verbunden wird.

  • Hier noch mal die Ergebnisse mit anderen Widerständen:
    330 KOhm = ~5V | 0,02A (Event löst nicht mehr aus)
    10 KOhm = 0,9V | 0,09A (Event löst noch problemlos aus)
    2,2 KOhm = 0,23V | 0,11A
    1 KOhm = 0,1V | ...
    220 KOhm = 0,23V | ...

    Zwischen 10KOhm und 330KOhm habe ich leider keinen zur Hand.
    10KOhm wäre aber dann wohl die beste Wahl, richtig?
    Wenn ich zwischen GND und OUT2 ohne Widerstände bei betätigten Taster jedoch 0,08V messe, dann entspricht der verbaute Widerstand etwa 1KOhm, macht das Sinn?

    Code
    Der einfachste Weg das Ganze mit dem RPi zu steuern wäre m.M. nach, den GND vom RPi mit dem GND der Futterbox verbinden, dann den Widerstand mit dem OUT2 Pin verbinden, der andere Anschluß des Widerstand kommt an den Kollektor des NPN Transistors, der Emitter kommt an GND. An die Basis des Transistors kommt dann noch ein 1k Vorwiderstand, der mit einem GPIO Port des RPi verbunden wird.

    Bleiben die Leitungen zur Hauptplatine bestehen (GND)? Gibt es einen GPIO Pin der besser oder schlechter geeignet ist?

    Ist das so korrekt?

    Einmal editiert, zuletzt von chaosbanane (2. Juni 2015 um 00:52)

  • Ja, 10 KOhm ist ein guter Wert, mit einem Strom von 9mA sollte es eigendlich keine Probleme geben, zumal Du ja nur einen kurzen Impuls brauchst. Wenn es Probleme geben sollte, kann man auch einen etwas geringeren Widerstand verwenden. Falls Du den Timer parallel zur RPi Steuerung betreiben willst ( dass wäre auf jedenfall sicherer, solange Du noch keine Erfahrungen zum stabilen Betrieb deiner Software mit dem RPi hast, denn im Fehlerfall bekommt dein Haustier kein Futter !!! ) bleiben alle Kabel so angeschlossen, wie sie es jetzt sind. Falls später alles sehr zuverlässig läuft, könnte man auch auf den Timer verzichten und alles direkt an das Mainboard anschließen. Den GND des RPi u. vom Transistor kannst Du direkt an die 3 freien Lötpins (oberhalb des GND Pin ) auf der Timerplatine löten. Mit diesen Fritzdingszeichnungen habe ich nicht viel am Hut, aber außer dem falschen Transistor ( NPN statt PNP ), sollte es soweit passen. Gegen GPIO 25 spricht eigendlich nichts, wenn Du diesen noch nicht für etwas anderes benutzt. Um zu Testen, ob die Hardwaresteuerung richtig funktioniert, kannst Du den Vorwiderstand des Transistors an den 3,3V Pin des RPi halten, dann sollte sich die Futterschale in Bewegung setzen.

    Einmal editiert, zuletzt von Fliegenhals (2. Juni 2015 um 01:56)

  • Endlich habe ich die Zeit gefunden deine Hilfe umzusetzen :P

    Leider scheint etwas nicht zu funktionieren.

    Ohne das grüne Kabel und ohne dem 4,7KOhm Widerstand (dachte der 10KOhm Widerstand würde Probleme machen)
    GND -> VDC = 1,5V
    GND -> OUT2 = 5V
    GND -> BAT1 = 1,5V

    Mit dem grünen Kabel angeschlossen und mit 4,7KOhm Widerstand zwischen geschalten
    GND -> VDC = 1,5V
    GND -> OUT2 = 0,5V
    GND -> BAT1 = 1,5V

    Wenn das grüne Kabel angeschlossen ist, dann löst das Event nicht aus. Der original Taster erfasst zwar das "gedrückt halten" Event, lässt aber nicht die Futterschale rotieren. Wenn ich den Transistor mit dem GND vom Raspberry und dem 3,3V Pin anschließe passiert leider auch nichts.

    Schließe ich das grüne Kabel ab, läuft alles wieder wie zu Beginn, der Taster löst das Event aus.

    In dem Moment, an dem ich das grüne Kabel anschließe, löst das Event wie gewünscht aus - danach aber leider nicht mehr.

    Zuvor war der Unterschied zwischen Taster betätigen und Ausgangswert viel größer, nämlich 5V bei ungedrücktem Zustand und 0,08V bei gedrücktem Zustand. Jetzt liegen ja scheinbar immer nur noch 0,5V an durch den Widerstand. Kann es sein, dass der Unterschied zu klein ist und dieser nicht mehr als Impuls wargenommen wird? Muss man doch einen kleineren Widerstand verwenden?

    Oder ist vielleicht der Transistor kaputt gegangen? Sollten da überhaupt 0,5V statt 5V anliegen? Sollte der Transistor nicht komplett sperren und der Widerstand würde nur effektiv werden, wenn der Transistor auf macht?

    Idee?

    Einmal editiert, zuletzt von chaosbanane (11. Juni 2015 um 09:39)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!