Inhaltsverzeichnis:

[WIP] Erstellen eines Drawbots, der von einem Myo-Armband gesteuert wird - Gunook
[WIP] Erstellen eines Drawbots, der von einem Myo-Armband gesteuert wird - Gunook

Video: [WIP] Erstellen eines Drawbots, der von einem Myo-Armband gesteuert wird - Gunook

Video: [WIP] Erstellen eines Drawbots, der von einem Myo-Armband gesteuert wird - Gunook
Video: Супер красивый джемпер ажурными "листиками" в нежно розовом цвете 2024, November
Anonim
[WIP] Erstellen eines Drawbots, der von einem Myo-Armband gesteuert wird
[WIP] Erstellen eines Drawbots, der von einem Myo-Armband gesteuert wird

Hallo alle!

Vor ein paar Monaten haben wir uns entschieden, die Idee des Baus eines Open-Frame-Zugroboters, der nur ein Myo-Band verwendet, um ihn zu steuern, in Angriff zu nehmen. Als wir mit dem Projekt begannen, wussten wir, dass es in verschiedene Phasen unterteilt werden musste. Unsere erste Hauptphase bestand darin, unsere Köpfe um ein Open-Frame-Design für unseren Draw-Bot zu wickeln. Dies ist ein nicht standardmäßiges Setup, und wir wollten sehen, welche Vorteile dieses Design hat.

Zweitens wussten wir, dass sich der Bau dieses Prototyps nur für uns selbst als nützlich erweisen würde. Unser Design und Plan bestand darin, unseren endgültigen Rahmen in Metall zu verlegen und mit einem Arduino unsere Position vom Beschleunigungsmesser und Gyroskop zu erhalten, die in das Myo-Band eingebaut sind. Diese Informationen würden dann an die Motoren gesendet und würden die Bewegung des Benutzers replizieren. Wir wussten, dass damit unsere zweite Phase in drei Hauptaspekte aufbrechen würde:

  1. Programmierung von Myo zu Motoren über den Arduino
  2. Elektrodesign, um unsere Daten in Bewegung zu übersetzen
  3. mechanisches Design, um einen angemessen großen Rahmen zu schaffen, der unsere Bewegung erleichtert

Jedes Mitglied unseres Teams fühlte sich mit einem einzigartigen Teil unseres Designprozesses am wohlsten, also beschlossen wir, unsere Arbeit auf jede Person aufzuteilen. Wir haben während unseres gesamten Designprozesses auch einen Blog geführt, um unser tägliches Denken zu verfolgen, im Gegensatz zu einem globaleren Blick.

Schritt 1: Was wir geplant haben

Image
Image

Unser Ziel war es, diese beiden Produkte auf eine Weise zu kombinieren, die wir noch nie zuvor gesehen haben. Wir haben uns vorgenommen, ein Live-Relais zwischen unserem Myo-Armband und unserer eigenen Version eines Designs zu erstellen, das von AxiDraw von Evil Mad Scientist inspiriert wurde.

Schritt 2: Zutatenliste des Prototyps

2 2 x 4 Holzbretter 1 Riemen oder Kette mit einer Größe von >= 65” 4 Holznägel 3 Zahnräder mit Zähnen, die zum Riemen oder zur Kette passen 4 3 x 8 Vex-Lochplatten 30 ⅜” Gummiabstandshalter 8 1” Durchmesser Unterlegscheiben 1 1” Durchmesser Holz Dübel 1' lang 8 Vex-Schrauben 1”8 ½” Vex-Schrauben 8 2” Vex-Schrauben 8 ¼” Gummi-Abstandshalter 48 Vex-Muttern 1 kleiner Kabelbinder

Schritt 3: [Prototyp] Holzbearbeitung unserer Waffen und Wageninnenraum

[Prototyp] Holzbearbeitung Unsere Waffen- und Wageninnenausstattung
[Prototyp] Holzbearbeitung Unsere Waffen- und Wageninnenausstattung

Wir schnappten uns zwei 2x4 und kürzten sie auf gleiche Längen (33 ¼ ).

Mit einer Tischkreissäge haben wir entlang des schmalen Teils der Bretter eine Kerbe gemacht, die ¼" tief und in der Mitte ⅛" breit ist

