Katzenklo mit NANO, LED, PIR & Servo

Hallo, ich bin am verzweifeln, mir drängt die Zeit und ich brauche dringend eine automatische Spülung für den Toilettenkasten. Der Grund ist, meine Katze geht auf mein WC, ist in der heutigen Zeit nichts ungewöhnliches mehr. Leider sagt sie mir nicht wann sie hingeht und wann sie fertig ist, und wenn das tolle Gewerk in der Toilette verweilt dann wirds ganz schön hart :slight_smile: . Aus diesem Grund möchte ich gerne ein Gehäuse 3D drucken wo ein Arduino Nano, ein Pir Sensor und ein 20kg digital Servo drin sind.

Das Gehäuse, die Mechanik und die Verdrahtung bekomm ich spielend hin, nur der Code ist mir zu kompliziert.

Ich möchte nicht wie überall beschrieben das sich das servo bewegt wenn Bewegung erkannt wurde, sondern ich möchte das sich das Servo um 180° bewegt nachdem eine Bewegung erkannt wurde, am besten mit einer Verzögerung.

Also wenn die Katze auf der Klobrille am rumturnen ist bis sie ihre Position gefunden hat wo und wie sie ihr Geschäft verrichten will bemerkt der Pir natürlich die Bewegung, diese sollte das nano am besten mit der onboard LED signalisieren damit man sieht wann der sensor auslöst, so lange er Bewegung erkennt soll nichts passieren, erst wenn er keine Bewegung mehr erkennt soll er nach ca. 2 Minuten das servo um 180° drehen um zu spülen, die Position ca. 20sec halten und dann wieder zurückfahren auf 0°, und dann soll er nochmal eine pause von 2min einlegen bevor die Schlaufe wieder von vorne losgeht, weil sich der Spülkasten ja füllen muss. Wenn ihr mir dabei helfen könntet wäre das sehr nett.

es ist wirklich einfach, gib mir paar Minuten

#include <Servo.h>
Servo Serv; // create servo object to control our servo

const byte pirPin = 12; // Arduino pin the PIR sensor is connected to
const byte servoPin = 9; //Arduino pin the servo is connected to
const byte LED_Pin = 13;

void setup() {
  pinMode(LED_Pin, OUTPUT);
  Serv.attach(servoPin); // attaches the servo on pin 9 to the servo object
  Serv.write(0); // start the servo at 0 degrees
  delay(60000); // give time for the PIR sensor to calibrate (30-60secs is best)
}

void loop() {
  static bool isPIR = false;
  static uint32_t prevTime = 0;
  if (digitalRead(pirPin)) {
    prevTime = millis();
    isPIR = true;
    digitalWrite(LED_Pin, HIGH);
  }
  if (isPIR)
    if (millis() - prevTime > 20000UL) {

      for (int pos = 0; pos <= 180; pos += 1) { // goes from 0 to 180 degrees, in 1-degree steps
        Serv.write(pos); // rotate servo to position in variable "pos"
        delay(7); // wait 7 ms to reach each position
      }
      
      delay(20000);// wirklich 20 Secunden spülen ?
      
      for (int pos = 180; pos >= 0; pos -= 1) { // goes from 180 to 0 degrees, in 1-degree steps
        Serv.write(pos); // rotate servo to position in variable "pos"
        delay(7); // wait 7 ms to reach each position
      }

      while (digitalRead(pirPin)); //auf Nummer sicher warten dass PIR aus geht, obwohl nix schlimmes wenn es zweimal spült
      isPIR = false;
      digitalWrite(LED_Pin, LOW);
    }
}
1 Like

Hallo kolaha, danke für deinen Sketch,
ich hab den Sketch versucht und da regt sich nichts. Ich hab das mal auf wokwi auf die schnelle gemacht, da geht auch nix.

https://wokwi.com/projects/404623751966980097

kannst du nochmal gucken?

ist ja zu erwarten. du hast Servo an anderen Pin verlegt.
und wenn du die "delays" verkürzst dann siehst du Bewegung früher
und Vin als Ausgang funzt nur in Wokwi, IRL natürlich nicht.

diagram.json

{
  "version": 1,
  "author": "Adam",
  "editor": "wokwi",
  "parts": [
    { "type": "wokwi-arduino-nano", "id": "nano", "top": 0, "left": 0, "attrs": {} },
    { "type": "wokwi-pir-motion-sensor", "id": "pir1", "top": -255.2, "left": 11.82, "attrs": {} },
    { "type": "wokwi-servo", "id": "servo1", "top": 121, "left": 39.4, "rotate": 90, "attrs": {} },
    { "type": "wokwi-vcc", "id": "vcc1", "top": 39.16, "left": 172.8, "attrs": {} },
    { "type": "wokwi-gnd", "id": "gnd1", "top": -9.6, "left": 172.2, "attrs": {} },
    { "type": "wokwi-vcc", "id": "vcc2", "top": -172.04, "left": 19.2, "attrs": {} },
    { "type": "wokwi-gnd", "id": "gnd2", "top": -144, "left": 76.2, "attrs": {} }
  ],
  "connections": [
    [ "servo1:GND", "nano:GND.1", "black", [ "v-9.6", "h10.1" ] ],
    [ "servo1:V+", "nano:5V", "red", [ "h0" ] ],
    [ "pir1:OUT", "nano:12", "yellow", [ "v144", "h-0.14" ] ],
    [ "gnd1:GND", "nano:GND.2", "black", [ "v-9.6", "h-57.1" ] ],
    [ "vcc2:VCC", "pir1:VCC", "red", [ "v9.6", "h19.2" ] ],
    [ "gnd2:GND", "pir1:GND", "black", [ "v-9.6", "h-19.2" ] ],
    [ "vcc1:VCC", "nano:5V", "red", [ "v9.6", "h-19.2" ] ],
    [ "servo1:PWM", "nano:9", "orange", [ "v-9.6", "h-57.8" ] ]
  ],
  "dependencies": {}
}

