Wir sammeln den Handschuh, um die Position der Hände selbst zu bestimmen

  • Tutorial
In diesem Artikel werde ich darüber sprechen, wie wir einen Handschuh gesammelt haben, um die Position der Hand für den Wettbewerb zu bestimmen. Natürlich gibt es Schwierigkeiten bei der Herstellung, aber selbst ein Schüler kann es zusammenbauen. Ein solcher Handschuh kann sowohl zur Steuerung der Elektronik als auch als Manipulator für verschiedene Spiele eingesetzt werden.



Diejenigen, die den Scannerartikel gelesen habenIch erinnere mich wahrscheinlich, dass ich die Fortsetzung versprochen habe. Aber wegen der Wettkämpfe habe ich immer noch keine Zeit dafür. Aber jetzt sitze ich nach dem Wettbewerb und schreibe einen Artikel über einen Teil unseres Projekts. Auf der Ausstellung wurde ich gebeten, über das Funktionsprinzip dieses Geräts zu sprechen, dann wurden sie nach Kontakten gefragt, und dann entschied ich mich, lieber einen Artikel zu schreiben und das Problem von mehr als zwei Personen zu lösen. Anfangs steuerten wir mit diesem Handschuh die Elektronik (wir schalteten Wasserkocher im Internet mit Gesten ein), aber jetzt verwenden wir ihn, um die Position der Hand zu verfolgen. Das ist die ganze Einführung.

Arbeitsprinzip


Gestenhandschuhe können in verschiedene Typen unterteilt werden (ich kann etwas überspringen):

1) Auf Dehnungsmessstreifen
Nun, das ist die einfachste. Ein Dehnungsmessstreifen ist ein Streifen, von dem zwei Kontakte ausgehen. Beim Dehnen / Komprimieren eines bestimmten Streifens ändert sich sein Widerstand. Wir setzen mit einem solchen Sensor jedes bewegliche Gelenk auf und erzielen einen Gewinn. Diese Dehnungsmessstreifen sind jedoch recht teuer, es ist unmöglich, die Richtung der Biegung zu bestimmen, und das Band selbst hat eine anständige Länge (etwa die Länge eines Fingers).

2) Auf den "LED Röhren"
Schon interessanter. Die Quintessenz lautet: Ein Silikon- oder Gummischlauch wird entnommen, eine LED ist an einem Ende des Schlauchs installiert und ein Fotowiderstand / Transistor am anderen Ende. Je stärker wir einen solchen Sensor biegen, desto weniger Licht gelangt in den Photosensor und dementsprechend steigt sein Widerstand. Ein solcher Sensor kostet eine Größenordnung weniger. Es hat jedoch die gleichen Nachteile: Es ist unpraktisch, sich zu biegen, und Sie können die Richtung der Biegung nicht bestimmen.

3) Orientierungssensoren
Damit meine ich verschiedene Beschleunigungsmesser, Gyroskope, Magnetometer und deren verschiedene Kombinationen. Die Kosten solcher Sensoren variieren enorm und die Hauptprobleme treten bei ihrer Programmierung auf. Es sind diese Sensoren, die ich mit einem Handschuh anbrachte.

Ich habe mich für die LIS331-Sensoren entschieden. Dies ist ein 8-Bit-Dreiachsen-Beschleunigungsmesser. Nur weil sie damals im Einzelhandel 30 Rubel wert waren. Im Allgemeinen war dies meine erste Erfahrung mit der Verwendung solcher Sensoren. Daher entschied ich: "Wenn ich diesen Sensor nicht mehr brauche, wird es mir nicht Leid tun."
Vom Beschleunigungsmesser erhalten wir die Ausdehnung des Beschleunigungsvektors des Sensors entlang seiner drei Achsen. Woher kommt die Beschleunigung? Nun, wie aus dem Weltraum - die Erdbeschleunigung beeinflusst uns. Hier muss zum Minus dieses Sensors gesagt werden: Dieser gleiche Vektor schwankt bei jedem Händedruck, so dass es am Ausgang zu hochfrequenten Störungen kommt. Aber um die Geste zu bestimmen, wenn sich die Hand fast nicht bewegt, können sie verwendet werden.
Eigentlich ist das die ganze Aufgabe: für jeden beweglichen Knochen einen Sensor nehmen, ihn mit dem Mikrocontroller verbinden, die Position des Sensors ermitteln, die Geste bestimmen. Aber es war nicht hier ...

Sensor Board


Dieser Sensor muss zunächst noch gelötet werden. Glaubst du, du lötest gut? Treffen (Rastermaß auf dem Foto 0,5 mm):



LGA16. Er freut sich auch, Sie kennenzulernen. Wegen ihm musste ich eine Lötstation kaufen. Ich liebe SMD wirklich. Details sind klein und Schals fallen ebenfalls klein aus. Aber das ist ... Im Allgemeinen sage ich jetzt, nachdem ich die MPU-9250 gelötet habe, dass es ein Werbegeschenk ist, und dann war es ein echtes. Naja, zumindest töten ist nicht schade. Zeichnen Sie mit einem Programm zum Aufspüren von Brettern ein Brett. Zuerst ein Pad für den Chip. Unser bester Freund beim Löten ist die Oberflächenspannung. Wenn wir löten, ist es diese Kraft, die den Mikrokreislauf in Position fallen lässt. Daher müssen die Stellen ziemlich lang gemacht werden, sonst zieht der Mikrokreis die gleiche Oberflächenspannung zur Seite. Wir entnehmen alle Größen einem Datenblatt. Ich könnte es nicht in einer Schicht ohne Jumper machen, also wird es immer noch einer sein. In der Verkabelung wird dies durch die rote Linie angezeigt. Große Flächen, um dort eine Schlaufe zu löten. Da der Abstand zwischen diesen Kontaktstellen 2,54 mm beträgt und sich diese Kontaktstellen sowohl über als auch unter der Mikroschaltung befinden, ist eine Schleife mit einem Abstand zwischen den Leitungen von 1,27 mm für uns ideal geeignet. Das Ergebnis ist dieses Board:



Und hier ist ein solcher Sensor nach dem Löten:



Das Foto zeigt deutlich das Durcheinander auf dem Tisch, für das ich mich entschuldige , als ich über den Schritt der Schlussfolgerungen sprach. Die Breite der Schlaufe entspricht fast der Breite des Brettes und sieht daher nicht ganz schlecht aus. Die Platine muss jedoch noch hergestellt und geätzt werden. Die Gebühr wird leicht von der LUT erhoben, und ich vergifte Wasserstoffperoxid. Um das beste Ergebnis zu erzielen, rolle ich ein Brett in einer Lösung mit einem Elektromotor. Sie können sofort eine Reihe von Brettern auf einem Stück Glasfaser herstellen. Dies wird den Herstellungsprozess erheblich beschleunigen. Nach dem Ätzen erhalten wir eine Gebühr und in diesem Stadium beginnen die Probleme ...

Löten


Dieser Vorgang ist völlig unbrauchbar zu beschreiben. Es ist besser, das Video einmal zu sehen. Ich sage nur, dass ich 8 Sensoren zusammengedrückt habe, bevor ich die 6 benötigten Sensoren gelötet habe. Nun, wenn ich das zum ersten Mal löte, kannst du vergeben. Ich werde keine Videos zum Löten des LGA-Gehäuses anhängen, da sie in einer Suchmaschine leicht zu finden sind und ich das Internet nicht mit dem nächsten verstopfen möchte.

Ein weiterer nützlicher Hack fürs Leben: Löten Sie mit einem Fön in einem Tablett / Backblech / Teller / Becken im Allgemeinen alles, was Seiten hat. Mikrochips werden von einem Haartrockner weggeblasen, und nach ihnen zu suchen ist fast unbrauchbar.

Nachdem wir den Sensor versiegelt haben, löten wir die Schleife. Denken Sie daran, dass wir vergessen haben, die Brücke zu löten, die Schleife zu löten, die Brücke zu löten und die Schleife wieder an ihren Platz zu bringen.

Mikrocontroller-Platine


