Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| projekte:template [10.11.2014 23:36] – [Informationen] roundabout | projekte:template [Unknown date] (aktuell) – gelöscht - Externe Bearbeitung (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== Projektname ====== | ||
| - | simpel animierte Halloween Puppe | ||
| - | |||
| - | ===== Informationen ===== | ||
| - | |||
| - | Ich notiere hier meine Erfahrungen im Zusammenbau einer kleinen mobilen Puppe als Eyecatcher für Halloween. | ||
| - | |||
| - | |||
| - | **Materialien: | ||
| - | * 1x bliebige Puppe | ||
| - | * 1x Step Motor 28BYJ-48 inkl. motorboard | ||
| - | * 1x arduino nano | ||
| - | * 9V Clip | ||
| - | * Litze | ||
| - | |||
| - | **Werkzeug** | ||
| - | * Lötkolben & Lötzinn | ||
| - | * Dremel / Fräse / etc. | ||
| - | |||
| - | |||
| - | Das Projekt startete (wie so oft) kurzfristig und war dementsprechend beschränkt auf Komponenten die nicht erst noch bestellt werden mussten. | ||
| - | Darüber hinaus sollten alle Teile in ein sehr schmales Budget passen, da es sich mehr um einen Gag mit beschränkten Einsatzmöglichkeiten handelt. | ||
| - | |||
| - | Eine passende alte Puppe war schnell in einem Trödelladen um die Ecke gefunden. Materialkosten bis hier her 1,50 €. Erst zuhause bemerkte ich mein Glück, die Puppe bestand nur aus einzelnen Teilen (Kopf, 2x Arm, 2x Bein) der Körper in der Mitte war nur mit Watte gefüllt. Das Beste: schon von Werk aus, wurden die, jeweils mit einer passenden Aussparung versehenen, Körperteile mittels eines dünnen Kabelbinders durch Führungen in der Kleidung zusammengehalten. | ||
| - | |||
| - | Dementsprechend war das auseinander- und zusammenbauen ein Kinderspiel. Alles was an Elektronik untergebracht werden musste, konnte entsprechend durch die Entnahme von Watte aufgefangen werden. Durch die Befestigung des Kopfes konnte dieser sich schon frei drehen. | ||
| - | |||
| - | Nun zum wesentlichen, | ||
| - | Das der Kopf sich drehen sollte war die erste Iddee. Nach einigen Versuchen die Arme ebenfalls zu animieren wurde schnell klar, dass dies innerhalb der verbleibenden 2 Tage bis zum Einsatzdatum nicht zu realiseren war. //Wer hier weiter macht mag diesen Teil gern zum Artikel beitragen.// | ||
| - | Es blieb also der animierte Kopf. Nach etwas Fledderei an anderen Projekten war ein Arduino Nano und ein kleiner Steppermotor samt motorboard bereit sich dieser Aufgabe zu stellen. | ||
| - | |||
| - | **Arduino: | ||
| - | Der Arduni-Code stellt sich simpel dar. Das Programm findet sich am Ende dieses Textes. Nach einigen Testläufen war festgestellt mit welchen Werten sich der Kopf um wieviel Grad dreht. Als Konfiguration ist vorgesehen, dass die Puppe zunächst nach links, wieder geradeaus, dann nach rechts guckt um nach einer 10sec Pause den Kopf schnell um 360 Grad zu drehen. Danach ruht die Puppe 50 Sekunden. | ||
| - | |||
| - | |||
| - | Als das grösste Problem stellte sich heraus, den hohlen Kopf und die Motorwelle sicher zu verbinden. Nach einigen Versuchen mit verkeilten Zahnrädern im Hals war klar, dass dies nicht zuverlässig arbeitete. Entweder löste sich das Zahnrad vom Hals bzw. Kopf, oder der Motor sackte nach unten ab und die Welle drehte frei unter dem Kopf. | ||
| - | |||
| - | Bisher die verlässliche Variante, selbst im mobilen Einsatz in der Westentasche, | ||
| - | |||
| - | Nun der Scheibe 3 oder 4 kleine Löcher verpassen, so dass die Platte von unten gegen den Hals geschraubt werden kann. Nun noch mit dem Dremel eine passende Aufnahme für den Motor in der Scheibe bohren. Die Motorwelle sollte nun genau durch die Mitte der Platte passen. Nun muss noch das Zurückrutschen unterbunden werden. Hier kam eine übriggebliebene Zahnriemenscheibe mit Madenschraube zum Einsatz. In Ermangelung einer passenden Konstruktion kann sicherlich auch einfach die Motorwelle mit einem dünnen Bohrer durchbohrt werden und bspw. eine Büroklammer durchgeführt und verbogen werden um ein ähnliches Ziel zu erreichen. Ist die Aluscheibe und der Motor nun fest verbunden kann die Scheibe an den Kopf geschraubt werden. | ||
| - | |||
| - | Um keinen Kabelsalat im inneren der Puppe zu produzieren wurde der Nano auf der einen Seite, das Motorboard auf der anderen Seite einer Pappelholzplatte befestigt. Dies verhindert insbesondere, | ||
| - | |||
| - | Zunächst wird die Stromversorgung verdrahtet. Dazu den 9V Clip an das Motorboard und den Nano anlöten. Dazu den 9V-Clip am besten direkt an das Motorboard löten. Von dort dann die Kabel zum Stromeingang des Nano weiterführen. Sowohl der Nano also auch der Motor können mit den 9V gut arbeiten. | ||
| - | Nun braucht der Nano noch eine Steuerverbindung zum Motorboard. Wie im Quellcode zu sehen ist, werden hier dazu die Pins 6, 7 ,8 ,9 am Nano verwendet. | ||
| - | Diese werden in dieser Reihenfolge an die Eingänge des Motorboards gelötet, welche bei dem verwendeten Modell mit 1N1 bis 1N4 bezeichnet sind. | ||
| - | |||
| - | Schliesst man nun einen 9V Block an, sollte der Horror beginnen. | ||
| - | |||
| - | |||
| - | |||
| - | Arduni-Code: | ||
| - | < | ||
| - | const int motorPin1 = 6; // Blue - 28BYJ48 pin 1 | ||
| - | const int motorPin2 = 7; // Pink - 28BYJ48 pin 2 | ||
| - | const int motorPin3 = 8; // Yellow - 28BYJ48 pin 3 | ||
| - | const int motorPin4 = 9; // Orange - 28BYJ48 pin 4 | ||
| - | | ||
| - | int a; | ||
| - | int b; | ||
| - | |||
| - | void setup() { | ||
| - | Serial.begin(9600); | ||
| - | |||
| - | pinMode(motorPin1, | ||
| - | pinMode(motorPin2, | ||
| - | pinMode(motorPin3, | ||
| - | pinMode(motorPin4, | ||
| - | |||
| - | } | ||
| - | |||
| - | void loop() { | ||
| - | |||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | } | ||
| - | |||
| - | |||
| - | |||
| - | void counterclockwise (int a, int b){ | ||
| - | for (int i=0; i<a; i++) | ||
| - | { | ||
| - | // 1 | ||
| - | digitalWrite(motorPin1, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin4, | ||
| - | delay(b); | ||
| - | // 2 | ||
| - | digitalWrite(motorPin1, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin4, | ||
| - | delay (b); | ||
| - | // 3 | ||
| - | digitalWrite(motorPin1, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin4, | ||
| - | delay(b); | ||
| - | // 4 | ||
| - | digitalWrite(motorPin1, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin4, | ||
| - | delay(b); | ||
| - | // 5 | ||
| - | digitalWrite(motorPin1, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin4, | ||
| - | delay(b); | ||
| - | // 6 | ||
| - | digitalWrite(motorPin1, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin4, | ||
| - | delay (b); | ||
| - | // 7 | ||
| - | digitalWrite(motorPin1, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin4, | ||
| - | delay(b); | ||
| - | // 8 | ||
| - | digitalWrite(motorPin1, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin4, | ||
| - | delay(b); | ||
| - | | ||
| - | //shutdown | ||
| - | digitalWrite(motorPin1, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin4, | ||
| - | } | ||
| - | } | ||
| - | |||
| - | |||
| - | void clockwise(int a, int b) | ||
| - | { | ||
| - | for (int i=0; i<a; i++) | ||
| - | { | ||
| - | // 1 | ||
| - | digitalWrite(motorPin4, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin1, | ||
| - | delay(b); | ||
| - | // 2 | ||
| - | digitalWrite(motorPin4, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin1, | ||
| - | delay (b); | ||
| - | // 3 | ||
| - | digitalWrite(motorPin4, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin1, | ||
| - | delay(b); | ||
| - | // 4 | ||
| - | digitalWrite(motorPin4, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin1, | ||
| - | delay(b); | ||
| - | // 5 | ||
| - | digitalWrite(motorPin4, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin1, | ||
| - | delay(b); | ||
| - | // 6 | ||
| - | digitalWrite(motorPin4, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin1, | ||
| - | delay (b); | ||
| - | // 7 | ||
| - | digitalWrite(motorPin4, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin1, | ||
| - | delay(b); | ||
| - | // 8 | ||
| - | digitalWrite(motorPin4, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin1, | ||
| - | delay(b); | ||
| - | | ||
| - | //shutdown | ||
| - | digitalWrite(motorPin1, | ||
| - | digitalWrite(motorPin2, | ||
| - | digitalWrite(motorPin3, | ||
| - | digitalWrite(motorPin4, | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Bilder ===== | ||
| - | |||