Dieses Mal werden wir uns mit dem Anschluss des analogen triaxialen Beschleunigungsmessers ADXL335 an den Arduino befassen.
Notwendig
- -Arduino;
- - Beschleunigungsmesser ADXL335;
- - ein PC mit der Arduino IDE-Entwicklungsumgebung.
Anweisungen
Schritt 1
Beschleunigungsmesser werden verwendet, um den Beschleunigungsvektor zu bestimmen. Der Beschleunigungsmesser ADXL335 hat drei Achsen und kann dadurch den Beschleunigungsvektor im dreidimensionalen Raum bestimmen. Da die Schwerkraft auch ein Vektor ist, kann der Beschleunigungsmesser seine eigene Orientierung im dreidimensionalen Raum relativ zum Erdmittelpunkt bestimmen.
Die Abbildung zeigt Bilder aus dem Pass (https://www.analog.com/static/imported-files/data_sheets/ADXL335.pdf) für den Beschleunigungssensor ADXL335. Hier sind die Koordinatenachsen der Empfindlichkeit des Beschleunigungsmessers in Bezug auf die geometrische Platzierung des Gerätekörpers im Raum sowie eine Tabelle der Spannungswerte von 3 Beschleunigungsmesserkanälen in Abhängigkeit von seiner Ausrichtung im Raum dargestellt. Die Daten in der Tabelle gelten für einen Sensor im Ruhezustand.
Schauen wir uns genauer an, was uns der Beschleunigungsmesser anzeigt. Lassen Sie den Sensor waagerecht liegen, z. B. auf einem Tisch. Dann ist die Projektion des Beschleunigungsvektors gleich 1g entlang der Z-Achse oder Zout = 1g. Die anderen beiden Achsen haben Nullen: Xout = 0 und Yout = 0. Wenn der Sensor "auf den Rücken" gedreht wird, wird er relativ zum Schwerkraftvektor in die entgegengesetzte Richtung gerichtet, d. Zout = -1g. Ebenso werden Messungen auf allen drei Achsen vorgenommen. Es ist klar, dass der Beschleunigungsmesser beliebig im Raum positioniert werden kann, daher werden wir von allen drei Kanälen andere Werte als Null ablesen.
Wenn die Sonde entlang der vertikalen Z-Achse stark geschüttelt wird, ist der Zout-Wert größer als „1g“. Die maximal messbare Beschleunigung beträgt „3g“in jeder der Achsen in beliebiger Richtung (also beide mit „Plus“und „Minus“).
Schritt 2
Ich denke, wir haben das Funktionsprinzip des Beschleunigungsmessers herausgefunden. Schauen wir uns nun den Anschlussplan an.
Der analoge Beschleunigungsmesser-Chip ADXL335 ist ziemlich klein und in einem BGA-Gehäuse untergebracht, und es ist schwierig, ihn zu Hause auf einer Platine zu montieren. Daher werde ich ein fertiges GY-61-Modul mit einem ADXL335-Beschleunigungsmesser verwenden. Solche Module in chinesischen Online-Shops kosten fast einen Cent.
Um den Beschleunigungsmesser mit Strom zu versorgen, muss der VCC-Pin des Moduls mit einer Spannung von +3,3 V versorgt werden. Die Sensormesskanäle werden mit den analogen Pins des Arduino verbunden, zum Beispiel "A0", "A1" und " A2". Das ist die ganze Schaltung:)
Schritt 3
Laden wir diese Skizze in den Arduino-Speicher. Wir werden die Messwerte von den analogen Eingängen auf drei Kanälen auslesen, in Spannung umwandeln und an die serielle Schnittstelle ausgeben.
Der Arduino hat einen 10-Bit-ADC und die maximal zulässige Pinspannung beträgt 5 Volt. Die gemessenen Spannungen werden mit Bits kodiert, die nur 2 Werte annehmen können - 0 oder 1. Das bedeutet, dass der gesamte Messbereich durch (1 + 1) hoch 10 geteilt wird, d.h. auf 1024 gleichen Segmenten.
Um die Messwerte in Volt umzuwandeln, müssen Sie jeden am Analogeingang gemessenen Wert durch 1024 (Segmente) dividieren und dann mit 5 (Volt) multiplizieren.
Sehen wir uns am Beispiel der Z-Achse an, was wirklich vom Beschleunigungsmesser kommt (die letzte Spalte). Wenn der Sensor horizontal positioniert ist und nach oben schaut, kommen die Zahlen (2,03 +/- 0,01). Dies sollte also der Beschleunigung "+1g" entlang der Z-Achse und einem Winkel von 0 Grad entsprechen. Drehen Sie den Sensor um. Die Zahlen kommen an (1, 69 +/- 0, 01), was "-1g" und einem Winkel von 180 Grad entsprechen sollte.
Schritt 4
Nehmen wir die Werte vom Beschleunigungsmesser bei Winkeln von 90 und 270 Grad und tragen sie in die Tabelle ein. Die Tabelle zeigt die Drehwinkel des Beschleunigungsmessers (Spalte „A“) und die entsprechenden Zout-Werte in Volt (Spalte „B“).
Aus Gründen der Übersichtlichkeit ist ein Diagramm der Spannungen am Zout-Ausgang gegen den Drehwinkel gezeigt. Das blaue Feld ist die Reichweite im Ruhezustand (bei 1 g Beschleunigung). Das rosa Kästchen in der Grafik ist ein Rand, damit wir Beschleunigungen bis + 3 g und bis -3 g messen können.
Bei einer Drehung von 90 Grad hat die Z-Achse keine Beschleunigung. Jene. ein Wert von 1,67 Volt ist eine bedingte Null Zo für die Z-Achse. Dann kannst du die Beschleunigung wie folgt ermitteln:
g = Zout - Zo / Sensitivity_z, hier ist Zout der gemessene Wert in Millivolt, Zo ist der Wert bei Nullbeschleunigung in Millivolt, Sensitivity_z ist die Sensitivität des Sensors entlang der Z-Achse Kalibrieren Sie den Beschleunigungsmesser und berechnen Sie den Sensitivitätswert speziell für Ihre Sensor mit der Formel:
Empfindlichkeit_z = [Z (0 Grad) - Z (90 Grad)] * 1000. In diesem Fall ist die Empfindlichkeit des Beschleunigungsmessers entlang der Z-Achse = (2, 03 - 1, 68) * 1000 = 350 mV. Ebenso muss die Empfindlichkeit für die X- und Y-Achse berechnet werden.
Spalte "C" der Tabelle zeigt die für fünf Winkel berechnete Beschleunigung bei einer Empfindlichkeit von 350. Wie Sie sehen, stimmen sie praktisch mit denen in Abbildung 1 überein.
Schritt 5
In Erinnerung an den geometrischen Grundkurs erhalten wir die Formel zur Berechnung der Drehwinkel des Beschleunigungsmessers:
angle_X = arctg [sqrt (Gz ^ 2 + Gy ^ 2) / Gx].
Die Werte sind in Radiant angegeben. Um sie in Grad umzuwandeln, dividiere durch Pi und multipliziere mit 180.
Als Ergebnis wird in der Abbildung eine vollständige Skizze gezeigt, die die Beschleunigungs- und Drehwinkel des Beschleunigungsmessers entlang aller Achsen berechnet. Die Kommentare enthalten Erläuterungen zum Programmcode.
Bei der Ausgabe an den Port „Serial.print()“bezeichnet das Zeichen „\t“ein Tabulatorzeichen, damit die Spalten gerade sind und die Werte untereinander liegen. "+" bedeutet Verkettung (Verkettung) von Zeichenfolgen. Außerdem teilt der Operator "String()" dem Compiler explizit mit, dass der Zahlenwert in einen String umgewandelt werden muss. Der round()-Operator rundet die Ecke auf 1 Grad ab.
Schritt 6
Wir haben also gelernt, wie man mit dem Arduino Daten vom analogen Beschleunigungsmesser ADXL335 nimmt und verarbeitet. Jetzt können wir den Beschleunigungsmesser in unseren Designs verwenden.