- Erforderliche Materialien:
- Schaltplan:
- Stromversorgung Ihres Setups:
- Programmieren Ihres Arduino:
- Vorbereiten der Android-Anwendung mithilfe der Verarbeitung:
- Arbeitsweise des Arduino-Neigungsmessers:
Die MPU6050 ist ein IC 3-Achsen-Beschleunigungsmesser und ein 3-Achsen-Gyroskop in einer Einheit. Es enthält auch einen Temperatursensor und ein DCM, um eine komplexe Aufgabe auszuführen. Die MPU6050 wird häufig beim Bau von Drohnen und anderen Remote-Robotern wie einem selbstausgleichenden Roboter verwendet. In diesem Projekt lernen wir, wie man mit der MPU6050 einen Neigungsmesser oder eine Wasserwaage baut. Wie wir wissen, wird ein Neigungsmesser verwendet, um zu überprüfen, ob eine Oberfläche perfekt ausgerichtet ist oder nicht. Sie sind entweder als Spritzblasenmesser oder als digitale Messgeräte erhältlich. In diesem Projekt werden wir einen digitalen Neigungsmesser bauen, der mit einer Android-Anwendung überwacht werden kann. Der Grund für die Verwendung eines Remote-Displays wie eines Mobiltelefons besteht darin, dass wir die Werte der MPU6050 überwachen können, ohne auf die Hardware achten zu müssen. Dies ist sehr praktisch, wenn die MPU6050 auf einer Drohne oder einem anderen unzugänglichen Ort platziert wird.
Erforderliche Materialien:
- Arduino Pro-mini (5 V)
- MPU6050 Gyro Sensor
- Bluetooth-Modul HC-05 oder HC-06
- FTDI-Karte
- Steckbrett
- Kabel anschließen
- Smartphone
Schaltplan:
Das vollständige Schaltbild für dieses Arduino Tilt Sensor-Projekt ist unten dargestellt. Es hat nur drei Komponenten und kann einfach über das Steckbrett gebaut werden.
Die MPU6050 kommuniziert mit Hilfe von I2C und daher ist der SDA-Pin mit dem A4-Pin von Arduino verbunden, der der SDA-Pin ist, und der SCL-Pin ist mit dem A5-Pin von Arduino verbunden. Das HC-06 Bluetooth-Modul arbeitet mit Hilfe der seriellen Kommunikation, daher ist der Rx-Pin von Bluetooth mit Pin D11 und der Tx-Pin von Bluetooth mit Pin D10 des Arduino verbunden. Diese Pins D10 und D11 werden durch Programmieren des Arduino als serielle Pins konfiguriert. Das HC-05-Modul und das MSP6050-Modul werden mit +5 V betrieben und werden daher wie oben gezeigt vom Vcc-Pin des Arduino gespeist.
Ich benutzte einige Steckbretter-Verbindungsdrähte und baute das Setup über einem kleinen Steckbrett auf. Sobald die Verbindungen hergestellt sind, sieht mein Board wie folgt aus.
Stromversorgung Ihres Setups:
Sie können Ihre Schaltung entweder wie bisher über die FTDI-Programmierkarte mit Strom versorgen oder eine 9-V-Batterie oder einen 12-V-Adapter verwenden und an den Raw-Pin des Arduino Pro mini anschließen. Der Arduino Pro-mini verfügt über einen eingebauten Spannungsregler, der diese externe spannungsgeregelte + 5V umwandeln würde.
Programmieren Ihres Arduino:
Sobald die Hardware fertig ist, können wir mit der Programmierung unseres Arduino beginnen. Wie immer finden Sie den vollständigen Code für dieses Projekt am Ende dieser Seite. Aber um das Projekt besser zu verstehen, habe ich den Code in kleine Risse zerlegt und sie in den folgenden Schritten erklärt.
Der erste Schritt wäre die Anbindung der MPU6050 an Arduino. Für dieses Projekt verwenden wir die von Korneliusz entwickelte Bibliothek, die über den unten stehenden Link heruntergeladen werden kann
MPU6050 Liberty - Korneliusz Jarzebski
Laden Sie die ZIP-Datei herunter und fügen Sie sie Ihrer Arduino IDE hinzu. Gehen Sie dann zu Datei-> Beispiele-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Dadurch wird das Beispielprogramm geöffnet, das die gerade heruntergeladene Bibliothek verwendet. Klicken Sie also auf Hochladen und warten Sie, bis das Programm auf Ihr Arduino Pro mini hochgeladen wurde. Sobald dies erledigt ist, öffnen Sie Ihren seriellen Monitor und stellen Sie Ihre Baudrate auf 115200 ein und prüfen Sie, ob Sie Folgendes erhalten.
Anfangs sind alle drei Werte Null, aber wenn Sie Ihr Steckbrett bewegen, können Sie beobachten, wie sich diese Werte ändern. Wenn sie sich ändern, bedeutet dies, dass Ihre Verbindung korrekt ist. Überprüfen Sie andernfalls Ihre Verbindungen. Nehmen Sie sich hier etwas Zeit und beachten Sie, wie sich die drei Werte Pitch Roll und Yaw je nach Neigung Ihres Sensors unterscheiden. Wenn Sie verwirrt sind, drücken Sie die Reset-Taste am Arduino und die Werte werden wieder auf Null initialisiert. Kippen Sie dann den Sensor in eine Richtung und prüfen Sie, welche Werte variieren. Das folgende Bild hilft Ihnen, besser zu verstehen.
Von diesen drei Parametern interessieren uns nur Roll und Pitch. Der Rollwert gibt Auskunft über die Neigung in der X-Achse und der Pitch-Wert über die Neigung in der Y-Achse. Nachdem wir die Grundlagen verstanden haben, können wir den Arduino tatsächlich so programmieren, dass er diese Werte liest. Senden Sie ihn über Bluetooth an Arduino. Beginnen wir wie immer damit, alle für dieses Projekt benötigten Bibliotheken einzuschließen
#einschließen
Dann initialisieren wir die Software-Serie für das Bluetooth-Modul. Dies ist aufgrund der Software Serial-Bibliothek in Arduino möglich. Die E / A-Pins können so programmiert werden, dass sie als serielle Pins funktionieren. Hier verwenden wir die digitalen Pins D10 und D11, wobei D10 id Rx und D11 Tx ist.
SoftwareSerial BT (10, 11); // RX, TX
Anschließend initialisieren wir die für das Programm benötigten Variablen und Objekte und wechseln zur Funktion setup () , in der wir die Baudrate für den seriellen Monitor und Bluetooth festlegen. Für HC-05 und HC-06 beträgt die Baudrate 9600, daher ist die Verwendung derselben obligatorisch. Dann prüfen wir, ob der IIC-Bus von Arduino mit der MPU6050 verbunden ist. Andernfalls drucken wir eine Warnmeldung und bleiben dort, solange das Gerät angeschlossen ist. Danach kalibrieren wir den Gyro und stellen seine Schwellenwerte mit seinen jeweiligen Funktionen ein, wie unten gezeigt.
void setup () {Serial.begin (115200); BT.begin (9600); // Starten Sie die Bluetooth-Kommunikation mit einer Baudrate von 9600 // Initialisieren Sie MPU6050 während (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Konnte keinen gültigen MPU6050-Sensor finden, Verkabelung überprüfen!"); Verzögerung (500); } mpu.calibrateGyro (); // Gyroskop beim Start kalibrieren mpu.setThreshold (3); // Steuert die Empfindlichkeit}
Die Zeile " mpu.calibrateGyro ();" Kalibrieren Sie die MPU6050 auf die Position, an der sie sich gerade befindet. Diese Zeile kann innerhalb des Programms mehrmals aufgerufen werden, wenn die MPU6050 kalibriert und alle Werte auf Null gesetzt werden müssen. "Mpu.setThreshold (3);" Diese Funktion steuert, wie stark sich der Wert für die Bewegung am Sensor ändert. Ein zu niedriger Wert erhöht das Rauschen. Seien Sie also vorsichtig, während Sie damit herumspielen.
Innerhalb der Hohlraumschleife () lesen wir wiederholt die Werte von Gyroskop und Temperatursensor. Berechnen Sie den Wert von Nick-, Roll- und Gierbewegung und senden Sie ihn an das Bluetooth-Modul. In den folgenden beiden Zeilen werden die rohen Gyro-Werte und der Temperaturwert angezeigt
Vektornorm = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Als nächstes berechnen wir die Neigung, das Rollen und das Gieren, indem wir mit dem Zeitschritt multiplizieren und ihn zu den vorherigen Werten addieren. Ein timeStep ist nichts anderes als das Intervall zwischen aufeinanderfolgenden Ablesungen.
Tonhöhe = Tonhöhe + Norm.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
Um den Zeitschritt besser zu verstehen, schauen wir uns die folgende Zeile an. In dieser Zeile werden die Werte von MPU6050 genau in einem Intervall von 10 ms oder 0,01 Sekunden gelesen. Daher deklarieren wir den Wert von timeStep als 0,01. Verwenden Sie die folgende Zeile, um das Programm zu halten, wenn mehr Zeit übrig ist. (millis () - timer ()) gibt die Zeit an, die das Programm bisher für die Ausführung benötigt. Wir subtrahieren es einfach mit 0,01 Sekunden und halten unser Programm für die verbleibende Zeit einfach mit der Verzögerungsfunktion dort.
delay ((timeStep * 1000) - (millis () - timer));
Sobald wir die Werte gelesen und berechnet haben, können wir sie über Bluetooth an unser Telefon senden. Aber hier gibt es einen Haken. Das von uns verwendete Bluetooth-Modul kann nur 1 Byte (8 Bit) senden, sodass wir nur Zahlen von 0 bis 255 senden können. Daher müssen wir unsere Werte aufteilen und innerhalb dieses Bereichs zuordnen. Dies erfolgt in den folgenden Zeilen
if (roll> -100 && roll <100) x = map (roll, -100, 100, 0, 100); if (Tonhöhe> -100 && Tonhöhe <100) y = Karte (Tonhöhe, -100, 100, 100, 200); wenn (temp> 0 && temp <50) t = 200 + int (temp);
Wie Sie herausfinden können, wird der Wert von roll in der Variablen x auf 0 bis 100 und die Tonhöhe in der Variablen y auf 100 bis 200 und die Temperatur in der Variablen t auf 200 und höher abgebildet. Wir können dieselben Informationen verwenden, um die Daten von dem abzurufen, was wir gesendet haben. Schließlich schreiben wir diese Werte über Bluetooth in die folgenden Zeilen.
BT.write (x); BT.write (y); BT.write (t);
Wenn Sie das gesamte Programm verstanden haben, scrollen Sie nach unten, um sich das Programm anzusehen, und laden Sie es auf das Arduino-Board hoch.
Vorbereiten der Android-Anwendung mithilfe der Verarbeitung:
Die Android-Anwendung für dieses Arduino-Neigungsmesser wurde unter Verwendung der Verarbeitungs-IDE entwickelt. Dies ist Arduino sehr ähnlich und kann zum Erstellen von Systemanwendungen, Android-Anwendungen, Webdesigns und vielem mehr verwendet werden. Wir haben bereits die Verarbeitung verwendet, um einige unserer anderen coolen Projekte zu entwickeln, die unten aufgeführt sind
- Ping-Pong-Spiel mit Arduino
- Smartphonegesteuertes FM-Radio mit Verarbeitung.
- Arduino-Radarsystem mit Verarbeitungs- und Ultraschallsensor
Es ist jedoch nicht möglich, den vollständigen Code zum Erstellen dieser Anwendung zu erläutern. Sie haben also zwei Möglichkeiten, dies zu überprüfen. Entweder können Sie die APK-Datei über den folgenden Link herunterladen und die Android-Anwendung direkt auf Ihrem Telefon installieren. Oder scrollen Sie nach unten, um den vollständigen Verarbeitungscode zu finden und selbst zu erfahren, wie er funktioniert
In der ZIP-Datei finden Sie einen Ordner namens data, der aus allen Bildern und anderen Quellen besteht, die in die Android-Anwendung geladen werden sollen. In der folgenden Zeile wird festgelegt, zu welchem Namen das Bluetooth automatisch eine Verbindung herstellen soll
bt.connectToDeviceByName ("HC-06");
Innerhalb der Funktion draw () werden die Dinge hier wiederholt ausgeführt. Wir zeichnen die Bilder, zeigen den Text an und animieren die Balken basierend auf den Werten des Bluetooth-Moduls. Sie können überprüfen, was in jeder Funktion passiert, indem Sie das Programm durchlesen.
void draw () // Die Endlosschleife {background (0); imageMode (CENTER); Bild (Logo, Breite / 2, Höhe / 1,04, Breite, Höhe / 12); Bilder laden(); textfun (); getval (); }}
Schließlich gibt es noch eine wichtige Sache zu erklären. Denken Sie daran, dass wir den Wert von Pitch, Roll und Temp auf 0 bis 255 teilen. Hier bringen wir ihn also wieder auf normale Werte zurück, indem wir ihn auf normale Werte umkehren.
if (info <100 && info> 0) x = map (info, 0, 100, - (Breite / 1,5) / 3, + (Breite / 1,5) / 3); // x = info; sonst wenn (info <200 && info> 100) y = map (info, 100, 200, - (Breite / 4,5) / 0,8, + (Breite / 4,5) / 0,8); // y = info; sonst wenn (info> 200) temp = info -200; println (temp, x, y);
Es gibt viel bessere Möglichkeiten, Daten von einem Bluetooth-Modul auf das Telefon zu übertragen. Da dies jedoch nur ein Hobbyprojekt ist, das wir ignoriert haben, können Sie bei Interesse tief graben.
Arbeitsweise des Arduino-Neigungsmessers:
Nachdem Sie sich mit der Hardware und Anwendung fertig gemacht haben, ist es Zeit, Spaß mit dem zu haben, was wir erstellt haben. Laden Sie den Arduino-Code auf die Karte hoch. Sie können auch die Kommentare in den Zeilen Serial.println entfernen und mithilfe des seriellen Monitors überprüfen, ob die Hardware wie erwartet funktioniert. Das ist jedenfalls völlig optional.
Starten Sie nach dem Hochladen des Codes die Android-Anwendung auf Ihrem Mobiltelefon. Die Anwendung sollte sich automatisch mit Ihrem HC-06-Modul verbinden und oben in der Anwendung wird „Verbinden mit: HC-06“ angezeigt, wie unten gezeigt.
Zu Beginn sind alle Werte außer dem Temperaturwert Null. Dies liegt daran, dass der Arduino die MPU-6050 für diese Position als Referenz kalibriert hat. Jetzt können Sie die Hardware kippen und überprüfen, ob sich auch die Werte in der mobilen Anwendung zusammen mit der Animation ändern. Die vollständige Funktionsweise der Anwendung finden Sie im folgenden Video. Jetzt können Sie das Steckbrett überall platzieren und prüfen, ob die Oberfläche perfekt eben ist.
Ich hoffe, Sie haben das Projekt verstanden und daraus etwas Nützliches gelernt. Wenn Sie Zweifel haben, verwenden Sie bitte den Kommentarbereich unten oder die Foren, um das Problem zu lösen.