Schneiden Sie den Dübel in 4 2-Zoll-Stücke und bohren Sie mit einer Bohrmaschine ein Loch in die Mitte des Dübels mit einem Durchmesser von etwa ¼ Zoll

Schritt 4: [Prototyp] Herstellung unseres Wagens

[Prototyp] Herstellung unserer Kutsche
[Prototyp] Herstellung unserer Kutsche
[Prototyp] Herstellung unserer Kutsche
[Prototyp] Herstellung unserer Kutsche
[Prototyp] Herstellung unserer Kutsche
[Prototyp] Herstellung unserer Kutsche

Idealerweise würden wir zwei 7x7-Stücke Vex-Lochstahl verwenden, aber alles, was wir zur Verfügung hatten, waren die 2x7-Streifen, also haben wir sie in einer "X" -Konfiguration zusammengeschraubt

Stapeln Sie 5 der ⅜” Gummi-Abstandshalter und befestigen Sie die Ecken der Vex-Platten aneinander

Befestigen Sie die Holzdübel lose, wie in Abbildung 1 gezeigt, so dass sie sich mit einem Abstand von etwa 2 Zoll frei drehen. Verwenden Sie das Bild, um zu sehen, wo die Zahnräder an dieser Stelle positioniert werden sollten.

Sichern Sie die Unterlegscheiben mit den ½" Vex-Schrauben, ¼" Gummiabstandshaltern und 1" Durchmesser Unterlegscheiben in einer erhöhten Position, wie in Abbildung 1 gezeigt (wir haben grüne Kunststoffzahnräder verwendet, weil wir die richtigen Unterlegscheiben nicht finden konnten) stellen Sie sicher, dass die Unterlegscheiben in der Lage sind leicht zu drehen und in die Kerben des Boards zu passen.

Schritt 5: [Prototyp] Alles zusammenfügen

[Prototyp] Alles zusammenfügen
[Prototyp] Alles zusammenfügen
[Prototyp] Alles zusammenfügen
[Prototyp] Alles zusammenfügen
[Prototyp] Alles zusammenfügen
[Prototyp] Alles zusammenfügen
[Prototyp] Alles zusammenfügen
[Prototyp] Alles zusammenfügen

Legen Sie ein Brett auf eine Oberfläche und schieben Sie den Schlitten in die Mitte, so dass die Unterlegscheiben den Schlitten über dem Brett halten und auf beiden Seiten des Bretts die Zahnräder festnageln, damit sie sich frei drehen können. Nageln Sie ein Zahnrad an ein Ende des zweiten Bretts, stellen Sie sicher, dass es zentriert ist, und schieben Sie es senkrecht zum ersten Brett auf den Schlitten.

Nun muss der Gurt wie abgebildet durch das System geschlungen werden, dabei genau darauf achten, wie sich die Dübel außen am Gurt befinden und nichts in der Mitte des Fahrgestells den Gurt beim Laufen behindern könnte.

Jetzt muss der Gürtel an der Seite des Boards befestigt werden, die kein Zahnrad hat. Wir haben einen zusätzlichen Nagel und einen Kabelbinder verwendet, um unseren zu befestigen. Aber die verwendete Methode spielt keine Rolle, solange der Gürtel an dieser Stelle verankert ist

Schritt 6: [Prototyp] Fertig und Umzug

Image
Image

Das sollte es sein, ziehen Sie den Gürtel in verschiedenen Kombinationen und sehen Sie die unterschiedlichen Auswirkungen auf den Arm!

Schritt 7: Unser Modell in unser fertiges Design übersetzen

Unser Modell in unser fertiges Design übersetzen
Unser Modell in unser fertiges Design übersetzen
Unser Modell in unser fertiges Design übersetzen
Unser Modell in unser fertiges Design übersetzen