ok, kein Problem.

#include <Servo.h>
Servo Serv;

const byte pirPin = 12;
const byte servoPin = 9;
const byte LED_Pin = 13;

void setup() {
  pinMode(LED_Pin, OUTPUT);
  Serv.attach(servoPin);
  Serv.write(0);
  delay(60000);
}

void loop() {
  static bool isPIR = false;
  static uint32_t prevTime = 0;
  if (digitalRead(pirPin)) {
    prevTime = millis();
    isPIR = true;
    digitalWrite(LED_Pin, HIGH);
  }
  if (isPIR) {
    while (digitalRead(pirPin)); //warten dass PIR aus geht, sein Timer soll etwa 20 secunden Pegel halten nach dem die Bewegung nicht mehr da ist
    for (int pos = 0; pos <= 180; pos += 1) {
      Serv.write(pos);
      delay(7);
    }

    delay(20000);

    for (int pos = 180; pos >= 0; pos -= 1) {
      Serv.write(pos);
      delay(7);
    }

    isPIR = false;
    digitalWrite(LED_Pin, LOW);
  }
}

Guck mal selbst, ich hab die delays verkürzt, die Spülung löst aus während meine Hand vor dem Sensor ist.

"Link nicht mehr verfügbar"

Du musst dir vorstellen die Katze läuft unentschlossen auf der Klobrille rum bis sie sich entscheidet das sie ihr geschäft verrichten will, während dessen erfasst der sensor ja die Bewegung, wenn jetzt der Spülkasten spült erschreckt sich die Katze und bricht ihr Vorhaben ab. Das darf nicht passieren. Erst wenn der Sensor keine Bewegung mehr erfasst, dann muss ein dalay für die Pause eingestellt werden und danach darf nur einmal für sagen wir für 10sec gespült werden.

Mit dem ersten script lässt sich auch schon arbeiten, da muss man nur die Pause dann länger einstellen, aber optimal wäre das wie beschrieben.

Entschuldigung, das erste Skript war doch schon richtig, mein Fehler. Ich danke dir sehr für deine Hilfe, du hast mir sehr sehr geholfen! :smiling_face_with_three_hearts: :slightly_smiling_face:

Je länger ich die Hand davor halte löst das Servo nicht aus, ich bin doch ein Trottel :slight_smile: Das erste Script ist Super Dankeschön.

markiere meine hilfreichste Antwort als Lösung

besser poste hier Bilder

OK :slight_smile:
Du hast der Katze und Mir viel Stress erspart, und vor allem hast du das letzte bisschen Problem aus der Welt geschafft, wie oben schon beschrieben, gerade wenn die Katze auf das Menschenklo geht bekommt man das Nachts wenn man schläft nicht immer gleich mit, am nächsten Morgen steht man dann vor der Überrasschung und darf dann angetrocknetes wegkratzen, da stell ich mir den Morgen amüsanter vor als mit so einer Arbeit in den Tag zu starten,
mit dem Automatischen Abzug, das ist schon eine feine Sache, das Klo ist immer sauber.

Wenn man alleine wohnt und ein Haustier hat kann es mal zu einem Problem kommen das man mal zum Beispiel einen Verkehrsunfall oder was anderes Unvorhersehbares in der Art passiert und dann steht man vor einem Problem, was ist wenn man niemanden bescheid sagen kann, weil man durch ein kaputtes Handy keine Telefonnummern hat oder einfach nicht dazu in der Lage ist?
Es kann immer mal was passieren, wir sind Menschen.

Es gibt genug Menschen bei denen scheißt die Katze dann die ganze Wohnung voll, ich hab zwar eine liebe nette Nachbarin der ich vertraue aber diese ist auch schon 75 Jahre alt und man sollte diese liebe Dame auch schonen.
Meine Oma wäre auch noch da, aber die hat asthma.

Zur Not geht das natürlich alles mit denen, aber mit der Automatik bin ich definitiv Präventiv auf der sicheren Seite das die Katze immer ein sauberes Klo hat, das freut nicht nur den Katzenliebhaber sondern auch das Katzenherz.

1 Like

Natürlich hat die Wohnung eine Katzenklappe, damit das Tier nur zum Fressen nach Hause kommen muss, falls sich nichts besseres ergibt. Davon gehe ich jedenfalls aus. Allerdings kenne ich nur Katzen, die zum Kacken Nachbargärten bevorzugen und das nicht in der eigenen Wohnung machen.

Springende Laserpunkte als Katzenspielzeug verlieren übrigens auch bald ihren Reiz, meine Erfahrung.

meine beiden Katzen gehen in die Duschwanne, da muss ich nur mit Klopapier rein greifen und dann mit Brause spülen. Eigentlich Ersparnis pur.

1 Like