• IT-Karriere:
  • Services:

Etwas Trigonometrie

Es ist der Winkel, den jede durch die Koordinaten gezogene Linie zur positiven Y-Achse des Koordinatenkreuzes hat. Ich kann ihn ermitteln, wenn ich eine Formel aus einem Teilgebiet der Geometrie, der Trigonometrie, anwende. Für rechtwinklige Dreiecke - denn die Werte X und Y vom Beschleunigungssensor können als Ankathete und Gegenkathete eines rechtwinkligen Dreiecks betrachtet werden - gilt, dass Gegenkathete (Y) geteilt durch Ankathete (X) der Tangens des gesuchten Winkels ist. Die meisten Taschenrechner, aber auch die meisten Bibliotheken für Computersprachen besitzen eine Funktion, die diesen Wert in einen Winkel umrechnen kann. Beim Arduino heißt sie atan2. Ihre Argumente sind Gegenkathete und Ankathete. Ich kann ihr direkt die Werte X und Y übergeben und bekomme dafür den Winkel in Radiant. Um diesen in Grad umzurechnen, multipliziere ich ihn mit 180 und teile das Ergebnis durch Pi.

Stellenmarkt
  1. Hays AG, Hamburg
  2. Melitta Professional Coffee Solutions GmbH & Co. KG, Minden

Achtung: Die Funktion bekommt nicht den Quotienten als Argument geliefert, sondern die beiden Werte, die den Quotienten bilden. Nur dadurch kann die Funktion den korrekten Quadranten ermitteln und ihr Ergebnis mit dem korrekten Vorzeichen zurückliefern. Da es auch möglich ist, X und Y zu vertauschen, bedeutet dies, dass der im Dreieck gegenüberliegende Winkel berechnet wird und der Winkelanstieg im Uhrzeigersinn verläuft.

  • Adafruit Playground Circuit (Bild: Thomas Ell)
  • Adafruit Playground Circuit  (Bild: Thomas Ell)
  • Bewegungssensor mit Koordinatenbeschriftung (Bild: Thomas Ell)
  • Skript in der Arduino IDE (Bild: Thomas Ell)
  • Ausgabe des seriellen Monitors (Bild: Thomas Ell)
  • Gehäuse für den Playground Circuit (Bild: Thomas Ell)
  • Gehäuse für den Playground Circuit (Bild: Thomas Ell)
  • (Bild: Thomas Ell)
  • (Bild: Thomas Ell)
  • (Bild: Thomas Ell)
(Bild: Thomas Ell)

Leider passt der Wert nur für die obere Seite des Koordinatenkreuzes: Mit der positiven Y-Achse als Bezugspunkt wird ein Winkel von 0 bis 180 Grad berechnet, für die untere Seite geht es dann gegen den Uhrzeigersinn von -180 bis 0 Grad weiter. Möchte ich für die untere Seite einen Wertebereich von 180 - 360 Grad, so addiere ich zum von atan2 zurückgegebenen Wert 360 Grad. Mit diesen Werten ist es jetzt endlich möglich, die einzuschaltende LED zu ermitteln. Ich habe das dann mit einem if und 9 else if realisiert. Wir haben zehn LEDs, die in etwa gleichmäßig im Kreis verteilt sind. 360 dividiert durch 10 ergibt einen Bereich von 36 Grad pro LED. Das stimmt zwar nicht ganz, da sich im Bereich der USB-Buchse und des Anschlusses für die Batterie keine LEDs befinden und diese dafür im restlichen Bereich etwas enger sitzen. Aber das tut der Funktion keinen Abbruch.

  • Adafruit Playground Circuit (Bild: Thomas Ell)
  • Adafruit Playground Circuit  (Bild: Thomas Ell)
  • Bewegungssensor mit Koordinatenbeschriftung (Bild: Thomas Ell)
  • Skript in der Arduino IDE (Bild: Thomas Ell)
  • Ausgabe des seriellen Monitors (Bild: Thomas Ell)
  • Gehäuse für den Playground Circuit (Bild: Thomas Ell)
  • Gehäuse für den Playground Circuit (Bild: Thomas Ell)
  • (Bild: Thomas Ell)
  • (Bild: Thomas Ell)
  • (Bild: Thomas Ell)
(Bild: Thomas Ell)