Dies ist Ihr Geschäft, das MK verwenden soll. Hier erzähle ich Ihnen von einem kleinen Trick, über den sie aus irgendeinem Grund vergessen. Und Sie können damit die Beine des Mikrocontrollers schonen, was bei manchen Boards bereits nicht ausreicht. Und dieser Trick heißt Logik. Nicht der, der weiblich ist, sondern der, der bei 74HC beginnt. Wir sind speziell an der 74HC164 interessiert. Dies ist ein Schieberegister. Das funktioniert ganz einfach. Er hat Beine Daten, Uhr, Reset und Schlussfolgerungen. Durch Data and Clock senden wir nacheinander 8 Bits, die das Register gleichzeitig zu Schlussfolgerungen ausgibt. Und mit Hilfe von Reset können Sie alle Ausgänge auf 0 setzen. Tatsächlich verbinden wir die Enable-Beschleunigungsmesser-Beine mit diesem Mikrokreis und steuern mit Hilfe eines Mikrokreises acht Beschleunigungsmesser. Wir brauchen aber nur fünf, so dass die restlichen zwei mit LEDs belegt werden können. Es wird ein schönes Highlight. Aber hier gibt es einen Fehler: Wenn wir den Mikrokreis zurücksetzen, wird 0. in das "Bit der LEDs" geschrieben. Und da wir Daten ziemlich schnell schreiben, sieht dieses Blinken wie eine Abnahme der Helligkeit aus, was den Ingenieur nervös machen kann. Das allgemeine Blockdiagramm des Handschuhs sieht folgendermaßen aus:



Beachten Sie beim Programmieren auch, dass der Mikrokreis ausgewählt wird, wenn sich auf dem Aktivierungsabschnitt (auch als CS bezeichnet) eine logische Null befindet. Um den zweiten Beschleunigungsmesser auszuwählen, muss in das Register nicht 01000000, sondern 10111111 geschrieben werden.

Programmierung


Der Datenaustausch mit dem Beschleunigungsmesser erfolgt wie folgt:
0 Bit - R / W Bit. Wenn 1, dann lesen wir die Daten, wenn 0, dann schreiben wir in den Sensor.
1-7 Bit - Die Adresse des Registers, mit dem wir arbeiten werden.
8-15 Bit - Daten, die wir in das Register schreiben. Wenn wir lesen, ignoriert der Beschleunigungsmesser sie einfach.

Wenn damit alles klar ist, lesen wir zunächst das Register WHO_AM_I. Dieses Register kann nur gelesen werden und der Standardwert ist im Datenblatt angegeben. Für unseren Beschleunigungsmesser befindet sich dieses Register bei 0x0F und der Standardwert ist 0x3B. Das heißt, wir senden zuerst 0x8F an den Beschleunigungsmesser, dann alle 8 Bits, und 0x3B sollten berücksichtigt werden. Wenn Sie etwas anderes lesen, dann irgendwo einen Pfosten. Entweder beim Löten oder beim Senden der falschen Daten oder beim Überhitzen des Chips beim Löten. Vielleicht ist die Geschwindigkeit zu hoch. Und vergessen Sie nicht, das CS-Bein auf den Boden zu ziehen und es zurückzubringen. Wenn Sie die richtigen Daten erhalten haben, können Sie gratulieren - es bleiben nur 4 Sensoren zu löten. Sie erhalten folgendes Bild:



Nachdem alle fünf Sensoren (einer für jeden Finger) versiegelt wurden, befestigen wir sie am Handschuh. Ich habe dafür Heißkleber verwendet. Folgendes ist passiert:



Damit wir Daten von der Mikroschaltung empfangen können, müssen diese eingeschaltet sein. Setzen Sie dazu das BOOT-Bit des Registers CTRL_REG2 auf eins und schreiben Sie den Wert 0xC7 in das Register CTRL_REG1. Das erste ist ein Neustart des Beschleunigungsmessers, und das zweite ist die Ausgabe des Sensors aus dem Energiesparmodus, die Einstellung der Abtastfrequenz von 400 Hz und die Einbeziehung aller drei Achsen.
Alle Daten von den x-, y- und z-Achsen werden in Register mit den Adressen 0x29, 0x2B bzw. 0x2D geschrieben. Um die Daten zu erhalten, lesen wir sie einfach und das wars (vergessen Sie nicht, dass beim Lesen 0 Bit des ersten Sendens 1 ist). Hier ist ein weiteres "Wenn" mit einem Haken: Wenn Sie die Daten gelesen haben und es feste Nullen gibt und der Code definitiv funktioniert und korrekt ist, schauen Sie sich den Namen Ihrer Beschleunigungsmesser genau an. Möglicherweise gibt es nicht LIS331DL, sondern LIS331DLH. Was gibt dieser Brief? Und der Sensor ist jetzt 16-Bit, also auch mit vielen Einstellungen. Aus diesem Grund ändern sich die Registeradressen. Ich habe 4 Stunden getötet, um diesen Pfosten zu finden, nicht weniger. Es war eine Schande. Angenommen, Sie haben alles richtig gemacht. Dann bekommst du solchen Müll im Terminal:



Ich bezweifle, dass solche Beschleunigungen auf den friedlich auf dem Tisch liegenden Beschleunigungsmesser wirken. Wahrscheinlich ist das Ganze eine Störung. Nein, nun, was wollten wir für 30 Rubel? Wir müssen sie irgendwie loswerden. Dafür brauchen wir einen Filter. Der einfachste Weg, es zu implementieren, ist Software (im Sensor scheint es einen Filter zu geben, aber aus irgendeinem Grund hat es bei mir nicht funktioniert). Es sieht einfach hässlich aus: neuer Wert = alter Wert + gemessener Wert * Koeffizient. Es ist klar, dass die Grenzfrequenz von dem Koeffizienten abhängt, den Sie für Ihre eigenen Aufgaben auswählen müssen.

Gestendefinition


Im einfachsten Fall können Sie sich nur das Vorzeichen der von uns akzeptierten Nummer ansehen. Besorgen Sie sich ein Array mit fünf Fingern und senden Sie dieses Array an den Computer. Wenn der Finger gebeugt ist, dann 1, und wenn er gerade ist, dann 0. Zum Beispiel 11011. Genau dies wurde im ersten Handschuh implementiert, da nicht mehr benötigt wurde. Es ist aber durchaus realistisch, den Neigungswinkel zu bestimmen. Dazu nehmen wir einfach den Arcustangens des Beschleunigungsverhältnisses entlang zweier Achsen und ermitteln den Neigungswinkel entlang der Ebene, in der diese Achsen liegen. Nachdem dies für drei Achsenpaare durchgeführt wurde, können wir die Neigungswinkel entlang drei Achsen ermitteln und die Position des Sensors im dreidimensionalen Raum wiederherstellen. Aber ich denke, niemand wird es brauchen. Nicht einmal, weil die Aufgabe dies nicht erfordert, sondern weil Sie für solche Aufgaben einen sechsachsigen Sensor (Beschleunigungsmesser + Gyroskop) oder besser neunachsige Sensoren (Beschleunigungsmesser + Gyroskop + Magnetometer) benötigen.

Fazit


Ich hoffe, dass diejenigen, die etwas wie diesen Artikel sammeln wollten, helfen werden. Ich hätte damals geholfen. Jetzt haben wir bereits einen Wettbewerb mit diesem Handschuh gewonnen und sogar einen neuen Handschuh für Neun-Achsen-Sensoren hergestellt, mit dem wir den anderen gewonnen haben. Ich sage Ihnen im Geheimen, dass das Magnetometer bei mir nicht funktioniert hat, aber niemand weiß davon. Der Handschuh funktioniert auch ohne ihn ziemlich gut, daher würde ich lieber billigere Sechsachsensensoren kaufen. Jetzt werden in naher Zukunft keine Wettbewerbe erwartet, daher werde ich versuchen, den zweiten Artikel über den 3D-Scanner zu schreiben, wie ich versprochen habe.

PS Ich habe vergessen, das Platinenlayout für den Sensor tatsächlich anzubringen: Platine
in SprintLayout

Jetzt auch beliebt: