====== Useless Box Projektdokumentation====== \\ ===== Themenbeschreibung und Überblick ===== Die **"Useless Box"** ist ein Roboter, dessen einzige Aufgabe es ist, den Schalter, der sich auf seiner Oberseite befindet, im ausgeschalteten Zustand zu halten. Um dies zu erreichen, ist er mit einem Arm ausgestattet, welcher sich bei Umlegen des Schalters durch externe Faktoren ausfährt. Zusätzlich verfügt der Roboter über eine eigene Persönlichkeit. Er hat unterschiedliche Reaktionen auf das Umlegen des Schalters. Das Gesamtsystem besteht im wesentlichen aus drei Teilen. Einem ausfahrbaren Arm zum Umlegen des Schalters, einem Arduino zur Messung und Auswertunge der Daten aus Sensoren sowie dem Gestell, welches die Technik "versteckt". Die Inspiration für diesen Roboter stammt aus dem Internet: \\ [[https://www.youtube.com/watch?v=apVR5Htz0K4]]
{{:projektewise21:uselessbox1:whatsapp_image_2022-02-15_at_20.42.18.jpeg?200|Useless Box von außen}} Useless Box Außenansicht
{{:projektewise21:uselessbox1:whatsapp_image_2022-02-15_at_20.42.20.jpeg?800|Inneres der Useless Box}} Useless Inneres der Useless Box
===== Konstruktion ===== Von außen betrachtet sieht unser Roboter wie eine normale und harmlose Box aus Holz aus. Auf der Oberseite befindet sich ein Schalter. Die Technik befindet sich im Inneren und ist "versteckt". ==== Bauteile ==== === Arduino Nano === Ein Arduino ist ein Mikrocontroller mit diversen Input und Output Schnittstellen (Pins). Über ihn sind alle Komponenten des Roboters miteinander verknüpft und können angesteuert werden. Mit der Arduino Software haben wir das Programm geschrieben, welches auf dem Arduino ausgeführt wird und die einzelnen Pins und Komponenten ansteuert. === Schalter === Der Schalter an der Außenseite der Box ist das wichtigste Bauteil des Roboters. Denn erst durch Umlegen des Schalters wird der Roboter "zum Leben erweckt".\\+ Es handelt sich hierbei um einen Kipp-Schalter, der innerhalb des Quellcodes als sogenannter Pullup-Schalter implementiert ist. Das bedeutet, dass der interne Widerstand des Arduinos genutzt wird, um die vom Arduino gelesenen Werte am Schalter entweder auf Null oder Eins zu setzten. Sämtlicher "Lärm", also Werte, die zwischen Null und Eins liegen, werden eliminiert. === Servo === Der Servo wird zum Ansteuernd des Armes verwendet. Wenn der Schalter auf der Oberfläche der Box umgelegt wird, schickt der Arduino ein Signal an den Servo, wodurch dieser dann den Arm so bewegt, dass der Schalter umgelegt wird. === Stepper-Motoren === An der Unterseite der Box befinden sich zwei Stepper-Motoren. Mit diesen werden die Räder der Box betrieben. Vorne befindet sich zudem ein drittes, frei bewegliches Rad, welches nicht angesteuert wird und dafür sorgt, dass der Roboter sich problemlos fortbewegen kann.\\ Durch den Arduino lassen sich beide Räder unabhängig voneinander ansteuern. Dadurch lässt sich der Roboter gut fortbewegen und auch das Drehen auf der Stelle ist möglich. === Treiber === Die DRV8825 Stepper Motor Treiber helfen dabei, die jeweils richtige Dreh-Geschwindigkeit, -Richtung, -Kraft und Position anzusteuern. Für jeden Stepper-Motor wird einer dieser Treiber benötigt. === Ultraschallsensor === Der Ultraschallsensor HC-SR04 dient zur Distanzermittlung. Er befindet sich auf der Oberseite der Box in der Nähe des Kipp-Schalters. Sollte sich ein Objekt dem Schalter nähern, lässt sich dies anhand der Daten des Ultraschallsensors feststellen. Basierend darauf kann der Roboter reagieren und sich beispielsweise rückwärts vom Objekt entfernen. === Akku + LiPo Batteriewächter + Spannungsregler === Der Akku ist für die Stromversorgung des Arduinos und somit auch allen anderen Bauteilen verantwortlich. Hierbei wird ein 11V-Akku benötigt, da sonst nur einer der beiden Stepper-Motoren angetrieben werden kann. Da diese Spannung jedoch für einen Arduino, welcher bei einer Spannung von 5V arbeitet, zu hoch ist, wird die am Arduino anliegende Spannung über einen Spannungsregler auf ca. 4,9V begrenzt. Der Servo sowie die beiden Stepper-Motoren für die Räder sind direkt an den 11V-Akku angeschlossen. === Lautsprecher === Um auch akustische Signale und "Warnungen" zu verteilen, benutzen wir einen Lautsprecher sowie eine Mikro SD Karte. Mit der entsprechenden Bibliothek, die wir auf GitHub ([[https://github.com/TMRh20/TMRpcm/wiki]]) gefunden haben, lassen sich die auf der SD Karte gespeicherten Sounds abspielen. === Materialliste === ^ Bauteil ^ Anzahl ^ | Arduino Nano | 1 | | Servo | 1 | | Stepper Motor | 2 | | Stepper Motor Driver (DRV8825) | 2 | | Rad (d=9cm) | 2 | | Kipp-Schalter | 1 | | Ultraschallsensor HC-SR04 | 1 | | Lautsprecher | 1 | | Breadboard | 1 | | LiPo-Akku 11V | 1 | | Spannungsregler | 1 | | Diverse Elektronische Bautile (s. Schaltplan) | 1 |
Materialliste
^ Für den Bau des Gehäuses ^ | Holz | | Schrauben | | Winkel | | Scharniere |
Materialliste für das Gehäuse.
{{ :projektewise21:uselessbox1:bild3.png |Useless Box Inneres}} Bauteile
==== Schaltplan ====
{{:projektewise21:uselessbox1:box_firtzing_sketch_steckplatine.jpg?500|Schaltplan}} Schaltplan
=== Pinbelegungstabelle === ^ Bauteil ^ Signalfunktion ^ Pinnummer ^ | Stepper Motor Driver links | Direction | 3 | | ::: | Step | 2 | | Stepper Motor Driver rechts | Direction | 5 | | ::: | Step | 4 | | Ultraschallsensor | Trigger | 9 | | ::: | Echo | 8 | | Servo || 11 | | Kipp-Schalter || 12 |
Pinbelegungstabelle
===== Methoden und Umsetzung ===== === Messen der Entfernung === Damit der Roboter erkennen kann, ob sich ein Objekt dem Schalter nähert, haben wir einen Ultraschallsensor eingebaut, welcher es ermöglicht, Abstände und Entfernungen zu messen. Um die Entfernung zu bestimmen, sendet der Sensor ein Signal aus. Anschließend wird gemessen, wie lange es dauert, bis dieses Signal wieder vom Sensor empfangen wird. Anhand der gemessenen Zeit lässt sich mit Hilfe der Schallgeschwindigkeit der Abstand des Objektes bestimmen: **Entfernung = (Geschwindigkeit x Zeit) / 2** Da wir nur den Abstand zwischen Sensor und Objekt haben möchten, müssen wir die Entfernung halbieren. **Schallgeschwindigkeit: 340 m/s ⇒ 0,034 cm/mikrosekunde** **⇒ Entfernung = (0,034 x Zeit)/2** Bei einer beispielhaften Dauer von 850 Mikrosekunden zwischen Senden und Empfangend es Signals ergibt sich also eine Entfernung von: **⇒ (0,034 x 20) / 2 = 14,45cm** Da diese Berechnung mehrmals pro Sekunde durchgeführt wird, lässt sich leicht erkennen, ob sich ein Gegenstand dem Schalter nähert. Um Messfehler zu umgehen wird bei unserem Roboter immer ein Mittelwert aus mehreren Messergebnissen berechnet, bevor eine Entscheidung getroffen wird. === Ablauf ===
{{:projektewise21:uselessbox1:bild1.png?300| }} Ablauf
{{:projektewise21:uselessbox1:bild2.png?400|Ablauf}} Reaktion des Roboters abhängig von der Zählvariable
Damit die Useless Box reibungslos funktionieren kann, gibt es zwei wichtige Abläufe, die parallel zueinander ablaufen. Zum Einen wird bei jedem Umlegen des Schalters eine Zählvariable um 1 erhöht. Anschließend wird der Servo gecalled, wodurch der ausfahrbare Arm betätigt wird und den Schalter wieder in seine ursprüngliche Position bewegt. Abhängig von der Zählvariable kann der Roboter verschiedene Aktionen ausführen. Dies wird im zweiten Ablauf festgehalten. In Abhängigkeit vom Wert der Variable entsteht die "Reaktion" des Roboters. Aus der Grafik lässt sich beispielsweise erkennen, dass der Roboter erst beim dritten Umlegen des Schalters beginnt, wegzufahren. Und erst nach dem 5. Mal wird der Ultraschallsensor benutzt, um die Entfernung zu Objekten vor dem Roboter zu messen. ===== Ergebnis und Diskussion ===== Wir haben es erfolgreich geschafft, die Grundfunktionen der Box zu implementieren und auch einige extra Features zu installieren. Jedoch hatten wir einige Probleme damit, die Räder zum Laufen zu bringen, weshalb wir leider keine Zeit mehr hatten, diese noch vielen weiteren Features zu widmen. Zudem ist der Treiber für den Lautsprecher durchgebrannt, weshalb wir keine Musik mehr abspielen können, was ein wichtiges Feature der Box sowie eine wichtige Charaktereigenschaft des Roboters gewesen wäre. Für die Zukunft ergeben sich noch haufenweise weitere Möglichkeiten, den Roboter in seiner Persönlichkeit zu erweitern. So lässt sich der Code anhand der vorher geschriebenen Bibliotheken und Methoden sehr einfach um zahlreiche Aktionen erweitern. Zudem bietet auch der Roboter einige Erweiterungsmöglichkeiten. Beispielsweise könnte man mehrere zusätzliche Sensoren einbauen, die anhand der Messwerte aus der Umgebung zu einer mehr "zufälligen" Reaktion führen können. Da die Messwerte unterschiedlich sein können, könnte man dies als einen "Randomizer" benutzen. Mit deutlich mehr Zeit würde eine zweite Version des Roboters zudem mehrere Schalter haben, die auch hier zahlreiche Möglichkeiten für mehr Reaktionen bieten, damit der Roboter nach und nach immer mehr "Charakter" bekommt. ===== Code ===== {{:projektewise21:uselessbox1:code.zip|Code}}