Wischduino

Aus HRW FabLab MediaWiki
Wechseln zu: Navigation, Suche

Wischduino[Bearbeiten]

Wischduino ist ein Roboter, der das Fensterputzen erleichtern soll. Er kann mithilfe einer Website gesteuert werden und kann so Menschen mit Beeinträchtigungen helfen die Fenster zu putzen. Besonders hilfreich ist dabei der automatische Wischmodus, bei dem der Roboter die Fensterscheibe von alleine reinigt.

Wischduino Roboter


Verwendete Hardware[Bearbeiten]

Die Realisierung des Wischroboters war mithilfe folgender Hardware/Materialien möglich:

  • 3 Steppermotoren
Die Steppermotoren sind für die Bewegung auf der Fensterscheibe zuständig, sie bewegen den Roboter entlang eines Schienensystems
  • 4 Ultraschall-Sensoren
Zur Positionsbestimmung werden Ultraschallsensoren verwendet, welche messen, wie nah sich der Roboter zu welchem Fensterrand befindet
  • 2 esp32 Dev kit Module
Ermöglichen die Kommunikation zwischen den Sensoren und den Motoren mittels MQTT Server


Dazu kommen Kabelkanäle und Schnüre, welche die Bewegungen des Roboters leiten. So wird gewährleistet, dass sich der Wischduino nicht verhakt und immer auf geraden Bahnen fährt. Zur Reinigung des Fensters ist ein Schwamm angebracht, welcher vom Roboter über die Fensterscheibe bewegt wird. Dieser kann leicht ausgetauscht und gereinigt/ausgewaschen werden.

Funktionsweise[Bearbeiten]

Unterteilt ist der Wischroboter in zwei Teilsysteme: eines für die Bewegung und eines zur Positions- bzw. Abstandsbestimmung. Jedes der Teilsysteme wird von einem esp32 kontrolliert/gesteuert. Die beiden Teilsysteme kommunizieren via MQTT über einen Server miteinander. Durch diese Kommunikation kann die Position des Roboters auf der Fensterscheibe ermittelt werden. So sind zum Beispiel Richtungswechsel möglich, sobald der Roboter am Fensterrand angekommen ist.


Bewegung des Roboters[Bearbeiten]

Damit sich der Roboter in alle Himmelsrichtungen bewegen kann verfügt er über 3 Steppermotoren. Angebracht sind diese an einem Schienensystem. Bekommt der Roboter nun die Anweisung sich zu bewegen (dazu später mehr), drehen sich die Steppermotoren in die gewünschte Richtung und bewegen den Roboter entlang des Schienensystems über die Fensterscheibe.

Die Steuerung[Bearbeiten]

Der Roboter kann über eine Webseite gesteuert werden. Auf dieser Seite sind Pfeiltasten zu finden, mit denen die Richtung des Roboters manuell eingegeben werden kann. Ein Tastendruck genügt, um den Roboter in eine Richtung zu schicken, Er fährt dann solange in diese Richtung, bis er am gegenüberliegenden Fensterrand angekommen ist. Das manuelle Stoppen des Roboters ist ebenfalls möglich. Zudem kann dem Roboter dort mitgeteilt werden, dass er sich zu seiner Startposition zurückbegeben oder den automatischen Reinigungsmodus starten soll.

Sensoren des Wischduino Roboters


Wie funktioniert das ganze?[Bearbeiten]

Bei einem Tastendruck sendet die Webseite einen Befehl an einen MQTT Server. Der Roboter registriert diesen Befehl und setzt sich in Bewegung. Er fährt dabei so lange in die “befohlene” Richtung, bis er einen anderen Befehl bekommt. Zum Beispiel von Sensoren, die am Fensterrahmen montiert sind oder durch eine weitere Eingabe auf der Webseite. Natürlich kann der Roboter auch über die Webseite jederzeit gestoppt werden. Zudem verfügt er über die Funktion, zu seinem Startort (in unserem Fall unten rechts) zurückzukehren.

void stopMovement(){
  digitalWrite(STEPPER_PIN_UD1, LOW);
  digitalWrite(STEPPER_PIN_UD2, LOW);
  digitalWrite(STEPPER_PIN_UD3, LOW);
  digitalWrite(STEPPER_PIN_UD4, LOW);
  digitalWrite(STEPPER_PIN_LR1, LOW);
  digitalWrite(STEPPER_PIN_LR2, LOW);
  digitalWrite(STEPPER_PIN_LR3, LOW);
  digitalWrite(STEPPER_PIN_LR4, LOW);
  Serial.println("Stoppe motoren");
}

Zu sehen ist die Funktion zum anhalten des Roboters, dabei werden alle Pins der Motoren aus Low gesetzt.

Automatisches Wischen[Bearbeiten]

Eine weitere Funktion ist der automatische Wischmodus. Wird dieser aktiviert, fährt der Roboter die Fensterscheibe systematisch ab. Er geht dabei wie folgt vor: Er bewegt sich zunächst horizontal, bis er an einem Fensterrand angekommen ist. Danach fährt er einige Sekunden nach unten. Anschließend bewegt er sich wieder horizontal, diesmal aber in die entgegengesetzte Richtung. Das wiederholt er solange, bis er die komplette Scheibe abgefahren und unten rechts angekommen ist.

Die Positionsbestimmung[Bearbeiten]

Am Fensterrahmen sind insgesamt 4 Ultraschallsensoren montiert. Diese senden Schallwellen aus und messen die Zeit, bis diese wieder beim Sensor eintreffen, nachdem sie auf ein Objekt gestoßen sind. Das ermöglicht es uns festzustellen, ob sich der Roboter in der Nähe des Fensterrahmens befindet. Ist er an einem Fensterrand angekommen (ist also der von den Sensoren gemessene Abstand sehr gering), senden die Sensoren einen Befehl (zum Beispiel “stopp”) an den MQTT Server. Der Wischroboter registriert diesen Befehl und hält an.

Sensoren des Wischduino Roboters
void triggerSensorLeft(){
    digitalWrite(triggerLeft,LOW);
    delay(5);
    digitalWrite(triggerLeft,HIGH);
    delay(1000);
    digitalWrite(triggerLeft,LOW);
    dauerLeft=pulseIn(echoLeft,HIGH);
    entfernungLeft=(dauerLeft/2)*0.03432;
    Serial.print("Links:");
    Serial.println(entfernungLeft);

    if((entfernungLeft <= 5) && lockLeft == false){
      stopCleaning();
      lockLeft = true;
    }

    if(entfernungLeft > 5){
      lockLeft = false;
    }
}

Der Sensor am linken Fensterrand berechnet die Zeit, in der von ihm ausgesendete Schallwellen zu ihm zurückkehren, nachdem sie auf ein Objekt (den Roboter) getroffen sind. So wird festgestellt, wie weit der Roboter noch vom Fensterrand entfernt ist. Ist er nah genug, wird durch die Funktion "stopCleaning()" der Stoppbefehl an den MQTT Server gesendet. Danach wird der boolean "lockLeft" auf true gesetzt. Solange dieser true ist, sendet der Sensor keinen weiteren Stoppbefehl an den MQTT Server. Erst wenn der Sensor mindestens einmal wieder einen höheren Wert gemessen hat, wird er wieder zum Senden freigeschaltet. Das verhindert das wiederholte Senden des Stoppbefehls, wenn sich der Roboter am Fensterrand befindet.

MQTT[Bearbeiten]

Zur Steuerung des Roboters wurden zwei verschiedene Topics eingerichtet: “Direction” für die verschiedenen Richtungen und “Start” um dem Roboter zu signalisieren, dass er zur Startposition zurückkehren soll. In “Direction” können 5 verschiedene Werte eingetragen werden: “0-3” für die Richtungen, in die sich der Roboter bewegen kann/soll und “4” für stopp. Wird also das Topic “Direction” beispielsweise auf “0” geändert, bewegt sich der Roboter nach oben, bis er einen anderen Befehl bekommt.

Die Sensoren senden ausschließlich Nachrichten an den MQTT Server, empfangen aber selbst keine. Der Roboter empfängt und sendet auch Nachrichten zum Server, um seinen aktuellen Zustand mitzuteilen/abzufragen.

if(inTopic == topicDirection){
      manualMovement(isPayload);
      if(isPayload == 4){
        inTopic = "";
        isPayload = 0;
      }
    }

In diesem Fall würd geprüft, ob eine Änderung im Topic "Direction" gemacht wurde. Falls dies der Fall ist, wird der Wert an die Bewegungsfunktion "manualMovement();" übergeben, welche den Roboter in eine Richtung dem Wert entsprechen bewegt.

Kritik[Bearbeiten]

Der Wischduino ist noch in einer Prototypen-Phase. Das Schienensystem ist beispielsweise aktuell noch etwas sperrig und umständlich am Fenster anzubringen. Das liegt zum Großteil an den Beschränkten Möglichkeiten bei der Herstellung des Prototypen Zuhause (fehlendes Werkzeug z.B.).