Mit folgendem kleinen Programm ist es möglich das bisher Beschriebene zu prüfen:

  1. #include <Adafruit_CircuitPlayground.h>
  2. #include <math.h>
  3. int pos;
  4. void setup() {
  5. CircuitPlayground.begin();
  6. }
  7. void loop() {
  8. float x = CircuitPlayground.motionX();
  9. float y = CircuitPlayground.motionY();
  10. float angle = (atan2(y, x) * 180) / PI;
  11. CircuitPlayground.clearPixels();
  12. if (angle >= 0 && angle < 36) {
  13. pos = 0;
  14. } else if (angle >= 36 && angle < 72) {
  15. pos = 1;
  16. } else if (angle >= 72 && angle < 108) {
  17. pos = 2;
  18. } else if (angle >= 108 && angle < 144) {
  19. pos = 3;
  20. } else if (angle >= 144 && angle < 180) {
  21. pos = 4;
  22. } else if (angle >= -180 && angle < -144) {
  23. pos = 5;
  24. } else if (angle >= -144 && angle < -108) {
  25. pos = 6;
  26. } else if (angle >= -108 && angle < -72) {
  27. pos = 7;
  28. } else if (angle >= -72 && angle < -36) {
  29. pos = 8;
  30. } else if (angle >= -36 && angle < 0) {
  31. pos = 9;
  32. }
  33. CircuitPlayground.strip.setPixelColor(pos, 255, 255, 255);
  34. CircuitPlayground.strip.show();
  35. delay (100);
  36. }

Die Variable pos bekommt hier die Indexnummer der höchsten LED zugewiesen. Wenn alles funktioniert, sollte jetzt immer die LED leuchten, die sich im Vergleich zu den anderen am höchsten befindet. Da die Indexnummern der einzelnen LEDs vom Hersteller so vergeben wurden, dass die im Uhrzeigersinn jeweils nächste LED einen um 1 höheren Wert hat, kann ich sie prima für Vergleiche verwenden.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Wie der Beschleunigungssensor funktioniertDie Regeln umsetzen 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8.  


Anzeige
Hardware-Angebote
  1. (u. a. PS5 + HD Kamera für 549,99€)

erlkoenig 19. Sep 2018

Man könnte den Slide Switch Eingang als Interrupt konfigurieren, und den Prozessor bei...

FrankGallagher 18. Sep 2018

Hast du falsch verstanden. Druckempfindlich nennt man resistive Flächen, kapazitive...

Eheran 18. Sep 2018

Ich habe noch nie einen Megacontroller programmiert. Wie groß sind die? Meine winzigen...


Folgen Sie uns
       


Programm für IT-Jobeinstieg: Hoffen auf den Klebeeffekt
Programm für IT-Jobeinstieg
Hoffen auf den Klebeeffekt

Aktuell ist der Jobeinstieg für junge Ingenieure und Informatiker schwer. Um ihnen zu helfen, hat das Land Baden-Württemberg eine interessante Idee: Es macht sich selbst zur Zeitarbeitsfirma.
Ein Bericht von Peter Ilg

  1. Arbeitszeit Das Sechs-Stunden-Experiment bei Sipgate
  2. Neuorientierung im IT-Job Endlich mal machen!
  3. IT-Unternehmen Die richtige Software für ein Projekt finden

Weclapp-CTO Ertan Özdil: Wir dürfen nicht in Schönheit und Perfektion untergehen!
Weclapp-CTO Ertan Özdil
"Wir dürfen nicht in Schönheit und Perfektion untergehen!"

Der CTO von Weclapp träumt von smarter Software, die menschliches Eingreifen in der nächsten ERP-Generation reduziert. Deutschen Perfektionismus hält Ertan Özdil aber für gefährlich.
Ein Interview von Maja Hoock


    Fiat 500 als E-Auto im Test: Kleinstwagen mit großem Potenzial
    Fiat 500 als E-Auto im Test
    Kleinstwagen mit großem Potenzial

    Fiat hat einen neuen 500er entwickelt. Der Kleine fährt elektrisch - und zwar richtig gut.
    Ein Test von Peter Ilg

    1. Vierradlenkung Elektrischer GMC Hummer SUV fährt im Krabbengang seitwärts
    2. MG Cyberster MG B Roadster mit Lasergürtel und Union Jack
    3. Elektroauto E-Auto-Prämie übersteigt in 2021 schon Vorjahressumme

      •  /