Als wir unseren Prototyp fertiggestellt hatten, waren wir begeistert. Keiner von uns war sich vor der Montage sicher, wie das System funktioniert. Aber als unsere Teile zusammenkamen, fanden wir schnell heraus, was uns gefiel und wie wir es bei der Erstellung des endgültigen Designs verbessern würden. Unsere Hauptbeschwerden mit dem zu lösenden System waren:

  1. Skala
    1. Unser Prototyp war massiv und unhandlich, was dazu führte, dass er an der Kante unserer Arme umkippte
    2. Der Wagen war viel größer als nötig und hatte viel Platzverschwendung
    3. Unser Gürtel (eine Vex-Tank-Lauffläche) war viel größer als nötig, was zu viel Platz zwischen den Armen führte
  2. Reibung

    1. Unsere Vex-Treppen gingen nicht an allen Stellen leicht über die Holzdübelrollen
    2. Plastik auf Holz machte den Wagen in vielen Fällen bewegungsunwillig
  3. Motorisierung

    Wir mussten das System mit Strom versorgen

Vor diesem Hintergrund haben wir unsere Pläne für das endgültige Design entworfen. Wir wollten, dass der Drawbot mit einem Myo über ein Arduino gesteuert wird, und wir wollten den Rahmen aus Aluminium und kleiner machen.

Um dies zu tun, haben wir einen Prozentsatz unseres ursprünglichen Prototyps genommen und mit dieser Größe angefangen. Durch die Verwendung von Blechen, die so bearbeitet werden, dass sie Kanäle haben, die breit genug sind, damit ein abgeschirmtes Lager hindurchpasst, hätten wir ein leichtes und dennoch robustes Design mit einer höheren Gebrauchstoleranz.

Unser Prototyp ermöglichte es uns auch, in nur wenigen Minuten festzustellen, wie sich die Motordrehung auf den Kopf unseres Drawbots auswirkte. Dies führte uns zu der Erkenntnis, dass unser Steuerungsdesign einfacher sein würde, als wir erwartet hatten. Bei näherer Betrachtung stellten wir fest, dass die Bewegung des Motors additiv ist! Dies bedeutet, dass jeder Motor eine unabhängige gewünschte Wirkung auf unsere Bewegung hat, aber wenn wir sie kombinieren, beginnen sie sich aufzuheben.

Betrachtet man es beispielsweise als Koordinatenebene, wird der Motor, der im negativen x-Ende liegt, immer dazu neigen, unsere Schublade in den zweiten und vierten Quadranten zu ziehen. Umgekehrt wird der Motor, der auf dem positiven x-Ende liegt, die Schublade immer in den ersten und dritten Quadranten bewegen. Wenn wir die Bewegung unserer Motoren kombinieren, wird es die Teile der Lenkung dieses Konflikts aufheben und die Teile verstärken, die übereinstimmen.

Schritt 8: Codierung

Während ich vor einigen Jahren ziemlich viel mit C gearbeitet habe, hatte ich keine Erfahrung mit lua oder C++, und das bedeutete, dass ich viel Zeit damit verbringen musste, die Dokumentation durchzusehen. Ich wusste, dass die allgemeine Aufgabe, die ich zu erfüllen versuchen würde, darin bestand, die Position des Benutzers in Zeitintervallen zu ermitteln und dann an die Motoren weiterzugeben. Ich beschloss, die Aufgabe für mich selbst aufzuteilen, um die Teile, die ich brauchen würde, besser zu verdauen.

1. Daten von Myo abrufen (lua)

Ich wusste, dass ich einen Weg finden musste, die Informationen vom Myo zu sammeln. Dies war der erste Teil der Herausforderung, die ich angehen wollte. Dazu wollte ich, dass der Benutzer seine Leinwandgröße kalibriert, bevor er mit dem Zeichnen beginnt. Dies würde es mir ermöglichen, eine Grenze zu haben, von der aus ich arbeiten kann. Ich könnte dann das Programm zwischen verschiedenen Benutzern normalisieren, indem ich einfach einen Prozentsatz der maximalen Leinwand als meine zu übergebenden Datenpunkte nehme. Ich entschied mich für ein geskriptetes Ereignis, das jede halbe Sekunde eine getOrientation-Prüfung durchführt, da die Prüfungen niemals einen wilden Sprung ausführen würden, den Sie erraten müssen (z. B. wenn der Benutzer wild zurückschwingt und her).

Dies machte die erste Straßensperre, die ich traf. Ich entdeckte eine sehr große Einschränkung von lua und dass es mir nicht erlaubte zu warten, bevor ich das Skript fortsetzte. Die einzige Möglichkeit, diese Aktion auszuführen, bestand darin, entweder die CPU anzuhalten (was sie global anhalten würde, sogar die Systemuhr halten würde) oder betriebssystemspezifische Befehle zu verwenden. In meinem Beispielcode habe ich die ursprüngliche Betriebssystemprüfung, die ich durchgeführt (kommentiert) belassen. Dies geschah nach umfangreichen Recherchen in der Dokumentation von lua und wurde durch Überprüfung der Systempfadformatierung durchgeführt. Dies war der Moment, als ich entschied, dass ich mir die Dokumentation für Projekte ansehen musste, die zuvor veröffentlicht worden waren. Ich merkte sofort, wie viel Zeit ich verschwendet habe und wurde sofort auf die Plattformvariable geführt. Damit konnte ich betriebssystemspezifische Wartebefehle fast sofort implementieren, im Gegensatz zu den Tagen, die ich brauchte, um meine vorherige Lösung zusammenzuschustern.

Ungefähr zu dieser Zeit des Designs begann die Arbeit am elektrischen Aspekt, und ich stellte die Arbeit an diesem Aspekt des Codes ein. Die Absicht ist, zu lernen, wie unsere Motoren mit dem Arduino verbunden sind.

2. Arbeiten um das Arduino (C++)

Als die Arbeit mit unserem Steckbrett immer komplexer wurde, erfuhr ich, dass das Arduino nicht multithreadingfähig war. Dies war ein großer Schraubenschlüssel in meinem ursprünglichen Code-Design, und nachdem ich mehr über die Einschränkungen unseres Controllers gelesen hatte, fand ich heraus, dass ich programmieren musste, wie das Arduino zwischen den beiden wechseln würde. Dies wurde zum Schwerpunkt meiner Bemühungen, als unsere Frist näher rückte. Ich musste große Teile meines ursprünglichen Skripts verschrotten, da sie dazu bestimmt waren, Daten synchron mit dem Motorcontroller, der die Datei liest, in eine Datei zu schreiben. Dies sollte eine Warteschlangenfunktion ermöglichen, um sicherzustellen, dass selbst wenn der Benutzer unserem Zeichner voraus ist, das Projekt nicht ruiniert wird.

Ich entschied, dass die Warteschlangenfunktion gespeichert werden sollte, wenn sie nicht wie zuvor implementiert wurde. Dazu habe ich einen Vektor von Arrays erstellt. Dadurch konnte ich nicht nur den Geist meines vorherigen Designs relativ intakt halten, es bedeutete auch, dass ich meinen Platz in der Datei weder zum Lesen noch zum Schreiben im Auge behalten musste. Stattdessen musste ich jetzt nur noch einen neuen Wert in meinen Vektor einfügen, wenn sich der Benutzer bewegte (vorläufige Tests ergaben weniger als 1% des Leinwandgrößenunterschieds in x und y von der zuletzt aufgezeichneten Position, was zu keiner Datenaufzeichnung führte).. Ich könnte dann den ältesten Wert in meinem Vektor auf einen Schlag nehmen, an die Motorsteuerung senden, in unsere Datei schreiben und dann aus meinem Vektor entfernen. Dies hat viele meiner Bedenken hinsichtlich eines konstanten IO-Streams ausgeräumt.

Schritt 9: Elektrik

Image
Image
Elektrisch
Elektrisch

Während ich in der Vergangenheit einen Elektronikkurs belegt habe und ziemlich viel mit Arduinos gearbeitet habe. Ich habe mich nie tief damit befasst, dass das Arduino Informationen von einer externen Quelle (myo) erhält, ich habe nur Erfahrung mit der Ausgabe von Informationen über das Arduino. Ich habe jedoch die Motoren unseres Drawbots verkabelt und an Code gearbeitet, damit sie mit dem Myo-Code arbeiten können.

Materialien die ich verwendet habe:

2 x Schrittmotoren

1 x Steckbrett

1 x Arduino (Uno)

2 x Treiber-IC L293DE

40 x Überbrückungsdrähte

2 x Lüfter

1. Schrittmotoren und Lüfter an das Steckbrett anschließen

Nach dem Schaltplan können wir einen Schrittmotor mit dem Treiber auf dem Steckbrett verbinden. Dann gilt das gleiche Diagramm wie für den zweiten Treiber und Motor, jedoch müssen die Überbrückungsdrähte in einen anderen Satz von Pins im Arduino gesteckt werden (da der erste Motor den Platz von 4 anderen belegt).

Warnung/Tipp:

Die Treiber sind sehr klein und die Pins sind sehr eng beieinander. Es wäre ratsam, die beiden Treiber zu beabstanden, damit die Drähte nicht verwechselt werden.

Als nächstes müssen die Lüfter verkabelt werden. Das ist ziemlich einfach, die Lüfter, die ich zur Verfügung hatte, waren einfache Computer-Prozessor-Lüfter, die eine positive und eine Masse haben. Stecken Sie diese beiden in ihre jeweiligen +/- Pins auf dem Steckbrett und winkeln Sie jeden in Richtung jedes Treibers. (Wir haben festgestellt, dass die Treiber dazu neigen, zu überhitzen und zu riechen, da die Schrittmotoren über einen langen Zeitraum Informations- und Befehlsschübe empfangen. Das Hinzufügen eines Lüfters zur Kühlung hat dieses Problem behoben).

2. Arduino-Code

Dies ist der einfache Teil!

Öffnen Sie die Arduino IDE, gehen Sie auf die Registerkarte "Datei" und dann auf die Registerkarte "Beispiel", die noch weiter herunterfällt und Ihnen eine Registerkarte "Stepper" anzeigt. Dann möchten Sie "Stepper_OneStepAtATime" öffnen

Dadurch wird ein Beispielcode vorgeladen, der fast Plug-and-Play für die Arduino- / Motorverkabelung ist. Wir müssen kleine Anpassungen vornehmen, da wir zwei Motoren betreiben werden, die ich unten zeigen werde. Möglicherweise müssen Sie auch kleinere Anpassungen vornehmen, je nachdem, für welche Pins Sie sich entschieden haben, da die Arduino-IDE standardmäßig auf die Pins 8-11 eingestellt ist.

Der Code, den ich verwendet habe, um die beiden Motoren "synchron" zu bewegen, ist unten:

//#enthalten

const int SchrittePerRevolution = 200;

Stepper myStepper1(stepsPerRevolution, 9, 10, 11, 12);

Stepper myStepper2(stepsPerRevolution, 4, 5, 6, 7);

int stepCount = 0;

Void setup () {// Initialisieren Sie den seriellen Port: Serial.begin (9600); }

Leere Schleife () {

myStepper1.step(1);

Serial.print ("Schritte:");

Serial.println (stepCount);

stepCount++;

Verzögerung (0,5);

myStepper2.step(1); Verzögerung (0,5); }

3. Mögliche Probleme

Probleme, auf die ich während dieses Prozesses gestoßen bin, waren nicht die Verwendung des richtigen Codebeispiels, die Verwendung eines fehlerhaften Überbrückungskabels und die Verwendung des falschen Treiber-ICs.

Stellen Sie sicher, dass Ihr Treiber, den Sie verwenden, in der Lage ist, einen Motor zu steuern

Überprüfen Sie die Seriennummer und überprüfen Sie die Spezifikationen

Ich hatte ein Problem mit einem toten Überbrückungskabel, das dazu führte, dass sich meine Motoren seltsam drehten

Ich musste ein Multimeter verwenden, um jeden Draht zu überprüfen

Und überprüfen Sie Ihren Code immer auf kleine Fehler wie das Fehlen eines Endes ";" Befehl

Schritt 10: Mechanisch

Mechanisch
Mechanisch
Mechanisch
Mechanisch
Mechanisch
Mechanisch
Mechanisch
Mechanisch

1. Material

Für das Serienmodell der Arme wird empfohlen, dass sie aus starkem und dennoch leichtem Material bestehen. Wir waren der Meinung, dass Aluminium perfekt passt.

Wir verwendeten 032-Aluminiumbleche, die auf 9,125 "x 17,5" geschnitten waren, und verfolgten das Muster aus der im vorherigen Schritt gezeigten Zeichnung.

2. Herstellung

Mit dem Säumer (der blauen Maschine) haben wir Säume hinzugefügt, die in entgegengesetzte Richtungen zeigen, so dass, wenn das Stück gebrochen und gefaltet wird, die beiden Säume ineinandergreifen und ein einziges komplettes Stück bilden.

Für die großen Kurven haben wir den Tennismith verwendet, wegen seiner hohen Präzision.

Für die kleineren Biegungen sollten Sie eine Maschine mit einem kleineren Fuß verwenden, hier kommt eine Maschine wie die Roto-Die ins Spiel. Aufgrund ihres kleineren Fußes können leider kleinere Pausen gemacht werden, das uns zur Verfügung stehende Roto-Die war noch zu groß für unsere Schiene und es war verformt.

**Alternativ kann ein Ersatz hergestellt werden, wenn Sie keinen Zugang zu den richtigen Geräten oder Werkzeugen haben.**

In unserem Fall haben wir unsere Arme mit einem Plasmaschneider aus Aluminium-Solarpanel-Schienen geschnitten und die Enden glatt geschliffen und dann Rücken an Rücken verschraubt, um ein doppelseitiges Schienensystem herzustellen. Idealerweise möchten wir die Schienen zusammenschweißen, aber ohne Zugang zu einer Schweißstation haben wir stattdessen die Schienen zusammengeklemmt und durchbohrt und dann miteinander verschraubt. Wenn jedoch dieser Weg beschritten wird, sollte besonders darauf geachtet werden, eine Sicherungsmutter und eine Unterlegscheibe zu verwenden, um sicherzustellen, dass das Stück so wenig wie möglich durchbiegt.

3. Der Gürtel

Für die Gürtel haben wir einige alte 3D-Druckergürtel verwendet, die wir retten konnten.

Die Riemen waren anfangs nicht lang genug, also kombinierten wir mit etwas Schrumpfschlauch zwei Teile, um einen ausreichend lang zu machen.

Die grünen Zahnräder und Holzdübel wurden durch Scheibenlager mit extra breiten Unterlegscheiben ersetzt, um ein Verrutschen des Riemens zu verhindern.

4. Beförderung

Und schließlich wurde der Wagen aus einem 5" x 5"-Blech aus 032-Aluminium hergestellt, in das Löcher gebohrt wurden, wo die entsprechenden Schrauben und Unterlegscheiben hingen. Der Abstand hängt davon ab, wie breit Ihre Schiene ist und wie viel Spiel Sie auf Ihren Unterlegscheiben haben.

Schritt 11: Reflexionen

Leider liefen alle Seiten unseres Projekts auf die große Barrikade der Zeit, und wir waren nicht in der Lage, unseren Entwurf bis zu unserem Zieldatum abzuschließen. Jedes Mitglied unseres Teams arbeitete schließlich in jedem anderen Aspekt unseres Designs zumindest bis zu einem gewissen Grad zusammen, was zu einigen Zeitsenken in der Lernkurve führte. Dies, gepaart mit dem Wunsch, ein Produkt mit möglichst wenig externen Ressourcen zu entwickeln (da wir alle unsere jeweiligen Teile von Grund auf neu erstellen wollten), führten zu einer großen Anzahl neu erfundener Räder.

Alle, die an dem Projekt mitgearbeitet haben, erfuhren mehr über die anderen Aspekte des Projekts. Software eine bestimmte Aktion ausführen zu lassen ist eine Sache, Software dazu zu bringen, mit Hardware zusammenzuarbeiten, eine andere. Ich würde sagen, dass es wichtig ist, dass jeder, der am Coding-Aspekt dieses Projekts arbeitet, so vertraut ist wie unser Projektcoder.

Insgesamt konnten wir nicht genau das erreichen, was wir wollten. Ich habe jedoch das Gefühl, dass wir auf dem richtigen Weg waren und wir alle neue Konzepte entdeckt und gelernt haben, die wir in zukünftigen Projekten anwenden können.

Empfohlen: